diff --git a/Jellyfin.Plugin.Danmu/ScheduledTasks/RefreshDanmakuTask.cs b/Jellyfin.Plugin.Danmu/ScheduledTasks/RefreshDanmakuTask.cs deleted file mode 100644 index 45aa830..0000000 --- a/Jellyfin.Plugin.Danmu/ScheduledTasks/RefreshDanmakuTask.cs +++ /dev/null @@ -1,151 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using Jellyfin.Data.Enums; -using Jellyfin.Plugin.Danmu.Model; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Model.Tasks; -using MediaBrowser.Model.Entities; -using Microsoft.Extensions.Logging; -using Jellyfin.Plugin.Danmu.Core.Extensions; -using Jellyfin.Plugin.Danmu.Scrapers; -using System.Collections.ObjectModel; - -namespace Jellyfin.Plugin.Danmu.ScheduledTasks -{ - public class RefreshDanmuTask : IScheduledTask - { - private readonly ILibraryManager _libraryManager; - private readonly ScraperManager _scraperManager; - private readonly ILogger _logger; - private readonly LibraryManagerEventsHelper _libraryManagerEventsHelper; - - - public string Key => $"{Plugin.Instance.Name}RefreshDanmu"; - - public string Name => "更新弹幕文件"; - - public string Description => $"根据视频元数据下载最新的弹幕文件。"; - - public string Category => Plugin.Instance.Name; - - /// - /// Initializes a new instance of the class. - /// - /// Instance of the interface. - /// Instance of the interface. - public RefreshDanmuTask(ILoggerFactory loggerFactory, ILibraryManager libraryManager, LibraryManagerEventsHelper libraryManagerEventsHelper, ScraperManager scraperManager) - { - _logger = loggerFactory.CreateLogger(); - _libraryManager = libraryManager; - _scraperManager = scraperManager; - _libraryManagerEventsHelper = libraryManagerEventsHelper; - } - - public IEnumerable GetDefaultTriggers() - { - return new List(); - // yield return new TaskTriggerInfo - // { - // Type = TaskTriggerInfo.TriggerWeekly, - // DayOfWeek = DayOfWeek.Monday, - // TimeOfDayTicks = TimeSpan.FromHours(4).Ticks - // }; - } - - public async Task ExecuteAsync(IProgress progress, CancellationToken cancellationToken) - { - await Task.Yield(); - - progress?.Report(0); - - var scrapers = this._scraperManager.All(); - var items = _libraryManager.GetItemList(new InternalItemsQuery - { - // MediaTypes = new[] { MediaType.Video }, - HasAnyProviderId = GetScraperFilter(scrapers), - IncludeItemTypes = new[] { BaseItemKind.Movie, BaseItemKind.Season } - }).ToList(); - - _logger.LogInformation("Refresh danmu for {0} videos.", items.Count); - - var successCount = 0; - var failCount = 0; - foreach (var (item, idx) in items.WithIndex()) - { - cancellationToken.ThrowIfCancellationRequested(); - progress?.Report((double)idx / items.Count * 100); - - try - { - // 没epid元数据的不处理 - if (!this.HasAnyScraperProviderId(scrapers, item)) - { - successCount++; - continue; - } - - // item所在的媒体库不启用弹幕插件,忽略处理 - if (_libraryManagerEventsHelper.IsIgnoreItem(item)) - { - continue; - } - - - // 推送下载最新的xml (season刷新会同时刷新episode,所以不需要再推送episode,而且season是bv号的,只能通过season来刷新) - switch (item) - { - case Movie: - await _libraryManagerEventsHelper.ProcessQueuedMovieEvents(new List() { new LibraryEvent { Item = item, EventType = EventType.Update } }, EventType.Update).ConfigureAwait(false); - break; - case Season: - await _libraryManagerEventsHelper.ProcessQueuedSeasonEvents(new List() { new LibraryEvent { Item = item, EventType = EventType.Update } }, EventType.Update).ConfigureAwait(false); - break; - } - successCount++; - } - catch (Exception ex) - { - _logger.LogError(ex, "Refresh danmu failed for video {0}: {1}", item.Name, ex.Message); - failCount++; - } - } - - progress?.Report(100); - _logger.LogInformation("Exectue task completed. success: {0} fail: {1}", successCount, failCount); - } - - private bool HasAnyScraperProviderId(ReadOnlyCollection scrapers, BaseItem item) - { - foreach (var scraper in scrapers) - { - var providerVal = item.GetProviderId(scraper.ProviderId); - if (!string.IsNullOrEmpty(providerVal)) - { - return true; - } - } - - return false; - } - - private Dictionary GetScraperFilter(ReadOnlyCollection scrapers) - { - var filter = new Dictionary(); - foreach (var scraper in scrapers) - { - filter.Add(scraper.ProviderId, string.Empty); - } - - return filter; - } - } -} diff --git a/README.md b/README.md index a7c6d64..38a600e 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,6 @@ jellyfin弹幕自动下载插件,已支持的弹幕来源:b站,弹弹play * 自动下载xml格式弹幕 * 生成ass格式弹幕 -* 可配置定时更新 * 支持api访问弹幕 ![logo](doc/logo.png) @@ -38,7 +37,6 @@ jellyfin弹幕自动下载插件,已支持的弹幕来源:b站,弹弹play 4. 假如弹幕匹配错误,请在电影或剧集中使用**修改字幕**功能搜索修正 5. 对于电视剧或动画,需要保证每季视频集数一致,并正确填写集号,这样每季视频的弹幕才会自动获取 6. 同时生成ass弹幕,需要在插件配置中打开,默认是关闭的 -7. 定时更新需要自己到计划任务中添加定时时间,默认手工执行更新 > B站电影或季元数据也支持手动指定BV/AV号,来匹配UP主上传的视频弹幕。多P视频和剧集是按顺序一一对应匹配的,所以保证jellyfin中剧集有正确的集号很重要