@@ -1,6 +1,7 @@
using System.Net ;
using System.Text.RegularExpressions ;
using System.Xml ;
using Core ;
using FluentScheduler ;
using FreeSql ;
using FreeSql.DataAnnotations ;
@@ -50,8 +51,8 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
public void Job (
string? path = null ,
str ing ? seasonNumber = null ,
str ing ? episodeNumber = null ,
int ? seasonNumber = null ,
int ? episodeNumber = null ,
bool ignoreLocked = false ,
bool ignoreCompleted = false
)
@@ -72,14 +73,15 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
}
catch ( Exception e )
{
_logger . LogError ( e , "ChineseNfoRegistry.Job() error" ) ;
_logger . LogError ( e , "error" ) ;
WxNotify . SendCommonAsync ( $"ChineseNfoRegistry.Job() 执行失败 {e.Message}" ) . Wait ( ) ;
}
}
private async Task JobExecute (
string? requestPath = null ,
str ing ? requestSeasonNumber = null ,
str ing ? requestEpisodeNumber = null ,
int ? requestSeasonNumber = null ,
int ? requestEpisodeNumber = null ,
bool ignoreLocked = false ,
bool ignoreCompleted = false )
{
@@ -87,7 +89,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
if ( string . IsNullOrEmpty ( tvFolder ) )
{
_logger . LogError ( "ChineseNfoRegistry.Job() tvFolder is null or empty" ) ;
_logger . LogError ( "tvFolder is null or empty" ) ;
return ;
}
@@ -101,34 +103,21 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
if ( tvNfos . Length = = 0 )
{
_logger . LogError ( "ChineseNfoRegistry.Job() tvNfo is null or empty" ) ;
_logger . LogError ( "tvNfo is null or empty" ) ;
return ;
}
var ctn = new ChineseNfoContent ( ) ;
foreach ( var tv in tvNfos )
{
if ( ! string . IsNullOrEmpty ( requestPath ) )
ctn . tvNfoPath = tv ;
if ( await HandleTv ( ) = = false )
{
var latestPath = Path . GetFileName ( requestPath ) ? ? string . Empty ;
if ( ! tv . Contains ( latestPath ) )
{
continue ;
}
_logger . LogInformation ( "ChineseNfoRegistry.Job() tv is contains path" ) ;
continue ;
}
try
{
await HandleTv ( tv ) ;
}
catch ( Exception e )
{
_logger . LogError ( e , "ChineseNfoRegistry.Job() HandleTv() error" ) ;
}
var seasonNfos = Directory . GetFiles ( Path . GetDirectoryName ( tv ) ? ? string . Empty , "season.nfo" , SearchOption . AllDirectories ) ;
// 如果seasonNfos为空, 则创建
@@ -161,30 +150,13 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
foreach ( var season in seasonNfos )
{
var seasonNumber = season
. Split ( "Season " ) [ 1 ]
. Split ( Path . DirectorySeparatorChar ) [ 0 ] ;
ctn . seasonNfoPath = season ;
try
if ( await HandleSeason ( ) = = false )
{
if ( ! string . IsNullOrEmpty ( requestSeasonNumber ) )
{
if ( seasonNumber ! = requestSeasonNumber )
{
continue ;
}
else
{
_logger . LogInformation ( "ChineseNfoRegistry.Job() seasonNumber is equal" ) ;
}
}
continue ;
}
await HandleSeason ( tv , season ) ;
}
catch ( Exception e )
{
_logger . LogError ( e , "ChineseNfoRegistry.Job() HandleSeason() error" ) ;
}
var episodeNfos = Directory
. GetFiles ( Path . GetDirectoryName ( season ) ? ? string . Empty , "*.nfo" , SearchOption . AllDirectories )
. Where ( x = > ! x . EndsWith ( "season.nfo" ) )
@@ -192,79 +164,71 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
foreach ( var episode in episodeNfos )
{
try
{
var split = $"S{(seasonNumber.Length == 1 ? $" 0 { seasonNumber } " : seasonNumber)}E" ;
var episodeNumber = Path . GetFileName ( episode )
. Split ( split , StringSplitOptions . None ) [ 1 ]
. Split ( " - " , StringSplitOptions . None ) [ 0 ] ;
ctn . episodeNfoPath = episode ;
if ( ! string . IsNullOrEmpty ( request EpisodeNumber ) )
{
if ( int . Parse ( episodeNumber ) . ToString ( ) ! = requestEpisodeNumber )
{
continue ;
}
else
{
_logger . LogInformation ( "ChineseNfoRegistry.Job() episodeNumber is equal" ) ;
}
}
await HandleEpisode ( tv , season , episode ) ;
}
catch ( Exception e )
{
_logger . LogError ( e , "ChineseNfoRegistry.Job() episodeNfo is null or empty" ) ;
}
await Handle Episode( ) ;
}
}
}
async Task HandleTv ( string tvNfo )
async Task < bool > HandleTv ( )
{
var nfoContent = File . ReadAllText ( tvNfo ) ;
if ( ! string . IsNullOrEmpty ( requestPath ) )
{
var latestPath = Path . GetFileName ( requestPath ) ? ? string . Empty ;
if ( ! ctn . tvNfoPath . Contains ( latestPath ) )
{
return false ;
}
}
_logger . LogInformation ( "开始处理 TV" ) ;
var nfoContent = File . ReadAllText ( ctn . tvNfoPath ) ;
var tvXml = new XmlDocument ( ) ;
tvXml . LoadXml ( nfoContent ) ;
var uniqueIdNode = tvXml . SelectSingleNode ( "//uniqueid[@type='tmdb']" ) ;
if ( uniqueIdNode = = null )
{
_logger . LogError ( "uniqueIdNode is null" ) ;
return false ;
}
if ( ! int . TryParse ( uniqueIdNode . InnerText , out var tmdbId ) )
{
_logger . LogError ( "tmdbId is null" ) ;
return false ;
}
ctn . tvId = tmdbId ;
var isLockedNode = tvXml . SelectSingleNode ( "//locked" ) ;
if ( isLockedNode ! = null & & isLockedNode . InnerText = = "true" & & ignoreLocked )
{
_logger . LogInformation ( "ChineseNfoRegistry.Job() tvNfo is locked" ) ;
return ;
_logger . LogInformation ( "tvNfo is locked" ) ;
return true ;
}
var isCompletedNode = tvXml . SelectSingleNode ( "//completed" ) ;
if ( isCompletedNode ! = null & & isCompletedNode . InnerText = = "true" & & ignoreCompleted )
{
_logger . LogInformation ( "ChineseNfoRegistry.Job() tvNfo is completed" ) ;
return ;
_logger . LogInformation ( "tvNfo is completed" ) ;
return true ;
}
var uniqueIdNode = tvXml . SelectSingleNode ( "//uniqueid[@type=' tmdb']" ) ;
if ( uniqueIdNode = = null )
{
_logger . LogError ( "ChineseNfoRegistry.Job() uniqueIdNode is null" ) ;
return ;
}
if ( ! int . TryParse ( uniqueIdNode . InnerText , out var tmdbId ) )
{
_logger . LogError ( "ChineseNfoRegistry.Job() tmdbId is null" ) ;
return ;
}
var tvInfo = await GetTmdbTv ( tvNfo , tmdbId ) ;
var tvInfo = await GetTmdbTv ( ctn . tvNfoPath , tmdbId ) ;
if ( tvInfo = = null )
{
_logger . LogError ( "ChineseNfoRegistry.Job() tvInfo is null" ) ;
return ;
_logger . LogError ( "tvInfo is null" ) ;
return true ;
}
if ( tvInfo [ "name" ] ! = null )
@@ -281,7 +245,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
sorttitleNode . InnerXml = $"<![CDATA[{tvInfo[" name "]}]]>" ;
}
_logger . LogInformation ( "ChineseNfoRegistry.Job() tvInfo: {tvInfo}" , tvInfo [ "name" ] ) ;
_logger . LogInformation ( "tvInfo: {tvInfo}" , tvInfo [ "name" ] ) ;
}
if ( tvInfo [ "overview" ] ! = null )
@@ -298,16 +262,16 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
outlineNode . InnerXml = $"<![CDATA[{tvInfo[" overview "]}]]>" ;
}
_logger . LogInformation ( "ChineseNfoRegistry.Job() tvInfo: {tvInfo}" , tvInfo [ "overview" ] ) ;
_logger . LogInformation ( "tvInfo: {tvInfo}" , tvInfo [ "overview" ] ) ;
}
if ( tvInfo [ "poster_path" ] ! = null )
{
var posterPath = tvInfo [ "poster_path" ] ! . ToString ( ) ;
var image = await GetTmdbImage ( tvNfo , posterPath ) ;
var image = await GetTmdbImage ( ctn . tvNfoPath , posterPath ) ;
if ( image ! = null )
{
var imagePath = Path . Combine ( Path . GetDirectoryName ( tvNfo ) ? ? string . Empty , "poster" + Path . GetExtension ( posterPath ) ) ;
var imagePath = Path . Combine ( Path . GetDirectoryName ( ctn . tvNfoPath ) ? ? string . Empty , "poster" + Path . GetExtension ( posterPath ) ) ;
await File . WriteAllBytesAsync ( imagePath , image ) ;
}
}
@@ -321,7 +285,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
}
}
_logger . LogInformation ( "ChineseNfoRegistry.Job() tmdbId: {tmdbId}, name: {name}" , tmdbId , tvInfo [ "name" ] ? . ToString ( ) ) ;
_logger . LogInformation ( "tmdbId: {tmdbId}, name: {name}" , tmdbId , tvInfo [ "name" ] ? . ToString ( ) ) ;
if ( isLockedNode ! = null )
{
@@ -346,117 +310,99 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
}
// 保存
tvXml . Save ( tvNfo ) ;
tvXml . Save ( ctn . tvNfoPath ) ;
return true ;
}
async Task HandleSeason ( string tvNfo , string seasonNfo )
async Task < bool > HandleSeason ( )
{
var tvNfoContent = File . ReadAllText ( tvNfo ) ;
var tvXml = new XmlDocument ( ) ;
tvXml . LoadXml ( tvNfoContent ) ;
var uniqueIdNode = tvXml . SelectSingleNode ( "//uniqueid[@type='tmdb']" ) ;
if ( uniqueIdNode = = null )
if ( string . IsNullOrEmpty ( ctn . seasonNfoPath ) )
{
_logger . LogError ( "ChineseNfoRegistry.Job() uniqueIdNode is null " ) ;
return ;
_logger . LogError ( "seasonNfoPath is null or empty " ) ;
return false ;
}
if ( ! int . TryParse ( uniqueIdNode . InnerText , out var tmdbId ) )
{
_logger . LogError ( "ChineseNfoRegistry.Job() tmdbId is null" ) ;
return ;
}
var nfoContent = File . ReadAllText ( seasonNfo ) ;
var nfoContent = File . ReadAllText ( ctn . seasonNfoPath ) ;
var seasonXml = new XmlDocument ( ) ;
seasonXml . LoadXml ( nfoContent ) ;
var seasonNumberNode = seasonXml . SelectSingleNode ( "//seasonnumber" ) ;
if ( seasonNumberNode = = null )
{
_logger . LogError ( "seasonNumberNode is null" ) ;
return false ;
}
if ( ! int . TryParse ( seasonNumberNode . InnerText , out var seasonNumber ) )
{
_logger . LogError ( "seasonNumber is null" ) ;
return false ;
}
ctn . seasonNumber = seasonNumber ;
if ( requestSeasonNumber ! = null & & requestSeasonNumber ! = seasonNumber )
{
return false ;
}
_logger . LogInformation ( "开始处理 Season" ) ;
var isLockedNode = seasonXml . SelectSingleNode ( "//locked" ) ;
if ( isLockedNode ! = null & & isLockedNode . InnerText = = "true" & & ignoreLocked )
{
_logger . LogInformation ( "ChineseNfoRegistry.Job() tv Nfo is locked" ) ;
return ;
_logger . LogInformation ( "season Nfo is locked" ) ;
return true ;
}
var isCompletedNode = seasonXml . SelectSingleNode ( "//completed" ) ;
if ( isCompletedNode ! = null & & isCompletedNode . InnerText = = "true" & & ignoreCompleted )
{
_logger . LogInformation ( "ChineseNfoRegistry.Job() tv Nfo is completed" ) ;
return ;
_logger . LogInformation ( "season Nfo is completed" ) ;
return true ;
}
var seasonNumberNode = seasonXml . SelectSingleNode ( "//seasonnumber" ) ;
if ( seasonNumberNode = = null )
{
_logger . LogError ( "ChineseNfoRegistry.Job() seasonNumberNode is null" ) ;
return ;
}
if ( ! int . TryParse ( seasonNumberNode . InnerText , out var seasonNumber ) )
{
_logger . LogError ( "ChineseNfoRegistry.Job() seasonNumber is null" ) ;
return ;
}
if ( ! string . IsNullOrEmpty ( requestPath ) )
{
if ( ! string . IsNullOrEmpty ( requestSeasonNumber ) )
{
if ( seasonNumber ! = int . Parse ( requestSeasonNumber ) )
{
return ;
}
else
{
_logger . LogInformation ( "ChineseNfoRegistry.Job() seasonNumber is equal" ) ;
return ;
}
}
}
var seasonInfo = await GetTmdbSeason ( seasonNfo , tmdbId , seasonNumber ) ;
var seasonInfo = await GetTmdbSeason ( ctn ) ;
if ( seasonInfo = = null )
{
_logger . LogError ( "ChineseNfoRegistry.Job() seasonInfo is null" ) ;
return ;
_logger . LogError ( "seasonInfo is null" ) ;
return true ;
}
var titleNode = seasonXml . SelectSingleNode ( "//sorttitle" ) ;
if ( titleNode ! = null & & seasonInfo [ "name" ] ! = null )
{
_logger . LogInformation ( "ChineseNfoRegistry.Job() seasonInfo: {seasonInfo}" , seasonInfo [ "name" ] ) ;
_logger . LogInformation ( "seasonInfo: {seasonInfo}" , seasonInfo [ "name" ] ) ;
titleNode . InnerXml = $"<![CDATA[{seasonInfo[" name "]}]]>" ;
}
var plotNode = seasonXml . SelectSingleNode ( "//plot" ) ;
if ( plotNode ! = null & & seasonInfo [ "overview" ] ! = null )
{
_logger . LogInformation ( "ChineseNfoRegistry.Job() seasonInfo: {seasonInfo}" , seasonInfo [ "overview" ] ) ;
_logger . LogInformation ( "seasonInfo: {seasonInfo}" , seasonInfo [ "overview" ] ) ;
plotNode . InnerXml = $"<![CDATA[{seasonInfo[" overview "]}]]>" ;
}
var outlineNode = seasonXml . SelectSingleNode ( "//outline" ) ;
if ( outlineNode ! = null & & seasonInfo [ "overview" ] ! = null )
{
_logger . LogInformation ( "ChineseNfoRegistry.Job() seasonInfo: {seasonInfo}" , seasonInfo [ "overview" ] ) ;
_logger . LogInformation ( "seasonInfo: {seasonInfo}" , seasonInfo [ "overview" ] ) ;
outlineNode . InnerXml = $"<![CDATA[{seasonInfo[" overview "]}]]>" ;
}
var poster_path = seasonInfo [ "poster_path" ] ? . ToString ( ) ;
if ( poster_path ! = null )
{
var image = await GetTmdbImage ( seasonNfo , poster_path ) ;
var image = await GetTmdbImage ( ctn . seasonNfoPath , poster_path ) ;
if ( image ! = null )
{
var imagePath = Path . Combine ( Path . GetDirectoryName ( tvNfo ) ? ? string . Empty , "season" + seasonNumber . ToString ( "D2" ) + "-poster" + Path . GetExtension ( poster_path ) ) ;
var imagePath = Path . Combine ( Path . GetDirectoryName ( ctn . tvNfoPath ) ? ? string . Empty , "season" + seasonNumber . ToString ( "D2" ) + "-poster" + Path . GetExtension ( poster_path ) ) ;
await File . WriteAllBytesAsync ( imagePath , image ) ;
}
}
@@ -483,59 +429,62 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
isCompletedNode . InnerText = "true" ;
}
seasonXml . Save ( seasonNfo ) ;
seasonXml . Save ( ctn . seasonNfoPath ) ;
return true ;
}
async Task HandleEpisode ( string tvNfo , string seasonNfo , string episodeNfo )
async Task HandleEpisode ( )
{
var tvNfoContent = File . ReadAllText ( tvNfo ) ;
var tvXml = new XmlDocument ( ) ;
tvXml . LoadXml ( tvNfoContent ) ;
var uniqueIdNode = tvXml . SelectSingleNode ( "//uniqueid[@type='tmdb']" ) ;
if ( uniqueIdNode = = null )
if ( string . IsNullOrEmpty ( ctn . episodeNfoPath ) )
{
_logger . LogError ( "ChineseNfoRegistry.Job() uniqueIdNode is null " ) ;
_logger . LogError ( "episodeNfoPath is null or empty " ) ;
return ;
}
if ( ! int . TryParse ( uniqueIdNode . InnerText , out var tmdbId ) )
{
_logger . LogError ( "ChineseNfoRegistry.Job() tmdbId is null" ) ;
return ;
}
var seasonNfoContent = File . ReadAllText ( seasonNfo ) ;
var seasonXml = new XmlDocument ( ) ;
seasonXml . LoadXml ( seasonNfoContent ) ;
var seasonNumberNode = seasonXml . SelectSingleNode ( "//seasonnumber" ) ;
if ( seasonNumberNode = = null )
{
_logger . LogError ( "ChineseNfoRegistry.Job() seasonNumberNode is null" ) ;
return ;
}
if ( ! int . TryParse ( seasonNumberNode . InnerText , out var seasonNumber ) )
{
_logger . LogError ( "ChineseNfoRegistry.Job() seasonNumber is null" ) ;
return ;
}
var nfoContent = File . ReadAllText ( episodeNfo ) ;
var nfoContent = File . ReadAllText ( ctn . episodeNfoPath ) ;
var episodeXml = new XmlDocument ( ) ;
episodeXml . LoadXml ( nfoContent ) ;
var episodeNumberNode = episodeXml . SelectSingleNode ( "//episode" ) ;
if ( episodeNumberNode = = null )
{
_logger . LogError ( "episodeNumberNode is null" ) ;
return ;
}
if ( ! int . TryParse ( episodeNumberNode . InnerText , out var episodeNumber ) )
{
_logger . LogError ( "episodeNumber is null" ) ;
return ;
}
ctn . episodeNumber = episodeNumber ;
if ( ! string . IsNullOrEmpty ( requestPath ) )
{
if ( requestSeasonNumber ! = null )
{
if ( requestEpisodeNumber ! = null )
{
if ( episodeNumber ! = requestEpisodeNumber )
{
return ;
}
}
}
}
_logger . LogInformation ( "开始处理 Episode" ) ;
var isLockedNode = episodeXml . SelectSingleNode ( "//locked" ) ;
if ( isLockedNode ! = null & & isLockedNode . InnerText = = "true" & & ignoreLocked )
{
_logger . LogInformation ( "ChineseNfoRegistry.Job() tv Nfo is locked" ) ;
_logger . LogInformation ( "episode Nfo is locked" ) ;
return ;
}
@@ -543,70 +492,36 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
if ( isCompletedNode ! = null & & isCompletedNode . InnerText = = "true" & & ignoreCompleted )
{
_logger . LogInformation ( "ChineseNfoRegistry.Job() tv Nfo is completed" ) ;
_logger . LogInformation ( "episode Nfo is completed" ) ;
return ;
}
var episodeNumberNode = episodeXml . SelectSingleNode ( "//episode" ) ;
if ( episodeNumberNode = = null )
{
_logger . LogError ( "ChineseNfoRegistry.Job() episodeNumberNode is null" ) ;
return ;
}
if ( ! int . TryParse ( episodeNumberNode . InnerText , out var episodeNumber ) )
{
_logger . LogError ( "ChineseNfoRegistry.Job() episodeNumber is null" ) ;
return ;
}
if ( ! string . IsNullOrEmpty ( requestPath ) )
{
if ( ! string . IsNullOrEmpty ( requestSeasonNumber ) )
{
if ( ! string . IsNullOrEmpty ( requestEpisodeNumber ) )
{
if ( seasonNumber ! = int . Parse ( requestSeasonNumber ) | | episodeNumber ! = int . Parse ( requestEpisodeNumber ) )
{
return ;
}
else
{
_logger . LogInformation ( "ChineseNfoRegistry.Job() episodeNumber is equal" ) ;
return ;
}
}
}
}
var episodeInfo = await GetTmdbEpisode ( episodeNfo , tmdbId , seasonNumber , episodeNumber ) ;
var episodeInfo = await GetTmdbEpisode ( ctn ) ;
if ( episodeInfo = = null )
{
_logger . LogError ( "ChineseNfoRegistry.Job() episodeInfo is null" ) ;
_logger . LogError ( "episodeInfo is null" ) ;
return ;
}
var titleNode = episodeXml . SelectSingleNode ( "//title" ) ;
if ( titleNode ! = null & & episodeInfo [ "name" ] ! = null )
{
_logger . LogInformation ( "ChineseNfoRegistry.Job() episodeInfo: {episodeInfo}" , episodeInfo [ "name" ] ) ;
_logger . LogInformation ( "episodeInfo: {episodeInfo}" , episodeInfo [ "name" ] ) ;
titleNode . InnerXml = $"<![CDATA[{episodeInfo[" name "]}]]>" ;
}
var plotNode = episodeXml . SelectSingleNode ( "//plot" ) ;
if ( plotNode ! = null & & episodeInfo [ "overview" ] ! = null )
{
_logger . LogInformation ( "ChineseNfoRegistry.Job() episodeInfo: {episodeInfo}" , episodeInfo [ "overview" ] ) ;
_logger . LogInformation ( "episodeInfo: {episodeInfo}" , episodeInfo [ "overview" ] ) ;
plotNode . InnerXml = $"<![CDATA[{episodeInfo[" overview "]}]]>" ;
}
var outlineNode = episodeXml . SelectSingleNode ( "//outline" ) ;
if ( outlineNode ! = null & & episodeInfo [ "overview" ] ! = null )
{
_logger . LogInformation ( "ChineseNfoRegistry.Job() episodeInfo: {episodeInfo}" , episodeInfo [ "overview" ] ) ;
_logger . LogInformation ( "episodeInfo: {episodeInfo}" , episodeInfo [ "overview" ] ) ;
outlineNode . InnerXml = $"<![CDATA[{episodeInfo[" overview "]}]]>" ;
}
@@ -619,7 +534,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
}
}
_logger . LogInformation ( "ChineseNfoRegistry.Job() tmdbId: {tmdbId}, name: {name}" , tmdb Id, episodeInfo [ "name" ] ? . ToString ( ) ) ;
_logger . LogInformation ( "tmdbId: {tmdbId}, name: {name}" , ctn . tv Id, episodeInfo [ "name" ] ? . ToString ( ) ) ;
if ( isLockedNode ! = null )
{
@@ -644,7 +559,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
}
// 保存
episodeXml . Save ( episodeNfo ) ;
episodeXml . Save ( ctn . episodeNfoPath ) ;
}
async Task < string? > GetTmdbPersonName (
@@ -702,7 +617,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
nameNode ! . InnerXml = $"<![CDATA[{name}]]>" ;
}
_logger . LogInformation ( "ChineseNfoRegistry.Job() actor: {actor}" , name ) ;
_logger . LogInformation ( "actor: {actor}" , name ) ;
}
}
}
@@ -896,12 +811,15 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
}
}
private async Task < JObject ? > GetTmdbSeason (
string path ,
int tmdbId ,
int seasonNumber )
private async Task < JObject ? > GetTmdbSeason ( ChineseNfoContent ctn )
{
var uniqueId = $"{tmdbId}-{seasonNumber}" ;
if ( ctn . seasonNumber = = 0 | | string . IsNullOrEmpty ( ctn . seasonNfoPath ) )
{
_logger . LogError ( "seasonNfoPath is null or empty" ) ;
return null ;
}
var uniqueId = $"{ctn.tvId}-{ctn.seasonNumber}" ;
var record = await _freeSql . Select < TheMovieDbRecord > ( )
. Where ( x = > x . Type = = TheMovieDbType . Season )
@@ -919,7 +837,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
UniqueId = uniqueId
} ;
var requestUrl = string . Format ( "/3/tv/{0}/season/{1}?api_key=e28e1bc408db7adefc8bacce225c5085&language=zh-CN" , tmdbId , seasonNumber ) ;
var requestUrl = string . Format ( "/3/tv/{0}/season/{1}?api_key=e28e1bc408db7adefc8bacce225c5085&language=zh-CN" , ctn . tvId , ctn . seasonNumber ) ;
try
{
@@ -927,7 +845,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
if ( ! response . IsSuccessStatusCode )
{
_logger . LogError ( "ChineseNfoRegistry.GetTmdbSeason() 接口调用失败 {requestUrl} & {path} & {response.StatusCode}" , requestUrl , p ath, response . StatusCode ) ;
_logger . LogError ( "ChineseNfoRegistry.GetTmdbSeason() 接口调用失败 {requestUrl} & {path} & {response.StatusCode}" , requestUrl , ctn . tvNfoP ath, response . StatusCode ) ;
return null ;
}
@@ -943,18 +861,14 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
}
catch ( Exception e )
{
_logger . LogError ( "ChineseNfoRegistry.GetTmdbSeason() 接口调用失败 {requestUrl} & {path} \r {e}" , requestUrl , p ath, e ) ;
_logger . LogError ( "ChineseNfoRegistry.GetTmdbSeason() 接口调用失败 {requestUrl} & {path} \r {e}" , requestUrl , ctn . tvNfoP ath, e ) ;
return null ;
}
}
private async Task < JObject ? > GetTmdbEpisode (
string path ,
int tmdbId ,
int seasonNumber ,
int episodeNumber )
private async Task < JObject ? > GetTmdbEpisode ( ChineseNfoContent ctn )
{
var uniqueId = $"{tmdb Id}-{seasonNumber}-{episodeNumber}" ;
var uniqueId = $"{ctn.tv Id}-{ctn. seasonNumber}-{ctn. episodeNumber}" ;
var record = await _freeSql . Select < TheMovieDbRecord > ( )
. Where ( x = > x . Type = = TheMovieDbType . Episode )
@@ -972,7 +886,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
UniqueId = uniqueId
} ;
var requestUrl = string . Format ( "/3/tv/{0}/season/{1}/episode/{2}?api_key=e28e1bc408db7adefc8bacce225c5085&language=zh-CN" , tmdbId , seasonNumber , episodeNumber ) ;
var requestUrl = string . Format ( "/3/tv/{0}/season/{1}/episode/{2}?api_key=e28e1bc408db7adefc8bacce225c5085&language=zh-CN" , ctn . tvId , ctn . seasonNumber , ctn . episodeNumber ) ;
try
{
@@ -980,7 +894,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
if ( ! response . IsSuccessStatusCode )
{
_logger . LogError ( "ChineseNfoRegistry.GetTmdbEpisode() 接口调用失败 {requestUrl} & {path} & {response.StatusCode}" , requestUrl , p ath, response . StatusCode ) ;
_logger . LogError ( "ChineseNfoRegistry.GetTmdbEpisode() 接口调用失败 {requestUrl} & {path} & {response.StatusCode}" , requestUrl , ctn . episodeNfoP ath, response . StatusCode ) ;
return null ;
}
@@ -996,7 +910,7 @@ public class ChineseNfoRegistry : Registry, IChineseNfoRegistry
}
catch ( Exception e )
{
_logger . LogError ( "ChineseNfoRegistry.GetTmdbEpisode() 接口调用失败 {requestUrl} & {path} \r {e}" , requestUrl , p ath, e ) ;
_logger . LogError ( "ChineseNfoRegistry.GetTmdbEpisode() 接口调用失败 {requestUrl} & {path} \r {e}" , requestUrl , ctn . episodeNfoP ath, e ) ;
return null ;
}
}
@@ -1028,4 +942,19 @@ public enum TheMovieDbLanguage
{
ZhCn = 1 ,
ZhTw = 2
}
}
public class ChineseNfoContent
{
public int tvId { get ; set ; }
public string tvNfoPath { get ; set ; } = string . Empty ;
public int seasonNumber { get ; set ; }
public string seasonNfoPath { get ; set ; } = string . Empty ;
public int episodeNumber { get ; set ; }
public string episodeNfoPath { get ; set ; } = string . Empty ;
}