settings-ariang.html 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560
  1. <section class="content no-padding">
  2. <div class="nav-tabs-custom">
  3. <ul class="nav nav-tabs">
  4. <li ng-class="{'active': isCurrentGlobalTab()}">
  5. <a class="pointer-cursor" ng-click="changeGlobalTab()" translate>Global</a>
  6. </li>
  7. <li class="nav-tab-title-rpcname" ng-repeat="setting in context.rpcSettings" ng-class="{'active': isCurrentRpcTab($index)}">
  8. <a class="pointer-cursor" ng-click="changeRpcTab($index)">
  9. <span class="nav-tab-rpcname" ng-bind="'RPC' + (setting.rpcAlias || setting.rpcHost ? ' (' + (setting.rpcAlias ? setting.rpcAlias : setting.rpcHost + ':' + setting.rpcPort) + ')' : '')" title="{{(setting.rpcAlias ? setting.rpcAlias : setting.rpcHost + ':' + setting.rpcPort)}}">RPC</span>
  10. </a><a class="pointer-cursor nav-tab-close" ng-if="!setting.isDefault" title="{{'Delete RPC Setting' | translate}}">
  11. <i class="fa fa-times" ng-click="removeRpcSetting(setting)"></i>
  12. </a>
  13. </li>
  14. <li class="slim">
  15. <a class="pointer-cursor" ng-click="addNewRpcSetting()" title="{{'Add New RPC Setting' | translate}}">
  16. <i class="fa fa-plus"></i>
  17. </a>
  18. </li>
  19. </ul>
  20. <div class="tab-content no-padding">
  21. <div class="tab-pane" ng-class="{'active': isCurrentGlobalTab()}">
  22. <div class="settings-table striped hoverable">
  23. <div class="row" ng-if="context.ariaNgVersion">
  24. <div class="setting-key col-sm-4">
  25. <span translate>AriaNg Version</span>
  26. </div>
  27. <div class="setting-value col-sm-8">
  28. <span ng-bind="'AriaNg Native ' + context.ariaNgNativeVersion + ' (AriaNg ' + context.ariaNgVersion + ')'"></span>
  29. <button class="btn btn-xs btn-default" ng-click="checkUpdate()" ng-disabled="context.isCurrentLatestVersion" promise-btn>
  30. <span ng-bind="(context.isCurrentLatestVersion ? 'Latest Version' : 'Check Update') | translate" translate>Check Update</span>
  31. </button>
  32. </div>
  33. </div>
  34. <div class="row" ng-if="context.runtimeEnvironment">
  35. <div class="setting-key col-sm-4">
  36. <span translate>Runtime Environment</span>
  37. <i class="icon-expand pointer-cursor fa" ng-if="context.runtimeEnvironment.length > 1"
  38. ng-class="{'fa-plus': context.runtimeEnvironmentCollapsed, 'fa-minus': !context.runtimeEnvironmentCollapsed}"
  39. ng-click="context.runtimeEnvironmentCollapsed = !context.runtimeEnvironmentCollapsed"
  40. title="{{(context.runtimeEnvironmentCollapsed ? 'Expand' : 'Collapse') | translate}}"></i>
  41. </div>
  42. <div class="setting-value col-sm-8">
  43. <span class="multi-line auto-ellipsis" ng-bind="item.name + ': ' + item.value"
  44. ng-repeat="item in context.runtimeEnvironment | limitTo: (context.runtimeEnvironmentCollapsed ? 1 : task.runtimeEnvironment.length)"></span>
  45. </div>
  46. </div>
  47. <div class="row">
  48. <div class="setting-key setting-key-without-desc col-sm-4">
  49. <span translate>Language</span>
  50. </div>
  51. <div class="setting-value col-sm-8">
  52. <select class="form-control" style="width: 100%;" ng-model="context.settings.language"
  53. ng-options="type as (((('languages.' + language.name) | translate) !== ('languages.' + language.name) ? (('languages.' + language.name) | translate) : language.name) + ' (' + language.displayName + ')') for (type, language) in context.languages"
  54. ng-change="setLanguage(context.settings.language)">
  55. </select>
  56. </div>
  57. </div>
  58. <div class="row">
  59. <div class="setting-key setting-key-without-desc col-sm-4">
  60. <span translate>Theme</span>
  61. </div>
  62. <div class="setting-value col-sm-8">
  63. <select class="form-control" style="width: 100%;" ng-model="context.settings.theme"
  64. ng-change="setTheme(context.settings.theme)">
  65. <option value="light" translate>Light</option>
  66. <option value="dark" translate>Dark</option>
  67. <option ng-if="context.isSupportDarkMode" value="system" translate>Follow system settings</option>
  68. </select>
  69. </div>
  70. </div>
  71. <div class="row" ng-if="context.showDebugMode">
  72. <div class="setting-key setting-key-without-desc col-sm-4">
  73. <span translate>Debug Mode</span>
  74. </div>
  75. <div class="setting-value col-sm-8">
  76. <select class="form-control" style="width: 100%;" ng-model="context.sessionSettings.debugMode"
  77. ng-options="option.value as (option.name | translate) for option in context.trueFalseOptions"
  78. ng-change="setDebugMode(context.sessionSettings.debugMode)">
  79. </select>
  80. </div>
  81. </div>
  82. <div class="row">
  83. <div class="setting-key setting-key-without-desc col-sm-4">
  84. <span translate>Check for Updates on Startup</span>
  85. </div>
  86. <div class="setting-value col-sm-8">
  87. <select class="form-control" style="width: 100%;" ng-model="context.settings.autoCheckUpdates"
  88. ng-change="setAutoCheckUpdates(context.settings.autoCheckUpdates)">
  89. <option value="never" translate>Never</option>
  90. <option value="daily" translate>Daily</option>
  91. <option value="weekly" translate>Weekly</option>
  92. <option value="monthly" translate>Monthly</option>
  93. </select>
  94. </div>
  95. </div>
  96. <div class="row">
  97. <div class="setting-key setting-key-without-desc col-sm-4">
  98. <span translate>Page Title</span>
  99. <i class="icon-primary fa fa-question-circle" data-toggle="popover"
  100. data-trigger="hover" data-placement="auto right" data-container="body" data-html="true"
  101. data-content="{{('Supported Placeholder' | translate) + ':<br/>' +
  102. ('AriaNg Title' | translate) + ': ${title}<br/>' +
  103. ('Current RPC Alias' | translate) + ': ${rpcprofile}<br/>' +
  104. ('Downloading Count' | translate) + ': ${downloading}<br/>' +
  105. ('Waiting Count' | translate) + ': ${waiting}<br/>' +
  106. ('Stopped Count' | translate) + ': ${stopped}<br/>' +
  107. ('Download Speed' | translate) + ': ${downspeed}<br/>' +
  108. ('Upload Speed' | translate) + ': ${upspeed}<br/><br/>' +
  109. ('Tips: You can use the &quot;noprefix&quot; tag to ignore the prefix, &quot;nosuffix&quot; tag to ignore the suffix, and &quot;scale=n&quot; tag to set the decimal precision.' | translate) + '<br/>' +
  110. ('Example: ${downspeed:noprefix:nosuffix:scale=1}' | translate)}}"></i>
  111. </div>
  112. <div class="setting-value col-sm-8">
  113. <input class="form-control" type="text" ng-model="context.settings.title"
  114. ng-change="setTitle(context.settings.title); updateTitlePreview()"/>
  115. <em>[<span translate>Preview</span>] <span ng-bind="context.titlePreview"></span></em>
  116. </div>
  117. </div>
  118. <div class="row" ng-if="isSupportNotification()">
  119. <div class="setting-key setting-key-without-desc col-sm-4">
  120. <span translate>Enable Browser Notification</span>
  121. </div>
  122. <div class="setting-value col-sm-8">
  123. <select class="form-control" style="width: 100%;"
  124. ng-model="context.settings.browserNotification"
  125. ng-change="setEnableBrowserNotification(context.settings.browserNotification)"
  126. ng-options="option.value as (option.name | translate) for option in context.trueFalseOptions">
  127. </select>
  128. </div>
  129. </div>
  130. <div class="row" ng-if="context.isSupportReconnect">
  131. <div class="setting-key setting-key-without-desc col-sm-4">
  132. <span translate>WebSocket Auto Reconnect Interval</span>
  133. <span class="asterisk">*</span>
  134. </div>
  135. <div class="setting-value col-sm-8">
  136. <select class="form-control" style="width: 100%;"
  137. ng-model="context.settings.webSocketReconnectInterval"
  138. ng-change="setWebSocketReconnectInterval(context.settings.webSocketReconnectInterval)"
  139. ng-options="time.optionValue as (time.name | translate: {value: time.value}) for time in context.availableTime">
  140. </select>
  141. </div>
  142. </div>
  143. <div class="row">
  144. <div class="setting-key setting-key-without-desc col-sm-4">
  145. <span translate>Updating Page Title Interval</span>
  146. <span class="asterisk">*</span>
  147. </div>
  148. <div class="setting-value col-sm-8">
  149. <select class="form-control" style="width: 100%;"
  150. ng-model="context.settings.titleRefreshInterval"
  151. ng-change="setTitleRefreshInterval(context.settings.titleRefreshInterval)"
  152. ng-options="time.optionValue as (time.name | translate: {value: time.value}) for time in context.availableTime">
  153. </select>
  154. </div>
  155. </div>
  156. <div class="row">
  157. <div class="setting-key setting-key-without-desc col-sm-4">
  158. <span translate>Updating Global Stat Interval</span>
  159. <span class="asterisk">*</span>
  160. </div>
  161. <div class="setting-value col-sm-8">
  162. <select class="form-control" style="width: 100%;"
  163. ng-model="context.settings.globalStatRefreshInterval"
  164. ng-change="setGlobalStatRefreshInterval(context.settings.globalStatRefreshInterval)"
  165. ng-options="time.optionValue as (time.name | translate: {value: time.value}) for time in context.availableTime">
  166. </select>
  167. </div>
  168. </div>
  169. <div class="row">
  170. <div class="setting-key setting-key-without-desc col-sm-4">
  171. <span translate>Updating Task Information Interval</span>
  172. <span class="asterisk">*</span>
  173. </div>
  174. <div class="setting-value col-sm-8">
  175. <select class="form-control" style="width: 100%;"
  176. ng-model="context.settings.downloadTaskRefreshInterval"
  177. ng-change="setDownloadTaskRefreshInterval(context.settings.downloadTaskRefreshInterval)"
  178. ng-options="time.optionValue as (time.name | translate: {value: time.value}) for time in context.availableTime">
  179. </select>
  180. </div>
  181. </div>
  182. <div class="row">
  183. <div class="setting-key setting-key-without-desc col-sm-4">
  184. <span translate>Keyboard Shortcuts</span>
  185. <i class="icon-primary fa fa-question-circle" data-toggle="popover"
  186. data-trigger="hover" data-placement="auto right" data-container="body" data-html="true"
  187. data-content="{{('Supported Keyboard Shortcuts' | translate) + ':<br/>' +
  188. ('Remove Selected Task' | translate) + ': <span class=\'keyboard-key\'>Delete</span><br/>' +
  189. ('Select All Tasks' | translate) + ': ' + (!context.isMacKeyboardLike ? '<span class=\'keyboard-key\'>Ctrl</span>+<span class=\'keyboard-key\'>A</span>' : '<span class=\'keyboard-key\'>Command</span>+<span class=\'keyboard-key\'>A</span>') + '<br/>' +
  190. ('Set Focus On Search Box' | translate) + ': ' + (!context.isMacKeyboardLike ? '<span class=\'keyboard-key\'>Ctrl</span>+<span class=\'keyboard-key\'>F</span>' : '<span class=\'keyboard-key\'>Command</span>+<span class=\'keyboard-key\'>F</span>') + '<br/>' +
  191. ('Download Now' | translate) + ': ' + (!context.isMacKeyboardLike ? '<span class=\'keyboard-key\'>Ctrl</span>+<span class=\'keyboard-key\'>Enter</span>' : '<span class=\'keyboard-key\'>Command</span>+<span class=\'keyboard-key\'>Return</span>')}}"></i>
  192. </div>
  193. <div class="setting-value col-sm-8">
  194. <select class="form-control" style="width: 100%;" ng-model="context.settings.keyboardShortcuts"
  195. ng-change="setKeyboardShortcuts(context.settings.keyboardShortcuts)"
  196. ng-options="option.value as (option.name | translate) for option in context.trueFalseOptions">
  197. </select>
  198. </div>
  199. </div>
  200. <div class="row">
  201. <div class="setting-key setting-key-without-desc col-sm-4">
  202. <span translate>Swipe Gesture</span>
  203. </div>
  204. <div class="setting-value col-sm-8">
  205. <select class="form-control" style="width: 100%;" ng-model="context.settings.swipeGesture"
  206. ng-change="setSwipeGesture(context.settings.swipeGesture)"
  207. ng-options="option.value as (option.name | translate) for option in context.trueFalseOptions">
  208. </select>
  209. </div>
  210. </div>
  211. <div class="row">
  212. <div class="setting-key setting-key-without-desc col-sm-4">
  213. <span translate>Change Tasks Order by Drag-and-drop</span>
  214. </div>
  215. <div class="setting-value col-sm-8">
  216. <select class="form-control" style="width: 100%;" ng-model="context.settings.dragAndDropTasks"
  217. ng-change="setDragAndDropTasks(context.settings.dragAndDropTasks)"
  218. ng-options="option.value as (option.name | translate) for option in context.trueFalseOptions">
  219. </select>
  220. </div>
  221. </div>
  222. <div class="row">
  223. <div class="setting-key setting-key-without-desc col-sm-4">
  224. <span translate>RPC List Display Order</span>
  225. <span class="asterisk">*</span>
  226. </div>
  227. <div class="setting-value col-sm-8">
  228. <select class="form-control" style="width: 100%;" ng-model="context.settings.rpcListDisplayOrder"
  229. ng-change="setRPCListDisplayOrder(context.settings.rpcListDisplayOrder)">
  230. <option value="recentlyUsed" translate>Recently Used</option>
  231. <option value="rpcAlias" translate>RPC Alias</option>
  232. </select>
  233. </div>
  234. </div>
  235. <div class="row">
  236. <div class="setting-key setting-key-without-desc col-sm-4">
  237. <span translate>Action After Creating New Tasks</span>
  238. </div>
  239. <div class="setting-value col-sm-8">
  240. <select class="form-control" style="width: 100%;" ng-model="context.settings.afterCreatingNewTask"
  241. ng-change="setAfterCreatingNewTask(context.settings.afterCreatingNewTask)">
  242. <option value="task-list" translate>Navigate to Task List Page</option>
  243. <option value="task-detail" translate>Navigate to Task Detail Page</option>
  244. </select>
  245. </div>
  246. </div>
  247. <div class="row">
  248. <div class="setting-key setting-key-without-desc col-sm-4">
  249. <span translate>Action After Retrying Task</span>
  250. </div>
  251. <div class="setting-value col-sm-8">
  252. <select class="form-control" style="width: 100%;" ng-model="context.settings.afterRetryingTask"
  253. ng-change="setAfterRetryingTask(context.settings.afterRetryingTask)">
  254. <option value="task-list-downloading" translate>Navigate to Downloading Tasks Page</option>
  255. <option value="task-detail" translate>Navigate to Task Detail Page</option>
  256. <option value="stay-on-current" translate>Stay on Current Page</option>
  257. </select>
  258. </div>
  259. </div>
  260. <div class="row">
  261. <div class="setting-key setting-key-without-desc col-sm-4">
  262. <span translate>Remove Old Tasks After Retrying</span>
  263. </div>
  264. <div class="setting-value col-sm-8">
  265. <select class="form-control" style="width: 100%;" ng-model="context.settings.removeOldTaskAfterRetrying"
  266. ng-change="setRemoveOldTaskAfterRetrying(context.settings.removeOldTaskAfterRetrying)"
  267. ng-options="option.value as (option.name | translate) for option in context.trueFalseOptions">
  268. </select>
  269. </div>
  270. </div>
  271. <div class="row">
  272. <div class="setting-key setting-key-without-desc col-sm-4">
  273. <span translate>Confirm Task Removal</span>
  274. </div>
  275. <div class="setting-value col-sm-8">
  276. <select class="form-control" style="width: 100%;" ng-model="context.settings.confirmTaskRemoval"
  277. ng-change="setConfirmTaskRemoval(context.settings.confirmTaskRemoval)"
  278. ng-options="option.value as (option.name | translate) for option in context.trueFalseOptions">
  279. </select>
  280. </div>
  281. </div>
  282. <div class="row">
  283. <div class="setting-key setting-key-without-desc col-sm-4">
  284. <span translate>Include Prefix When Copying From Task Details</span>
  285. </div>
  286. <div class="setting-value col-sm-8">
  287. <select class="form-control" style="width: 100%;" ng-model="context.settings.includePrefixWhenCopyingFromTaskDetails"
  288. ng-change="setIncludePrefixWhenCopyingFromTaskDetails(context.settings.includePrefixWhenCopyingFromTaskDetails)"
  289. ng-options="option.value as (option.name | translate) for option in context.trueFalseOptions">
  290. </select>
  291. </div>
  292. </div>
  293. <div class="row">
  294. <div class="setting-key setting-key-without-desc col-sm-4">
  295. <span translate>Show Pieces Info In Task Detail Page</span>
  296. </div>
  297. <div class="setting-value col-sm-8">
  298. <select class="form-control" style="width: 100%;" ng-model="context.settings.showPiecesInfoInTaskDetailPage"
  299. ng-change="setShowPiecesInfoInTaskDetailPage(context.settings.showPiecesInfoInTaskDetailPage)">
  300. <option value="always" translate>Always</option>
  301. <option value="le102400" translate translate-values="{value: '102,400'}">Pieces Amount is Less than or Equal to {value}</option>
  302. <option value="le10240" translate translate-values="{value: '10,240'}">Pieces Amount is Less than or Equal to {value}</option>
  303. <option value="le1024" translate translate-values="{value: '1,024'}">Pieces Amount is Less than or Equal to {value}</option>
  304. <option value="never" translate>Never</option>
  305. </select>
  306. </div>
  307. </div>
  308. <div class="row">
  309. <div class="setting-key setting-key-without-desc col-sm-4">
  310. <span translate>Default Window Position</span>
  311. </div>
  312. <div class="setting-value col-sm-8">
  313. <select class="form-control" style="width: 100%;" ng-model="context.nativeSettings.defaultPosition"
  314. ng-change="setDefaultPosition(context.nativeSettings.defaultPosition)">
  315. <option value="last-position" translate>Last Position</option>
  316. <option value="screen-center" translate>Screen Center</option>
  317. </select>
  318. </div>
  319. </div>
  320. <div class="row">
  321. <div class="setting-key setting-key-without-desc col-sm-4">
  322. <span translate>Execute Command on Startup</span>
  323. </div>
  324. <div class="setting-value col-sm-8">
  325. <div class="input-group">
  326. <input class="form-control" type="text"
  327. ng-model="context.nativeSettings.execCommandOnStartup"
  328. ng-change="setExecCommandOnStartup(context.nativeSettings.execCommandOnStartup)"/>
  329. <div class="input-group-btn">
  330. <button type="button" class="btn btn-default" ng-click="browseAndSetExecCommandOnStartup()">
  331. <span translate>Browse</span>
  332. </button>
  333. </div>
  334. </div>
  335. </div>
  336. </div>
  337. <div class="row" ng-if="context.nativeSettings.execCommandOnStartup">
  338. <div class="setting-key setting-key-without-desc col-sm-4">
  339. <span translate>Execute Command Arguments on Startup</span>
  340. </div>
  341. <div class="setting-value col-sm-8">
  342. <textarea class="form-control" rows="3"
  343. ng-placeholder="'Support multiple arguments, one argument per line.' | translate"
  344. ng-model="context.nativeSettings.execCommandArgumentsOnStartup"
  345. ng-change="setExecCommandArgumentsOnStartup(context.nativeSettings.execCommandArgumentsOnStartup)"></textarea>
  346. </div>
  347. </div>
  348. <div class="row" ng-if="context.nativeSettings.execCommandOnStartup">
  349. <div class="setting-key setting-key-without-desc col-sm-4">
  350. <span translate>Execute Command Options on Startup</span>
  351. </div>
  352. <div class="setting-value col-sm-8">
  353. <select class="form-control" style="width: 100%;" ng-model="context.nativeSettings.execCommandOptionsOnStartup"
  354. ng-change="setExecCommandOptionsOnStartup(context.nativeSettings.execCommandOptionsOnStartup)">
  355. <option value="as-child-process" translate>As Child Process</option>
  356. <option value="as-detached-process" translate>As Detached Process</option>
  357. </select>
  358. </div>
  359. </div>
  360. <div class="row">
  361. <div class="setting-key setting-key-without-desc col-sm-4">
  362. <span translate>Action After Main Window Closed</span>
  363. </div>
  364. <div class="setting-value col-sm-8">
  365. <select class="form-control" style="width: 100%;" ng-model="context.nativeSettings.afterMainWindowClosed"
  366. ng-change="setAfterMainWindowClosed(context.nativeSettings.afterMainWindowClosed)">
  367. <option value="minimize-to-tray" translate>Minimize to Tray</option>
  368. <option value="exit-application" translate>Exit Application</option>
  369. </select>
  370. </div>
  371. </div>
  372. <div class="row">
  373. <div class="setting-key setting-key-without-desc col-sm-4">
  374. <span translate>Import / Export AriaNg Settings</span>
  375. </div>
  376. <div class="setting-value col-sm-8">
  377. <button class="btn btn-sm btn-default" ng-click="showImportSettingsModal()">
  378. <span translate>Import Settings</span>
  379. </button>
  380. <button class="btn btn-sm btn-default" ng-click="showExportSettingsModal()">
  381. <span translate>Export Settings</span>
  382. </button>
  383. </div>
  384. </div>
  385. <div class="row tip no-background no-hover">
  386. <span class="asterisk">*</span>
  387. <span translate>Changes to the settings take effect after refreshing page.</span>
  388. <button class="btn btn-xs btn-default" ng-click="resetSettings()">
  389. <span translate>Reset Settings</span>
  390. </button>
  391. <button class="btn btn-xs btn-default" ng-click="clearHistory()">
  392. <span translate>Clear Settings History</span>
  393. </button>
  394. <button class="btn btn-xs btn-default" ng-click="reloadApp()">
  395. <span translate>Reload AriaNg Native</span>
  396. </button>
  397. </div>
  398. </div>
  399. </div>
  400. <div class="tab-pane" ng-repeat="setting in context.rpcSettings" ng-class="{'active': isCurrentRpcTab($index)}">
  401. <div class="settings-table striped hoverable">
  402. <div class="row">
  403. <div class="setting-key setting-key-without-desc col-sm-4">
  404. <span translate>Aria2 RPC Alias</span>
  405. <span class="asterisk">*</span>
  406. </div>
  407. <div class="setting-value col-sm-8">
  408. <input class="form-control" type="text" ng-placeholder="(setting.rpcHost ? setting.rpcHost + ':' + setting.rpcPort : '')" ng-model="setting.rpcAlias" ng-change="updateRpcSetting(setting, 'rpcAlias')"/>
  409. </div>
  410. </div>
  411. <div class="row">
  412. <div class="setting-key setting-key-without-desc col-sm-4">
  413. <span translate>Aria2 RPC Address</span>
  414. <span class="asterisk">*</span>
  415. </div>
  416. <div class="setting-value col-sm-8">
  417. <div class="input-group input-group-multiple">
  418. <span class="input-group-addon" ng-bind="setting.protocol + '://'"></span>
  419. <input class="form-control" type="text" ng-model="setting.rpcHost" ng-change="updateRpcSetting(setting, 'rpcHost')"/>
  420. <span class="input-group-addon">:</span>
  421. <div class="input-group-addon-container">
  422. <input class="form-control form-control-rpcport" type="text" ng-model="setting.rpcPort" ng-change="updateRpcSetting(setting, 'rpcPort')"/>
  423. </div>
  424. <span class="input-group-addon">/</span>
  425. <div class="input-group-addon-container">
  426. <input class="form-control form-control-rpcinterface" type="text" ng-model="setting.rpcInterface" ng-change="updateRpcSetting(setting, 'rpcInterface')"/>
  427. </div>
  428. </div>
  429. </div>
  430. </div>
  431. <div class="row">
  432. <div class="setting-key setting-key-without-desc col-sm-4">
  433. <span translate>Aria2 RPC Protocol</span>
  434. <span class="asterisk">*</span>
  435. <i class="icon-primary fa fa-question-circle" ng-tooltip-container="body" ng-tooltip-placement="top"
  436. ng-tooltip="{{'Http and WebSocket would be disabled when accessing AriaNg via Https.' | translate}}"></i>
  437. </div>
  438. <div class="setting-value col-sm-8">
  439. <select class="form-control" style="width: 100%;" ng-model="setting.protocol" ng-change="updateRpcSetting(setting, 'protocol')">
  440. <option value="http" ng-disabled="::(context.isInsecureProtocolDisabled)" ng-bind="('Http' + (context.isInsecureProtocolDisabled ? ' (Disabled)' : '')) | translate">Http</option>
  441. <option value="https" translate>Https</option>
  442. <option value="ws" ng-disabled="::(context.isInsecureProtocolDisabled)" ng-bind="('WebSocket' + (context.isInsecureProtocolDisabled ? ' (Disabled)' : '')) | translate">WebSocket</option>
  443. <option value="wss" translate>WebSocket (Security)</option>
  444. </select>
  445. </div>
  446. </div>
  447. <div class="row" ng-if="setting.protocol === 'http' || setting.protocol === 'https'">
  448. <div class="setting-key setting-key-without-desc col-sm-4">
  449. <span translate>Aria2 RPC Http Request Method</span>
  450. <span class="asterisk">*</span>
  451. <i class="icon-primary fa fa-question-circle" ng-tooltip-container="body" ng-tooltip-placement="top"
  452. ng-tooltip="{{'POST method only supports aria2 v1.15.2 and above.' | translate}}"></i>
  453. </div>
  454. <div class="setting-value col-sm-8">
  455. <select class="form-control" style="width: 100%;" ng-model="setting.httpMethod" ng-change="updateRpcSetting(setting, 'httpMethod')">
  456. <option value="POST" translate>POST</option>
  457. <option value="GET" translate>GET</option>
  458. </select>
  459. </div>
  460. </div>
  461. <div class="row">
  462. <div class="setting-key setting-key-without-desc col-sm-4">
  463. <span translate>Aria2 RPC Secret Token</span>
  464. <span class="asterisk">*</span>
  465. </div>
  466. <div class="setting-value col-sm-8">
  467. <div class="input-group">
  468. <input class="form-control" type="{{context.showRpcSecret ? 'text' : 'password'}}" ng-model="setting.secret" ng-change="updateRpcSetting(setting, 'secret')"/>
  469. <span class="input-group-addon input-group-addon-compact no-vertical-padding">
  470. <button class="btn btn-xs btn-default" title="{{context.showRpcSecret ? 'Hide Secret' : 'Show Secret' | translate}}"
  471. ng-class="{'active': context.showRpcSecret}" ng-click="context.showRpcSecret = !context.showRpcSecret">
  472. <i class="fa fa-eye"></i>
  473. </button>
  474. </span>
  475. </div>
  476. </div>
  477. </div>
  478. <div class="row">
  479. <div class="setting-key setting-key-without-desc col-sm-4">
  480. <span translate>Export Command API</span>
  481. </div>
  482. <div class="setting-value col-sm-8">
  483. <button class="btn btn-sm btn-default" ng-click="showExportCommandAPIModal(setting)">
  484. <span translate>Export</span>
  485. </button>
  486. </div>
  487. </div>
  488. <div class="row tip no-background no-hover">
  489. <span class="asterisk">*</span>
  490. <span translate>Changes to the settings take effect after refreshing page.</span>
  491. <button class="btn btn-xs btn-default" ng-disabled="setting.isDefault" ng-click="setDefaultRpcSetting(setting)">
  492. <span translate>Activate</span>
  493. </button>
  494. </div>
  495. </div>
  496. </div>
  497. </div>
  498. </div>
  499. <div id="import-settings-modal" class="modal fade" tabindex="-1" role="dialog">
  500. <div class="modal-dialog modal-lg" role="document">
  501. <div class="modal-content">
  502. <div class="modal-header">
  503. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  504. <h4 class="modal-title">
  505. <span translate>Import Settings</span>
  506. <small>
  507. <a class="pointer-cursor" title="{{'Open' | translate}}" ng-click="openAriaNgConfigFile()">
  508. <i class="icon-primary fa fa-folder-open-o"></i>
  509. </a>
  510. </small>
  511. </h4>
  512. </div>
  513. <div class="modal-body no-padding">
  514. <div class="settings-table striped">
  515. <input id="import-file-holder" type="file" style="display: none"/>
  516. <textarea class="form-control" ng-model="context.importSettings" rows="20"
  517. ng-placeholder="'AriaNg settings data' | translate"></textarea>
  518. </div>
  519. </div>
  520. <div class="modal-footer">
  521. <button type="button" class="btn btn-primary" ng-disabled="!context.importSettings || !context.importSettings.length"
  522. ng-click="importSettings(context.importSettings)" translate>Import</button>
  523. <button type="button" class="btn btn-default" data-dismiss="modal" translate>Cancel</button>
  524. </div>
  525. </div>
  526. </div>
  527. </div>
  528. <div id="export-settings-modal" class="modal fade" tabindex="-1" role="dialog">
  529. <div class="modal-dialog modal-lg" role="document">
  530. <div class="modal-content">
  531. <div class="modal-header">
  532. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  533. <h4 class="modal-title">
  534. <span translate>Export Settings</span>
  535. <small>
  536. <a class="pointer-cursor" title="{{'Save' | translate}}" ng-if="context.isSupportBlob"
  537. ng-blob-download="context.exportSettings" ng-file-name="AriaNgConfig.json" ng-content-type="application/json">
  538. <i class="icon-primary fa fa-save"></i>
  539. </a>
  540. <a class="pointer-cursor" title="{{'Copy' | translate}}" ng-click="copyExportSettings()">
  541. <i class="icon-primary fa fa-copy"></i>
  542. </a>
  543. <span class="label label-default fade-in" ng-if="context.exportSettingsCopied" translate>Data has been copied to clipboard.</span>
  544. </small>
  545. </h4>
  546. </div>
  547. <div class="modal-body no-padding">
  548. <div class="settings-table striped">
  549. <textarea class="form-control" ng-model="context.exportSettings" rows="20" readonly="readonly"></textarea>
  550. </div>
  551. </div>
  552. <div class="modal-footer">
  553. <button type="button" class="btn btn-default" data-dismiss="modal" translate>Cancel</button>
  554. </div>
  555. </div>
  556. </div>
  557. </div>
  558. <ng-export-command-api-dialog options="context.exportCommandApiOptions"></ng-export-command-api-dialog>
  559. </section>