瀏覽代碼

merge AriaNg 1.2.5 code

MaysWind 3 年之前
父節點
當前提交
708caaa2d2

+ 7 - 3
app/langs/zh_Hans.txt

@@ -18,13 +18,14 @@ New=新建
 Start=开始任务
 Pause=暂停任务
 Retry=重试
-Retry Selected Tasks=重试选中任务
+Retry Selected Tasks=重试选中任务
 Delete=删除任务
 Select All=全部选中
 Select None=全部不选
 Select Invert=反向选择
-Select All Failed Tasks=全选失败任务
-Select All Completed Tasks=全选已完成任务
+Select All Failed Tasks=全选失败的任务
+Select All Completed Tasks=全选已完成的任务
+Select All Tasks=全部选中任务
 Display Order=显示顺序
 Copy Download Url=复制下载链接
 Copy Magnet Link=复制磁力链接
@@ -39,6 +40,7 @@ Open=打开
 Save=保存
 Import=导入
 Remove Task=删除任务
+Remove Selected Task=删除选中的任务
 Clear Stopped Tasks=清空已结束任务
 Click to view task detail=点击查看任务详情
 By File Name=按文件名
@@ -182,6 +184,8 @@ Add New RPC Setting=添加新 RPC 设置
 Are you sure you want to remove rpc setting "{rpcName}"?=您是否要删除 RPC 设置 "{{rpcName}}"?
 Updating Global Stat Interval=全局状态更新间隔
 Updating Task Information Interval=任务信息更新间隔
+Keyboard Shortcuts=键盘快捷键
+Supported Keyboard Shortcuts=支持的键盘快捷键
 Swipe Gesture=滑动手势
 Change Tasks Order by Drag-and-drop=拖拽任务排序
 Action After Creating New Tasks=创建新任务后执行操作

+ 7 - 3
app/langs/zh_Hant.txt

@@ -18,13 +18,14 @@ New=新增
 Start=開始工作
 Pause=暫停工作
 Retry=重試
-Retry Selected Tasks=重試選中工作
+Retry Selected Tasks=重試選中工作
 Delete=刪除工作
 Select All=全部選中
 Select None=全部不選
 Select Invert=反向選擇
-Select All Failed Tasks=全選失敗工作
-Select All Completed Tasks=全選已完成工作
+Select All Failed Tasks=全選失敗的工作
+Select All Completed Tasks=全選已完成的工作
+Select All Tasks=全部選中工作
 Display Order=顯示順序
 Copy Download Url=複製下載連結
 Copy Magnet Link=複製磁力連結
@@ -39,6 +40,7 @@ Open=打開
 Save=儲存
 Import=匯入
 Remove Task=刪除工作
+Remove Selected Task=刪除選中的工作
 Clear Stopped Tasks=清除已結束工作
 Click to view task detail=點選檢視工作詳情
 By File Name=依檔名
@@ -182,6 +184,8 @@ Add New RPC Setting=加入新 RPC 設定
 Are you sure you want to remove rpc setting "{rpcName}"?=您是否要刪除 RPC 設定 "{{rpcName}}"?
 Updating Global Stat Interval=全域狀態更新間隔
 Updating Task Information Interval=工作資訊更新間隔
+Keyboard Shortcuts=鍵盤快速鍵
+Supported Keyboard Shortcuts=支援的鍵盤快速鍵
 Swipe Gesture=滑動手勢
 Change Tasks Order by Drag-and-drop=拖拽工作排序
 Action After Creating New Tasks=建立新工作後執行操作

+ 1 - 0
app/scripts/config/constants.js

@@ -37,6 +37,7 @@
         extendRpcServers: [],
         globalStatRefreshInterval: 1000,
         downloadTaskRefreshInterval: 1000,
+        keyboardShortcuts: true,
         swipeGesture: true,
         dragAndDropTasks: true,
         rpcListDisplayOrder: 'recentlyUsed',

+ 4 - 0
app/scripts/config/defaultLanguage.js

@@ -29,6 +29,7 @@
             'Select Invert': 'Select Invert',
             'Select All Failed Tasks': 'Select All Failed Tasks',
             'Select All Completed Tasks': 'Select All Completed Tasks',
