From f2dbc2a29198bc5c6ae0da06d29b28e02b4c9199 Mon Sep 17 00:00:00 2001 From: ngfchl Date: Sat, 18 Jul 2026 20:13:04 +0800 Subject: [PATCH] sync media details by file ID and GCID --- lib/pages/media_library_page.dart | 8 ++++++++ lib/providers/media_library_provider.dart | 23 +++++++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/lib/pages/media_library_page.dart b/lib/pages/media_library_page.dart index 2a56d7c..cc2c014 100644 --- a/lib/pages/media_library_page.dart +++ b/lib/pages/media_library_page.dart @@ -2135,6 +2135,14 @@ class _MediaDetailPanelState extends ConsumerState<_MediaDetailPanel> { _metadataRow(context, 'TMDB', item.tmdbID?.toString() ?? '未匹配'), _metadataRow(context, '资源数', '${widget.work.resources.length}'), _metadataRow(context, '当前文件', _resource.file.name), + _metadataRow(context, '文件 ID', _resource.file.id), + _metadataRow( + context, + 'GCID', + _resource.file.gcid?.isNotEmpty == true + ? _resource.file.gcid! + : '未获取', + ), _metadataRow(context, '文件大小', _resource.file.formattedSize), _metadataRow(context, '云盘位置', _resource.file.cloudPath), ], diff --git a/lib/providers/media_library_provider.dart b/lib/providers/media_library_provider.dart index 008320f..29036ff 100644 --- a/lib/providers/media_library_provider.dart +++ b/lib/providers/media_library_provider.dart @@ -547,12 +547,26 @@ class MediaLibraryNotifier extends StateNotifier { fromCloud?.name ?? _findStringDeep(detail, const ['fileName', 'name', 'resName']) ?? original.file.name; + final latestGCID = + fromCloud?.gcid ?? + _findStringDeep(detail, const [ + 'gcid', + 'gcId', + 'gcidValue', + 'hash', + ]) ?? + original.file.gcid; final parentPath = _parentPath(original.file.cloudPath); - final latestFile = (fromCloud ?? original.file).copyWith( + final latestFile = original.file.copyWith( name: latestName, + size: fromCloud?.size, + gcid: latestGCID, + modifiedAt: fromCloud?.modifiedAt, cloudPath: parentPath.isEmpty ? latestName : '$parentPath/$latestName', + parentID: fromCloud?.parentID, + fullParentIDs: fromCloud?.fullParentIDs, ); await FileMetadataCache.cacheFiles([latestFile]); final fallback = MediaLibraryItem.fromFile( @@ -764,7 +778,12 @@ class MediaLibraryNotifier extends StateNotifier { return item; } final directoryName = _parentDirectoryName(item.file.cloudPath); - final fileParsed = ParsedMediaName.parse(item.file.name); + // Parse with the parent context first: numeric/disc file names commonly + // keep title, year, season and release tags only on their parent folder. + final fileParsed = ParsedMediaName.parse( + item.file.name, + directoryName: directoryName, + ); final parentParsed = directoryName == null ? null : ParsedMediaName.parse(directoryName);