Skip to content

Commit 6584d7c

Browse files
committed
feat: 更改json保存文件名,存储位置
1 parent 9f49d2e commit 6584d7c

File tree

2 files changed

+57
-20
lines changed

2 files changed

+57
-20
lines changed

MediaInfoKeeper.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
<Description>MediaInfoKeeper Emby plugin</Description>
55
<PackageTags>emby;plugin;pms;media;server;</PackageTags>
66
<BaseOutputPath>Build\bin\</BaseOutputPath>
7-
<AssemblyVersion>1.6.4.0</AssemblyVersion>
8-
<FileVersion>1.6.4.0</FileVersion>
9-
<Version>1.6.4</Version>
7+
<AssemblyVersion>1.6.5.0</AssemblyVersion>
8+
<FileVersion>1.6.5.0</FileVersion>
9+
<Version>1.6.5</Version>
1010
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
1111
</PropertyGroup>
1212
<ItemGroup>

Services/MediaInfoService.cs

Lines changed: 54 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using MediaBrowser.Controller.Library;
99
using MediaBrowser.Controller.Persistence;
1010
using MediaBrowser.Controller.Providers;
11+
using MediaBrowser.Controller.Entities.TV;
1112
using MediaBrowser.Model.Configuration;
1213
using MediaBrowser.Model.Dto;
1314
using MediaBrowser.Model.Entities;
@@ -75,24 +76,65 @@ public static string GetMediaInfoJsonPath(BaseItem item)
7576
{
7677
var jsonRootFolder = Plugin.Instance.Options.MainPage.MediaInfoJsonRootFolder;
7778

78-
var relativePath = item.ContainingFolderPath;
79-
if (!string.IsNullOrEmpty(jsonRootFolder) && Path.IsPathRooted(item.ContainingFolderPath))
79+
var mediaInfoFileName = GetMediaInfoFileName(item);
80+
var mediaInfoJsonPath = !string.IsNullOrEmpty(jsonRootFolder)
81+
? Path.Combine(jsonRootFolder, mediaInfoFileName)
82+
: Path.Combine(item.ContainingFolderPath, mediaInfoFileName);
83+
84+
return mediaInfoJsonPath;
85+
}
86+
87+
private static bool TryGetTmdbId(BaseItem item, out string tmdbId)
88+
{
89+
tmdbId = item.GetProviderId(MetadataProviders.Tmdb);
90+
if (!string.IsNullOrWhiteSpace(tmdbId) &&
91+
!string.Equals(tmdbId, "None", StringComparison.OrdinalIgnoreCase))
8092
{
81-
relativePath = GetRelativePathCompat(Path.GetPathRoot(item.ContainingFolderPath),
82-
item.ContainingFolderPath);
93+
return true;
8394
}
8495

85-
var mediaInfoJsonPath = !string.IsNullOrEmpty(jsonRootFolder)
86-
? Path.Combine(jsonRootFolder, relativePath, item.FileNameWithoutExtension + MediaInfoFileExtension)
87-
: Path.Combine(item.ContainingFolderPath, item.FileNameWithoutExtension + MediaInfoFileExtension);
96+
if (item is Episode episodeWithSeries && Plugin.LibraryManager != null)
97+
{
98+
var series = Plugin.LibraryManager.GetItemById(episodeWithSeries.SeriesId);
99+
tmdbId = series?.GetProviderId(MetadataProviders.Tmdb);
100+
}
88101

89-
return mediaInfoJsonPath;
102+
return !string.IsNullOrWhiteSpace(tmdbId) &&
103+
!string.Equals(tmdbId, "None", StringComparison.OrdinalIgnoreCase);
104+
}
105+
106+
private static string GetMediaInfoFileName(BaseItem item)
107+
{
108+
if (!TryGetTmdbId(item, out var tmdbId))
109+
{
110+
return item.FileNameWithoutExtension + MediaInfoFileExtension;
111+
}
112+
113+
string episodeSegment = null;
114+
if (item is Episode episode)
115+
{
116+
var seasonNumber = episode.ParentIndexNumber;
117+
var episodeNumber = episode.IndexNumber;
118+
if (seasonNumber.HasValue && episodeNumber.HasValue)
119+
{
120+
episodeSegment = $"-S{seasonNumber.Value:D2}E{episodeNumber.Value:D2}";
121+
}
122+
}
123+
124+
var typeSegment = item is Episode || item is Season || item is Series ? "tv" : "movie";
125+
return $"[tmdbid={tmdbId};type={typeSegment}]{episodeSegment}{MediaInfoFileExtension}";
90126
}
91127

92128
/// <summary>将媒体条目的 MediaInfo 与章节序列化到 JSON。</summary>
93129
private bool SerializeMediaInfo(BaseItem item, IDirectoryService directoryService, bool overwrite,
94130
string source)
95131
{
132+
if (!TryGetTmdbId(item, out var tmdbId))
133+
{
134+
this.logger.Info($"{source} 跳过保存 - 无 TMDB ID: {item.Path ?? item.Name ?? item.Id.ToString()}");
135+
return false;
136+
}
137+
96138
var mediaInfoJsonPath = GetMediaInfoJsonPath(item);
97139
var file = directoryService.GetFile(mediaInfoJsonPath);
98140

@@ -239,6 +281,10 @@ public async Task<MediaInfoRestoreResult> DeserializeMediaInfo(BaseItem item, ID
239281
this.logger.Debug(e.StackTrace);
240282
}
241283
}
284+
else
285+
{
286+
this.logger.Info($"{source} 未找到 JSON: {mediaInfoJsonPath}");
287+
}
242288

243289
return MediaInfoRestoreResult.Failed;
244290
}
@@ -288,12 +334,3 @@ private static string GetRelativePathCompat(string rootPath, string fullPath)
288334
}
289335
}
290336
}
291-
292-
293-
294-
295-
296-
297-
298-
299-

0 commit comments

Comments
 (0)