From 5c57a2b040e23730648feb69e8c81e341b038d2a Mon Sep 17 00:00:00 2001 From: jianzhichu Date: Thu, 12 Feb 2026 19:40:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E9=9B=86=20tvshow.nfo=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Controllers/VideoController.cs | 76 +++++++++---------- Properties/PublishProfiles/docker.pubxml.user | 2 +- app/src/pages/set/AppSet.vue | 2 +- job/DouyinBasicSyncJob.cs | 15 +++- utils/NfoFileGenerator.cs | 24 ++++-- 5 files changed, 71 insertions(+), 48 deletions(-) diff --git a/Controllers/VideoController.cs b/Controllers/VideoController.cs index 2d23874..6e90087 100644 --- a/Controllers/VideoController.cs +++ b/Controllers/VideoController.cs @@ -451,45 +451,45 @@ namespace dy.net.Controllers return Ok(data); } - /// - /// 所有视频重新生成nfo文件 - /// - /// - [HttpGet("renfo")] - public async Task ReCreateNfo() - { - var videos = await douyinVideoService.GetAllAsync(); - if (videos == null || videos.Count == 0) - { - return ApiResult.Success("暂无视频数据需要生成NFO文件"); - } - _ = Task.Run(async () => - { - try - { - var totalCount = videos.Count; - foreach (var video in videos) - { - try - { - NfoFileGenerator.GenerateVideoNfoFile(video); - Serilog.Log.Debug($"刮削视频(Path:{video.VideoSavePath})生成NFO成功!"); - await Task.Delay(50); - } - catch (Exception singleEx) - { - Serilog.Log.Error($"刮削视频(Path:{video.VideoSavePath})生成NFO失败:{singleEx.Message}"); - } - } - } - catch (Exception ex) - { - Serilog.Log.Error($"NFO文件生成任务执行异常:{ex.Message}\n{ex.StackTrace}"); - } - }); + ///// + ///// 所有视频重新生成nfo文件 + ///// + ///// + //[HttpGet("renfo")] + //public async Task ReCreateNfo() + //{ + // var videos = await douyinVideoService.GetAllAsync(); + // if (videos == null || videos.Count == 0) + // { + // return ApiResult.Success("暂无视频数据需要生成NFO文件"); + // } + // _ = Task.Run(async () => + // { + // try + // { + // var totalCount = videos.Count; + // foreach (var video in videos) + // { + // try + // { + // NfoFileGenerator.GenerateVideoNfoFile(video); + // Serilog.Log.Debug($"刮削视频(Path:{video.VideoSavePath})生成NFO成功!"); + // await Task.Delay(50); + // } + // catch (Exception singleEx) + // { + // Serilog.Log.Error($"刮削视频(Path:{video.VideoSavePath})生成NFO失败:{singleEx.Message}"); + // } + // } + // } + // catch (Exception ex) + // { + // Serilog.Log.Error($"NFO文件生成任务执行异常:{ex.Message}\n{ex.StackTrace}"); + // } + // }); - return ApiResult.Success(); - } + // return ApiResult.Success(); + //} diff --git a/Properties/PublishProfiles/docker.pubxml.user b/Properties/PublishProfiles/docker.pubxml.user index 5d5a318..655d78d 100644 --- a/Properties/PublishProfiles/docker.pubxml.user +++ b/Properties/PublishProfiles/docker.pubxml.user @@ -3,7 +3,7 @@ <_PublishTargetUrl>E:\code\dysync\bin\Release\net6.0\publish\ - True|2026-02-12T09:16:08.2015031Z||;False|2026-02-12T17:16:02.9041381+08:00||;True|2026-02-12T17:12:44.8082909+08:00||;True|2026-02-12T17:04:22.1666828+08:00||;True|2026-02-12T17:03:04.2760582+08:00||;True|2026-02-12T16:52:01.7403172+08:00||;True|2026-02-12T16:49:57.7070533+08:00||;False|2026-02-12T16:49:53.4063422+08:00||;True|2026-02-12T16:43:13.2040344+08:00||;False|2026-02-12T16:42:58.3321319+08:00||;True|2026-02-12T16:29:28.6386479+08:00||;True|2026-02-12T16:19:46.9195592+08:00||;True|2026-02-12T14:32:25.3192428+08:00||;True|2026-02-12T12:18:02.1864306+08:00||;True|2026-02-11T20:39:23.8084775+08:00||;True|2026-02-11T20:37:06.6507806+08:00||;True|2026-02-11T20:04:19.1839991+08:00||;True|2026-02-10T21:59:37.6685615+08:00||;True|2026-02-10T15:43:23.5038986+08:00||;True|2026-02-10T14:42:48.6214001+08:00||;True|2026-02-06T23:15:19.0037070+08:00||;True|2026-02-06T22:52:30.1006808+08:00||;True|2026-02-06T22:49:02.0056235+08:00||;True|2026-02-06T22:45:30.6355735+08:00||;False|2026-02-06T22:45:25.7210123+08:00||;True|2026-02-06T22:38:37.6994272+08:00||;True|2026-02-06T22:14:47.8146805+08:00||;True|2026-02-03T22:34:12.3588819+08:00||;True|2026-02-03T22:20:08.9945012+08:00||;True|2026-02-03T21:06:17.7655312+08:00||;True|2026-02-02T23:24:09.9134119+08:00||;True|2026-02-02T23:21:52.3235946+08:00||;False|2026-02-02T23:21:47.1386702+08:00||;True|2026-02-02T23:20:46.6277206+08:00||;False|2026-02-02T23:20:40.3158947+08:00||;True|2026-02-02T22:55:39.4268475+08:00||;True|2026-02-01T21:34:30.5989260+08:00||;True|2026-02-01T21:30:20.7556066+08:00||;True|2026-01-30T21:56:47.1840381+08:00||;True|2026-01-28T22:01:00.8412391+08:00||;False|2026-01-28T21:49:29.1242233+08:00||;True|2026-01-28T21:48:26.1707204+08:00||;True|2026-01-28T21:48:05.8291762+08:00||;False|2026-01-28T21:48:01.1596391+08:00||;True|2026-01-28T21:37:59.4831763+08:00||;False|2026-01-28T21:37:53.5855464+08:00||;True|2026-01-28T21:27:51.1872828+08:00||;True|2026-01-28T13:01:14.1677037+08:00||;True|2026-01-28T12:36:45.7819776+08:00||;True|2026-01-28T12:09:15.6540204+08:00||;True|2026-01-28T12:08:40.0490617+08:00||;True|2026-01-28T11:58:55.4078870+08:00||;True|2026-01-27T22:37:03.3304942+08:00||;True|2026-01-27T22:05:40.4316281+08:00||;True|2026-01-26T22:30:43.5083924+08:00||;False|2026-01-26T22:30:33.7355213+08:00||;True|2026-01-26T22:26:26.0218548+08:00||;True|2026-01-26T22:21:32.3171217+08:00||;True|2026-01-26T22:20:40.3916780+08:00||;True|2026-01-26T22:16:19.1017273+08:00||;True|2026-01-26T22:13:34.2028883+08:00||;True|2026-01-26T21:46:23.7117812+08:00||;True|2026-01-26T21:41:19.6963033+08:00||;True|2026-01-25T21:27:13.9893777+08:00||;True|2026-01-24T21:45:22.8493624+08:00||;True|2026-01-24T21:31:35.4635265+08:00||;True|2026-01-24T21:27:31.3098506+08:00||;True|2026-01-24T15:47:01.6934638+08:00||;True|2026-01-24T15:32:35.6316009+08:00||;True|2026-01-24T15:16:28.7216639+08:00||;True|2026-01-23T22:14:26.8066324+08:00||;True|2026-01-23T13:36:48.4086406+08:00||;True|2026-01-23T13:30:27.2924204+08:00||;True|2026-01-23T13:02:53.3219368+08:00||;True|2026-01-23T13:01:54.3466638+08:00||;True|2026-01-23T13:01:28.8560809+08:00||;True|2026-01-22T23:18:32.0400436+08:00||;True|2026-01-22T22:29:29.5746209+08:00||;True|2026-01-22T21:32:21.7284081+08:00||;True|2026-01-22T21:20:26.5985955+08:00||;False|2026-01-22T21:20:21.1372539+08:00||;True|2026-01-22T21:11:18.3771739+08:00||;True|2026-01-22T20:58:55.9862778+08:00||;True|2026-01-22T20:51:48.6699461+08:00||;False|2026-01-22T20:51:42.2079210+08:00||;True|2026-01-22T20:50:34.7280114+08:00||;True|2026-01-22T20:50:11.1588492+08:00||;True|2026-01-22T16:11:14.0626037+08:00||;True|2026-01-22T15:53:16.6377347+08:00||;True|2026-01-22T15:45:34.0935091+08:00||;True|2026-01-22T12:44:28.1577014+08:00||;True|2026-01-22T12:40:45.7449335+08:00||;True|2026-01-22T12:39:07.0683214+08:00||;True|2026-01-22T09:55:49.7086190+08:00||;True|2026-01-22T01:37:53.6972395+08:00||;True|2026-01-22T01:34:14.2142463+08:00||;True|2026-01-22T01:32:50.9228911+08:00||;True|2026-01-22T01:29:43.8871986+08:00||;True|2026-01-22T01:29:40.7838709+08:00||;True|2026-01-22T01:27:34.4763970+08:00||; + True|2026-02-12T11:27:23.6648031Z||;True|2026-02-12T19:25:10.7424743+08:00||;True|2026-02-12T17:33:31.2163848+08:00||;True|2026-02-12T17:16:08.2015031+08:00||;False|2026-02-12T17:16:02.9041381+08:00||;True|2026-02-12T17:12:44.8082909+08:00||;True|2026-02-12T17:04:22.1666828+08:00||;True|2026-02-12T17:03:04.2760582+08:00||;True|2026-02-12T16:52:01.7403172+08:00||;True|2026-02-12T16:49:57.7070533+08:00||;False|2026-02-12T16:49:53.4063422+08:00||;True|2026-02-12T16:43:13.2040344+08:00||;False|2026-02-12T16:42:58.3321319+08:00||;True|2026-02-12T16:29:28.6386479+08:00||;True|2026-02-12T16:19:46.9195592+08:00||;True|2026-02-12T14:32:25.3192428+08:00||;True|2026-02-12T12:18:02.1864306+08:00||;True|2026-02-11T20:39:23.8084775+08:00||;True|2026-02-11T20:37:06.6507806+08:00||;True|2026-02-11T20:04:19.1839991+08:00||;True|2026-02-10T21:59:37.6685615+08:00||;True|2026-02-10T15:43:23.5038986+08:00||;True|2026-02-10T14:42:48.6214001+08:00||;True|2026-02-06T23:15:19.0037070+08:00||;True|2026-02-06T22:52:30.1006808+08:00||;True|2026-02-06T22:49:02.0056235+08:00||;True|2026-02-06T22:45:30.6355735+08:00||;False|2026-02-06T22:45:25.7210123+08:00||;True|2026-02-06T22:38:37.6994272+08:00||;True|2026-02-06T22:14:47.8146805+08:00||;True|2026-02-03T22:34:12.3588819+08:00||;True|2026-02-03T22:20:08.9945012+08:00||;True|2026-02-03T21:06:17.7655312+08:00||;True|2026-02-02T23:24:09.9134119+08:00||;True|2026-02-02T23:21:52.3235946+08:00||;False|2026-02-02T23:21:47.1386702+08:00||;True|2026-02-02T23:20:46.6277206+08:00||;False|2026-02-02T23:20:40.3158947+08:00||;True|2026-02-02T22:55:39.4268475+08:00||;True|2026-02-01T21:34:30.5989260+08:00||;True|2026-02-01T21:30:20.7556066+08:00||;True|2026-01-30T21:56:47.1840381+08:00||;True|2026-01-28T22:01:00.8412391+08:00||;False|2026-01-28T21:49:29.1242233+08:00||;True|2026-01-28T21:48:26.1707204+08:00||;True|2026-01-28T21:48:05.8291762+08:00||;False|2026-01-28T21:48:01.1596391+08:00||;True|2026-01-28T21:37:59.4831763+08:00||;False|2026-01-28T21:37:53.5855464+08:00||;True|2026-01-28T21:27:51.1872828+08:00||;True|2026-01-28T13:01:14.1677037+08:00||;True|2026-01-28T12:36:45.7819776+08:00||;True|2026-01-28T12:09:15.6540204+08:00||;True|2026-01-28T12:08:40.0490617+08:00||;True|2026-01-28T11:58:55.4078870+08:00||;True|2026-01-27T22:37:03.3304942+08:00||;True|2026-01-27T22:05:40.4316281+08:00||;True|2026-01-26T22:30:43.5083924+08:00||;False|2026-01-26T22:30:33.7355213+08:00||;True|2026-01-26T22:26:26.0218548+08:00||;True|2026-01-26T22:21:32.3171217+08:00||;True|2026-01-26T22:20:40.3916780+08:00||;True|2026-01-26T22:16:19.1017273+08:00||;True|2026-01-26T22:13:34.2028883+08:00||;True|2026-01-26T21:46:23.7117812+08:00||;True|2026-01-26T21:41:19.6963033+08:00||;True|2026-01-25T21:27:13.9893777+08:00||;True|2026-01-24T21:45:22.8493624+08:00||;True|2026-01-24T21:31:35.4635265+08:00||;True|2026-01-24T21:27:31.3098506+08:00||;True|2026-01-24T15:47:01.6934638+08:00||;True|2026-01-24T15:32:35.6316009+08:00||;True|2026-01-24T15:16:28.7216639+08:00||;True|2026-01-23T22:14:26.8066324+08:00||;True|2026-01-23T13:36:48.4086406+08:00||;True|2026-01-23T13:30:27.2924204+08:00||;True|2026-01-23T13:02:53.3219368+08:00||;True|2026-01-23T13:01:54.3466638+08:00||;True|2026-01-23T13:01:28.8560809+08:00||;True|2026-01-22T23:18:32.0400436+08:00||;True|2026-01-22T22:29:29.5746209+08:00||;True|2026-01-22T21:32:21.7284081+08:00||;True|2026-01-22T21:20:26.5985955+08:00||;False|2026-01-22T21:20:21.1372539+08:00||;True|2026-01-22T21:11:18.3771739+08:00||;True|2026-01-22T20:58:55.9862778+08:00||;True|2026-01-22T20:51:48.6699461+08:00||;False|2026-01-22T20:51:42.2079210+08:00||;True|2026-01-22T20:50:34.7280114+08:00||;True|2026-01-22T20:50:11.1588492+08:00||;True|2026-01-22T16:11:14.0626037+08:00||;True|2026-01-22T15:53:16.6377347+08:00||;True|2026-01-22T15:45:34.0935091+08:00||;True|2026-01-22T12:44:28.1577014+08:00||;True|2026-01-22T12:40:45.7449335+08:00||;True|2026-01-22T12:39:07.0683214+08:00||;True|2026-01-22T09:55:49.7086190+08:00||;True|2026-01-22T01:37:53.6972395+08:00||;True|2026-01-22T01:34:14.2142463+08:00||;True|2026-01-22T01:32:50.9228911+08:00||; \ No newline at end of file diff --git a/app/src/pages/set/AppSet.vue b/app/src/pages/set/AppSet.vue index 41f93fe..607cd81 100644 --- a/app/src/pages/set/AppSet.vue +++ b/app/src/pages/set/AppSet.vue @@ -243,7 +243,7 @@ -
+
diff --git a/job/DouyinBasicSyncJob.cs b/job/DouyinBasicSyncJob.cs index 6fe3f11..be3dd79 100644 --- a/job/DouyinBasicSyncJob.cs +++ b/job/DouyinBasicSyncJob.cs @@ -483,7 +483,7 @@ namespace dy.net.job { if (cate != null && cate.CateType != VideoTypeEnum.dy_custom_collect) { - if (syncCount >= 15) + if (syncCount >= 30) { Log.Debug($"[{cookie.UserName}][{VideoType.GetDesc()}]:本次同步数量{syncCount},等下次任务继续同步"); return true; @@ -684,7 +684,14 @@ namespace dy.net.job } } //动态视频生成nfo - NfoFileGenerator.GenerateVideoNfoFile(dynamicVideo); + if (cate != null && (VideoType == VideoTypeEnum.dy_mix || VideoType == VideoTypeEnum.dy_series)) + { + NfoFileGenerator.GenerateVideoNfoFile(dynamicVideo, cate.Name); + } + else + { + NfoFileGenerator.GenerateVideoNfoFile(dynamicVideo); + } videos.Add(dynamicVideo); syncCount++; if (syncCount + syncCount1 >= config.BatchCount) @@ -1461,6 +1468,10 @@ namespace dy.net.job } else { + if (cate != null&&(VideoType == VideoTypeEnum.dy_mix || VideoType == VideoTypeEnum.dy_series)) + { + NfoFileGenerator.GenerateVideoNfoFile(video,cate.Name); + } // 生成NFO文件,动态视频 合成后重新生成,不在这里生成nfo NfoFileGenerator.GenerateVideoNfoFile(video); } diff --git a/utils/NfoFileGenerator.cs b/utils/NfoFileGenerator.cs index 169cf5f..99170a0 100644 --- a/utils/NfoFileGenerator.cs +++ b/utils/NfoFileGenerator.cs @@ -17,8 +17,9 @@ namespace dy.net.utils /// NFO文件包含视频的元数据信息,如标题、作者、封面等 /// /// 视频信息 + /// /// 一个表示异步操作的任务 - public static void GenerateVideoNfoFile(DouyinVideo video) + public static void GenerateVideoNfoFile(DouyinVideo video, string tvShowTitle = "") { try { @@ -76,11 +77,11 @@ namespace dy.net.utils string directory = Path.GetDirectoryName(nfoFullPath); nfoFullPath = Path.Combine(directory, "tvshow.nfo"); if (!File.Exists(nfoFullPath)) - GenerateNfoFile(nfoInfo, nfoFullPath, "tvshow"); + GenerateNfoFile(nfoInfo, nfoFullPath, tvShowTitle, "tvshow"); var nfoFullPathMix = Path.Combine(directory, Path.GetFileNameWithoutExtension(video.VideoSavePath) + ".nfo"); if (!File.Exists(nfoFullPathMix)) - GenerateNfoFile(nfoInfo, nfoFullPathMix, "episodedetails"); + GenerateNfoFile(nfoInfo, nfoFullPathMix,"", "episodedetails"); } else @@ -95,7 +96,7 @@ namespace dy.net.utils } } - private static void GenerateNfoFile(DouyinVideoNfo videoInfo, string filePath, string xmlRoot = "movie") + private static void GenerateNfoFile(DouyinVideoNfo videoInfo, string filePath,string tvShowTitle="", string xmlRoot = "movie") { try { @@ -113,8 +114,19 @@ namespace dy.net.utils //root.Add(new XElement("plot", $"")); // 添加视频信息(先清理无效字符) - if (!string.IsNullOrWhiteSpace(videoInfo.Title)) - root.Add(new XElement("title", CleanInvalidXmlChars(videoInfo.Title))); + if(xmlRoot== "tvshow") + { + if(!string.IsNullOrEmpty(tvShowTitle)) + root.Add(new XElement("title", CleanInvalidXmlChars(tvShowTitle))); + else if (!string.IsNullOrWhiteSpace(videoInfo.Title)) + root.Add(new XElement("title", CleanInvalidXmlChars(videoInfo.Title))); + } + else + { + if (!string.IsNullOrWhiteSpace(videoInfo.Title)) + root.Add(new XElement("title", CleanInvalidXmlChars(videoInfo.Title))); + } + //if (!string.IsNullOrWhiteSpace(videoInfo.Author)) // root.Add(new XElement("author", CleanInvalidXmlChars(videoInfo.Author)));