import { faClipboard, faCloud, faCloudDownloadAlt, faDatabase, faDesktop, faFileArchive, faHdd, faLink, faSitemap, faTable, } from "@fortawesome/free-solid-svg-icons"; import { computed, type ComputedRef, defineAsyncComponent } from "vue"; import { useUploadAdvancedMode } from "@/composables/upload/uploadAdvancedMode"; import type { UploadMethod, UploadMethodConfig } from "./types"; export const uploadMethodRegistry: Record = { "local-file": { id: "local-file", name: "从电脑上传", description: "从本地设备选择并上传文件", icon: faDesktop, headerAction: "上传文件", requiresTargetHistory: true, tips: [ "可使用 Ctrl/Cmd+点击 一次选择多个文件", "在开始上传前,您可以随时通过下方“添加更多文件”按钮向暂存区添加更多文件", "大文件会分块上传,若连接中断可自动续传", "如果 Galaxy 无法正确识别文件类型,您可以在上传前手动设置", "如果您处理的是使用空格而非制表符的文本文件,而下游工具期望制表符分隔文件,请考虑使用上传设置中的“空格转制表符”选项", ], component: defineAsyncComponent(() => import("./methods/LocalFileUpload.vue")), }, "paste-content": { id: "paste-content", name: "粘贴文件内容", description: "直接粘贴文件内容", icon: faClipboard, headerAction: "粘贴文件内容并上传", requiresTargetHistory: true, tips: [ "最适合小型文本文件,如表格数据(例如 TSV、CSV)", "粘贴非常大的内容可能较慢或失败——大数据集请使用文件上传或链接", "如果 Galaxy 猜错了数据类型,您可以显式设置", ], component: defineAsyncComponent(() => import("./methods/PasteContentUpload.vue")), }, "paste-links": { id: "paste-links", name: "粘贴链接/URL", description: "粘贴 URL 以从远程来源获取并导入数据", icon: faLink, headerAction: "粘贴链接并上传", requiresTargetHistory: true, tips: [ "粘贴一个或多个 URL(每行一个)以暂存要导入的文件", "使用**延迟**模式可节省存储空间——数据只会在工具实际需要时才下载", "延迟数据集的行为与普通数据集相同,但会在运行时自动获取。建议在使用延迟模式时设置正确的数据类型,因为延迟数据集不会立即下载数据,自动检测能力有限", "非常适合托管在可靠远程服务器上的超大文件", ], component: defineAsyncComponent(() => import("./methods/PasteLinksUpload.vue")), }, "remote-files": { id: "remote-files", name: "选择远程文件", description: "从已配置的远程文件源或文件仓库中选择文件", icon: faCloud, headerAction: "选择远程文件", requiresTargetHistory: true, tips: [ "浏览来自已连接云存储、FTP 服务器或机构数据仓库的文件", "您可以在用户偏好设置中或通过“连接新的远程源”按钮添加新的远程连接", "适合访问云服务中存储的数据集,而无需先在本地下载", ], component: defineAsyncComponent(() => import("./methods/RemoteFilesUpload.vue")), requiresConfig: ["file_sources_configured"], }, "data-library": { id: "data-library", name: "从数据文库导入", description: "从 Galaxy 的数据文库中选择文件", icon: faDatabase, headerAction: "从数据文库导入", requiresTargetHistory: true, tips: [ "数据文库包含由 Galaxy 管理员提供的精选共享数据集", "从文库导入通常即时完成,且不会复制底层数据", "文库数据集是只读的,但其他方面与您历史中的普通数据集行为一致", ], component: defineAsyncComponent(() => import("./methods/DataLibraryUpload.vue")), }, "explore-zip": { id: "explore-zip", name: "浏览压缩包 Zip 归档", description: "直接浏览并选择压缩 zip 归档中的文件,支持本地或远程", icon: faFileArchive, headerAction: "从归档中提取", requiresTargetHistory: true, showStartButton: false, tips: [ "在导入文件前浏览 ZIP 归档的内容", "只需选择您需要的文件——不必解压整个归档", "同时支持本地 ZIP 文件和远程 ZIP URL。远程选项适用于托管在外部服务器上的大型归档", ], component: defineAsyncComponent(() => import("./methods/ExploreZipUpload.vue")), }, "data-source-tools": { id: "data-source-tools", name: "数据源工具", description: "使用 Galaxy 的数据源工具从各种外部来源导入数据", icon: faCloudDownloadAlt, headerAction: "使用数据源工具", requiresTargetHistory: false, showStartButton: false, tips: [ "使用数据源工具直接从 NCBI、ENA 或 UCSC 等外部数据库导入数据", "这些工具通常会自动添加丰富的元数据", "处理公共参考数据集时推荐使用", ], component: defineAsyncComponent(() => import("./methods/DataSourceToolsUpload.vue")), }, "import-history": { id: "import-history", name: "导入历史", description: "从文件或 URL 导入整个历史", icon: faHdd, headerAction: "导入历史", requiresTargetHistory: false, showStartButton: false, tips: [ "从之前导出的文件或 URL 导入完整的 Galaxy 历史", "适用于分享分析或恢复归档的工作", "导入的历史包含数据集、元数据和结构", ], component: defineAsyncComponent(() => import("./methods/ImportHistoryUpload.vue")), }, "import-workflow": { id: "import-workflow", name: "导入工作流", description: "从文件或 URL 导入工作流", icon: faSitemap, headerAction: "导入工作流", requiresTargetHistory: false, showStartButton: false, tips: [ "从 Galaxy 工作流文件或公共 URL 导入工作流", "此操作不会创建数据集——只会添加工作流", "在**银河际工作流委员会**了解更多关于构建和分享工作流的信息:[https://iwc.galaxyproject.org/](https://iwc.galaxyproject.org/)", "工作流有助于自动化和标准化分析流程。", ], component: defineAsyncComponent(() => import("./methods/ImportWorkflowUpload.vue")), }, "rule-based-import": { id: "rule-based-import", name: "基于规则的数据导入", description: "使用基于规则的映射导入数据集或集合", icon: faTable, headerAction: "启动基于规则的导入", requiresTargetHistory: false, requiresAdvancedMode: true, showStartButton: false, tips: [ "最适合导入具有结构化命名约定的多个文件", "自动创建数据集集合并分配元数据", "非常适合多样本或多条件实验", ], component: defineAsyncComponent(() => import("./methods/RuleBasedImportUpload.vue")), }, }; export function getUploadMethod(id: UploadMethod): UploadMethodConfig | undefined { return uploadMethodRegistry[id]; } /** * Reactive list of all upload methods, automatically filtered based on * whether upload advanced mode is enabled. */ export function useAllUploadMethods(): ComputedRef { const { advancedMode } = useUploadAdvancedMode(); return computed(() => Object.values(uploadMethodRegistry).filter((method) => !method.requiresAdvancedMode || advancedMode.value), ); }