diff --git a/CONTRIBUTING-CN.md b/CONTRIBUTING-CN.md index 15280c232..ab96412d6 100644 --- a/CONTRIBUTING-CN.md +++ b/CONTRIBUTING-CN.md @@ -4,7 +4,7 @@ ## 🌍 翻译指南 -首先你要确定一个语言的英文简写作为 **locale**,如 en-US,这个 locale 值请严格参考 [Electron 的 Locales 文档](https://electronjs.org/docs/api/locales) +首先你要确定一个语言的英文简写作为 **locale**,如 en-US,这个 locale 值请严格参考 [Electron 的 Locales 文档](https://www.electronjs.org/docs/api/app#appgetlocale) Motrix 的国际化分两部分: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f4fbe68a7..92dab3501 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,7 +4,7 @@ Before you start contributing, make sure you already understand [GitHub flow](ht ## 🌍 Translation Guide -First you need to determine the English abbreviation of a language as **locale**, such as en-US, this locale value should strictly refer to the [electron's documentation](https://electronjs.org/docs/api/locales). +First you need to determine the English abbreviation of a language as **locale**, such as en-US, this locale value should strictly refer to the [electron's documentation](https://www.electronjs.org/docs/api/app#appgetlocale). The internationalization of Motrix is divided into two parts: diff --git a/README-CN.md b/README-CN.md index 2a1322ce9..271effc49 100644 --- a/README-CN.md +++ b/README-CN.md @@ -94,6 +94,7 @@ Motrix 在 Linux 中首次启动可能需要使用 `sudo` 运行,因为可能 - 🔔 下载完成后通知 - 💻 支持触控栏快捷键 (Mac 专享) - 🤖 常驻系统托盘,操作更加便捷 +- 📟 系统托盘速度仪表显示实时速度 (Mac 专享) - 🌑 深色模式 - 🗑 移除任务时可同时删除相关文件 - 🌍 国际化,[查看已可选的语言](#-国际化) @@ -165,7 +166,7 @@ yarn run build | Key | Name | Status | |-------|:--------------------|:-------------| -| ar | Arabic | [@hadialqattan](https://github.com/hadialqattan), [AhmedElTabarani](https://github.com/AhmedElTabarani) | +| ar | Arabic | [@hadialqattan](https://github.com/hadialqattan), [@AhmedElTabarani](https://github.com/AhmedElTabarani) | | bg | Българският език | ✔️ [@null-none](https://github.com/null-none) | | ca | Català | ✔️ [@marcizhu](https://github.com/marcizhu) | | de | Deutsch | ✔️ [@Schloemicher](https://github.com/Schloemicher) | diff --git a/README.md b/README.md index abfb4c591..90239d5a3 100644 --- a/README.md +++ b/README.md @@ -96,6 +96,7 @@ Motrix may need to run with `sudo` for the first time in Linux because there is - 🔔 Download completed Notification - 💻 Ready for Touch Bar (Mac only) - 🤖 Resident system tray for quick operation +- 📟 Tray speed meter displays real-time speed (Mac only) - 🌑 Dark mode - 🗑 Delete related files when removing tasks (optional) - 🌍 I18n, [View supported languages](#-internationalization). @@ -158,7 +159,7 @@ Translations into versions for other languages are welcome 🧐! Please read the | Key | Name | Status | |-------|:--------------------|:-------------| -| ar | Arabic | [@hadialqattan](https://github.com/hadialqattan), [AhmedElTabarani](https://github.com/AhmedElTabarani) | +| ar | Arabic | [@hadialqattan](https://github.com/hadialqattan), [@AhmedElTabarani](https://github.com/AhmedElTabarani) | | bg | Българският език | ✔️ [@null-none](https://github.com/null-none) | | ca | Català | ✔️ [@marcizhu](https://github.com/marcizhu) | | de | Deutsch | ✔️ [@Schloemicher](https://github.com/Schloemicher) | diff --git a/src/main/core/Engine.js b/src/main/core/Engine.js index ddd737dd0..467df35de 100644 --- a/src/main/core/Engine.js +++ b/src/main/core/Engine.js @@ -56,11 +56,11 @@ export default class Engine { if (is.dev()) { this.instance.stdout.on('data', function (data) { - console.log('[Motrix] engine stdout===>', data.toString()) + logger.log('[Motrix] engine stdout===>', data.toString()) }) this.instance.stderr.on('data', function (data) { - console.log('[Motrix] engine stderr===>', data.toString()) + logger.log('[Motrix] engine stderr===>', data.toString()) }) } } diff --git a/src/main/menus/darwin.json b/src/main/menus/darwin.json index 6e77dbf11..a3669ef8b 100644 --- a/src/main/menus/darwin.json +++ b/src/main/menus/darwin.json @@ -11,7 +11,7 @@ { "id": "app.hide-others", "role": "hideothers" }, { "id": "app.unhide", "role": "unhide" }, { "type": "separator" }, - { "id": "app.quit", "command": "application:quit" } + { "id": "app.quit", "role": "quit" } ] }, { diff --git a/src/main/menus/linux.json b/src/main/menus/linux.json index 990700134..999b35666 100644 --- a/src/main/menus/linux.json +++ b/src/main/menus/linux.json @@ -9,7 +9,7 @@ { "id": "app.check-for-updates", "command": "application:check-for-updates" }, { "id": "app.show", "command": "application:show", "command-arg": { "page": "index" } }, { "type": "separator" }, - { "id": "app.quit", "command": "application:quit" } + { "id": "app.quit", "role": "quit" } ] }, { diff --git a/src/main/menus/win32.json b/src/main/menus/win32.json index 17c37f00d..9bc68e0e0 100644 --- a/src/main/menus/win32.json +++ b/src/main/menus/win32.json @@ -9,7 +9,7 @@ { "id": "app.check-for-updates", "command": "application:check-for-updates" }, { "id": "app.show", "command": "application:show", "command-arg": { "page": "index" } }, { "type": "separator" }, - { "id": "app.quit", "command": "application:quit" } + { "id": "app.quit", "role": "quit" } ] }, { diff --git a/src/renderer/api/Api.js b/src/renderer/api/Api.js index bd2e46556..b7d55d527 100644 --- a/src/renderer/api/Api.js +++ b/src/renderer/api/Api.js @@ -255,6 +255,30 @@ export default class Api { return this.client.call('tellStatus', ...args) } + fetchTaskItemWithPeers (params = {}) { + const { gid, keys } = params + const statusArgs = compactUndefined([gid, keys]) + const peersArgs = compactUndefined([gid]) + return new Promise((resolve, reject) => { + this.client.multicall([ + ['aria2.tellStatus', ...statusArgs], + ['aria2.getPeers', ...peersArgs] + ]).then((data) => { + console.log('[Motrix] fetchTaskItemWithPeers:', data) + const result = data[0] && data[0][0] + const peers = data[1] && data[1][0] + result.peers = peers || [] + console.log('[Motrix] fetchTaskItemWithPeers.result:', result) + console.log('[Motrix] fetchTaskItemWithPeers.peers:', peers) + + resolve(result) + }).catch((err) => { + console.log('[Motrix] fetch downloading task list fail:', err) + reject(err) + }) + }) + } + fetchTaskItemPeers (params = {}) { const { gid, keys } = params const args = compactUndefined([gid, keys]) diff --git a/src/renderer/components/Main.vue b/src/renderer/components/Main.vue index cbc64cd63..52659fe59 100644 --- a/src/renderer/components/Main.vue +++ b/src/renderer/components/Main.vue @@ -5,7 +5,13 @@ - + @@ -16,7 +22,7 @@ import Aside from '@/components/Aside/Index' import Speedometer from '@/components/Speedometer/Speedometer' import AddTask from '@/components/Task/AddTask' - import TaskItemInfo from '@/components/Task/TaskItemInfo' + import TaskDetail from '@/components/TaskDetail/Index' import Dragger from '@/components/Dragger/Index' export default { @@ -26,7 +32,7 @@ [Aside.name]: Aside, [Speedometer.name]: Speedometer, [AddTask.name]: AddTask, - [TaskItemInfo.name]: TaskItemInfo, + [TaskDetail.name]: TaskDetail, [Dragger.name]: Dragger }, computed: { @@ -36,8 +42,11 @@ addTaskType: state => state.addTaskType }), ...mapState('task', { - taskItemInfoVisible: state => state.taskItemInfoVisible, - currentTaskItem: state => state.currentTaskItem + taskDetailVisible: state => state.taskDetailVisible, + currentTaskGid: state => state.currentTaskGid, + currentTaskItem: state => state.currentTaskItem, + currentTaskFiles: state => state.currentTaskFiles, + currentTaskPeers: state => state.currentTaskPeers }) }, methods: { diff --git a/src/renderer/components/Native/DynamicTray.vue b/src/renderer/components/Native/DynamicTray.vue index 5577f3cda..fdb4f1620 100644 --- a/src/renderer/components/Native/DynamicTray.vue +++ b/src/renderer/components/Native/DynamicTray.vue @@ -88,7 +88,6 @@ scale, iconKey } = this - console.log('currentTheme====>', theme, iconKey) const icon = await this.getIcon(iconKey) diff --git a/src/renderer/components/Native/EngineClient.vue b/src/renderer/components/Native/EngineClient.vue index b6d220cb6..dab1f53e8 100644 --- a/src/renderer/components/Native/EngineClient.vue +++ b/src/renderer/components/Native/EngineClient.vue @@ -10,7 +10,7 @@ getTaskFullPath, showItemInFolder } from '@/utils/native' - import { getTaskName } from '@shared/utils' + import { checkTaskIsBT, getTaskName } from '@shared/utils' export default { name: 'mo-engine-client', @@ -26,12 +26,17 @@ ...mapState('task', { messages: state => state.messages, seedingList: state => state.seedingList, - taskItemInfoVisible: state => state.taskItemInfoVisible, + taskDetailVisible: state => state.taskDetailVisible, + enabledFetchPeers: state => state.enabledFetchPeers, + currentTaskGid: state => state.currentTaskGid, currentTaskItem: state => state.currentTaskItem }), ...mapState('preference', { taskNotification: state => state.config.taskNotification - }) + }), + currentTaskIsBT () { + return checkTaskIsBT(this.currentTaskItem) + } }, watch: { speed (val) { @@ -58,7 +63,6 @@ this.$store.dispatch('task/fetchList') this.$store.dispatch('app/resetInterval') this.$store.dispatch('task/saveSession') - console.log('aria2 onDownloadStart', event) const [{ gid }] = event const { seedingList } = this if (seedingList.includes(gid)) { @@ -73,7 +77,6 @@ }) }, onDownloadPause (event) { - console.log('aria2 onDownloadPause') const [{ gid }] = event const { seedingList } = this if (seedingList.includes(gid)) { @@ -88,7 +91,6 @@ }) }, onDownloadStop (event) { - console.log('aria2 onDownloadStop') const [{ gid }] = event this.fetchTaskItem({ gid }) .then((task) => { @@ -116,7 +118,6 @@ }) }, onDownloadComplete (event) { - console.log('aria2 onDownloadComplete') this.$store.dispatch('task/fetchList') const [{ gid }] = event this.$store.dispatch('task/removeFromSeedingList', gid) @@ -127,7 +128,6 @@ }) }, onBtDownloadComplete (event) { - console.log('aria2 onBtDownloadComplete') this.$store.dispatch('task/fetchList') const [{ gid }] = event const { seedingList } = this @@ -219,8 +219,12 @@ this.$store.dispatch('app/fetchGlobalStat') this.$store.dispatch('task/fetchList') - if (this.taskItemInfoVisible && this.currentTaskItem) { - this.$store.dispatch('task/fetchItem', this.currentTaskItem.gid) + if (this.taskDetailVisible && this.currentTaskGid) { + if (this.currentTaskIsBT && this.enabledFetchPeers) { + this.$store.dispatch('task/fetchItemWithPeers', this.currentTaskGid) + } else { + this.$store.dispatch('task/fetchItem', this.currentTaskGid) + } } }, stopPolling () { diff --git a/src/renderer/components/Preference/Advanced.vue b/src/renderer/components/Preference/Advanced.vue index 33cc36b8c..7c6539a2b 100644 --- a/src/renderer/components/Preference/Advanced.vue +++ b/src/renderer/components/Preference/Advanced.vue @@ -563,7 +563,7 @@ submitForm (formName) { this.$refs[formName].validate((valid) => { if (!valid) { - console.log('[Motrix] preference form valid:', valid) + console.error('[Motrix] preference form valid:', valid) return false } diff --git a/src/renderer/components/Preference/Basic.vue b/src/renderer/components/Preference/Basic.vue index 8882f93e6..1d5702372 100644 --- a/src/renderer/components/Preference/Basic.vue +++ b/src/renderer/components/Preference/Basic.vue @@ -457,7 +457,7 @@ submitForm (formName) { this.$refs[formName].validate((valid) => { if (!valid) { - console.log('[Motrix] preference form valid:', valid) + console.error('[Motrix] preference form valid:', valid) return false } diff --git a/src/renderer/components/Task/Index.vue b/src/renderer/components/Task/Index.vue index 0f59df093..d2a6d2e25 100644 --- a/src/renderer/components/Task/Index.vue +++ b/src/renderer/components/Task/Index.vue @@ -171,35 +171,33 @@ return this.removeTaskRecordItem(task, taskName) }) }, - removeTaskItem (task, taskName) { - return this.$store.dispatch('task/removeTask', task) - .then(() => { - this.$msg.success(this.$t('task.delete-task-success', { + async removeTaskItem (task, taskName) { + try { + await this.$store.dispatch('task/removeTask', task) + this.$msg.success(this.$t('task.delete-task-success', { + taskName + })) + } catch ({ code }) { + if (code === 1) { + this.$msg.error(this.$t('task.delete-task-fail', { taskName })) - }) - .catch(({ code }) => { - if (code === 1) { - this.$msg.error(this.$t('task.delete-task-fail', { - taskName - })) - } - }) + } + } }, - removeTaskRecordItem (task, taskName) { - return this.$store.dispatch('task/removeTaskRecord', task) - .then(() => { - this.$msg.success(this.$t('task.remove-record-success', { + async removeTaskRecordItem (task, taskName) { + try { + await this.$store.dispatch('task/removeTaskRecord', task) + this.$msg.success(this.$t('task.remove-record-success', { + taskName + })) + } catch ({ code }) { + if (code === 1) { + this.$msg.error(this.$t('task.remove-record-fail', { taskName })) - }) - .catch(({ code }) => { - if (code === 1) { - this.$msg.error(this.$t('task.remove-record-fail', { - taskName - })) - } - }) + } + } }, removeTasks (taskList, isRemoveWithFiles = false) { const gids = taskList.map((task) => task.gid) @@ -380,7 +378,7 @@ }, handleShowTaskInfo (payload) { const { task } = payload - this.$store.dispatch('task/showTaskItemInfoDialog', task) + this.$store.dispatch('task/showTaskDetail', task) } }, created () { diff --git a/src/renderer/components/Task/SelectTorrent.vue b/src/renderer/components/Task/SelectTorrent.vue index c10e2d8ec..d9b221699 100644 --- a/src/renderer/components/Task/SelectTorrent.vue +++ b/src/renderer/components/Task/SelectTorrent.vue @@ -28,74 +28,28 @@ - + -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - {{ $t('task.selected-files-sum', { selectedFilesCount, selectedFilesTotalSize }) }} - - + diff --git a/src/renderer/components/Task/TaskItemActions.vue b/src/renderer/components/Task/TaskItemActions.vue index bb59f5667..bdecd0b9e 100644 --- a/src/renderer/components/Task/TaskItemActions.vue +++ b/src/renderer/components/Task/TaskItemActions.vue @@ -72,7 +72,10 @@ props: { mode: { type: String, - default: 'LIST' + default: 'LIST', + validator: function (value) { + return ['LIST', 'DETAIL'].indexOf(value) !== -1 + } }, task: { type: Object, @@ -101,10 +104,17 @@ } }, taskCommonActions () { - let result = is.renderer() ? ['FOLDER'] : [] - result = (this.mode === 'LIST') - ? [...result, 'LINK', 'INFO'] - : [...result, 'LINK'] + const { mode } = this + const result = is.renderer() ? ['FOLDER'] : [] + + switch (mode) { + case 'LIST': + result.push('LINK', 'INFO') + break + case 'DETAIL': + result.push('LINK') + break + } return result }, @@ -185,33 +195,36 @@ diff --git a/src/renderer/components/Task/TaskItemInfo.vue b/src/renderer/components/Task/TaskItemInfo.vue deleted file mode 100644 index c70d8c7ee..000000000 --- a/src/renderer/components/Task/TaskItemInfo.vue +++ /dev/null @@ -1,153 +0,0 @@ - - - - - diff --git a/src/renderer/components/Task/TaskStatus.vue b/src/renderer/components/Task/TaskStatus.vue new file mode 100644 index 000000000..60ee8a29b --- /dev/null +++ b/src/renderer/components/Task/TaskStatus.vue @@ -0,0 +1,45 @@ + + + diff --git a/src/renderer/components/TaskDetail/Index.vue b/src/renderer/components/TaskDetail/Index.vue new file mode 100644 index 000000000..a54c25487 --- /dev/null +++ b/src/renderer/components/TaskDetail/Index.vue @@ -0,0 +1,268 @@ + + + + + diff --git a/src/renderer/components/TaskDetail/TaskActivity.vue b/src/renderer/components/TaskDetail/TaskActivity.vue new file mode 100644 index 000000000..ec1be6bbb --- /dev/null +++ b/src/renderer/components/TaskDetail/TaskActivity.vue @@ -0,0 +1,217 @@ + + + + + diff --git a/src/renderer/components/TaskDetail/TaskFiles.vue b/src/renderer/components/TaskDetail/TaskFiles.vue new file mode 100644 index 000000000..b2a5e2422 --- /dev/null +++ b/src/renderer/components/TaskDetail/TaskFiles.vue @@ -0,0 +1,193 @@ + + + + + diff --git a/src/renderer/components/TaskDetail/TaskGeneral.vue b/src/renderer/components/TaskDetail/TaskGeneral.vue new file mode 100644 index 000000000..f0ced236e --- /dev/null +++ b/src/renderer/components/TaskDetail/TaskGeneral.vue @@ -0,0 +1,169 @@ + + + + + diff --git a/src/renderer/components/TaskDetail/TaskPeers.vue b/src/renderer/components/TaskDetail/TaskPeers.vue new file mode 100644 index 000000000..d71ac1def --- /dev/null +++ b/src/renderer/components/TaskDetail/TaskPeers.vue @@ -0,0 +1,76 @@ + + + diff --git a/src/renderer/components/TaskDetail/TaskTrackers.vue b/src/renderer/components/TaskDetail/TaskTrackers.vue new file mode 100644 index 000000000..83124aee4 --- /dev/null +++ b/src/renderer/components/TaskDetail/TaskTrackers.vue @@ -0,0 +1,80 @@ + + + + + diff --git a/src/renderer/components/TaskGraphic/Atom.vue b/src/renderer/components/TaskGraphic/Atom.vue new file mode 100644 index 000000000..fe34bab6b --- /dev/null +++ b/src/renderer/components/TaskGraphic/Atom.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/src/renderer/components/TaskGraphic/Index.vue b/src/renderer/components/TaskGraphic/Index.vue new file mode 100644 index 000000000..5a7edfafb --- /dev/null +++ b/src/renderer/components/TaskGraphic/Index.vue @@ -0,0 +1,127 @@ + + + diff --git a/src/renderer/components/Theme/Dark.scss b/src/renderer/components/Theme/Dark.scss index c66c9e157..a4a2de863 100644 --- a/src/renderer/components/Theme/Dark.scss +++ b/src/renderer/components/Theme/Dark.scss @@ -59,6 +59,7 @@ .form-actions { background: $--dk-form-actions-background; } + .panel { background-color: $--dk-panel-background; } @@ -98,13 +99,30 @@ .mo-speedometer { background-color: $--dk-speedometer-background; - border-color: #5f5f5f; + border-color: $--dk-speedometer-border-color; } .no-task { color: $--dk-no-task-color; } + .mo-table-wrapper { + border-color: $--dk-table-border-color; + } + + .graphic-box { + border-color: $--dk-task-detail-box-border; + background-color: $--dk-graphic-box-background; + } + + .graphic-atom-s1 { + fill: $--dk-graphic-atom-color-1; + } + + .form-static-value { + color: #e7e7e7; + } + /* Element UI -------------------------- */ .el-progress-bar__outer { @@ -390,4 +408,14 @@ } } } + + /* Divider */ + .el-divider { + background-color: #666; + } + .el-divider__text { + background-color: $--dk-panel-background; + color: #a7a7a7; + } + } diff --git a/src/renderer/components/Theme/Dark/Variables.scss b/src/renderer/components/Theme/Dark/Variables.scss index 54a432884..f1306a456 100644 --- a/src/renderer/components/Theme/Dark/Variables.scss +++ b/src/renderer/components/Theme/Dark/Variables.scss @@ -53,6 +53,7 @@ $--dk-task-item-action-color: #eee !default; $--dk-task-item-action-hover-color: #fff !default; $--dk-no-task-color: #aaa !default; $--dk-add-task-dialog-footer-background: #4a4a4a !default; +$--dk-task-detail-box-border: #565656 !default; /* Preference -------------------------- */ @@ -61,12 +62,17 @@ $--dk-preference-form-text-color: #dfdfdf !default; /* Speedometer -------------------------- */ $--dk-speedometer-background: #333 !default; -$--dk-speedometer-border-color: #ccc !default; +$--dk-speedometer-border-color: #5f5f5f !default; $--dk-speedometer-hover-border-color: #9b9b9b !default; $--dk-speedometer-primary-color: $--color-primary !default; $--dk-speedometer-stopped-color: #9b9b9b !default; $--dk-speedometer-text-color: #9b9b9b !default; +/* Task Graphic +-------------------------- */ +$--dk-graphic-box-background: #3f3f3f !default; +$--dk-graphic-atom-color-1: #161b22 !default; + /* Element UI -------------------------- */ $--dk-dialog-background: #343434 !default; diff --git a/src/renderer/components/Theme/Default.scss b/src/renderer/components/Theme/Default.scss index 3edf10c5c..0d6ffe76e 100644 --- a/src/renderer/components/Theme/Default.scss +++ b/src/renderer/components/Theme/Default.scss @@ -133,6 +133,10 @@ iframe { } } +.el-drawer__container { + outline: none; +} + /* App Main -------------------------- */ #app, @@ -250,6 +254,30 @@ iframe { background: $--form-actions-background; } +.mo-table-wrapper { + border: 1px solid $--table-border-color; + border-bottom: none; + overflow-x: hidden; + overflow-y: auto; + .el-table th { + padding: 2px 0; + } +} + +.graphic-box { + padding: 0.5rem; + margin-bottom: 1.5rem; + font-size: 0; + line-height: 0; + border: 1px solid $--task-detail-box-border; + border-radius: $--border-radius-base; +} + +.form-static-value { + word-break: break-all; + color: $--input-font-color; +} + @media only screen and (max-width:567px) { .hidden-xs-only { display:none!important diff --git a/src/renderer/components/Theme/Light/Variables.scss b/src/renderer/components/Theme/Light/Variables.scss index 3771eac82..bcfa9f832 100644 --- a/src/renderer/components/Theme/Light/Variables.scss +++ b/src/renderer/components/Theme/Light/Variables.scss @@ -54,6 +54,7 @@ $--task-item-action-color: #9B9B9B !default; $--task-item-action-hover-color: #fff !default; $--no-task-color: #eee !default; $--add-task-dialog-footer-background: #f5f5f5 !default; +$--task-detail-box-border: #ebeef5 !default; /* Preference -------------------------- */ @@ -68,6 +69,16 @@ $--speedometer-primary-color: $--color-primary !default; $--speedometer-stopped-color: #9b9b9b !default; $--speedometer-text-color: #9b9b9b !default; +/* Task Graphic +-------------------------- */ +$--graphic-box-background: transparent !default; +$--graphic-atom-outline-color: rgba(27, 31, 35, 0.06) !default; +$--graphic-atom-color-1: #ebedf0 !default; +$--graphic-atom-color-2: #9be9a8 !default; +$--graphic-atom-color-3: #40c463 !default; +$--graphic-atom-color-4: #30a14e !default; + /* Element UI -------------------------- */ $--dialog-background: #fff !default; +$--table-border-color: #ebeef5 !default; diff --git a/src/renderer/store/modules/task.js b/src/renderer/store/modules/task.js index 93cbc4f72..99ad39d25 100644 --- a/src/renderer/store/modules/task.js +++ b/src/renderer/store/modules/task.js @@ -1,11 +1,15 @@ import api from '@/api' -import { TASK_STATUS } from '@shared/constants' +import { EMPTY_STRING, TASK_STATUS } from '@shared/constants' import { checkTaskIsBT, intersection } from '@shared/utils' const state = { currentList: 'active', - taskItemInfoVisible: false, + taskDetailVisible: false, + currentTaskGid: EMPTY_STRING, + enabledFetchPeers: false, currentTaskItem: null, + currentTaskFiles: [], + currentTaskPeers: [], seedingList: [], taskList: [], selectedGidList: [] @@ -27,11 +31,23 @@ const mutations = { CHANGE_CURRENT_LIST (state, currentList) { state.currentList = currentList }, - CHANGE_TASK_ITEM_INFO_VISIBLE (state, visible) { - state.taskItemInfoVisible = visible + CHANGE_TASK_DETAIL_VISIBLE (state, visible) { + state.taskDetailVisible = visible + }, + UPDATE_CURRENT_TASK_GID (state, gid) { + state.currentTaskGid = gid + }, + UPDATE_ENABLED_FETCH_PEERS (state, enabled) { + state.enabledFetchPeers = enabled }, UPDATE_CURRENT_TASK_ITEM (state, task) { state.currentTaskItem = task + }, + UPDATE_CURRENT_TASK_FILES (state, files) { + state.currentTaskFiles = files + }, + UPDATE_CURRENT_TASK_PEERS (state, peers) { + state.currentTaskPeers = peers } } @@ -65,15 +81,36 @@ const actions = { dispatch('updateCurrentTaskItem', data) }) }, - showTaskItemInfoDialog ({ commit, dispatch }, task) { + fetchItemWithPeers ({ dispatch }, gid) { + return api.fetchTaskItemWithPeers({ gid }) + .then((data) => { + console.log('fetchItemWithPeers===>', data) + dispatch('updateCurrentTaskItem', data) + }) + }, + showTaskDetail ({ commit, dispatch }, task) { dispatch('updateCurrentTaskItem', task) - commit('CHANGE_TASK_ITEM_INFO_VISIBLE', true) + commit('UPDATE_CURRENT_TASK_GID', task.gid) + commit('CHANGE_TASK_DETAIL_VISIBLE', true) + }, + hideTaskDetail ({ commit }) { + commit('CHANGE_TASK_DETAIL_VISIBLE', false) }, - hideTaskItemInfoDialog ({ commit }) { - commit('CHANGE_TASK_ITEM_INFO_VISIBLE', false) + toggleEnabledFetchPeers ({ commit }, enabled) { + commit('UPDATE_ENABLED_FETCH_PEERS', enabled) }, updateCurrentTaskItem ({ commit }, task) { commit('UPDATE_CURRENT_TASK_ITEM', task) + if (task) { + commit('UPDATE_CURRENT_TASK_FILES', task.files) + commit('UPDATE_CURRENT_TASK_PEERS', task.peers) + } else { + commit('UPDATE_CURRENT_TASK_FILES', []) + commit('UPDATE_CURRENT_TASK_PEERS', []) + } + }, + updateCurrentTaskGid ({ commit }, gid) { + commit('UPDATE_CURRENT_TASK_GID', gid) }, addUri ({ dispatch }, data) { const { uris, outs, options } = data diff --git a/src/renderer/utils/native.js b/src/renderer/utils/native.js index 988ab2003..76d7b5d30 100644 --- a/src/renderer/utils/native.js +++ b/src/renderer/utils/native.js @@ -5,7 +5,7 @@ import { resolve } from 'path' import { Message } from 'element-ui' import { - getFileName, + getFileNameFromFile, isMagnetTask, getSystemMajorVersion } from '@shared/utils' @@ -36,18 +36,6 @@ export const openItem = async (fullPath) => { return result } -// export const openItem = (fullPath, { errorMsg }) = { -// if (!fullPath) { -// return -// } -// const result = await shell.openPath(fullPath) - -// if (!result && errorMsg) { -// Message.error(errorMsg) -// } -// return result -// } - export function getTaskFullPath (task) { const { dir, files, bittorrent } = task let result = resolve(dir) @@ -70,7 +58,7 @@ export function getTaskFullPath (task) { result = path } else { if (files && files.length === 1) { - fileName = getFileName(file) + fileName = getFileNameFromFile(file) if (fileName) { result = resolve(result, fileName) } @@ -101,7 +89,9 @@ export function moveTaskFilesToTrash (task) { access(path, constants.F_OK, (err) => { console.log(`[Motrix] ${path} ${err ? 'does not exist' : 'exists'}`) if (!err) { - deleteResult1 = shell.trashItem(path) + // Electron >= 12.x + // deleteResult1 = shell.trashItem(path) + deleteResult1 = shell.moveItemToTrash(path) } }) @@ -115,7 +105,9 @@ export function moveTaskFilesToTrash (task) { access(extraFilePath, constants.F_OK, (err) => { console.log(`[Motrix] ${extraFilePath} ${err ? 'does not exist' : 'exists'}`) if (!err) { - deleteResult2 = shell.trashItem(extraFilePath) + // Electron >= 12.x + // deleteResult2 = shell.trashItem(extraFilePath) + deleteResult2 = shell.moveItemToTrash(extraFilePath) } }) diff --git a/src/shared/colors.json b/src/shared/colors.json index c537af331..808d30f33 100644 --- a/src/shared/colors.json +++ b/src/shared/colors.json @@ -4,5 +4,6 @@ "paused": "#737373", "error": "#FF6157", "complete": "#2ACB42", - "removed": "#737373" + "removed": "#737373", + "seeding": "#2ACB42" } diff --git a/src/shared/constants.js b/src/shared/constants.js index 77d550eab..cfde85e34 100644 --- a/src/shared/constants.js +++ b/src/shared/constants.js @@ -29,6 +29,9 @@ export const TASK_STATUS = { export const ENGINE_RPC_HOST = '127.0.0.1' export const ENGINE_RPC_PORT = 16800 +export const UNKNOWN_PEERID = '%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00' +export const GRAPHIC = '░▒▓█' + /** * @see https://github.com/ngosang/trackerslist */ diff --git a/src/shared/locales/ar/task.js b/src/shared/locales/ar/task.js index f1b69d9d3..af46f9db6 100644 --- a/src/shared/locales/ar/task.js +++ b/src/shared/locales/ar/task.js @@ -14,6 +14,7 @@ export default { 'file-name': 'اسم الملف', 'file-extension': 'نوع الملف', 'file-size': 'حجم الملف', + 'file-completed-size': 'تم التنزيل', 'selected-files-sum': 'الملف المختار: {{selectedFilesCount}} ملف, الحجم الكلي {{selectedFilesTotalSize}}', 'task-name': 'اسم التحميل', 'task-out': 'إعادة تسمية', @@ -26,6 +27,27 @@ export default { 'task-referer': 'المرجع', 'task-cookie': 'الكوكيز', 'task-proxy': 'الخادم الوسيط', + 'task-error-info': 'خطأ', + 'task-piece': 'قطعة', + 'task-piece-length': 'حجم القطعة', + 'task-num-pieces': 'قطع', + 'task-bittorrent-info': 'معلومات التورنت', + 'task-info-hash': 'تجزئة', + 'task-bittorrent-creation-date': 'تاريخ الإنشاء', + 'task-bittorrent-comment': 'تعليق', + 'task-progress-info': 'تقدم', + 'task-status': 'حالة', + 'task-num-seeders': 'بزار', + 'task-connections': 'روابط', + 'task-file-size': 'بحجم', + 'task-download-speed': 'سرعة التنزيل', + 'task-upload-speed': 'سرعة التحميل', + 'task-download-length': 'تم التنزيل', + 'task-upload-length': 'تم الرفع', + 'task-ratio': 'نسبة', + 'task-peer-host': 'مضيف', + 'task-peer-ip': 'IP', + 'task-peer-client': 'عميل', 'navigate-to-downloading': 'الانتقال إلى التحميل', 'show-advanced-options': 'الخيارات المتقدمة', 'copyright-warning': 'تحذير حقوق الطبع والنشر', diff --git a/src/shared/locales/bg/app.js b/src/shared/locales/bg/app.js index 20fa81abe..effadd7d0 100644 --- a/src/shared/locales/bg/app.js +++ b/src/shared/locales/bg/app.js @@ -1,5 +1,5 @@ export default { - 'task-list': 'Списък със задачи', + 'task-list': 'Задачи', 'add-task': 'Добавяне на задача', 'about': 'О Motrix', 'preferences': 'Меню...', diff --git a/src/shared/locales/bg/preferences.js b/src/shared/locales/bg/preferences.js index 358b7297a..48ee88893 100644 --- a/src/shared/locales/bg/preferences.js +++ b/src/shared/locales/bg/preferences.js @@ -16,6 +16,12 @@ export default { 'transfer-speed-upload': 'лимит на откат', 'transfer-speed-download': 'лимит за изтегляне', 'transfer-speed-unlimited':'Unlimited', + 'bt-settings': 'BitTorrent', + 'bt-save-metadata': 'Запазете магнитната връзка като торент файл', + 'keep-seeding': 'Продължавайте да засявате, докато не го спрете ръчно', + 'seed-ratio': 'Съотношение на семената', + 'seed-time': 'Време на семената', + 'seed-time-unit': 'минути', 'task-manage':'мениджър на задачи', 'max-concurrent-downloads': 'Максимум активни задачи', 'max-connection-per-server': 'максимални връзки към сървъра', diff --git a/src/shared/locales/bg/task.js b/src/shared/locales/bg/task.js index 7f1120ac0..fdbc49d8d 100644 --- a/src/shared/locales/bg/task.js +++ b/src/shared/locales/bg/task.js @@ -13,7 +13,8 @@ export default { 'new-task-torrent-required': 'моля, изберете торент файл', 'file-name': 'Име на файл', 'file-extension':'тип файл', - 'file-size': 'файлов Розмер', + 'file-size': 'Размер', + 'file-completed-size': 'Изтеглено', 'selected-files-sum': 'избрано: {{selectedFilesCount}} файлове, общ размер {{selectedFilesTotalSize}}', 'task-name':'Име на изтегляне', 'task-out': 'Преименуване', @@ -26,6 +27,27 @@ export default { 'task-referer': 'препращане', 'task-cookie': 'Cookie', 'task-proxy': 'Proxy', + 'task-error-info': 'Грешка', + 'task-piece': 'Парче', + 'task-piece-length': 'Размер на парче', + 'task-num-pieces': 'Парчета', + 'task-bittorrent-info': 'Информация за торента', + 'task-info-hash': 'Хеш', + 'task-bittorrent-creation-date': 'Дата на създаване', + 'task-bittorrent-comment': 'Коментирайте', + 'task-progress-info': 'Напредък', + 'task-status': 'Състояние', + 'task-num-seeders': 'Сеялки', + 'task-connections': 'Връзки', + 'task-file-size': 'Размер', + 'task-download-speed': 'Скорост на сваляне', + 'task-upload-speed': 'Скорост на качване', + 'task-download-length': 'Изтеглено', + 'task-upload-length': 'Качено', + 'task-ratio': 'Съотношение', + 'task-peer-host': 'Водещ', + 'task-peer-ip': 'IP', + 'task-peer-client': 'Клиент', 'navigate-to-downloading': 'напред към изтегляне', 'show-advanced-options': 'Разширени опции', 'copyright-warning':'предупреждение за авторски права', diff --git a/src/shared/locales/ca/app.js b/src/shared/locales/ca/app.js index 1f36fe151..6dcb00976 100644 --- a/src/shared/locales/ca/app.js +++ b/src/shared/locales/ca/app.js @@ -1,5 +1,5 @@ export default { - 'task-list': 'Llista de tasques', + 'task-list': 'Tasques', 'add-task': 'Afegir tasca', 'about': 'Sobre Motrix', 'preferences': 'Preferències...', diff --git a/src/shared/locales/ca/preferences.js b/src/shared/locales/ca/preferences.js index 168d7f397..3a22bb766 100644 --- a/src/shared/locales/ca/preferences.js +++ b/src/shared/locales/ca/preferences.js @@ -16,6 +16,12 @@ export default { 'transfer-speed-upload': 'Límit de pujada', 'transfer-speed-download': 'Límit de baixada', 'transfer-speed-unlimited': 'Il·limitat', + 'bt-settings': 'BitTorrent', + 'bt-save-metadata': 'Deseu l\'enllaç magnet com a fitxer torrent', + 'keep-seeding': 'Seguiu sembrant fins aturar-lo manualment', + 'seed-ratio': 'Relació de llavors', + 'seed-time': 'Temps de llavors', + 'seed-time-unit': 'minuts', 'task-manage': 'Gestió de tasques', 'max-concurrent-downloads': 'Tasques màximes actives', 'max-connection-per-server': 'Connexions màximes per servidor', diff --git a/src/shared/locales/ca/task.js b/src/shared/locales/ca/task.js index 8828ef6d9..15e5b477f 100644 --- a/src/shared/locales/ca/task.js +++ b/src/shared/locales/ca/task.js @@ -11,9 +11,10 @@ export default { 'thunder-link-tips': 'Tip: És possible que els enllaços Thunder no es puguin descarregar després de la descodificació.', 'new-task-uris-required': 'Per favor, introdueix al menys una URL de recurs vàlida', 'new-task-torrent-required': 'Seleccioni un arxiu torrent', - 'file-name': 'Nom de l\'arxiu', - 'file-extension': 'Tipus d\'arxiu', - 'file-size': 'Mida de l\'arxiu', + 'file-name': 'Nom', + 'file-extension': 'Extensió', + 'file-size': 'Mida', + 'file-completed-size': 'Descarregat', 'selected-files-sum': 'Seleccionat: {{selectedFilesCount}} arxius, mida total: {{selectedFilesTotalSize}}', 'task-name': 'Nom de la tasca', 'task-out': 'Canviar nom', @@ -26,6 +27,27 @@ export default { 'task-referer': 'Referent', 'task-cookie': 'Cookie', 'task-proxy': 'Proxy', + 'task-error-info': 'Error', + 'task-piece': 'Peça', + 'task-piece-length': 'Mida de la peça', + 'task-num-pieces': 'Peces', + 'task-bittorrent-info': 'Informació del torrent', + 'task-info-hash': 'Hash', + 'task-bittorrent-creation-date': 'Data de creació', + 'task-bittorrent-comment': 'Comentari', + 'task-progress-info': 'Progrés, progressar', + 'task-status': 'Estat', + 'task-num-seeders': 'Sembradores', + 'task-connections': 'Connexions', + 'task-file-size': 'Mida', + 'task-download-speed': 'Velocitat de descàrrega', + 'task-upload-speed': 'Velocitat de pujada', + 'task-download-length': 'Descarregat', + 'task-upload-length': 'Carregat', + 'task-ratio': 'Relació', + 'task-peer-host': 'Amfitrió', + 'task-peer-ip': 'IP', + 'task-peer-client': 'Client', 'navigate-to-downloading': 'Anar a Descàrregues', 'show-advanced-options': 'Opcions avançades', 'copyright-warning': 'Advertència sobre drets d\'autor', diff --git a/src/shared/locales/de/app.js b/src/shared/locales/de/app.js index 45fb146c5..709c7b020 100644 --- a/src/shared/locales/de/app.js +++ b/src/shared/locales/de/app.js @@ -1,5 +1,5 @@ export default { - 'task-list': 'Aufgabenliste', + 'task-list': 'Aufgaben', 'add-task': 'Aufgabe hinzufügen', 'about': 'Über Motrix', 'preferences': 'Präferenzen...', diff --git a/src/shared/locales/de/preferences.js b/src/shared/locales/de/preferences.js index f959b3d0e..11cac25a6 100644 --- a/src/shared/locales/de/preferences.js +++ b/src/shared/locales/de/preferences.js @@ -16,6 +16,12 @@ export default { 'transfer-speed-upload': 'Upload-Limit', 'transfer-speed-download': 'Download-Limit', 'transfer-speed-unlimited': 'Unbegrenzt', + 'bt-settings': 'BitTorrent', + 'bt-save-metadata': 'Magnetlink als Torrent-Datei speichern', + 'keep-seeding': 'Setzen Sie die Aussaat fort, bis Sie sie manuell stoppen', + 'seed-ratio': 'Samenverhältnis', + 'seed-time': 'Startzeit', + 'seed-time-unit': 'Protokoll', 'task-manage': 'Aufgaben verwalten', 'max-concurrent-downloads': 'Maximal aktive Aufgaben', 'max-connection-per-server': 'Maximale Verbindungen pro Server', diff --git a/src/shared/locales/de/task.js b/src/shared/locales/de/task.js index 4224efd1a..ce28cacde 100644 --- a/src/shared/locales/de/task.js +++ b/src/shared/locales/de/task.js @@ -14,6 +14,7 @@ export default { 'file-name': 'Dateiname', 'file-extension': 'Dateityp', 'file-size': 'Dateigröße', + 'file-completed-size': 'Heruntergeladen', 'selected-files-sum': 'Ausgewählt: {{selectedFilesCount}} Dateien, insgesamt {{selectedFilesTotalSize}}', 'task-name': 'Aufgaben Name', 'task-out': 'Dateiname', @@ -26,6 +27,27 @@ export default { 'task-referer': 'Referer', 'task-cookie': 'Cookie', 'task-proxy': 'Proxy', + 'task-error-info': 'Error', + 'task-piece': 'Stück', + 'task-piece-length': 'Stückgröße', + 'task-num-pieces': 'Stücke', + 'task-bittorrent-info': 'Torrent Info', + 'task-info-hash': 'Hash', + 'task-bittorrent-creation-date': 'Erstellungsdatum', + 'task-bittorrent-comment': 'Kommentar', + 'task-progress-info': 'Fortschritt', + 'task-status': 'Status', + 'task-num-seeders': 'Sämaschinen', + 'task-connections': 'Verbindungen', + 'task-file-size': 'Größe', + 'task-download-speed': 'Download-Geschwindigkeit', + 'task-upload-speed': 'Upload-Geschwindigkeit', + 'task-download-length': 'Heruntergeladen', + 'task-upload-length': 'Hochgeladen', + 'task-ratio': 'Verhältnis', + 'task-peer-host': 'Gastgeber', + 'task-peer-ip': 'IP', + 'task-peer-client': 'Klient', 'navigate-to-downloading': 'Navigiere zu aktive Downloads', 'show-advanced-options': 'Erweiterte Optionen', 'copyright-warning': 'Copyright Warnung', diff --git a/src/shared/locales/el/app.js b/src/shared/locales/el/app.js index 0d66b9d37..a0a0a79c8 100644 --- a/src/shared/locales/el/app.js +++ b/src/shared/locales/el/app.js @@ -1,5 +1,5 @@ export default { - 'task-list': 'Λίστα Εργασιών', + 'task-list': 'Καθήκοντα', 'add-task': 'Προσθήκη Εργασίας', 'about': 'Σχετικά με το Motrix', 'preferences': 'Προτιμήσεις...', diff --git a/src/shared/locales/el/preferences.js b/src/shared/locales/el/preferences.js index 23c4da484..d0a70bb9a 100644 --- a/src/shared/locales/el/preferences.js +++ b/src/shared/locales/el/preferences.js @@ -16,6 +16,12 @@ export default { 'transfer-speed-upload': 'Όριο αποστολής', 'transfer-speed-download': 'Όριο λήψης', 'transfer-speed-unlimited': 'Χωρίς όριο', + 'bt-settings': 'BitTorrent', + 'bt-save-metadata': 'Αποθηκεύστε το σύνδεσμο μαγνήτη ως αρχείο torrent', + 'keep-seeding': 'Συνεχίστε να σπέρνετε μέχρι να το σταματήσετε χειροκίνητα', + 'seed-ratio': 'Αναλογία σπόρου', + 'seed-time': 'Χρόνος σπόρου', + 'seed-time-unit': 'λεπτά', 'task-manage': 'Διαχείριση εργασιών', 'max-concurrent-downloads': 'Μέγιστες ενεργές Εργασίες', 'max-connection-per-server': 'Μέγιστες συνδέσεις ανά Σέρβερ', diff --git a/src/shared/locales/el/task.js b/src/shared/locales/el/task.js index 8f8d84875..afc437a62 100644 --- a/src/shared/locales/el/task.js +++ b/src/shared/locales/el/task.js @@ -14,6 +14,7 @@ export default { 'file-name': 'Όνομα αρχείου', 'file-extension': 'Τύπος αρχείου', 'file-size': 'Μέγεθος αρχείου', + 'file-completed-size': 'Έγινε λήψη', 'selected-files-sum': 'Επιλεγμένα: {{selectedFilesCount}} αρχεία, συνολικό μέγεθος {{selectedFilesTotalSize}}', 'task-name': 'Όνομα εργασίας', 'task-out': 'Άλλο Όνομα', @@ -26,6 +27,27 @@ export default { 'task-referer': 'Referer', 'task-cookie': 'Cookie', 'task-proxy': 'Proxy', + 'task-error-info': 'Λάθος', + 'task-piece': 'Κομμάτι', + 'task-piece-length': 'Μέγεθος κομματιού', + 'task-num-pieces': 'Κομμάτια', + 'task-bittorrent-info': 'Πληροφορίες Torrent', + 'task-info-hash': 'Χασίσι', + 'task-bittorrent-creation-date': 'Ημερομηνία δημιουργίας', + 'task-bittorrent-comment': 'Σχόλιο', + 'task-progress-info': 'Πρόοδος', + 'task-status': 'Κατάσταση', + 'task-num-seeders': 'Σπόροι', + 'task-connections': 'Συνδέσεις', + 'task-file-size': 'Μέγεθος', + 'task-download-speed': 'Ταχύτητα μεταφόρτωσης', + 'task-upload-speed': 'Ταχύτητα μεταφόρτωσης', + 'task-download-length': 'Έγινε λήψη', + 'task-upload-length': 'Μεταφορτώθηκε', + 'task-ratio': 'Αναλογία', + 'task-peer-host': 'Πλήθος', + 'task-peer-ip': 'IP', + 'task-peer-client': 'Πελάτης', 'navigate-to-downloading': 'Πήγαινε στις λήψεις', 'show-advanced-options': 'Ρυθμίσεις για προχωρημένους', 'copyright-warning': 'Προειδοποίηση για Πνευματικά Δικαιώματα', diff --git a/src/shared/locales/en-US/app.js b/src/shared/locales/en-US/app.js index 8fd33d722..fb6ed5a15 100644 --- a/src/shared/locales/en-US/app.js +++ b/src/shared/locales/en-US/app.js @@ -1,5 +1,5 @@ export default { - 'task-list': 'Task List', + 'task-list': 'Tasks', 'add-task': 'Add Task', 'about': 'About Motrix', 'preferences': 'Preferences...', diff --git a/src/shared/locales/en-US/preferences.js b/src/shared/locales/en-US/preferences.js index 2545cd284..16120f61e 100644 --- a/src/shared/locales/en-US/preferences.js +++ b/src/shared/locales/en-US/preferences.js @@ -17,7 +17,7 @@ export default { 'transfer-speed-download': 'Download limit', 'transfer-speed-unlimited': 'Unlimited', 'bt-settings': 'BitTorrent', - 'bt-save-metadata': 'Save magnet link metadata as torrent file', + 'bt-save-metadata': 'Save magnet link as torrent file', 'keep-seeding': 'Keep seeding until stop it manually', 'seed-ratio': 'Seed Ratio', 'seed-time': 'Seed Time', diff --git a/src/shared/locales/en-US/task.js b/src/shared/locales/en-US/task.js index edb2405fd..05dc39379 100644 --- a/src/shared/locales/en-US/task.js +++ b/src/shared/locales/en-US/task.js @@ -11,9 +11,10 @@ export default { 'thunder-link-tips': 'Tip: Thunder links may not be downloadable after decoding', 'new-task-uris-required': 'Please enter at least one valid resource url', 'new-task-torrent-required': 'Please select a torrent file', - 'file-name': 'File Name', - 'file-extension': 'File Type', - 'file-size': 'File Size', + 'file-name': 'Name', + 'file-extension': 'Extension', + 'file-size': 'Size', + 'file-completed-size': 'Completed', 'selected-files-sum': 'Selected: {{selectedFilesCount}} files, total size {{selectedFilesTotalSize}}', 'task-name': 'Task Name', 'task-out': 'Rename', @@ -26,6 +27,27 @@ export default { 'task-referer': 'Referer', 'task-cookie': 'Cookie', 'task-proxy': 'Proxy', + 'task-error-info': 'Error', + 'task-piece': 'Piece', + 'task-piece-length': 'Piece Size', + 'task-num-pieces': 'Pieces', + 'task-bittorrent-info': 'Torrent Info', + 'task-info-hash': 'Hash', + 'task-bittorrent-creation-date': 'Creation Date', + 'task-bittorrent-comment': 'Comment', + 'task-progress-info': 'Progress', + 'task-status': 'Status', + 'task-num-seeders': 'Seeders', + 'task-connections': 'Connections', + 'task-file-size': 'Size', + 'task-download-speed': 'Download Speed', + 'task-upload-speed': 'Upload Speed', + 'task-download-length': 'Downloaded', + 'task-upload-length': 'Uploaded', + 'task-ratio': 'Ratio', + 'task-peer-host': 'Host', + 'task-peer-ip': 'IP', + 'task-peer-client': 'Client', 'navigate-to-downloading': 'Navigate to Downloading', 'show-advanced-options': 'Advanced Options', 'copyright-warning': 'Copyright Warning', @@ -78,6 +100,7 @@ export default { 'get-task-name': 'Getting task name...', 'remaining-prefix': 'Remaining', 'select-torrent': 'Drag torrent file here, or click to select', + 'task-detail-title': 'Task Details', 'task-info-dialog-title': '{{title}} Details', 'download-start-message': 'Started downloading {{taskName}}', 'download-pause-message': 'Paused downloading {{taskName}}', diff --git a/src/shared/locales/es/app.js b/src/shared/locales/es/app.js index 28c1b332d..daa049717 100644 --- a/src/shared/locales/es/app.js +++ b/src/shared/locales/es/app.js @@ -1,5 +1,5 @@ export default { - 'task-list': 'Lista de tareas', + 'task-list': 'Tareas', 'add-task': 'Añadir tareas', 'about': 'Acerca de Motrix', 'preferences': 'Preferencias...', diff --git a/src/shared/locales/es/preferences.js b/src/shared/locales/es/preferences.js index edbd44023..3db12a6f6 100644 --- a/src/shared/locales/es/preferences.js +++ b/src/shared/locales/es/preferences.js @@ -16,6 +16,12 @@ export default { 'transfer-speed-upload': 'Límite de subida', 'transfer-speed-download': 'Límite de bajada', 'transfer-speed-unlimited': 'Ilimitado', + 'bt-settings': 'BitTorrent', + 'bt-save-metadata': 'Guardar enlace magnético como archivo torrent', + 'keep-seeding': 'Siga sembrando hasta detenerlo manualmente', + 'seed-ratio': 'Proporción de semillas', + 'seed-time': 'Tiempo de semilla', + 'seed-time-unit': 'minutos', 'task-manage': 'Gestión de tareas', 'max-concurrent-downloads': 'Tareas máximas activas', 'max-connection-per-server': 'Conexiones máximas por servidor', diff --git a/src/shared/locales/es/task.js b/src/shared/locales/es/task.js index d9f90cb4b..e0fcbaa97 100644 --- a/src/shared/locales/es/task.js +++ b/src/shared/locales/es/task.js @@ -11,9 +11,10 @@ export default { 'thunder-link-tips': 'Tip: Es posible que los enlaces Thunder no se puedan descargar después de la decodificación.', 'new-task-uris-required': 'Por favor, introduzca al menos una url de recurso válida', 'new-task-torrent-required': 'Seleccione un archivo torrent', - 'file-name': 'Nombre del Archivo', - 'file-extension': 'Tipo de archivo', - 'file-size': 'Tamaño del archivo', + 'file-name': 'Nombre', + 'file-extension': 'Extensión', + 'file-size': 'Tamaño', + 'file-completed-size': 'Terminado', 'selected-files-sum': 'Seleccionado: {{selectedFilesCount}} files, total size {{selectedFilesTotalSize}}', 'task-name': 'Nombre de la tarea', 'task-out': 'Renombrar', @@ -26,6 +27,27 @@ export default { 'task-referer': 'Referente', 'task-cookie': 'Cookie', 'task-proxy': 'Proxy', + 'task-error-info': 'Error', + 'task-piece': 'Trozo', + 'task-piece-length': 'Tamaño de pieza', + 'task-num-pieces': 'Piezas', + 'task-bittorrent-info': 'Información de Torrent', + 'task-info-hash': 'Picadillo', + 'task-bittorrent-creation-date': 'Fecha de creación', + 'task-bittorrent-comment': 'Comentario', + 'task-progress-info': 'Progreso', + 'task-status': 'Estado', + 'task-num-seeders': 'Sembradoras', + 'task-connections': 'Conexiones', + 'task-file-size': 'Tamaño', + 'task-download-speed': 'Velocidad de Descarga', + 'task-upload-speed': 'Velocidad de subida', + 'task-download-length': 'Descargado', + 'task-upload-length': 'Subido', + 'task-ratio': 'Proporción', + 'task-peer-host': 'Anfitrión', + 'task-peer-ip': 'IP', + 'task-peer-client': 'Cliente', 'navigate-to-downloading': 'Navegar a Descargas', 'show-advanced-options': 'Opciones avanzadas', 'copyright-warning': 'Advertencia sobre derechos de autor', diff --git a/src/shared/locales/fa/app.js b/src/shared/locales/fa/app.js index 4593eb5a8..3a955cabf 100644 --- a/src/shared/locales/fa/app.js +++ b/src/shared/locales/fa/app.js @@ -1,5 +1,5 @@ export default { - 'task-list': 'لیست تسک‌ها', + 'task-list': 'وظایف', 'add-task': 'اضافه کردن تسک', 'about': 'درباره ماتریکس', 'preferences': 'تنظیمات دلخواه', diff --git a/src/shared/locales/fa/preferences.js b/src/shared/locales/fa/preferences.js index d148eb98a..d6c18a45a 100644 --- a/src/shared/locales/fa/preferences.js +++ b/src/shared/locales/fa/preferences.js @@ -16,6 +16,12 @@ export default { 'transfer-speed-upload': 'محدودیت آپلود', 'transfer-speed-download': 'محدودیت دانلود', 'transfer-speed-unlimited': 'نامحدود', + 'bt-settings': 'بیت تورنت', + 'bt-save-metadata': 'ذخیره لینک آهنربا به عنوان فایل تورنت', + 'keep-seeding': 'بذر را ادامه دهید تا آن را دستی قطع کنید', + 'seed-ratio': 'نسبت بذر', + 'seed-time': 'زمان بذر', + 'seed-time-unit': 'دقایق', 'task-manage': 'مدیریت تسک', 'max-concurrent-downloads': 'حداکثر تسک‌های فعال', 'max-connection-per-server': 'حداکثر اتصال‌ برای هر سرور', diff --git a/src/shared/locales/fa/task.js b/src/shared/locales/fa/task.js index 6f78cbcd8..dd4827f4f 100644 --- a/src/shared/locales/fa/task.js +++ b/src/shared/locales/fa/task.js @@ -14,6 +14,7 @@ export default { 'file-name': 'نام فایل', 'file-extension': 'امتداد', 'file-size': 'اندازه', + 'file-completed-size': 'بارگیری شد', 'selected-files-sum': 'انتخاب شده: {{selectedFilesCount}} فایلها، مجموع {{selectedFilesTotalSize}}', 'task-name': 'اسم تسک', 'task-out': 'تغییرنام', @@ -26,6 +27,27 @@ export default { 'task-referer': 'Referer', 'task-cookie': 'Cookie', 'task-proxy': 'پراکسی', + 'task-error-info': 'خطا', + 'task-piece': 'قطعه', + 'task-piece-length': 'اندازه قطعه', + 'task-num-pieces': 'قطعات', + 'task-bittorrent-info': 'اطلاعات تورنت', + 'task-info-hash': 'هاش', + 'task-bittorrent-creation-date': 'تاریخ ایجاد', + 'task-bittorrent-comment': 'اظهار نظر', + 'task-progress-info': 'پیش رفتن', + 'task-status': 'وضعیت', + 'task-num-seeders': 'بذرپاش', + 'task-connections': 'اتصالات', + 'task-file-size': 'اندازه', + 'task-download-speed': 'سرعت دانلود', + 'task-upload-speed': 'سرعت بارگذاری', + 'task-download-length': 'بارگیری شد', + 'task-upload-length': 'بارگذاری شد', + 'task-ratio': 'نسبت', + 'task-peer-host': 'میزبان', + 'task-peer-ip': 'IP', + 'task-peer-client': 'مشتری', 'navigate-to-downloading': 'برو به دانلودها', 'show-advanced-options': 'تنظیمات پیشرفته', 'copyright-warning': 'خطر کپی‌رایت', diff --git a/src/shared/locales/fr/app.js b/src/shared/locales/fr/app.js index b54605652..ed159473f 100644 --- a/src/shared/locales/fr/app.js +++ b/src/shared/locales/fr/app.js @@ -1,5 +1,5 @@ export default { - 'task-list': 'Liste des tâches', + 'task-list': 'Tâches', 'add-task': 'Ajouter une tâche', 'about': 'À Propos de Motrix', 'preferences': 'Préférences...', diff --git a/src/shared/locales/fr/preferences.js b/src/shared/locales/fr/preferences.js index 612b787ab..69cd2bb86 100644 --- a/src/shared/locales/fr/preferences.js +++ b/src/shared/locales/fr/preferences.js @@ -16,6 +16,12 @@ export default { 'transfer-speed-upload': 'Limite de téléversement', 'transfer-speed-download': 'Limite de téléchargement', 'transfer-speed-unlimited': 'Illimité', + 'bt-settings': 'BitTorrent', + 'bt-save-metadata': 'Enregistrer le lien de l\'aimant en tant que fichier torrent', + 'keep-seeding': 'Continuez à semer jusqu\'à ce que vous l\'arrêtiez manuellement', + 'seed-ratio': 'Ratio de semences', + 'seed-time': 'Temps de semence', + 'seed-time-unit': 'minutes', 'task-manage': 'Tâches', 'max-concurrent-downloads': 'Nombre de tâches active au maximum', 'max-connection-per-server': 'Nombre maximum de connexions par serveurs', diff --git a/src/shared/locales/fr/task.js b/src/shared/locales/fr/task.js index 1ccb78bed..e7778aafa 100644 --- a/src/shared/locales/fr/task.js +++ b/src/shared/locales/fr/task.js @@ -14,6 +14,7 @@ export default { 'file-name': 'Nom de fichier', 'file-extension': 'Ext', 'file-size': 'Taille', + 'file-completed-size': 'Téléchargé', 'selected-files-sum': 'Sélectionné: {{selectedFilesCount}} fichiers, total {{selectedFilesTotalSize}}', 'task-name': 'Nom de la tâche', 'task-out': 'Renommer', @@ -26,6 +27,27 @@ export default { 'task-referer': 'Référent', 'task-cookie': 'Cookie', 'task-proxy': 'Proxy', + 'task-error-info': 'Erreur', + 'task-piece': 'Pièce', + 'task-piece-length': 'Taille de la pièce', + 'task-num-pieces': 'Pièces', + 'task-bittorrent-info': 'Informations sur le torrent', + 'task-info-hash': 'Hacher', + 'task-bittorrent-creation-date': 'Date de création', + 'task-bittorrent-comment': 'Commenter', + 'task-progress-info': 'Le progrès', + 'task-status': 'Statut', + 'task-num-seeders': 'Semoirs', + 'task-connections': 'Connexions', + 'task-file-size': 'Taille', + 'task-download-speed': 'Vitesse de téléchargement', + 'task-upload-speed': 'Vitesse de téléchargement', + 'task-download-length': 'Téléchargé', + 'task-upload-length': 'Téléchargé', + 'task-ratio': 'Rapport', + 'task-peer-host': 'Hôte', + 'task-peer-ip': 'IP', + 'task-peer-client': 'Client', 'navigate-to-downloading': 'Aller au Téléchargement', 'show-advanced-options': 'Options Avancées', 'copyright-warning': 'Avertissement Copyright', diff --git a/src/shared/locales/hu/app.js b/src/shared/locales/hu/app.js index 2894863c9..bbbbd7f06 100644 --- a/src/shared/locales/hu/app.js +++ b/src/shared/locales/hu/app.js @@ -1,5 +1,5 @@ export default { - 'task-list': 'Feladat lista', + 'task-list': 'Feladatok', 'add-task': 'Feladat hozzáadasa', 'about': 'Motrix névjegye', 'preferences': 'Beálittasok...', diff --git a/src/shared/locales/hu/preferences.js b/src/shared/locales/hu/preferences.js index ec118c6eb..e6c7a3b19 100644 --- a/src/shared/locales/hu/preferences.js +++ b/src/shared/locales/hu/preferences.js @@ -16,6 +16,12 @@ export default { 'transfer-speed-upload': 'Feltöltés limit', 'transfer-speed-download': 'Letöltés limit', 'transfer-speed-unlimited': 'Végtelen', + 'bt-settings': 'BitTorrent', + 'bt-save-metadata': 'Mágneses link mentése torrent fájlként', + 'keep-seeding': 'Addig folytassa a vetéset, amíg manuálisan le nem állítja', + 'seed-ratio': 'Magarány', + 'seed-time': 'Seed Time', + 'seed-time-unit': 'percek', 'task-manage': 'Feladatok kezelése', 'max-concurrent-downloads': 'Maximum feladatok', 'max-connection-per-server': 'Maximum csatlakozás szerverenként', diff --git a/src/shared/locales/hu/task.js b/src/shared/locales/hu/task.js index f9af4c7f5..ccf6e5975 100644 --- a/src/shared/locales/hu/task.js +++ b/src/shared/locales/hu/task.js @@ -11,9 +11,10 @@ export default { 'thunder-link-tips': 'Tip: Thunder linkek nem letölthetöek decoding után', 'new-task-uris-required': 'Kérjük addjon meg egy valós eröforrás linket', 'new-task-torrent-required': 'Kérjük válasszon egy valós torrent fájlt', - 'file-name': 'Fájl név', - 'file-extension': 'Fájl tipus', - 'file-size': 'File méret', + 'file-name': 'Név', + 'file-extension': 'Kiterjesztés', + 'file-size': 'Méret', + 'file-completed-size': 'Letöltött', 'selected-files-sum': 'Kijelölve: {{selectedFilesCount}} fájl, teljes méret {{selectedFilesTotalSize}}', 'task-name': 'Feladat név', 'task-out': 'Átnevezés', @@ -26,6 +27,27 @@ export default { 'task-referer': 'Átíranyitó', 'task-cookie': 'Süti', 'task-proxy': 'Proxy', + 'task-error-info': 'Hiba', + 'task-piece': 'Darab', + 'task-piece-length': 'Darabméret', + 'task-num-pieces': 'Darabok', + 'task-bittorrent-info': 'Torrent információ', + 'task-info-hash': 'Hash', + 'task-bittorrent-creation-date': 'Létrehozás dátuma', + 'task-bittorrent-comment': 'Megjegyzés', + 'task-progress-info': 'Előrehalad', + 'task-status': 'Állapot', + 'task-num-seeders': 'Vetőgépek', + 'task-connections': 'Kapcsolatok', + 'task-file-size': 'Méret', + 'task-download-speed': 'Letöltési sebesség', + 'task-upload-speed': 'Feltöltési sebesség', + 'task-download-length': 'Letöltött', + 'task-upload-length': 'Feltöltve', + 'task-ratio': 'Hányados', + 'task-peer-host': 'Házigazda', + 'task-peer-ip': 'IP', + 'task-peer-client': 'Ügyfél', 'navigate-to-downloading': 'Navigálas a letöltéshez', 'show-advanced-options': 'Haladó beallitás', 'copyright-warning': 'Szerzöi jogi figyelmeztetés', diff --git a/src/shared/locales/id/app.js b/src/shared/locales/id/app.js index e0ac53104..0fb0d2041 100644 --- a/src/shared/locales/id/app.js +++ b/src/shared/locales/id/app.js @@ -1,5 +1,5 @@ export default { - 'task-list': 'Daftar Tugas', + 'task-list': 'Tugas', 'add-task': 'Tambah Tugas', 'about': 'Tentang Motrix', 'preferences': 'Preferensi...', diff --git a/src/shared/locales/id/preferences.js b/src/shared/locales/id/preferences.js index 537b96fd4..01201ff6d 100644 --- a/src/shared/locales/id/preferences.js +++ b/src/shared/locales/id/preferences.js @@ -16,6 +16,12 @@ export default { 'transfer-speed-upload': 'Limit Unggah', 'transfer-speed-download': 'Limit Unduh', 'transfer-speed-unlimited': 'Tak Terbatas', + 'bt-settings': 'BitTorrent', + 'bt-save-metadata': 'Simpan tautan magnet sebagai file torrent', + 'keep-seeding': 'Terus lakukan penyemaian sampai menghentikannya secara manual', + 'seed-ratio': 'Rasio Benih', + 'seed-time': 'Waktu Benih', + 'seed-time-unit': 'menit', 'task-manage': 'Pengelola Tugas', 'max-concurrent-downloads': 'Maksimal tugas aktif', 'max-connection-per-server': 'Maksimal koneksi per server', diff --git a/src/shared/locales/id/task.js b/src/shared/locales/id/task.js index 36413c4cf..3f15dd324 100644 --- a/src/shared/locales/id/task.js +++ b/src/shared/locales/id/task.js @@ -11,9 +11,10 @@ export default { 'thunder-link-tips': 'Tip: Thunder tautan mungkin tidak dapat diunduh setelah decoding', 'new-task-uris-required': 'Silakan masukkan setidaknya satu url yang valid', 'new-task-torrent-required': 'Silahkan pilih berkas torrent', - 'file-name': 'Nama Berkas', - 'file-extension': 'Tipe Berkas', - 'file-size': 'Ukuran Berkas', + 'file-name': 'Nama', + 'file-extension': 'Perpanjangan', + 'file-size': 'Ukuran', + 'file-completed-size': 'Ukuran domplet', 'selected-files-sum': 'Terpilih: {{selectedFilesCount}} berkas, total ukuran {{selectedFilesTotalSize}}', 'task-name': 'Nama Tugas', 'task-out': 'Ubah Nama', @@ -26,6 +27,27 @@ export default { 'task-referer': 'Referer', 'task-cookie': 'Cookie', 'task-proxy': 'Proxy', + 'task-error-info': 'Kesalahan', + 'task-piece': 'Bagian', + 'task-piece-length': 'Ukuran Potongan', + 'task-num-pieces': 'Potongan', + 'task-bittorrent-info': 'Info Torrent', + 'task-info-hash': 'Hash', + 'task-bittorrent-creation-date': 'Tanggal Pembuatan', + 'task-bittorrent-comment': 'Komentar', + 'task-progress-info': 'Kemajuan', + 'task-status': 'Status', + 'task-num-seeders': 'Seeders', + 'task-connections': 'Koneksi', + 'task-file-size': 'Ukuran', + 'task-download-speed': 'Kecepatan Download', + 'task-upload-speed': 'Kecepatan unggah', + 'task-download-length': 'Telah diunduh', + 'task-upload-length': 'Diupload', + 'task-ratio': 'Perbandingan', + 'task-peer-host': 'Tuan rumah', + 'task-peer-ip': 'AKU P', + 'task-peer-client': 'Klien', 'navigate-to-downloading': 'Beralih ke Unduhan', 'show-advanced-options': 'Setting Lanjutan', 'copyright-warning': 'Peringatan Hak Cipta', diff --git a/src/shared/locales/it/app.js b/src/shared/locales/it/app.js index 81a2f1614..8859bf65b 100644 --- a/src/shared/locales/it/app.js +++ b/src/shared/locales/it/app.js @@ -1,5 +1,5 @@ export default { - 'task-list': 'Elenco Attività', + 'task-list': 'Attività', 'add-task': 'Aggiungi Attività', 'about': 'A proposito di Motrix', 'preferences': 'Preferenze...', diff --git a/src/shared/locales/it/preferences.js b/src/shared/locales/it/preferences.js index a70272c80..a5deea0f9 100644 --- a/src/shared/locales/it/preferences.js +++ b/src/shared/locales/it/preferences.js @@ -16,6 +16,12 @@ export default { 'transfer-speed-upload': 'Limite di uplooad', 'transfer-speed-download': 'Limite di download', 'transfer-speed-unlimited': 'Illimitata', + 'bt-settings': 'BitTorrent', + 'bt-save-metadata': 'Salva magnet link come file torrent', + 'keep-seeding': 'Continua a seminare fino a interromperlo manualmente', + 'seed-ratio': 'Rapporto di semina', + 'seed-time': 'Tempo di semi', + 'seed-time-unit': 'minuti', 'task-manage': 'Gestione attività', 'max-concurrent-downloads': 'Massimo numero di attività eseguibili contemporaneamente', 'max-connection-per-server': 'Massimo numero di connessioni simultanee per server', diff --git a/src/shared/locales/it/task.js b/src/shared/locales/it/task.js index 1ccf3447a..e4360e86f 100644 --- a/src/shared/locales/it/task.js +++ b/src/shared/locales/it/task.js @@ -11,9 +11,10 @@ export default { 'thunder-link-tips': 'Nota: I Thunder links potrebbero non essere più scaricabili dopo il decoding', 'new-task-uris-required': 'Per favore, inserisci almeno un url risorsa valido', 'new-task-torrent-required': 'Per favore, inserisci un file torrent', - 'file-name': 'Nome File', - 'file-extension': 'Tipo File', - 'file-size': 'Dimensione File', + 'file-name': 'Nome', + 'file-extension': 'Estensione', + 'file-size': 'Dimensione', + 'file-completed-size': 'Completato', 'selected-files-sum': 'Selezionati: {{selectedFilesCount}} files, dimensione totale {{selectedFilesTotalSize}}', 'task-name': 'Nome attività', 'task-out': 'Rinomina', @@ -26,6 +27,27 @@ export default { 'task-referer': 'Referer', 'task-cookie': 'Cookie', 'task-proxy': 'Proxy', + 'task-error-info': 'Errore', + 'task-piece': 'Pezzo', + 'task-piece-length': 'Dimensione del pezzo', + 'task-num-pieces': 'Pezzi', + 'task-bittorrent-info': 'Informazioni sul torrent', + 'task-info-hash': 'Hash', + 'task-bittorrent-creation-date': 'Data di creazione', + 'task-bittorrent-comment': 'Commento', + 'task-progress-info': 'Progresso', + 'task-status': 'Stato', + 'task-num-seeders': 'Seminatrici', + 'task-connections': 'Connessioni', + 'task-file-size': 'Dimensione', + 'task-download-speed': 'Velocità di download', + 'task-upload-speed': 'Velocità di caricamento', + 'task-download-length': 'Scaricato', + 'task-upload-length': 'Caricato', + 'task-ratio': 'Rapporto', + 'task-peer-host': 'Ospite', + 'task-peer-ip': 'IP', + 'task-peer-client': 'Cliente', 'navigate-to-downloading': 'Naviga per scaricare', 'show-advanced-options': 'Opzioni avanzate', 'copyright-warning': 'Avviso sul Copyright', diff --git a/src/shared/locales/ja/preferences.js b/src/shared/locales/ja/preferences.js index 0aabee40f..d79144ad5 100644 --- a/src/shared/locales/ja/preferences.js +++ b/src/shared/locales/ja/preferences.js @@ -16,6 +16,12 @@ export default { 'transfer-speed-upload': 'アップロード制限', 'transfer-speed-download': 'ダウンロード制限', 'transfer-speed-unlimited': '無制限', + 'bt-settings': 'BitTorrent', + 'bt-save-metadata': 'マグネットリンクをトレントファイルとして保存', + 'keep-seeding': '手動で停止するまでシードを続けます', + 'seed-ratio': 'シード比率', + 'seed-time': 'シードタイム', + 'seed-time-unit': '分', 'task-manage': 'タスク管理', 'max-concurrent-downloads': '最大同時タスク数', 'max-connection-per-server': '最大サーバ接続数', diff --git a/src/shared/locales/ja/task.js b/src/shared/locales/ja/task.js index 2550dfc18..3ca5eb47c 100644 --- a/src/shared/locales/ja/task.js +++ b/src/shared/locales/ja/task.js @@ -14,6 +14,7 @@ export default { 'file-name': 'ファイル名', 'file-extension': '拡張子', 'file-size': 'サイズ', + 'file-completed-size': '完成サイズ', 'selected-files-sum': '選択済み:{{selectedFilesCount}}ファイル、合計{{selectedFilesTotalSize}}', 'task-name': 'タスク名', 'task-out': '名前を変更', @@ -25,6 +26,27 @@ export default { 'task-referer': 'リファラ', 'task-cookie': 'クッキー', 'task-proxy': 'プロキシ', + 'task-error-info': 'エラー', + 'task-piece': 'ピース', + 'task-piece-length': 'ピースサイズ', + 'task-num-pieces': 'ピース', + 'task-bittorrent-info': 'トレント情報', + 'task-info-hash': 'ハッシュ', + 'task-bittorrent-creation-date': '作成日', + 'task-bittorrent-comment': 'コメント', + 'task-progress-info': '進捗', + 'task-status': '状態', + 'task-num-seeders': 'シーダー', + 'task-connections': '接続', + 'task-file-size': 'サイズ', + 'task-download-speed': 'ダウンロード速度', + 'task-upload-speed': 'アップロードスピード', + 'task-download-length': 'ダウンロード済み', + 'task-upload-length': 'アップロード済み', + 'task-ratio': '播種率', + 'task-peer-host': 'ホスト', + 'task-peer-ip': 'IP', + 'task-peer-client': 'クライアント', 'navigate-to-downloading': 'タスク画面に進む', 'show-advanced-options': '詳細設定', 'copyright-warning': '著作権警告', diff --git a/src/shared/locales/ko/preferences.js b/src/shared/locales/ko/preferences.js index e605f821b..314fa0ebc 100644 --- a/src/shared/locales/ko/preferences.js +++ b/src/shared/locales/ko/preferences.js @@ -16,6 +16,12 @@ export default { 'transfer-speed-upload': '업로드 제한', 'transfer-speed-download': '다운로드 제한', 'transfer-speed-unlimited': '무제한', + 'bt-settings': 'BitTorrent', + 'bt-save-metadata': '토렌트 파일로 마그넷 링크 저장', + 'keep-seeding': '수동으로 멈출 때까지 계속 파종하십시오.', + 'seed-ratio': '종자 비율', + 'seed-time': '종자 시간', + 'seed-time-unit': '의사록', 'task-manage': '작업 관리', 'max-concurrent-downloads': '최대 활성 작업', 'max-connection-per-server': '서버당 최대 연결 수', diff --git a/src/shared/locales/ko/task.js b/src/shared/locales/ko/task.js index 54d866b4b..827adffbb 100644 --- a/src/shared/locales/ko/task.js +++ b/src/shared/locales/ko/task.js @@ -14,6 +14,7 @@ export default { 'file-name': '파일 이름', 'file-extension': '파일 확장자', 'file-size': '파일 크기', + 'file-completed-size': '완성 된 크기', 'selected-files-sum': '선택됨: {{selectedFilesCount}} 개의 파일, 총 {{selectedFilesTotalSize}}', 'task-name': '작업 이름', 'task-out': '이름 변경', @@ -26,6 +27,27 @@ export default { 'task-referer': '리퍼러', 'task-cookie': '쿠키', 'task-proxy': '프록시', + 'task-error-info': '오류', + 'task-piece': '조각', + 'task-piece-length': '조각 크기', + 'task-num-pieces': '조각', + 'task-bittorrent-info': '토렌트 정보', + 'task-info-hash': '해시시', + 'task-bittorrent-creation-date': '제작 일', + 'task-bittorrent-comment': '논평', + 'task-progress-info': '진행', + 'task-status': '상태', + 'task-num-seeders': '파종기', + 'task-connections': '사이', + 'task-file-size': '크기', + 'task-download-speed': '다운로드 속도', + 'task-upload-speed': '업로드 속도', + 'task-download-length': '다운로드 됨', + 'task-upload-length': '업로드 됨', + 'task-ratio': '비율', + 'task-peer-host': '주최자', + 'task-peer-ip': 'IP', + 'task-peer-client': '고객', 'navigate-to-downloading': '다운로드로 이동', 'show-advanced-options': '고급 옵션', 'copyright-warning': '저작권 경고', diff --git a/src/shared/locales/pl/app.js b/src/shared/locales/pl/app.js index 614beb74b..e8b9e7430 100644 --- a/src/shared/locales/pl/app.js +++ b/src/shared/locales/pl/app.js @@ -1,5 +1,5 @@ export default { - 'task-list': 'Lista zadań', + 'task-list': 'Zadania', 'add-task': 'Dodaj zadanie', 'about': 'O Motrix', 'preferences': 'Ustawienia...', diff --git a/src/shared/locales/pl/preferences.js b/src/shared/locales/pl/preferences.js index c874b3a4f..c26c308c5 100644 --- a/src/shared/locales/pl/preferences.js +++ b/src/shared/locales/pl/preferences.js @@ -16,6 +16,12 @@ export default { 'transfer-speed-upload': 'Limit prędkości przesyłania', 'transfer-speed-download': 'Limit prędkości pobierania', 'transfer-speed-unlimited': 'Nieograniczona', + 'bt-settings': 'BitTorrent', + 'bt-save-metadata': 'Zapisz link magnetyczny jako plik torrent', + 'keep-seeding': 'Kontynuuj wysiew aż do zatrzymania go ręcznie', + 'seed-ratio': 'Stosunek nasion', + 'seed-time': 'Czas siewu', + 'seed-time-unit': 'minuty', 'task-manage': 'Zarządzania zadaniami', 'max-concurrent-downloads': 'Maksymalna liczba aktywnych zadań', 'max-connection-per-server': 'Maksymalna liczba połączeń na serwer', diff --git a/src/shared/locales/pl/task.js b/src/shared/locales/pl/task.js index 7663c70ca..0a000045f 100644 --- a/src/shared/locales/pl/task.js +++ b/src/shared/locales/pl/task.js @@ -11,9 +11,10 @@ export default { 'thunder-link-tips': 'Porada: Linki Thunder mogą nie być możliwe do pobrania po zdekodowaniu', 'new-task-uris-required': 'Proszę wprowadzić przynajmniej jeden poprawny URL', 'new-task-torrent-required': 'Proszę wybrać plik torrent', - 'file-name': 'Nazwa pliku', - 'file-extension': 'Typ pliku', - 'file-size': 'Wielkość pliku', + 'file-name': 'Nazwa', + 'file-extension': 'Rozbudowa', + 'file-size': 'Rozmiar', + 'file-completed-size': 'Pobrano', 'selected-files-sum': 'Wybrano: {{selectedFilesCount}} plików, Wspólny rozmiar {{selectedFilesTotalSize}}', 'task-name': 'Nazwa zadania', 'task-out': 'Zmień nazwę', @@ -26,6 +27,27 @@ export default { 'task-referer': 'Referer', 'task-cookie': 'Cookie', 'task-proxy': 'Proxy', + 'task-error-info': 'Błąd', + 'task-piece': 'Kawałek', + 'task-piece-length': 'Rozmiar elementu', + 'task-num-pieces': 'Kawałki', + 'task-bittorrent-info': 'Informacje o torrentach', + 'task-info-hash': 'Haszysz', + 'task-bittorrent-creation-date': 'Data utworzenia', + 'task-bittorrent-comment': 'Komentarz', + 'task-progress-info': 'Postęp', + 'task-status': 'Status', + 'task-num-seeders': 'Siewniki', + 'task-connections': 'Znajomości', + 'task-file-size': 'Rozmiar', + 'task-download-speed': 'Prędkość pobierania', + 'task-upload-speed': 'Prędkość wysyłania', + 'task-download-length': 'Pobrano', + 'task-upload-length': 'Przesłane', + 'task-ratio': 'Stosunek', + 'task-peer-host': 'Gospodarz', + 'task-peer-ip': 'IP', + 'task-peer-client': 'Klient', 'navigate-to-downloading': 'Automatycznie uruchom pobieranie', 'show-advanced-options': 'Opcje zaawansowane', 'copyright-warning': 'Ostrzeżenie dt. praw autorskich', diff --git a/src/shared/locales/pt-BR/app.js b/src/shared/locales/pt-BR/app.js index 343d33aa3..b27b1f4ef 100644 --- a/src/shared/locales/pt-BR/app.js +++ b/src/shared/locales/pt-BR/app.js @@ -1,5 +1,5 @@ export default { - 'task-list': 'Lista de Tarefas', + 'task-list': 'Tarefas', 'add-task': 'Adicionar Tarefa', 'about': 'Sobre o Motrix', 'preferences': 'Preferências...', diff --git a/src/shared/locales/pt-BR/preferences.js b/src/shared/locales/pt-BR/preferences.js index 66613d58f..1ec8ecaeb 100644 --- a/src/shared/locales/pt-BR/preferences.js +++ b/src/shared/locales/pt-BR/preferences.js @@ -16,6 +16,12 @@ export default { 'transfer-speed-upload': 'limite de envio', 'transfer-speed-download': 'limite de transferência', 'transfer-speed-unlimited': 'Ilimitado', + 'bt-settings': 'BitTorrent', + 'bt-save-metadata': 'Salvar link magnético como arquivo torrent', + 'keep-seeding': 'Continue semeando até pará-lo manualmente', + 'seed-ratio': 'Proporção de sementes', + 'seed-time': 'Hora da Semente', + 'seed-time-unit': 'minutos', 'task-manage': 'Gerenciador de Tarefas', 'max-concurrent-downloads': 'Máximo de tarefas ativas', 'max-connection-per-server': 'Máximo de coneções por servidor', diff --git a/src/shared/locales/pt-BR/task.js b/src/shared/locales/pt-BR/task.js index 2311b0474..7f5535cbb 100644 --- a/src/shared/locales/pt-BR/task.js +++ b/src/shared/locales/pt-BR/task.js @@ -11,9 +11,10 @@ export default { 'thunder-link-tips': 'Dica: Thunder links não podem ser baixados após decodificados', 'new-task-uris-required': 'Por favor, insira pelo menos um URL de recurso válido', 'new-task-torrent-required': 'Por favor, selecione um arquivo torrent', - 'file-name': 'Nome do arquivo', + 'file-name': 'Nome', 'file-extension': 'Ext', 'file-size': 'Tamanho', + 'file-completed-size': 'Baixado', 'selected-files-sum': 'Selecionado: {{selectedFilesCount}} arquivos, total {{selectedFilesTotalSize}}', 'task-name': 'Nome da Tarefa', 'task-out': 'Renomear', @@ -26,6 +27,27 @@ export default { 'task-referer': 'Referer', 'task-cookie': 'Cookie', 'task-proxy': 'Proxy', + 'task-error-info': 'Erro', + 'task-piece': 'Artigo', + 'task-piece-length': 'Tamanho da peça', + 'task-num-pieces': 'Peças', + 'task-bittorrent-info': 'Torrent Info', + 'task-info-hash': 'Cerquilha', + 'task-bittorrent-creation-date': 'Data de criação', + 'task-bittorrent-comment': 'Comente', + 'task-progress-info': 'Progresso', + 'task-status': 'Status', + 'task-num-seeders': 'Semeadores', + 'task-connections': 'Conexões', + 'task-file-size': 'Tamanho', + 'task-download-speed': 'Velocidade de download', + 'task-upload-speed': 'Velocidade de upload', + 'task-download-length': 'Baixado', + 'task-upload-length': 'Carregado', + 'task-ratio': 'Razão', + 'task-peer-host': 'Hospedeiro', + 'task-peer-ip': 'IP', + 'task-peer-client': 'Cliente', 'navigate-to-downloading': 'Navegar para o Downloading', 'show-advanced-options': 'Opções Avançadas', 'copyright-warning': 'Aviso de Copyright', diff --git a/src/shared/locales/ro/app.js b/src/shared/locales/ro/app.js index f98c05eb1..9d7b625b3 100644 --- a/src/shared/locales/ro/app.js +++ b/src/shared/locales/ro/app.js @@ -1,5 +1,5 @@ export default { - 'task-list': 'Listă Sarcini', + 'task-list': 'Sarcini', 'add-task': 'Adaugă sarcină', 'about': 'Despre Motrix', 'preferences': 'Setări...', diff --git a/src/shared/locales/ro/preferences.js b/src/shared/locales/ro/preferences.js index 80fe063af..7dbcceb16 100644 --- a/src/shared/locales/ro/preferences.js +++ b/src/shared/locales/ro/preferences.js @@ -16,6 +16,12 @@ export default { 'transfer-speed-upload': 'Limită upload', 'transfer-speed-download': 'Limită download', 'transfer-speed-unlimited': 'Nelimitat', + 'bt-settings': 'BitTorrent', + 'bt-save-metadata': 'Salvați linkul magnet ca fișier torrent', + 'keep-seeding': 'Păstrați însămânțarea până când o opriți manual', + 'seed-ratio': 'Raportul semințelor', + 'seed-time': 'Timpul semințelor', + 'seed-time-unit': 'minute', 'task-manage': 'Managementul sarcinilor', 'max-concurrent-downloads': 'Sarcini active maxime', 'max-connection-per-server': 'Conexiuni maxime per server', diff --git a/src/shared/locales/ro/task.js b/src/shared/locales/ro/task.js index e9de6a3c4..40e1e9249 100644 --- a/src/shared/locales/ro/task.js +++ b/src/shared/locales/ro/task.js @@ -11,9 +11,10 @@ export default { 'thunder-link-tips': 'Sfat: Este posibil ca linkurile Thunder să nu poată fi descărcate după decodare', 'new-task-uris-required': 'Introduceți cel puțin o adresă URL validă', 'new-task-torrent-required': 'Vă rugăm să selectați un fișier torrent', - 'file-name': 'Nume fișier', - 'file-extension': 'Tip fișier', - 'file-size': 'Dimensiune fișier', + 'file-name': 'Nume', + 'file-extension': 'Extensie', + 'file-size': 'Dimensiune', + 'file-completed-size': 'Descărcat', 'selected-files-sum': 'Selectate: {{selectedFilesCount}} fișiere, dimensiune totală {{selectedFilesTotalSize}}', 'task-name': 'Nume sarcină', 'task-out': 'Redenumeşte', @@ -26,6 +27,27 @@ export default { 'task-referer': 'Referer', 'task-cookie': 'Cookie', 'task-proxy': 'Proxy', + 'task-error-info': 'Eroare', + 'task-piece': 'Bucată', + 'task-piece-length': 'Dimensiunea piesei', + 'task-num-pieces': 'Piese', + 'task-bittorrent-info': 'Informații despre torrent', + 'task-info-hash': 'Hash', + 'task-bittorrent-creation-date': 'Data crearii', + 'task-bittorrent-comment': 'cometariu', + 'task-progress-info': 'Progres', + 'task-status': 'stare', + 'task-num-seeders': 'Semănători', + 'task-connections': 'Conexiuni', + 'task-file-size': 'mărimea', + 'task-download-speed': 'Viteza de descărcare', + 'task-upload-speed': 'Viteza de upload', + 'task-download-length': 'Descărcat', + 'task-upload-length': 'Încărcat', + 'task-ratio': 'Raport', + 'task-peer-host': 'Gazdă', + 'task-peer-ip': 'IP', + 'task-peer-client': 'Client', 'navigate-to-downloading': 'Mergi la Descărcări', 'show-advanced-options': 'Opțiuni avansate', 'copyright-warning': 'Avertisment privind drepturile de autor', diff --git a/src/shared/locales/ru/app.js b/src/shared/locales/ru/app.js index 79853371f..f6fba688f 100644 --- a/src/shared/locales/ru/app.js +++ b/src/shared/locales/ru/app.js @@ -1,5 +1,5 @@ export default { - 'task-list': 'Список заданий', + 'task-list': 'Задачи', 'add-task': 'Добавить задание', 'about': 'О Motrix', 'preferences': 'Настройки...', diff --git a/src/shared/locales/ru/preferences.js b/src/shared/locales/ru/preferences.js index 0575e7cdf..911c43caa 100644 --- a/src/shared/locales/ru/preferences.js +++ b/src/shared/locales/ru/preferences.js @@ -16,6 +16,12 @@ export default { 'transfer-speed-upload': 'Лимит отдачи', 'transfer-speed-download': 'Лимит загрузки', 'transfer-speed-unlimited': 'Безлимитно', + 'bt-settings': 'BitTorrent', + 'bt-save-metadata': 'Сохранить магнитную ссылку как торрент-файл', + 'keep-seeding': 'Продолжайте посев, пока не остановите его вручную', + 'seed-ratio': 'Соотношение семян', + 'seed-time': 'Время посева', + 'seed-time-unit': 'минут', 'task-manage': 'Менеджер задач', 'max-concurrent-downloads': 'Максимум активных задач', 'max-connection-per-server': 'Максимум соединений на сервер', diff --git a/src/shared/locales/ru/task.js b/src/shared/locales/ru/task.js index 4b3af33eb..18688397b 100644 --- a/src/shared/locales/ru/task.js +++ b/src/shared/locales/ru/task.js @@ -13,7 +13,8 @@ export default { 'new-task-torrent-required': 'Пожалуйста, выберите torrent файл', 'file-name': 'Имя файла', 'file-extension': 'Тип файла', - 'file-size': 'Розмер файла', + 'file-size': 'Размер', + 'file-completed-size': 'Завершенный', 'selected-files-sum': 'Выбрано: {{selectedFilesCount}} файлов, общий размер {{selectedFilesTotalSize}}', 'task-name': 'Имя загрузки', 'task-out': 'Переименовать', @@ -26,6 +27,27 @@ export default { 'task-referer': 'Реферал', 'task-cookie': 'Cookie', 'task-proxy': 'Proxy', + 'task-error-info': 'Ошибка', + 'task-piece': 'Кусок', + 'task-piece-length': 'Размер куска', + 'task-num-pieces': 'Шт', + 'task-bittorrent-info': 'Информация о торрентах', + 'task-info-hash': 'Хеш', + 'task-bittorrent-creation-date': 'Дата создания', + 'task-bittorrent-comment': 'Комментарий', + 'task-progress-info': 'Прогресс', + 'task-status': 'Статус', + 'task-num-seeders': 'Сеялки', + 'task-connections': 'Подключения', + 'task-file-size': 'Размер', + 'task-download-speed': 'Скорость загрузки', + 'task-upload-speed': 'Скорость загрузки', + 'task-download-length': 'Скачано', + 'task-upload-length': 'Загружено', + 'task-ratio': 'Соотношение', + 'task-peer-host': 'Хозяин', + 'task-peer-ip': 'IP', + 'task-peer-client': 'Клиент', 'navigate-to-downloading': 'Перейти к загрузке', 'show-advanced-options': 'Расширенные опции', 'copyright-warning': 'Предупреждение об авторских правах', diff --git a/src/shared/locales/tr/app.js b/src/shared/locales/tr/app.js index eae74cdbf..49346bee0 100644 --- a/src/shared/locales/tr/app.js +++ b/src/shared/locales/tr/app.js @@ -1,5 +1,5 @@ export default { - 'task-list': 'Görev Listesi', + 'task-list': 'Görevler', 'add-task': 'Görev Ekle', 'about': 'Motrix Hakkında', 'preferences': 'Ayarlar...', diff --git a/src/shared/locales/tr/preferences.js b/src/shared/locales/tr/preferences.js index 05e644e02..ab288d657 100644 --- a/src/shared/locales/tr/preferences.js +++ b/src/shared/locales/tr/preferences.js @@ -16,6 +16,12 @@ export default { 'transfer-speed-upload': 'Yükleme limiti', 'transfer-speed-download': 'İndirme limiti', 'transfer-speed-unlimited': 'Sınırsız', + 'bt-settings': 'BitTorrent', + 'bt-save-metadata': 'Mıknatıs bağlantısını torrent dosyası olarak kaydedin', + 'keep-seeding': 'Manuel olarak durdurana kadar tohumlamaya devam edin', + 'seed-ratio': 'Tohum Oranı', + 'seed-time': 'Tohum Zamanı', + 'seed-time-unit': 'dakika', 'task-manage': 'Görev Yöneticisi', 'max-concurrent-downloads': 'Maksimum aktif görev', 'max-connection-per-server': 'Sunucu başına maksimum bağlantı', diff --git a/src/shared/locales/tr/task.js b/src/shared/locales/tr/task.js index 8dfb0b7d7..c8f651b13 100644 --- a/src/shared/locales/tr/task.js +++ b/src/shared/locales/tr/task.js @@ -14,6 +14,7 @@ export default { 'file-name': 'Dosya Adı', 'file-extension': 'uzantı', 'file-size': 'Boyut', + 'file-completed-size': 'İndirildi', 'selected-files-sum': 'Seçildi: {{selectedFilesCount}} dosya sayısı, total {{selectedFilesTotalSize}}', 'task-name': 'Görev Adı', 'task-out': 'Dosya Adı', @@ -26,6 +27,27 @@ export default { 'task-referer': 'Yönlendiren', 'task-cookie': 'Çerez', 'task-proxy': 'Proxy', + 'task-error-info': 'Hata', + 'task-piece': 'Parça', + 'task-piece-length': 'Parça Boyutu', + 'task-num-pieces': 'Adet', + 'task-bittorrent-info': 'Torrent Bilgisi', + 'task-info-hash': 'Hash', + 'task-bittorrent-creation-date': 'Oluşturulma tarihi', + 'task-bittorrent-comment': 'Yorum Yap', + 'task-progress-info': 'İlerleme', + 'task-status': 'Durum', + 'task-num-seeders': 'Ekme makineleri', + 'task-connections': 'Bağlantılar', + 'task-file-size': 'Boyut', + 'task-download-speed': 'İndirme hızı', + 'task-upload-speed': 'Yükleme hızı', + 'task-download-length': 'İndirildi', + 'task-upload-length': 'Yüklendi', + 'task-ratio': 'Oran', + 'task-peer-host': 'Ev sahibi', + 'task-peer-ip': 'IP', + 'task-peer-client': 'Müşteri', 'navigate-to-downloading': 'İndirilenlere git', 'show-advanced-options': 'Gelişmiş ayarlar', 'copyright-warning': 'Telif Uyarısı', diff --git a/src/shared/locales/uk/app.js b/src/shared/locales/uk/app.js index 38935ca75..c00372ddd 100644 --- a/src/shared/locales/uk/app.js +++ b/src/shared/locales/uk/app.js @@ -1,5 +1,5 @@ export default { - 'task-list': 'Список завдань', + 'task-list': 'Завдання', 'add-task': 'Додати завдання', 'about': 'Про Motrix', 'preferences': 'Налаштування...', diff --git a/src/shared/locales/uk/preferences.js b/src/shared/locales/uk/preferences.js index 27dbafa34..110c9f486 100644 --- a/src/shared/locales/uk/preferences.js +++ b/src/shared/locales/uk/preferences.js @@ -16,6 +16,12 @@ export default { 'transfer-speed-upload': 'Ліміт вивантаження', 'transfer-speed-download': 'Ліміт завантаження', 'transfer-speed-unlimited': 'Безлімітно', + 'bt-settings': 'BitTorrent', + 'bt-save-metadata': 'Зберегти магнітне посилання як торрент-файл', + 'keep-seeding': 'Продовжуйте висівати, поки не зупините його вручну', + 'seed-ratio': 'Співвідношення насіння', + 'seed-time': 'Час насіння', + 'seed-time-unit': 'хвилин', 'task-manage': 'Менеджер завдань', 'max-concurrent-downloads': 'Максимум активних завдань', 'max-connection-per-server': 'Максимум з\'єднання на сервер', diff --git a/src/shared/locales/uk/task.js b/src/shared/locales/uk/task.js index 99841a099..c299689fc 100644 --- a/src/shared/locales/uk/task.js +++ b/src/shared/locales/uk/task.js @@ -13,7 +13,8 @@ export default { 'new-task-torrent-required': 'Будь ласка оберіть torrent файл', 'file-name': 'Ім\'я файлу', 'file-extension': 'Тип файлу', - 'file-size': 'Розмір файлу', + 'file-size': 'Розмір', + 'file-completed-size': 'Завершений', 'selected-files-sum': 'Обрано: {{selectedFilesCount}} файлів, загальний розмір {{selectedFilesTotalSize}}', 'task-name': 'Ім\'я завдання', 'task-out': 'Перейменувати', @@ -26,6 +27,27 @@ export default { 'task-referer': 'Реферал', 'task-cookie': 'Cookie', 'task-proxy': 'Proxy', + 'task-error-info': 'Помилка', + 'task-piece': 'Шматок', + 'task-piece-length': 'Розмір шматка', + 'task-num-pieces': 'Шматочки', + 'task-bittorrent-info': 'Інформація про торрент', + 'task-info-hash': 'Хеш', + 'task-bittorrent-creation-date': 'Дата створення', + 'task-bittorrent-comment': 'Прокоментуйте', + 'task-progress-info': 'Прогрес', + 'task-status': 'Статус', + 'task-num-seeders': 'Сівалки', + 'task-connections': 'Зв\'язки', + 'task-file-size': 'Розмір', + 'task-download-speed': 'Швидкість завантаження', + 'task-upload-speed': 'Швидкість завантаження', + 'task-download-length': 'Завантажено', + 'task-upload-length': 'Завантажено', + 'task-ratio': 'Співвідношення', + 'task-peer-host': 'Ведучий', + 'task-peer-ip': 'IP', + 'task-peer-client': 'Клієнт', 'navigate-to-downloading': 'Перейти до завантаження', 'show-advanced-options': 'Розширенні опції', 'copyright-warning': 'Попередження про авторські права', diff --git a/src/shared/locales/vi/preferences.js b/src/shared/locales/vi/preferences.js index e6943d807..eb6603a5c 100644 --- a/src/shared/locales/vi/preferences.js +++ b/src/shared/locales/vi/preferences.js @@ -16,6 +16,12 @@ export default { 'transfer-speed-upload': 'Giới hạn Tải lên', 'transfer-speed-download': 'Giới hạn Tải về', 'transfer-speed-unlimited': 'Không giới hạn', + 'bt-settings': 'BitTorrent', + 'bt-save-metadata': 'Lưu liên kết nam châm dưới dạng tệp torrent', + 'keep-seeding': 'Tiếp tục gieo hạt cho đến khi dừng lại theo cách thủ công', + 'seed-ratio': 'Tỷ lệ hạt giống', + 'seed-time': 'Thời gian gieo hạt', + 'seed-time-unit': 'phút', 'task-manage': 'Quản lý Tác vụ', 'max-concurrent-downloads': 'Số tác vụ đang hoạt động tối đa', 'max-connection-per-server': 'Số kết nối tối đa trên mỗi máy chủ', diff --git a/src/shared/locales/vi/task.js b/src/shared/locales/vi/task.js index 1e3bf8c55..7cd079736 100644 --- a/src/shared/locales/vi/task.js +++ b/src/shared/locales/vi/task.js @@ -14,6 +14,7 @@ export default { 'file-name': 'Tên tập tin', 'file-extension': 'Loại tập tin', 'file-size': 'Kích thước tập tin', + 'file-completed-size': 'Đã hoàn thành', 'selected-files-sum': 'Đã lựa chọn: {{selectedFilesCount}} tập tin, tổng kích thước {{selectedFilesTotalSize}}', 'task-name': 'Tên Tác vụ', 'task-out': 'Đổi tên', @@ -26,6 +27,27 @@ export default { 'task-referer': 'Referer', 'task-cookie': 'Cookie', 'task-proxy': 'Proxy', + 'task-error-info': 'lỗi', + 'task-piece': 'Cái', + 'task-piece-length': 'Kích thước mảnh', + 'task-num-pieces': 'Miếng', + 'task-bittorrent-info': 'Thông tin Torrent', + 'task-info-hash': 'Băm', + 'task-bittorrent-creation-date': 'Ngày thành lập', + 'task-bittorrent-comment': 'Bình luận', + 'task-progress-info': 'Phát triển', + 'task-status': 'Trạng thái', + 'task-num-seeders': 'Máy gieo hạt', + 'task-connections': 'Kết nối', + 'task-file-size': 'Kích thước', + 'task-download-speed': 'Tốc độ tải về', + 'task-upload-speed': 'Tốc độ tải lên', + 'task-download-length': 'Đã tải xuống', + 'task-upload-length': 'Đã tải lên', + 'task-ratio': 'Tỉ lệ', + 'task-peer-host': 'Tổ chức', + 'task-peer-ip': 'IP', + 'task-peer-client': 'Khách hàng', 'navigate-to-downloading': 'Điều hướng tải xuống', 'show-advanced-options': 'Lựa chọn Nâng cao', 'copyright-warning': 'Cảnh báo Bản quyền', diff --git a/src/shared/locales/zh-CN/task.js b/src/shared/locales/zh-CN/task.js index 4dd9f5323..fedc1ee2c 100644 --- a/src/shared/locales/zh-CN/task.js +++ b/src/shared/locales/zh-CN/task.js @@ -12,10 +12,11 @@ export default { 'new-task-uris-required': '请至少输入一个有效的下载地址', 'new-task-torrent-required': '请先选择种子文件', 'file-name': '文件名', - 'file-extension': '类型', + 'file-extension': '扩展名', 'file-size': '大小', + 'file-completed-size': '已完成', 'selected-files-sum': '已选:{{selectedFilesCount}}个文件,共 {{selectedFilesTotalSize}}', - 'task-name': '任务名', + 'task-name': '任务名称', 'task-out': '重命名', 'task-out-tips': '选填', 'task-split': '分片数', @@ -25,6 +26,27 @@ export default { 'task-referer': 'Referer', 'task-cookie': 'Cookie', 'task-proxy': '代理', + 'task-error-info': '错误信息', + 'task-piece': '分片', + 'task-piece-length': '分片大小', + 'task-num-pieces': '分片数量', + 'task-bittorrent-info': '种子信息', + 'task-info-hash': 'Hash', + 'task-bittorrent-creation-date': '发布时间', + 'task-bittorrent-comment': '备注', + 'task-progress-info': '任务进度', + 'task-status': '任务状态', + 'task-num-seeders': '种子数', + 'task-connections': '连接数', + 'task-file-size': '文件大小', + 'task-download-speed': '下载速度', + 'task-upload-speed': '上传速度', + 'task-download-length': '已下载', + 'task-upload-length': '已上传', + 'task-ratio': '分享率', + 'task-peer-host': '服务器', + 'task-peer-ip': 'IP', + 'task-peer-client': '客户端', 'navigate-to-downloading': '跳转到下载页面', 'show-advanced-options': '高级选项', 'copyright-warning': '版权提醒', @@ -78,6 +100,7 @@ export default { 'get-task-name': '获取任务名中...', 'remaining-prefix': '剩余', 'select-torrent': '将种子拖到此处,或点击选择', + 'task-detail-title': '任务详情', 'task-info-dialog-title': '{{title}} 详情', 'download-start-message': '开始下载 {{taskName}}', 'download-pause-message': '暂停下载 {{taskName}}', diff --git a/src/shared/locales/zh-TW/task.js b/src/shared/locales/zh-TW/task.js index b59b2665e..853319104 100644 --- a/src/shared/locales/zh-TW/task.js +++ b/src/shared/locales/zh-TW/task.js @@ -14,6 +14,7 @@ export default { 'file-name': '文件名', 'file-extension': '擴展名', 'file-size': '大小', + 'file-completed-size': '已下載', 'selected-files-sum': '選中:{{selectedFilesCount}}個文件,總計 {{selectedFilesTotalSize}}', 'task-name': '任務名稱', 'task-out': '重新命名', @@ -25,6 +26,27 @@ export default { 'task-referer': 'Referer', 'task-cookie': 'Cookie', 'task-proxy': '代理伺服器', + 'task-error-info': '錯誤信息', + 'task-piece': '分片', + 'task-piece-length': '分片大小', + 'task-num-pieces': '分片數量', + 'task-bittorrent-info': '種子信息', + 'task-info-hash': 'Hash', + 'task-bittorrent-creation-date': '發佈時間', + 'task-bittorrent-comment': '備註', + 'task-progress-info': '任務進度', + 'task-status': '任務狀態', + 'task-num-seeders': '種子數', + 'task-connections': '連接數', + 'task-file-size': '文件大小', + 'task-download-speed': '下載速度', + 'task-upload-speed': '上傳速度', + 'task-download-length': '已下載', + 'task-upload-length': '已上傳', + 'task-ratio': '分享率', + 'task-peer-host': '伺服器', + 'task-peer-ip': 'IP', + 'task-peer-client': '客戶端', 'navigate-to-downloading': '前往下載頁面', 'show-advanced-options': '進階選項', 'copyright-warning': '版權警告', @@ -79,6 +101,8 @@ export default { 'remaining-prefix': '剩下', 'select-torrent': '將種子拖曳至此,或點選來選取', 'task-info-dialog-title': '{{title}} 詳細資訊', + 'task-detail-title': '任務詳細資訊', + 'task-info-dialog-title': '{{title}} 詳細資訊', 'download-start-message': '開始下載 {{taskName}}', 'download-pause-message': '暫停下載 {{taskName}}', 'download-stop-message': '{{taskName}} 下載中止', diff --git a/src/shared/utils/index.js b/src/shared/utils/index.js index c38cb4833..c5ebb0e34 100644 --- a/src/shared/utils/index.js +++ b/src/shared/utils/index.js @@ -11,9 +11,10 @@ import { parseInt, pick } from 'lodash' +import bitTorrentPeerId from 'bittorrent-peerid' import { userKeys, systemKeys, needRestartKeys } from '@shared/configKeys' -import { APP_THEME, ENGINE_RPC_HOST } from '@shared/constants' +import { APP_THEME, ENGINE_RPC_HOST, GRAPHIC, UNKNOWN_PEERID } from '@shared/constants' export function bytesToSize (bytes) { const b = parseInt(bytes, 10) @@ -24,6 +25,49 @@ export function bytesToSize (bytes) { return `${(b / (1024 ** i)).toFixed(1)} ${sizes[i]}` } +export function bitfieldToPercent (text) { + const len = text.length - 1 + let p + let one = 0 + for (let i = 0; i < len; i++) { + p = parseInt(text[i], 16) + for (let j = 0; j < 4; j++) { + one += (p & 1) + p >>= 1 + } + } + return Math.floor(one / (4 * len) * 100).toString() +} + +export function bitfieldToGraphic (text) { + const len = text.length + let result = '' + for (let i = 0; i < len; i++) { + result += GRAPHIC[Math.floor(parseInt(text[i], 16) / 4)] + ' ' + } + return result +} + +export function peerIdParser (str) { + str = unescape(str) + const buffer = Buffer.from(str, 'binary') + + if (buffer === UNKNOWN_PEERID) { + return 'unknown' + } + let parsed = {} + try { + parsed = bitTorrentPeerId(buffer) + } catch (e) { + console.log('peerIdParser.fail', e) + } + + const result = parsed.version + ? `${parsed.client} v${parsed.version}` + : parsed.client + return result +} + export function calcProgress (totalLength, completedLength) { const total = parseInt(totalLength, 10) const completed = parseInt(completedLength, 10) @@ -35,6 +79,18 @@ export function calcProgress (totalLength, completedLength) { return result } +export function calcRatio (totalLength, uploadLength) { + const total = parseInt(totalLength, 10) + const upload = parseInt(uploadLength, 10) + if (total === 0 || upload === 0) { + return 0 + } + + const percentage = upload / total + const result = parseFloat(percentage.toFixed(4)) + return result +} + export function timeRemaining (totalLength, completedLength, downloadSpeed) { const remainingLength = totalLength - completedLength return Math.ceil(remainingLength / downloadSpeed) @@ -85,6 +141,25 @@ export function timeFormat (seconds, { prefix = '', suffix = '', i18n }) { return result ? `${prefix} ${result} ${suffix}` : result } +export function localeDateTimeFormat (timestamp, locale) { + if (!timestamp) { + return '' + } + + if (`${timestamp}`.length === 10) { + timestamp *= 1000 + } + const date = new Date(timestamp) + return date.toLocaleDateString(locale, { + year: 'numeric', + month: 'long', + day: 'numeric', + hour: 'numeric', + minute: 'numeric', + second: 'numeric' + }) +} + export function ellipsis (str = '', maxLen = 64) { const len = str.length let result = str @@ -117,14 +192,14 @@ export function getTaskName (task, options = {}) { if (bittorrent && bittorrent.info && bittorrent.info.name) { result = ellipsis(bittorrent.info.name, maxLen) } else if (total === 1) { - result = getFileName(files[0]) + result = getFileNameFromFile(files[0]) result = ellipsis(result, maxLen) } return result } -export function getFileName (file) { +export function getFileNameFromFile (file) { if (!file) { return '' } @@ -153,11 +228,11 @@ export function checkTaskIsSeeder (task) { return !!bittorrent && seeder === 'true' } -export function getTaskUri (task, btTracker = []) { +export function getTaskUri (task, withTracker = false) { const { files } = task let result = '' if (checkTaskIsBT(task)) { - result = buildMagnetLink(task, btTracker) + result = buildMagnetLink(task, withTracker) return result } @@ -169,10 +244,9 @@ export function getTaskUri (task, btTracker = []) { return result } -export function buildMagnetLink (task, btTracker = []) { +export function buildMagnetLink (task, withTracker = false, btTracker = []) { const { bittorrent, infoHash } = task - const { announceList, info } = bittorrent - const trackers = difference(announceList, btTracker) + const { info } = bittorrent const params = [ `magnet:?xt=urn:btih:${infoHash}` @@ -181,9 +255,12 @@ export function buildMagnetLink (task, btTracker = []) { params.push(`dn=${encodeURI(info.name)}`) } - trackers.forEach((tracker) => { - params.push(`tr=${encodeURI(tracker)}`) - }) + if (withTracker) { + const trackers = difference(bittorrent.announceList, btTracker) + trackers.forEach((tracker) => { + params.push(`tr=${encodeURI(tracker)}`) + }) + } const result = params.join('&') @@ -201,7 +278,7 @@ export function checkTaskTitleIsEmpty (task) { return result === '' } -export function checkTaskIsBT (task) { +export function checkTaskIsBT (task = {}) { const { bittorrent } = task return !!bittorrent } @@ -489,6 +566,11 @@ export function listTorrentFiles (files) { return result } +export function getFileName (fullPath) { + // eslint-disable-next-line + return fullPath.replace(/^.*[\\\/]/, '') +} + export function getFileExtension (filename) { return filename.slice((filename.lastIndexOf('.') - 1 >>> 0) + 2) }