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 @@
-
+
-
-
-
-
-
- {{ scope.row.name }}
-
-
- {{ scope.row.extension | removeExtensionDot }}
-
-
- {{ scope.row.length | bytesToSize }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $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 @@
-
-
-
- {{ taskFullName }}
-
-
-
-
-
-
-
-
-
-
-
-
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 @@
+
+
+ {{ status && status.toUpperCase() }}
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+
+ {{ task.completedLength | bytesToSize }}
+ / {{ task.totalLength | bytesToSize }}
+
+ {{
+ remaining | timeFormat({
+ prefix: $t('task.remaining-prefix'),
+ i18n: {
+ 'gt1d': $t('app.gt1d'),
+ 'hour': $t('app.hour'),
+ 'minute': $t('app.minute'),
+ 'second': $t('app.second')
+ }
+ })
+ }}
+
+
+
+
+
+ {{ task.numSeeders }}
+
+
+
+
+ {{ task.connections }}
+
+
+
+
+ {{ task.downloadSpeed | bytesToSize }}/s
+
+
+
+
+ {{ task.uploadSpeed | bytesToSize }}/s
+
+
+
+
+ {{ task.uploadLength | bytesToSize }}
+
+
+
+
+ {{ ratio }}
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+ {{ scope.row.name }}
+
+
+ {{ scope.row.extension | removeExtensionDot }}
+
+
+ {{ scope.row.length | bytesToSize }}
+
+
+ {{ scope.row.completedLength | bytesToSize }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('task.selected-files-sum', { selectedFilesCount, selectedFilesTotalSize }) }}
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+ {{ taskFullName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ task.errorCode }} {{ task.errorMessage }}
+
+
+
+
+
+ {{ $t('task.task-bittorrent-info') }}
+
+
+
+
+ {{ task.infoHash }}
+
+
+
+
+
+
+
+ {{ task.pieceLength | bytesToSize }}
+
+
+
+
+ {{ task.numPieces }}
+
+
+
+
+ {{ task.bittorrent.creationDate | localeDateTimeFormat(locale) }}
+
+
+
+
+ {{ task.bittorrent.comment }}
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+ {{ `${scope.row.ip}:${scope.row.port}` }}
+
+
+
+
+ {{ scope.row.peerId | peerIdParser }}
+
+
+
+
+ {{ scope.row.bitfield | bitfieldToPercent }}%
+
+
+
+
+ {{ scope.row.uploadSpeed | bytesToSize }}/s
+
+
+
+
+ {{ scope.row.downloadSpeed | bytesToSize }}/s
+
+
+
+
+
+
+
+
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)
}