From 88babf14f8685fcdfeb3e40ed59d0cb3a34e14b6 Mon Sep 17 00:00:00 2001 From: wangdl Date: Fri, 19 Jun 2026 11:40:22 +0800 Subject: [PATCH] fix: prioritize filename extension in materialTypeFromMime for .md files .md files are uploaded as text/plain mime, causing materialTypeFromMime to return .text instead of .markdown. Extension now checked first. Co-Authored-By: Claude Opus 4.7 --- .../Features/Library/LibrarySubpages.swift | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/AIStudyApp/AIStudyApp/Features/Library/LibrarySubpages.swift b/AIStudyApp/AIStudyApp/Features/Library/LibrarySubpages.swift index 04bbd82..ff9cca2 100644 --- a/AIStudyApp/AIStudyApp/Features/Library/LibrarySubpages.swift +++ b/AIStudyApp/AIStudyApp/Features/Library/LibrarySubpages.swift @@ -265,7 +265,7 @@ struct LibraryDetailPage: View { NavigationLink(value: Route.materialReader( materialId: src.id, filePath: "", - materialType: materialTypeFromMime(src.mimeType), + materialType: materialTypeFromMime(src.mimeType, filename: src.originalFilename), knowledgeBaseId: knowledgeBaseId, title: src.originalFilename ?? src.title ?? "未命名" )) { @@ -1496,7 +1496,16 @@ struct EditKnowledgePage: View { // MARK: - Helpers -private func materialTypeFromMime(_ mime: String?) -> MaterialType { +private func materialTypeFromMime(_ mime: String?, filename: String? = nil) -> MaterialType { + let ext = filename?.split(separator: ".").last?.lowercased() + // Extension takes priority for known types + if ext == "md" || ext == "markdown" { return .markdown } + if ext == "pdf" { return .pdf } + if ext == "epub" { return .epub } + if ext == "docx" || ext == "doc" { return .word } + if ext == "xlsx" || ext == "xls" { return .excel } + if ext == "pptx" || ext == "ppt" { return .powerPoint } + // Fallback to mime guard let m = mime?.lowercased() else { return .markdown } if m.contains("pdf") { return .pdf } if m.contains("epub") { return .epub }