+            'Select All Tasks': 'Select All Tasks',
             'Display Order': 'Display Order',
             'Copy Download Url': 'Copy Download Url',
             'Copy Magnet Link': 'Copy Magnet Link',
@@ -43,6 +44,7 @@
             'Save': 'Save',
             'Import': 'Import',
             'Remove Task': 'Remove Task',
+            'Remove Selected Task': 'Remove Selected Task',
             'Clear Stopped Tasks': 'Clear Stopped Tasks',
             'Click to view task detail': 'Click to view task detail',
             'By File Name': 'By File Name',
@@ -186,6 +188,8 @@
             'Are you sure you want to remove rpc setting "{rpcName}"?': 'Are you sure you want to remove rpc setting "{{rpcName}}"?',
             'Updating Global Stat Interval': 'Updating Global Stat Interval',
             'Updating Task Information Interval': 'Updating Task Information Interval',
+            'Keyboard Shortcuts': 'Keyboard Shortcuts',
+            'Supported Keyboard Shortcuts': 'Supported Keyboard Shortcuts',
             'Swipe Gesture': 'Swipe Gesture',
             'Change Tasks Order by Drag-and-drop': 'Change Tasks Order by Drag-and-drop',
             'Action After Creating New Tasks': 'Action After Creating New Tasks',

+ 3 - 0
app/scripts/controllers/list.js

@@ -121,6 +121,9 @@
             }
         });
 
+        $rootScope.keydownActions.selectAll = $scope.selectAllTasks;
+        $rootScope.keydownActions.delete = $scope.removeTasks;
+
         $rootScope.loadPromise = refreshDownloadTask(false);
     }]);
 }());

+ 1 - 1
app/scripts/controllers/new.js

@@ -743,7 +743,7 @@
         $scope.urlTextboxKeyDown = function (event) {
             var keyCode = event.keyCode || event.which || event.charCode;
 
-            if (keyCode === 13 && event.ctrlKey && $scope.newTaskForm.$valid) {
+            if ((event.code === 'Enter' || keyCode === 13) && event.ctrlKey && $scope.newTaskForm.$valid) {
                 $scope.startDownload();
             }
         };

+ 4 - 0
app/scripts/controllers/settings-ariang.js

@@ -227,6 +227,10 @@
             ariaNgSettingService.setRPCListDisplayOrder(value);
         };
 
+        $scope.setKeyboardShortcuts = function (value) {
+            ariaNgSettingService.setKeyboardShortcuts(value);
+        };
+
         $scope.setSwipeGesture = function (value) {
             ariaNgSettingService.setSwipeGesture(value);
         };

+ 22 - 0
app/scripts/core/root.js

@@ -418,6 +418,8 @@
             return task && task.status === 'error' && task.errorDescription && !task.bittorrent;
         };
 
