-
-
Notifications
You must be signed in to change notification settings - Fork 40
Expand file tree
/
Copy pathPlugin.cs
More file actions
114 lines (103 loc) · 3.72 KB
/
Plugin.cs
File metadata and controls
114 lines (103 loc) · 3.72 KB
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
using System.Collections.Concurrent;
using Gelato.Config;
using Gelato.Services;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Plugins;
using MediaBrowser.Model.Plugins;
using MediaBrowser.Model.Serialization;
using Microsoft.Extensions.Logging;
namespace Gelato;
public class GelatoPlugin : BasePlugin<PluginConfiguration>, IHasWebPages
{
private readonly ILogger<GelatoPlugin> _log;
private readonly GelatoManager _manager;
private ConcurrentDictionary<Guid, PluginConfiguration> UserConfigs { get; } = new();
private readonly GelatoStremioProviderFactory _stremioFactory;
public PalcoCacheService PalcoCache { get; } // Migrated Palco Cache Service
public GelatoPlugin(
IApplicationPaths applicationPaths,
GelatoManager manager,
IXmlSerializer xmlSerializer,
ILogger<GelatoPlugin> log,
GelatoStremioProviderFactory stremioFactory,
PalcoCacheService palcoCache
)
: base(applicationPaths, xmlSerializer)
{
Instance = this;
_log = log;
_manager = manager;
_stremioFactory = stremioFactory;
PalcoCache = palcoCache;
}
public static GelatoPlugin? Instance { get; private set; }
// Event fired when the plugin configuration is updated via UpdateConfiguration
public static new event Action<PluginConfiguration>? ConfigurationChanged;
public override string Name => "Gelato";
public override Guid Id => Guid.Parse("94EA4E14-8163-4989-96FE-0A2094BC2D6A");
public override string Description => "on-demand MediaSources and optional image suppression.";
/// <inheritdoc />
public IEnumerable<PluginPageInfo> GetPages()
{
var prefix = GetType().Namespace;
yield return new PluginPageInfo
{
Name = "config",
EnableInMainMenu = true,
EmbeddedResourcePath = prefix + ".Config.config.html",
};
}
public override void UpdateConfiguration(BasePluginConfiguration configuration)
{
var cfg = (PluginConfiguration)configuration;
if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("DISABLE_P2P")))
{
cfg.P2PEnabled = false;
}
base.UpdateConfiguration(cfg);
_manager.ClearCache();
_stremioFactory.ClearCache();
UserConfigs.Clear();
// Notify subscribers that configuration changed
try
{
ConfigurationChanged?.Invoke(cfg);
}
catch (Exception ex)
{
_log.LogWarning(ex, "Error while invoking ConfigurationChanged event");
}
}
public PluginConfiguration GetConfig(Guid userId)
{
try
{
return UserConfigs.GetOrAdd(
userId,
_ =>
{
var cfg = Instance?.Configuration;
if (userId != Guid.Empty)
{
var userConfig = Instance?.Configuration.UserConfigs.FirstOrDefault(u =>
u.UserId == userId
);
cfg =
userConfig?.ApplyOverrides(Instance?.Configuration)
?? Instance?.Configuration;
}
var stremio = _stremioFactory.Create(cfg);
cfg.Stremio = stremio;
cfg.MovieFolder = _manager.TryGetMovieFolder(cfg);
cfg.SeriesFolder = _manager.TryGetSeriesFolder(cfg);
return cfg;
}
);
}
catch (Exception ex)
{
_log.LogWarning(ex, "Error getting config");
return new PluginConfiguration();
}
}
}