diff --git a/src/renderer/components/Native/utils.js b/src/renderer/components/Native/utils.js index d249dcbc5..795c8a244 100644 --- a/src/renderer/components/Native/utils.js +++ b/src/renderer/components/Native/utils.js @@ -2,6 +2,7 @@ import is from 'electron-is' import { existsSync } from 'fs' import { Message } from 'element-ui' import { + isMagnetTask, getTaskFullPath, bytesToSize } from '@shared/utils' @@ -41,6 +42,15 @@ export function openItem (fullPath, { errorMsg }) { } export function moveTaskFilesToTrash (task, messages = {}) { + /** + * 磁力链接任务,有 bittorrent,但没有 bittorrent.info , + * 在没下完变成BT任务之前 path 不是一个完整路径, + * 未避免误删所在目录,所以删除时直接返回 true + */ + if (isMagnetTask(task)) { + return true + } + const { pathErrorMsg, delFailMsg, delConfigFailMsg } = messages const { dir } = task const path = getTaskFullPath(task) diff --git a/src/shared/utils.js b/src/shared/utils.js index 36a2b320f..f6e610106 100644 --- a/src/shared/utils.js +++ b/src/shared/utils.js @@ -8,6 +8,7 @@ import { camelCase, kebabCase } from 'lodash' +import { resolve } from 'path' import { userKeys, systemKeys } from './configKeys' export function bytesToSize (bytes) { @@ -140,25 +141,29 @@ export function getFileName (file) { export function getTaskFullPath (task) { const { dir, files, bittorrent } = task - let result = dir + let result = resolve(dir) - if (bittorrent && bittorrent.info && bittorrent.info.name) { - result = `${result}/${bittorrent.info.name}` + // Magnet link task + if (isMagnetTask(task)) { + return result + } + + if (bittorrent.info && bittorrent.info.name) { + result = resolve(result, bittorrent.info.name) return result } const [file] = files - const { path } = file + const path = resolve(file.path) let fileName = '' if (path) { - // Magnet task file's path did not start with dir - result = path.startsWith(dir) ? path : result + result = path } else { if (files && files.length === 1) { fileName = getFileName(file) if (fileName) { - result = `${result}/${fileName}` + result = resolve(result, fileName) } } } @@ -166,6 +171,11 @@ export function getTaskFullPath (task) { return result } +export function isMagnetTask (task) { + const { bittorrent } = task + return bittorrent && !bittorrent.info +} + export function getTaskUri (task, btTracker = []) { const { files } = task let result = ''