From 3f4c66a14e9e86d2da0021a9e8134a6665b11012 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Mon, 6 Jun 2016 00:01:11 +0800 Subject: [PATCH] support save session and shutdown arai2 --- app/index.html | 1 + app/langs/zh-CN.json | 10 ++ app/scripts/config/language-default.js | 10 ++ app/scripts/controllers/status.js | 24 ++++- app/scripts/core/app.js | 1 + app/scripts/services/aria2SettingService.js | 10 ++ app/styles/aria-ng.css | 114 ++++++++++++++++++++ app/views/status.html | 13 +++ bower.json | 1 + 9 files changed, 183 insertions(+), 1 deletion(-) diff --git a/app/index.html b/app/index.html index 76b57ea..e9038a5 100644 --- a/app/index.html +++ b/app/index.html @@ -253,6 +253,7 @@ + diff --git a/app/langs/zh-CN.json b/app/langs/zh-CN.json index fe45228..d1dfaf3 100644 --- a/app/langs/zh-CN.json +++ b/app/langs/zh-CN.json @@ -1,5 +1,6 @@ { "Simplified Chinese": "简体中文", + "Operation Succeeded": "操作成功", "Error": "错误", "OK": "确定", "Cancel": "取消", @@ -79,6 +80,15 @@ "Download Task Refresh Interval": "下载任务刷新间隔", "Aria2 Version": "Aria2 版本", "Enabled Features": "已启用的功能", + "Functions": "方法", + "Save Session": "保存会话", + "Shutdown Aria2": "关闭 Aria2", + "Confirm Shutdown": "确认关闭", + "Are you sure you want to shutdown aria2?": "您是否要关闭 Aria2?", + "Session has been saved successfully.": "会话已经成功保存.", + "Failed to save session.": "会话保存失败.", + "Aria2 has been shutdown successfully.": "Aria2 已经成功关闭.", + "Failed to shutdown aria2.": "关闭 Aria2 失败.", "Toggle Navigation": "切换导航", "Loading": "正在加载...", "More Than One Day": "超过1天", diff --git a/app/scripts/config/language-default.js b/app/scripts/config/language-default.js index 467a7da..9e4d2c7 100644 --- a/app/scripts/config/language-default.js +++ b/app/scripts/config/language-default.js @@ -4,6 +4,7 @@ angular.module('ariaNg').config(['$translateProvider', function ($translateProvider) { $translateProvider.translations('en-US', { 'English': 'English', + 'Operation Succeeded': 'Operation Succeeded', 'Error': 'Error', 'OK': 'OK', 'Cancel': 'Cancel', @@ -83,6 +84,15 @@ 'Download Task Refresh Interval': 'Download Task Refresh Interval', 'Aria2 Version': 'Aria2 Version', 'Enabled Features': 'Enabled Features', + 'Functions': 'Functions', + 'Save Session': 'Save Session', + 'Shutdown Aria2': 'Shutdown Aria2', + 'Confirm Shutdown': 'Confirm Shutdown', + 'Are you sure you want to shutdown aria2?': 'Are you sure you want to shutdown aria2?', + 'Session has been saved successfully.': 'Session has been saved successfully.', + 'Failed to save session.': 'Failed to save session.', + 'Aria2 has been shutdown successfully.': 'Aria2 has been shutdown successfully.', + 'Failed to shutdown aria2.': 'Failed to shutdown aria2.', 'Toggle Navigation': 'Toggle Navigation', 'Loading': 'Loading...', 'More Than One Day': 'More than 1 day', diff --git a/app/scripts/controllers/status.js b/app/scripts/controllers/status.js index 885c9ca..bf64cca 100644 --- a/app/scripts/controllers/status.js +++ b/app/scripts/controllers/status.js @@ -1,11 +1,33 @@ (function () { 'use strict'; - angular.module('ariaNg').controller('Aria2StatusController', ['$rootScope', '$scope', 'aria2SettingService', function ($rootScope, $scope, aria2SettingService) { + angular.module('ariaNg').controller('Aria2StatusController', ['$rootScope', '$scope', 'ariaNgCommonService', 'aria2SettingService', function ($rootScope, $scope, ariaNgCommonService, aria2SettingService) { $rootScope.loadPromise = (function () { return aria2SettingService.getServerStatus(function (result) { $scope.serverStatus = result; }); })(); + + $scope.saveSession = function () { + return aria2SettingService.saveSession(function (result) { + if (result == 'OK') { + ariaNgCommonService.showOperationSucceeded('Session has been saved successfully.'); + } else { + ariaNgCommonService.showError('Failed to save session.'); + } + }); + }; + + $scope.shutdown = function () { + ariaNgCommonService.confirm('Confirm Shutdown', 'Are you sure you want to shutdown aria2?', 'warning', function (status) { + return aria2SettingService.shutdown(function (result) { + if (result == 'OK') { + ariaNgCommonService.showOperationSucceeded('Aria2 has been shutdown successfully.'); + } else { + ariaNgCommonService.showError('Failed to shutdown aria2.'); + } + }); + }, true); + }; }]); })(); diff --git a/app/scripts/core/app.js b/app/scripts/core/app.js index 8aee2d9..173f131 100644 --- a/app/scripts/core/app.js +++ b/app/scripts/core/app.js @@ -14,6 +14,7 @@ 'base64', 'LocalStorageModule', 'cgBusy', + 'angularPromiseButtons', 'ui.bootstrap-slider', 'oitozero.ngSweetAlert', angularDragula(angular) diff --git a/app/scripts/services/aria2SettingService.js b/app/scripts/services/aria2SettingService.js index ea45630..5c86885 100644 --- a/app/scripts/services/aria2SettingService.js +++ b/app/scripts/services/aria2SettingService.js @@ -104,6 +104,16 @@ callback(stat); } }); + }, + saveSession: function (callback) { + return aria2RpcService.saveSession({ + callback: callback + }) + }, + shutdown: function (callback) { + return aria2RpcService.shutdown({ + callback: callback + }) } }; }]); diff --git a/app/styles/aria-ng.css b/app/styles/aria-ng.css index 1b4dd7b..c385df4 100644 --- a/app/styles/aria-ng.css +++ b/app/styles/aria-ng.css @@ -408,6 +408,120 @@ td { border-color: #208fe5; } +/* angular-promise-buttons */ +@-webkit-keyframes three-quarters { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@-moz-keyframes three-quarters { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@-o-keyframes three-quarters { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes three-quarters { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +.btn-spinner { + font-family: sans-serif; + font-weight: 100; +} + +.btn-spinner:not(:required) { + -webkit-animation: three-quarters 1250ms infinite linear; + -moz-animation: three-quarters 1250ms infinite linear; + -ms-animation: three-quarters 1250ms infinite linear; + -o-animation: three-quarters 1250ms infinite linear; + animation: three-quarters 1250ms infinite linear; + border: 3px solid #8c8c8c; + border-right-color: transparent; + border-radius: 100%; + box-sizing: border-box; + display: inline-block; + position: relative; + vertical-align: middle; + overflow: hidden; + text-indent: -9999px; + width: 18px; + height: 18px; +} + +.btn-primary .btn-spinner:not(:required), .btn-danger .btn-spinner:not(:required) { + border: 3px solid #efefef; + border-right-color: transparent; +} + +.btn-spinner:not(:required) { + margin-left: -22px; + opacity: 0; + transition: 0.4s margin ease-out, 0.2s opacity ease-out; +} + +.is-loading .btn-spinner { + transition: 0.2s margin ease-in, 0.4s opacity ease-in; + margin-left: 5px; + opacity: 1; +} + /* angular-dragula extend */ .gu-mirror { cursor: grabbing; diff --git a/app/views/status.html b/app/views/status.html index 71f5edf..9aabe33 100644 --- a/app/views/status.html +++ b/app/views/status.html @@ -16,5 +16,18 @@ +
+
+ Functions +
+
+ + +
+
diff --git a/bower.json b/bower.json index f87ebc4..74ba68c 100644 --- a/bower.json +++ b/bower.json @@ -46,6 +46,7 @@ "angular-base64": "^2.0.5", "angular-local-storage": "^0.2.7", "angular-busy": "^4.1.3", + "angular-promise-buttons": "^0.1.14", "angular-dragula": "^1.2.7", "angular-bootstrap-slider": "^0.1.28", "ngSweetAlert": "https://github.com/oitozero/ngSweetAlert.git#8df6c30b0996f09cb4cf5e90a41115a6c09fa852"