-
Notifications
You must be signed in to change notification settings - Fork 1
/
SubtitleMenuManager.cs
93 lines (64 loc) · 2.69 KB
/
SubtitleMenuManager.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
using System;
using System.Collections.Generic;
using MediaBrowser;
using MediaBrowser.Library;
using MediaBrowser.Library.Entities;
using MediaBrowser.Library.Logging;
using Microsoft.MediaCenter;
using SubtitleProvider;
public class SubtitleMenuManager
{
#region Menu Creation
public static void CreateMenu(Kernel kernel)
{
var subtitleMenuItem = new MenuItem("Subtitle?", "resx://MediaBrowser/MediaBrowser.Resources/IconFloral", SubtitleMenuManager.DoesSubTitleExist, new List<Type>() { typeof(Movie), typeof(Episode) });
kernel.AddMenuItem(subtitleMenuItem);
}
#endregion
#region Subtitle Menu Item
public static void DoesSubTitleExist(Item item)
{
var video = item.BaseItem as Video;
if (video == null) return;
var localSubtitleFinderFactory = new LocalSubtitleFinderFactory(Plugin.PluginOptions.Instance.ExtendedLogging);
var finder = localSubtitleFinderFactory.CreateLocalSubtitleFinderByVideo(video, Logger.LoggerInstance);
var subtitleExist = finder.DoesSubtitleExist();
if (subtitleExist)
{
HandleSubtitleAvailable(video);
return;
}
HandleNoSubtitle(video);
}
#endregion
#region Handlers
private static void HandleSubtitleAvailable(Video video)
{
var blacklistDialogResult = Application.DisplayDialog("Blacklist and check online for new subtitles?", "Subtitle available", DialogButtons.No | DialogButtons.Yes, 0);
if (blacklistDialogResult != DialogResult.Yes)
return;
HandleBlackListing(video);
}
private static void HandleBlackListing(Video video)
{
var dataSource = DataSourceFactory.CreateDataSource();
var subtitle = dataSource.GetCurrentSubtitle(video);
var blackListingProvider = new BlackListingProvider(video);
blackListingProvider.BlackList(subtitle);
HandleDownloadSubtitle(video);
}
private static void HandleNoSubtitle(Video video)
{
var downloadDialogResult = Application.DisplayDialog("Check online for subtitles?", "No subtitle available", DialogButtons.No | DialogButtons.Yes, 0);
if (downloadDialogResult != DialogResult.Yes)
return;
HandleDownloadSubtitle(video);
}
private static void HandleDownloadSubtitle(Video video)
{
var subtitleProcess = new BackgroundProcessor<Action>(2, action => action(), "Subtitle provider");
var subtitleController = new SubtitleProviderProcessor(Logger.LoggerInstance, SubtitleProviderProcessor.ProvideRequestSourceEnum.Ui);
subtitleProcess.Inject(() => subtitleController.ProvideSubtitleForVideo(video));
}
#endregion
}