--- /dev/null
+(function() {
+ "use strict";
+
+ angular
+ .module("nero.app")
+ .factory("fileSelectorService", fileSelectorService);
+
+ fileSelectorService.$inject = ["$http", "$q", "$filter", "promiseCache", "errorHandlerService"];
+
+ function fileSelectorService($http, $q, $filter, promiseCache, errorHandlerService) {
+
+ var service = {
+ getFileBase64: getFileBase64,
+ getFilesTree: getFilesTree,
+ uploadFile: uploadFile,
+ getMaxSize: getMaxSize,
+ getLargeIconURLForExtension: getLargeIconURLForExtension
+ };
+
+ return service;
+
+ /*
+ Get base64 string from files
+ */
+ function getFileBase64(fileList) {
+ var config = {};
+ config.params = {
+ cmd: "getFileBase64",
+ fileList: JSON.stringify(fileList)
+ };
+
+ return $http.get(actionURLAjax, config)
+ .then(getFileBase64Complete)
+ ["catch"](getFileBase64Failed);
+
+ function getFileBase64Complete(response) {
+ if (response.data.success) {
+ return response.data;
+ }
+
+ // If success variable is false or undefined then throw an error
+ var message = $filter("translate")("ext.nero.services.file-selector.toastr-getFileBase64-errorMessage");
+ var error = errorHandlerService.buildErrorObject(response, message);
+ return ($q.reject(error));
+ }
+
+ function getFileBase64Failed(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.file-selector.toastr-getFileBase64-errorMessage");
+ return ($q.reject(message));
+ }
+
+ return ($q.reject(error.data.message));
+ }
+ }
+
+ /*
+ Get user schoolbag and dropbox file trees
+ */
+ function getFilesTree(folderId) {
+ var config = {};
+ config.params = {
+ cmd: "getFilesTree",
+ folderId: folderId
+ };
+
+ return promiseCache({
+ promise: function() {
+ return $http.get(actionURLAjax, config);
+ },
+ ttl: 60000, //10 sec
+ key: JSON.stringify(config.params)
+ })
+ .then(initFileListComplete)
+ ["catch"](initFileListFailed);
+
+ function initFileListComplete(response) {
+ if (response.data.success) {
+ return response.data;
+ }
+
+ // If success variable is false or undefined then throw an error
+ var message = $filter("translate")("ext.nero.services.file-selector.toastr-getFileTree-errorMessage");
+ var error = errorHandlerService.buildErrorObject(response, message);
+ return ($q.reject(error));
+ }
+
+ function initFileListFailed(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.file-selector.toastr-getFileTree-errorMessage");
+ return ($q.reject(message));
+ }
+
+ return ($q.reject(error.data.message));
+ }
+ }
+
+ /*
+ Upload a file from user desktop (expect a FormData object)
+ */
+ function uploadFile (fd) {
+
+ return $http.post(actionURLAjax+'&cmd=addFileEntry', fd, {
+ transformRequest: angular.identity,
+ headers: {'Content-Type': undefined}
+ })
+ .then(uploadFileComplete)
+ ["catch"](uploadFileFailed);
+
+ function uploadFileComplete(response) {
+ if (response.data.success) {
+ return response.data;
+ }
+
+ // If success variable is false or undefined then throw an error
+ var message = $filter("translate")("ext.nero.services.file-selector.toastr-upload-errorMessage");
+ var error = errorHandlerService.buildErrorObject(response, message);
+ return ($q.reject(error));
+ }
+
+ function uploadFileFailed(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.file-selector.toastr-upload-errorMessage");
+ return ($q.reject(message));
+ }
+
+ return ($q.reject(error.data.message));
+ }
+
+ }
+
+ /*
+ Get the maximum size authorized
+ */
+ function getMaxSize () {
+ var config = {};
+ config.params = {
+ cmd: "getMaxFileUploadSize"
+ };
+
+ return promiseCache({
+ promise: function() {
+ return $http.get(actionURLAjax, config);
+ },
+ ttl: 120000, //2 minutes
+ key: JSON.stringify(config.params)
+ })
+ .then(getMaxSizeComplete)
+ ["catch"](getMaxSizeFailed);
+
+ function getMaxSizeComplete(response) {
+ if (response.data.success) {
+ return response.data;
+ }
+
+ // If success variable is false or undefined then throw an error
+ var message = $filter("translate")("ext.nero.services.file-selector.toastr-getMaxSize-errorMessage");
+ var error = errorHandlerService.buildErrorObject(response, message);
+ return ($q.reject(error));
+ }
+
+ function getMaxSizeFailed(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.file-selector.toastr-getMaxSize-errorMessage");
+ return ($q.reject(message));
+ }
+
+ return ($q.reject(error.data.message));
+ }
+ }
+
+ /**
+ Return the icon (large) URL corresponding to file extension
+ */
+ function getLargeIconURLForExtension(fileExtension) {
+ if (EntSavoie.imageExtensionArray.indexOf(fileExtension) != -1) {
+ return Liferay.ThemeDisplay.getPathThemeImages() + "/icons-files/large/image.png";
+ }
+ else if (EntSavoie.audioExtensionArray.indexOf(fileExtension) != -1) {
+ return Liferay.ThemeDisplay.getPathThemeImages() + "/icons-files/large/audio.png";
+ }
+ else if (EntSavoie.videoExtensionArray.indexOf(fileExtension) != -1) {
+ return Liferay.ThemeDisplay.getPathThemeImages() + "/icons-files/large/video.png";
+ }
+ else if (fileExtension == "pdf") {
+ return Liferay.ThemeDisplay.getPathThemeImages() + "/icons-files/large/pdf.png";
+ }
+ else if (fileExtension == "zip") {
+ return Liferay.ThemeDisplay.getPathThemeImages() + "/icons-files/large/zip.png";
+ }
+ else if (fileExtension == "html" || fileExtension == "htm") {
+ return Liferay.ThemeDisplay.getPathThemeImages() + "/icons-files/large/html.png";
+ }
+ else if (fileExtension == "doc" || fileExtension == "docx") {
+ return Liferay.ThemeDisplay.getPathThemeImages() + "/icons-files/large/word.png";
+ }
+ else if (fileExtension == "ppt" || fileExtension == "pptx") {
+ return Liferay.ThemeDisplay.getPathThemeImages() + "/icons-files/large/powerp.png";
+ }
+ else if (fileExtension == "xls" || fileExtension == "xlsx") {
+ return Liferay.ThemeDisplay.getPathThemeImages() + "/icons-files/large/excel.png";
+ }
+ else if (fileExtension == "odp" || fileExtension == "ods" || fileExtension == "odt") {
+ return Liferay.ThemeDisplay.getPathThemeImages() + "/icons-files/large/openoffice.png";
+ }
+ else if (fileExtension == "sxc" || fileExtension == "sxi" || fileExtension == "sxw") {
+ return Liferay.ThemeDisplay.getPathThemeImages() + "/icons-files/large/libreoffie.png";
+ }
+ else if (fileExtension == "csv" || fileExtension == "rtf" || fileExtension == "txt" || fileExtension == "tsv") {
+ return Liferay.ThemeDisplay.getPathThemeImages() + "/icons-files/large/text.png";
+ }
+ else {
+ return Liferay.ThemeDisplay.getPathThemeImages() + "/icons-files/large/file.png";
+ }
+ }
+
+ }
+}
+)();