diff --git a/src/langs/zh_Hans.txt b/src/langs/zh_Hans.txt index 6d9b0f2..e24c994 100644 --- a/src/langs/zh_Hans.txt +++ b/src/langs/zh_Hans.txt @@ -5,6 +5,7 @@ Error=错误 OK=确定 Confirm=确认 Cancel=取消 +Close=关闭 True=是 False=否 Connecting=连接中 @@ -100,6 +101,9 @@ Pictures=图片 Documents=文档 Applications=应用程序 Archives=存档文件 +Other=其他 +Custom=自定义 +Custom Choose File=自定义选择文件 Address=地址 Client=客户端 Status=状态 diff --git a/src/langs/zh_Hant.txt b/src/langs/zh_Hant.txt index ce9b028..e22b801 100644 --- a/src/langs/zh_Hant.txt +++ b/src/langs/zh_Hant.txt @@ -5,6 +5,7 @@ Error=錯誤 OK=確定 Confirm=確認 Cancel=取消 +Close=關閉 True=是 False=否 Connecting=連線中 @@ -100,6 +101,9 @@ Pictures=圖片 Documents=文件 Applications=應用程式 Archives=封存檔案 +Other=其他 +Custom=自訂 +Custom Choose File=自訂選擇檔案 Address=位址 Client=客戶端 Status=狀態 diff --git a/src/scripts/config/defaultLanguage.js b/src/scripts/config/defaultLanguage.js index 298019f..9584c2a 100644 --- a/src/scripts/config/defaultLanguage.js +++ b/src/scripts/config/defaultLanguage.js @@ -9,6 +9,7 @@ 'OK': 'OK', 'Confirm': 'Confirm', 'Cancel': 'Cancel', + 'Close': 'Close', 'True': 'True', 'False': 'False', 'Connecting': 'Connecting', @@ -104,6 +105,9 @@ 'Documents': 'Documents', 'Applications': 'Applications', 'Archives': 'Archives', + 'Other': 'Other', + 'Custom': 'Custom', + 'Custom Choose File': 'Custom Choose File', 'Address': 'Address', 'Client': 'Client', 'Status': 'Status', diff --git a/src/scripts/config/fileTypes.js b/src/scripts/config/fileTypes.js index c2646e1..768f1dd 100644 --- a/src/scripts/config/fileTypes.js +++ b/src/scripts/config/fileTypes.js @@ -1,194 +1,212 @@ -(function () { + (function () { 'use strict'; angular.module('ariaNg').constant('ariaNgFileTypes', { - video: [ - '.3g2', - '.3gp', - '.3gp2', - '.3gpp', - '.asf', - '.asx', - '.avi', - '.dat', - '.divx', - '.flv', - '.m1v', - '.m2ts', - '.m2v', - '.m4v', - '.mkv', - '.mov', - '.mp4', - '.mpe', - '.mpeg', - '.mpg', - '.mts', - '.ogv', - '.qt', - '.ram', - '.rm', - '.rmvb', - '.ts', - '.vob', - '.wmv' - ], - audio: [ - '.aac', - '.ac3', - '.adts', - '.amr', - '.ape', - '.eac3', - '.flac', - '.m1a', - '.m2a', - '.m4a', - '.mid', - '.mka', - '.mp2', - '.mp3', - '.mpa', - '.mpc', - '.ogg', - '.ra', - '.tak', - '.vqf', - '.wm', - '.wav', - '.wma', - '.wv' - ], - picture: [ - '.abr', - '.bmp', - '.emf', - '.gif', - '.j2c', - '.j2k', - '.jfif', - '.jif', - '.jp2', - '.jpc', - '.jpe', - '.jpeg', - '.jpf', - '.jpg', - '.jpk', - '.jpx', - '.pcx', - '.pct', - '.pic', - '.pict', - '.png', - '.pns', - '.psd', - '.psdx', - '.raw', - '.svg', - '.svgz', - '.tga', - '.tif', - '.tiff', - '.wbm', - '.wbmp', - '.webp', - '.wmf', - '.xif' - ], - document: [ - '.csv', - '.doc', - '.docm', - '.docx', - '.dot', - '.dotm', - '.dotx', - '.key', - '.mpp', - '.numbers', - '.odp', - '.ods', - '.odt', - '.pages', - '.pdf', - '.pot', - '.potm', - '.potx', - '.pps', - '.ppsm', - '.ppsx', - '.ppt', - '.pptm', - '.pptx', - '.rtf', - '.txt', - '.vsd', - '.vsdx', - '.wk1', - '.wk2', - '.wk3', - '.wk4', - '.wks', - '.wpd', - '.wps', - '.xla', - '.xlam', - '.xll', - '.xlm', - '.xls', - '.xlsb', - '.xlsm', - '.xlsx', - '.xlt', - '.xltx', - '.xlw', - '.xps' - ], - application: [ - '.apk', - '.bat', - '.com', - '.deb', - '.dll', - '.dmg', - '.exe', - '.ipa', - '.jar', - '.msi', - '.rpm', - '.sh' - ], - archive: [ - '.001', - '.7z', - '.ace', - '.arj', - '.bz2', - '.cab', - '.cbr', - '.cbz', - '.gz', - '.img', - '.iso', - '.lzh', - '.qcow2', - '.r', - '.rar', - '.sef', - '.tar', - '.taz', - '.tbz', - '.tbz2', - '.uue', - '.vdi', - '.vhd', - '.vmdk', - '.wim', - '.xar', - '.xz', - '.z', - '.zip' - ] + video: { + name: 'Videos', + extensions: [ + '.3g2', + '.3gp', + '.3gp2', + '.3gpp', + '.asf', + '.asx', + '.avi', + '.dat', + '.divx', + '.flv', + '.m1v', + '.m2ts', + '.m2v', + '.m4v', + '.mkv', + '.mov', + '.mp4', + '.mpe', + '.mpeg', + '.mpg', + '.mts', + '.ogv', + '.qt', + '.ram', + '.rm', + '.rmvb', + '.ts', + '.vob', + '.wmv' + ] + }, + audio: { + name: 'Audios', + extensions: [ + '.aac', + '.ac3', + '.adts', + '.amr', + '.ape', + '.eac3', + '.flac', + '.m1a', + '.m2a', + '.m4a', + '.mid', + '.mka', + '.mp2', + '.mp3', + '.mpa', + '.mpc', + '.ogg', + '.ra', + '.tak', + '.vqf', + '.wm', + '.wav', + '.wma', + '.wv' + ] + }, + picture: { + name: 'Pictures', + extensions: [ + '.abr', + '.bmp', + '.emf', + '.gif', + '.j2c', + '.j2k', + '.jfif', + '.jif', + '.jp2', + '.jpc', + '.jpe', + '.jpeg', + '.jpf', + '.jpg', + '.jpk', + '.jpx', + '.pcx', + '.pct', + '.pic', + '.pict', + '.png', + '.pns', + '.psd', + '.psdx', + '.raw', + '.svg', + '.svgz', + '.tga', + '.tif', + '.tiff', + '.wbm', + '.wbmp', + '.webp', + '.wmf', + '.xif' + ] + }, + document: { + name: 'Documents', + extensions: [ + '.csv', + '.doc', + '.docm', + '.docx', + '.dot', + '.dotm', + '.dotx', + '.key', + '.mpp', + '.numbers', + '.odp', + '.ods', + '.odt', + '.pages', + '.pdf', + '.pot', + '.potm', + '.potx', + '.pps', + '.ppsm', + '.ppsx', + '.ppt', + '.pptm', + '.pptx', + '.rtf', + '.txt', + '.vsd', + '.vsdx', + '.wk1', + '.wk2', + '.wk3', + '.wk4', + '.wks', + '.wpd', + '.wps', + '.xla', + '.xlam', + '.xll', + '.xlm', + '.xls', + '.xlsb', + '.xlsm', + '.xlsx', + '.xlt', + '.xltx', + '.xlw', + '.xps' + ] + }, + application: { + name: 'Applications', + extensions: [ + '.apk', + '.bat', + '.com', + '.deb', + '.dll', + '.dmg', + '.exe', + '.ipa', + '.jar', + '.msi', + '.rpm', + '.sh' + ] + }, + archive: { + name: 'Archives', + extensions: [ + '.001', + '.7z', + '.ace', + '.arj', + '.bz2', + '.cab', + '.cbr', + '.cbz', + '.gz', + '.img', + '.iso', + '.lzh', + '.qcow2', + '.r', + '.rar', + '.sef', + '.tar', + '.taz', + '.tbz', + '.tbz2', + '.uue', + '.vdi', + '.vhd', + '.vmdk', + '.wim', + '.xar', + '.xz', + '.z', + '.zip' + ] + } }); }()); diff --git a/src/scripts/controllers/task-detail.js b/src/scripts/controllers/task-detail.js index d2ed8e2..71b6cc9 100644 --- a/src/scripts/controllers/task-detail.js +++ b/src/scripts/controllers/task-detail.js @@ -194,6 +194,7 @@ currentTab: 'overview', isEnableSpeedChart: ariaNgSettingService.getDownloadTaskRefreshInterval() > 0, showChooseFilesToolbar: false, + fileExtensions: [], collapsedDirs: {}, btPeers: [], healthPercent: 0, @@ -342,7 +343,7 @@ } var files = $scope.task.files; - var extensions = ariaNgFileTypes[type]; + var extensions = ariaNgFileTypes[type].extensions; var fileIndexes = []; var isAllSelected = true; @@ -395,6 +396,143 @@ } }; + $scope.showCustomChooseFileModal = function () { + if (!$scope.task || !$scope.task.files) { + return; + } + + var files = $scope.task.files; + var extensionsMap = {}; + + for (var i = 0; i < files.length; i++) { + var file = files[i]; + + if (file.isDir) { + continue; + } + + var extension = ariaNgCommonService.getFileExtension(file.fileName); + + if (extension) { + extension = extension.toLowerCase(); + } + + var extensionInfo = extensionsMap[extension]; + + if (!extensionInfo) { + var extensionName = extension; + + if (extensionName.length > 0 && extensionName.charAt(0) === '.') { + extensionName = extensionName.substring(1); + } + + extensionInfo = { + extension: extensionName, + classified: false, + selected: false, + selectedCount: 0, + unSelectedCount: 0 + }; + + extensionsMap[extension] = extensionInfo; + } + + if (file.selected) { + extensionInfo.selected = true; + extensionInfo.selectedCount++; + } else { + extensionInfo.unSelectedCount++; + } + } + + var allClassifiedExtensions = {}; + + for (var type in ariaNgFileTypes) { + if (!ariaNgFileTypes.hasOwnProperty(type)) { + continue; + } + + var extensionTypeName = ariaNgFileTypes[type].name; + var allExtensions = ariaNgFileTypes[type].extensions; + var extensions = []; + + for (var i = 0; i < allExtensions.length; i++) { + var extension = allExtensions[i]; + var extensionInfo = extensionsMap[extension]; + + if (extensionInfo) { + extensionInfo.classified = true; + extensions.push(extensionInfo); + } + } + + if (extensions.length > 0) { + allClassifiedExtensions[type] = { + name: extensionTypeName, + extensions: extensions + }; + } + } + + var unClassifiedExtensions = []; + + for (var extension in extensionsMap) { + if (!extensionsMap.hasOwnProperty(extension)) { + continue; + } + + var extensionInfo = extensionsMap[extension]; + + if (!extensionInfo.classified) { + unClassifiedExtensions.push(extensionInfo); + } + } + + if (unClassifiedExtensions.length > 0) { + allClassifiedExtensions.other = { + name: 'Other', + extensions: unClassifiedExtensions + }; + } + + $scope.context.fileExtensions = allClassifiedExtensions; + angular.element('#custom-choose-file-modal').modal(); + }; + + $scope.setSelectedExtension = function (selectedExtension, selected) { + if (!$scope.task || !$scope.task.files) { + return; + } + + var files = $scope.task.files; + + for (var i = 0; i < files.length; i++) { + var file = files[i]; + + if (file.isDir) { + continue; + } + + var extension = ariaNgCommonService.getFileExtension(file.fileName); + + if (extension) { + extension = extension.toLowerCase(); + } + + if (extension !== '.' + selectedExtension) { + continue; + } + + file.selected = selected; + } + + updateAllDirNodesSelectedStatus(); + }; + + $('#custom-choose-file-modal').on('hide.bs.modal', function (e) { + $scope.context.fileExtensions = null; + }); + $scope.setSelectedFile = function (updateNodeSelectedStatus) { if (updateNodeSelectedStatus) { updateAllDirNodesSelectedStatus(); diff --git a/src/views/task-detail.html b/src/views/task-detail.html index 1473578..de1327e 100644 --- a/src/views/task-detail.html +++ b/src/views/task-detail.html @@ -235,6 +235,10 @@ Archives + @@ -369,4 +373,32 @@ +