优化调整、BT下载(有bug)
This commit is contained in:
+57
-9
@@ -14,8 +14,8 @@ import { useProcessStore } from '@/stores/processStore'
|
||||
import { TooltipProvider } from '@/components/ui/tooltip'
|
||||
import { moduleRegistry } from '@/modules/registry'
|
||||
import type { ModuleMeta } from '@/types/module'
|
||||
import { pendingNewDownload, pendingShowDownloadTasks } from '@/lib/trayEvents'
|
||||
import { EVENTS, STORAGE_KEYS } from '@/lib/constants'
|
||||
import { pendingNewDownload } from '@/lib/trayEvents'
|
||||
import { EVENTS, STORAGE_KEYS, WINDOWS } from '@/lib/constants'
|
||||
import { commands } from '@/lib/bindings'
|
||||
|
||||
const appStore = useAppStore()
|
||||
@@ -104,6 +104,56 @@ const handleSearch = (moduleId: string) => {
|
||||
handleModuleChange(moduleId)
|
||||
}
|
||||
|
||||
// 为单个下载任务创建专属的一次性下载窗口(浏览器扩展发起)。
|
||||
// label 带 task id 保证同时多个下载时各占一个窗口;对应 capabilities/download-window.json 的 glob "download-window-*"
|
||||
async function openDownloadWindow(taskId: string) {
|
||||
const { WebviewWindow } = await import('@tauri-apps/api/webviewWindow')
|
||||
const { currentMonitor } = await import('@tauri-apps/api/window')
|
||||
const label = `${WINDOWS.downloadWindow}-${taskId}`
|
||||
try {
|
||||
const existing = await WebviewWindow.getByLabel(label)
|
||||
if (existing) {
|
||||
// 已存在:用 Rust 端强制置前(绕过前台锁定,双屏/后台创建也能到前台)
|
||||
await commands.downloaderFocusWindow(label)
|
||||
return
|
||||
}
|
||||
// 定位到主窗口当前所在显示器的中央偏上
|
||||
const monitor = await currentMonitor()
|
||||
const scale = monitor?.scaleFactor ?? 1
|
||||
const w = 420
|
||||
const h = 176
|
||||
const x = Math.round(((monitor?.size.width ?? 1920) / scale - w) / 2)
|
||||
const y = Math.round(((monitor?.size.height ?? 1080) / scale - h) / 2 * 0.8)
|
||||
const win = new WebviewWindow(label, {
|
||||
url: `index.html#download-window?task=${encodeURIComponent(taskId)}`,
|
||||
title: '下载',
|
||||
width: w,
|
||||
height: h,
|
||||
x,
|
||||
y,
|
||||
decorations: false,
|
||||
transparent: true,
|
||||
resizable: false,
|
||||
maximizable: false,
|
||||
minimizable: true,
|
||||
shadow: true,
|
||||
visible: false,
|
||||
focus: false,
|
||||
// 默认不置顶、放入任务栏(可最小化,任务栏图标唤出);下载完成时窗口置前提醒。
|
||||
// 隐藏创建:由 DownloadWindow 贴合内容高度后一次性 show,避免显示后再 resize 闪烁
|
||||
})
|
||||
win.once('tauri://error', (e) => console.error('创建下载窗口失败:', e))
|
||||
// 窗口改为隐藏创建:由 DownloadWindow 在 onMounted 贴合内容高度后一次性 show,
|
||||
// 避免"先以 176 高度显示、再 resize 到内容高度"造成的闪烁。
|
||||
// 此处仅保留异常兜底:WebView 加载异常导致 DownloadWindow 未 reveal 时,强制显示。
|
||||
win.once('tauri://created', () => {
|
||||
window.setTimeout(() => { void commands.downloaderFocusWindow(label) }, 2500)
|
||||
})
|
||||
} catch (e) {
|
||||
console.error('创建下载窗口失败:', e)
|
||||
}
|
||||
}
|
||||
|
||||
const getFallbackModule = () => {
|
||||
const enabledIds = appStore.enabledModules.map(m => m.id)
|
||||
const fallback = moduleRegistry.getAllMetas().find(
|
||||
@@ -198,14 +248,12 @@ onMounted(async () => {
|
||||
}
|
||||
})
|
||||
)
|
||||
// 浏览器扩展新增下载:直接切到下载模块的任务列表页(主窗口已由 Rust 端置前)
|
||||
// 浏览器扩展新增下载:为该任务创建一个专属的一次性下载窗口(不打断主界面)。
|
||||
// 主窗口本身无需置前,下载进度/完成事件由独立窗口自行监听。
|
||||
trayUnlisteners.push(
|
||||
await listen(EVENTS.downloadExtensionAdded, () => {
|
||||
const enabledIds = appStore.enabledModules.map(m => m.id)
|
||||
if (enabledIds.includes('downloader') || moduleRegistry.getConfig('downloader')?.builtin) {
|
||||
pendingShowDownloadTasks.value = true
|
||||
handleModuleChange('downloader')
|
||||
}
|
||||
await listen<{ id: string }>(EVENTS.downloadExtensionAdded, (e) => {
|
||||
if (!e.payload?.id) return
|
||||
void openDownloadWindow(e.payload.id)
|
||||
})
|
||||
)
|
||||
trayUnlisteners.push(
|
||||
|
||||
Reference in New Issue
Block a user