+        $rootScope.keydownActions = {};
+
         $rootScope.swipeActions = {
             leftSwipe: function () {
                 if (!ariaNgSettingService.getSwipeGesture()) {
@@ -471,6 +473,24 @@
         $rootScope.useCustomAppTitle = ariaNgNativeElectronService.useCustomAppTitle();
         $rootScope.nativeWindowContext.maximized = ariaNgNativeElectronService.isMaximized();
 
+        $window.addEventListener('keydown', function (event) {
+            if (!ariaNgSettingService.getKeyboardShortcuts()) {
+                return;
+            }
+
+            var keyCode = event.keyCode || event.which || event.charCode;
+
+            if ((event.code === 'KeyA' || keyCode === 65) && (event.ctrlKey || event.metaKey)) { // Select All Tasks
+                if (angular.isFunction($rootScope.keydownActions.selectAll)) {
+                    $rootScope.keydownActions.selectAll();
+                }
+            } else if (event.code === 'Delete' || keyCode === 46) { // Remove Selected Task
+                if (angular.isFunction($rootScope.keydownActions.delete)) {
+                    $rootScope.keydownActions.delete();
+                }
+            }
+        }, true);
+
         ariaNgNativeElectronService.onMainWindowMaximize(function () {
             $rootScope.nativeWindowContext.maximized = true;
         });
@@ -542,6 +562,8 @@
 
             $rootScope.loadPromise = null;
 
+            delete $rootScope.keydownActions.selectAll;
+            delete $rootScope.keydownActions.delete;
             delete $rootScope.swipeActions.extendLeftSwipe;
             delete $rootScope.swipeActions.extendRightSwipe;
 

+ 6 - 0
app/scripts/services/ariaNgSettingService.js

@@ -398,6 +398,12 @@
             setDownloadTaskRefreshInterval: function (value) {
                 setOption('downloadTaskRefreshInterval', Math.max(parseInt(value), 0));
             },
+            getKeyboardShortcuts: function () {
+                return getOption('keyboardShortcuts');
+            },
+            setKeyboardShortcuts: function (value) {
+                setOption('keyboardShortcuts', value);
+            },
             getSwipeGesture: function () {
                 return getOption('swipeGesture');
             },

+ 9 - 0
app/styles/core/core.css

@@ -304,3 +304,12 @@ td {
 .fade-in.ng-enter.ng-enter-active {
     opacity:1;
 }
+
+/* misc */
+.keyboard-key {
+    font-size: 0.85em;
+    padding: 1px 3px;
+    -webkit-border-radius: 2px;
+    -moz-border-radius: 2px;
+    border-radius: 2px;
+}

+ 7 - 0
app/styles/theme/default-dark.css

@@ -415,3 +415,10 @@
 .theme-dark.skin-aria-ng .new-task-table {
     background-color: #1a1a1a;
 }
+
+/* misc */
+.theme-dark.skin-aria-ng .keyboard-key {
+    border: 1px solid #666;
+    background-color: #282828;
+    box-shadow: 1px 2px 2px #333;
+}

+ 7 - 0
app/styles/theme/default.css

@@ -528,3 +528,10 @@
 .skin-aria-ng .new-task-table {
     background-color: #fff;
 }
+
+/* misc */
+.skin-aria-ng .keyboard-key {
+    border: 1px solid #aaa;
+    background-color: #f8f8f8;
+    box-shadow: 1px 2px 2px #ddd;
+}

+ 16 - 0
app/views/settings-ariang.html

@@ -142,6 +142,22 @@
                             </select>
                         </div>
                     </div>
+                    <div class="row">
+                        <div class="setting-key setting-key-without-desc col-sm-4">
+                            <span translate>Keyboard Shortcuts</span>
+                            <i class="icon-primary fa fa-question-circle" data-toggle="popover"
+                               data-trigger="hover" data-placement="auto right" data-container="body" data-html="true"
+                               data-content="{{('Supported Keyboard Shortcuts' | translate) + ':<br/>' +
+                               ('Remove Selected Task' | translate) + ': <span class=\'keyboard-key\'>Delete</span><br/>' +
+                               ('Select All Tasks' | translate) + ': <span class=\'keyboard-key\'>Ctrl</span>+<span class=\'keyboard-key\'>A</span> / <span class=\'keyboard-key\'>Command</span>+<span class=\'keyboard-key\'>A</span>'}}"></i>
+                        </div>
+                        <div class="setting-value col-sm-8">
+                            <select class="form-control" style="width: 100%;" ng-model="context.settings.keyboardShortcuts"
+                                    ng-change="setKeyboardShortcuts(context.settings.keyboardShortcuts)"
+                                    ng-options="option.value as (option.name | translate) for option in context.trueFalseOptions">
+                            </select>
+                        </div>
+                    </div>
                     <div class="row">
                         <div class="setting-key setting-key-without-desc col-sm-4">
                             <span translate>Swipe Gesture</span>

+ 1 - 1
package.json

@@ -6,7 +6,7 @@
   "name": "ariang-native",
   "appId": "net.mayswind.ariang",
   "version": "1.2.5",
-  "ariang-version": "1.2.4",
+  "ariang-version": "1.2.5",
   "description": "A better aria2 desktop frontend than AriaNg, containing all features of AriaNg and more features for desktop.",
   "main": "main/main.js",
   "entry": "app/index.html",