--- /dev/null
+(function() {
+ "use strict";
+
+ angular
+ .module("nero.app")
+ .factory("attachmentService", attachmentService);
+
+ attachmentService.$inject = ["$http", "$q", "$filter", "promiseCache", "errorHandlerService"];
+
+ /*
+ Attachment service implementation
+ */
+ function attachmentService($http, $q, $filter, promiseCache, errorHandlerService) {
+
+ return {
+ addAttachments: addAttachments,
+ deleteAttachment: deleteAttachment,
+ getAttachmentConversionKey: getAttachmentConversionKey,
+ getConversionProgress: getConversionProgress,
+ killConversionProcess: killConversionProcess,
+ sendAttachmentToDropbox: sendAttachmentToDropbox
+ };
+
+ // Add a list of files to a session
+ function addAttachments(attachFiles, idProperties) {
+
+ var attachFileIds = [];
+ for (var i = 0; i < attachFiles.length; i++) {
+ attachFileIds.push(attachFiles[i].fileId);
+ }
+
+ var config = {};
+ config.params = {
+ cmd: "addAttachments",
+ attachFiles: JSON.stringify(attachFileIds)
+ };
+ config.params[idProperties.propertyName] = idProperties.propertyValue;
+
+ return promiseCache({
+ promise: function() {
+ return $http.get(actionURLAjax, config);
+ },
+ ttl: 10000, //10 sec
+ key: JSON.stringify(config.params)
+ })
+ .then(addAttachmentsComplete)
+ ["catch"](addAttachmentsFailed);
+
+ function addAttachmentsComplete(response) {
+ if (response.data.success) {
+ if (!response.data.message) {
+ response.data.message = $filter("translate")("ext.nero.services.attachment.toastr-add-successMessage");
+ }
+ return response.data;
+ }
+
+ // If success variable is false or undefined then throw an error
+ var message = $filter("translate")("ext.nero.services.attachment.toastr-add-successMessage");
+ var error = errorHandlerService.buildErrorObject(response, message);
+ return ($q.reject(error));
+ }
+
+ function addAttachmentsFailed(error) {
+ // If message is undefined then throw unknown error. Otherwise, use expected error message.
+ if (!angular.isObject(error.data) || !error.data.message) {
+ var message = $filter("translate")("ext.nero.services.attachment.toastr-add-successMessage");
+ return ($q.reject(message));
+ }
+
+ return ($q.reject(error.data.message));
+ }
+ }
+
+ /*
+ Delete an attachment.
+ Take the attachment to delete and information concerning his ID or his folder.
+ idProperties is a JSON object containing a property name and a property value :
+ {propertyName: "sessionId", propertyValue: ""}
+ */
+ function deleteAttachment(attachment, idProperties) {
+ var config = {};
+ config.params = {
+ cmd: "deleteAttachment",
+ fileName: attachment.fileName
+ };
+ config.params[idProperties.propertyName] = idProperties.propertyValue;
+
+ return $http.get(actionURLAjax, config)
+ .then(deleteAttachmentComplete)
+ ["catch"](deleteAttachmentFailed);
+
+ function deleteAttachmentComplete(response) {
+ if (response.data.success) {
+ if (!response.data.message) {
+ response.data.message = $filter("translate")("ext.nero.services.attachment.toastr-delete-successMessage");
+ }
+ return response.data;
+ }
+
+ // If success variable is false or undefined then throw an error
+ var message = $filter("translate")("ext.nero.services.attachment.toastr-delete-errorMessage");
+ var error = errorHandlerService.buildErrorObject(response, message);
+ return ($q.reject(error));
+ }
+
+ function deleteAttachmentFailed(error) {
+ // If message is undefined then throw unknown error. Otherwise, use expected error message.
+ if (!angular.isObject(error.data) || !error.data.message) {
+ var message = $filter("translate")("ext.nero.services.attachment.toastr-delete-errorMessage");
+ return ($q.reject(message));
+ }
+
+ return ($q.reject(error.data.message));
+ }
+ }
+
+ /*
+ Send an attachment to user drobox.
+ Take the attachment to delete and information concerning his ID or his folder.
+ idProperties is a JSON object containing a property name and a property value :
+ {propertyName: "homeworkId", propertyValue: ""}
+ */
+ function sendAttachmentToDropbox(attachment, idProperties) {
+ var config = {};
+ config.params = {
+ cmd: "sendToDropbox",
+ fileName: attachment.fileName
+ };
+ config.params[idProperties.propertyName] = idProperties.propertyValue;
+
+ return $http.get(actionURLAjax, config)
+ .then(sendAttachmentToDropboxComplete)
+ ["catch"](sendAttachmentToDropboxFailed);
+
+ function sendAttachmentToDropboxComplete(response) {
+ if (response.data.success) {
+ if (!response.data.message) {
+ response.data.message = $filter("translate")("ext.nero.services.attachment.toastr-send-successMessage");
+ }
+ return response.data;
+ }
+
+ // If success variable is false or undefined then throw an error
+ var message = $filter("translate")("ext.nero.services.attachment.toastr-send-errorMessage");
+ var error = errorHandlerService.buildErrorObject(response, message);
+ return ($q.reject(error));
+ }
+
+ function sendAttachmentToDropboxFailed(error) {
+ // If message is undefined then throw unknown error. Otherwise, use expected error message.
+ if (!angular.isObject(error.data) || !error.data.message) {
+ var message = $filter("translate")("ext.nero.services.attachment.toastr-send-errorMessage");
+ return ($q.reject(message));
+ }
+
+ return ($q.reject(error.data.message));
+ }
+ }
+
+ /**
+ Get attachment key that is needed to find conversion progress
+ */
+ function getAttachmentConversionKey(attachment, idProperties) {
+ var config = {};
+ config.params = {
+ cmd: "getAttachmentConversionKey",
+ fileName: attachment.fileName
+ };
+ config.params[idProperties.propertyName] = idProperties.propertyValue;
+
+ return $http.get(actionURLAjax, config)
+ .then(getAttachmentConversionKeyComplete)
+ ["catch"](getAttachmentConversionKeyFailed);
+
+ function getAttachmentConversionKeyComplete(response) {
+ if (response.data.success) {
+ if (!response.data.message) {
+ response.data.message = $filter("translate")("ext.nero.services.attachment.toastr-conversion-successMessage");
+ }
+ return response.data;
+ }
+
+ // If success variable is false or undefined then throw an error
+ var message = $filter("translate")("ext.nero.services.attachment.toastr-conversion-errorMessage");
+ var error = errorHandlerService.buildErrorObject(response, message);
+ return ($q.reject(error));
+ }
+
+ function getAttachmentConversionKeyFailed(error) {
+ // If message is undefined then throw unknown error. Otherwise, use expected error message.
+ if (!angular.isObject(error.data) || !error.data.message) {
+ var message = $filter("translate")("ext.nero.services.attachment.toastr-conversion-errorMessage");
+ return ($q.reject(message));
+ }
+
+ return ($q.reject(error.data.message));
+ }
+ }
+
+ /**
+ Get conversion progress for an attachment.
+ When an attachment is converted (document, audio or video),
+ return the progress status. (X%, error, done)
+ */
+ function getConversionProgress(idSecure) {
+ var config = {};
+ config.params = {
+ cmd: "getConversionProgress",
+ idSecure: idSecure
+ };
+
+ return $http.get(actionURLAjax, config)
+ .then(getConversionProgressComplete)
+ ["catch"](getConversionProgressFailed);
+
+ function getConversionProgressComplete(response) {
+ if (response.data.success) {
+ if (!response.data.message) {
+ response.data.message = $filter("translate")("ext.nero.services.attachment.toastr-conversion-successMessage");
+ }
+ return response.data;
+ }
+
+ // If success variable is false or undefined then throw an error
+ var message = $filter("translate")("ext.nero.services.attachment.toastr-conversion-errorMessage");
+ var error = errorHandlerService.buildErrorObject(response, message);
+ return ($q.reject(error));
+ }
+
+ function getConversionProgressFailed(error) {
+ // If message is undefined then throw unknown error. Otherwise, use expected error message.
+ if (!angular.isObject(error.data) || !error.data.message) {
+ var message = $filter("translate")("ext.nero.services.attachment.toastr-conversion-errorMessage");
+ return ($q.reject(message));
+ }
+
+ return ($q.reject(error.data.message));
+ }
+ }
+
+ /*
+ Send the signal to kill the file conversion process
+ */
+ function killConversionProcess(idSecure) {
+ var config = {};
+ config.params = {
+ cmd: "killConversionProcess",
+ idSecure: idSecure
+ };
+
+ return $http.get(actionURLAjax, config)
+ .then(killConversionProcessComplete)
+ ["catch"](killConversionProcessFailed);
+
+ function killConversionProcessComplete(response) {
+ if (response.data.success) {
+ return response.data;
+ }
+
+ // If success variable is false or undefined then throw an error
+ var error = errorHandlerService.buildErrorObject(response, message);
+ return ($q.reject(error));
+ }
+
+ function killConversionProcessFailed(error) {
+ console.error(error);
+ return ($q.reject(error.data.message));
+ }
+ }
+
+ }
+})();