@@ -44,8 +44,8 @@ public async Task<MetadataResult<Episode>> GetMetadata(EpisodeInfo info, Cancell
44
44
// 刷新元数据四种模式差别:
45
45
// 自动扫描匹配:info的Name、IndexNumber和ParentIndexNumber是从文件名解析出来的,假如命名不规范,就会导致解析出错误值
46
46
// 识别:info的Name、IndexNumber和ParentIndexNumber是从文件名解析出来的,provinceIds有指定选择项的ProvinceId
47
+ // 覆盖所有元数据:info的Name、IndexNumber和ParentIndexNumber是从文件名解析出来的,provinceIds保留所有旧值
47
48
// 搜索缺少的元数据:info的Name、IndexNumber和ParentIndexNumber是从当前的元数据获取,provinceIds保留所有旧值
48
- // 覆盖所有元数据:info的Name、IndexNumber和ParentIndexNumber是从当前的元数据获取,provinceIds保留所有旧值
49
49
this . Log ( $ "GetEpisodeMetadata of [name]: { info . Name } number: { info . IndexNumber } ParentIndexNumber: { info . ParentIndexNumber } IsAutomated: { info . IsAutomated } ") ;
50
50
var result = new MetadataResult < Episode > ( ) ;
51
51
@@ -139,6 +139,14 @@ public EpisodeInfo FixParseInfo(EpisodeInfo info)
139
139
info . Year = parseResult . Year ;
140
140
info . Name = parseResult . ChineseName ?? parseResult . Name ;
141
141
142
+ // 修正文件名有特殊命名SXXEPXX时,默认解析到错误季数的问题,如神探狄仁杰 Detective.Dee.S01EP01.2006.2160p.WEB-DL.x264.AAC-HQC
143
+ // TODO: 会导致覆盖用户手动修改元数据的季数
144
+ if ( info . ParentIndexNumber . HasValue && parseResult . ParentIndexNumber . HasValue && parseResult . ParentIndexNumber > 0 && info . ParentIndexNumber != parseResult . ParentIndexNumber )
145
+ {
146
+ this . Log ( "FixSeasonNumber by anitomy. old: {0} new: {1}" , info . ParentIndexNumber , parseResult . ParentIndexNumber ) ;
147
+ info . ParentIndexNumber = parseResult . ParentIndexNumber ;
148
+ }
149
+
142
150
// 没有season级目录(即虚拟季)ParentIndexNumber默认是1,季文件夹命名不规范时,ParentIndexNumber默认是null
143
151
if ( info . ParentIndexNumber is null )
144
152
{
@@ -152,11 +160,10 @@ public EpisodeInfo FixParseInfo(EpisodeInfo info)
152
160
var season = episodeItem != null ? ( ( Episode ) episodeItem ) . Season : null ;
153
161
if ( season != null && season . IndexNumber . HasValue && info . ParentIndexNumber != season . IndexNumber )
154
162
{
155
- this . Log ( "FixSeasonNumber: old: {0} new: {1}" , info . ParentIndexNumber , season . IndexNumber ) ;
163
+ this . Log ( "FixSeasonNumber by season. old: {0} new: {1}" , info . ParentIndexNumber , season . IndexNumber ) ;
156
164
info . ParentIndexNumber = season . IndexNumber ;
157
165
}
158
166
159
-
160
167
// // 当没有season级目录时,默认为1,即当成只有一季(不需要处理,虚拟季jellyfin默认传的ParentIndexNumber=1)
161
168
// if (info.ParentIndexNumber is null && season != null && season.LocationType == LocationType.Virtual)
162
169
// {
@@ -172,7 +179,6 @@ public EpisodeInfo FixParseInfo(EpisodeInfo info)
172
179
info . ParentIndexNumber = this . GuessSeasonNumberByDirectoryName ( seasonFolderPath ) ;
173
180
}
174
181
175
-
176
182
// 识别特典
177
183
if ( info . ParentIndexNumber is null && NameParser . IsAnime ( fileName ) && ( parseResult . IsSpecial || NameParser . IsSpecialDirectory ( info . Path ) ) )
178
184
{
@@ -186,17 +192,16 @@ public EpisodeInfo FixParseInfo(EpisodeInfo info)
186
192
// info.ParentIndexNumber = 1;
187
193
// }
188
194
189
-
190
195
// 特典优先使用文件名(特典除了前面特别设置,还有SXX/Season XX等默认的)
191
196
if ( info . ParentIndexNumber . HasValue && info . ParentIndexNumber == 0 )
192
197
{
193
198
info . Name = parseResult . SpecialName == info . Name ? fileName : parseResult . SpecialName ;
194
199
}
195
200
196
-
197
201
// 大于1000,可能错误解析了分辨率
198
- if ( parseResult . IndexNumber . HasValue && parseResult . IndexNumber < 1000 )
202
+ if ( parseResult . IndexNumber . HasValue && parseResult . IndexNumber < 1000 && info . IndexNumber != parseResult . IndexNumber )
199
203
{
204
+ this . Log ( "FixEpisodeNumber by anitomy. old: {0} new: {1}" , info . IndexNumber , parseResult . IndexNumber ) ;
200
205
info . IndexNumber = parseResult . IndexNumber ;
201
206
}
202
207
0 commit comments