-
Notifications
You must be signed in to change notification settings - Fork 80
Expand file tree
/
Copy pathPluginViewModel.cs
More file actions
111 lines (101 loc) · 3.71 KB
/
PluginViewModel.cs
File metadata and controls
111 lines (101 loc) · 3.71 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
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using NLog;
using Torch.API;
using Torch.API.Plugins;
using Torch.Server.Views;
namespace Torch.Server.ViewModels
{
public class PluginViewModel
{
public UserControl Control { get; }
public string Name { get; }
public ITorchPlugin Plugin { get; }
private static Logger _log = LogManager.GetCurrentClassLogger();
public PluginViewModel(ITorchPlugin plugin)
{
Plugin = plugin;
if (Plugin is IWpfPlugin p)
{
try
{
Control = p.GetControl();
}
catch(InvalidOperationException ex)
{
//ignore as its likely a hot reload, we can figure out a better solution in the future.
Control = null;
}
catch (Exception ex)
{
_log.Error(ex, $"Exception loading interface for plugin {Plugin.Name}! Plugin interface will not be available!");
Control = null;
}
}
Name = $"{plugin.Name} ({plugin.Version})";
ThemeControl.UpdateDynamicControls += UpdateResourceDict;
UpdateResourceDict(ThemeControl.currentTheme);
}
public void UpdateResourceDict(ResourceDictionary dictionary)
{
if (this.Control == null)
return;
this.Control.Resources.MergedDictionaries.Clear();
this.Control.Resources.MergedDictionaries.Add(dictionary);
}
public Brush Color
{
get {
switch (Plugin.State)
{
case PluginState.NotInitialized:
case PluginState.MissingDependency:
case PluginState.DisabledError:
return Brushes.Red;
case PluginState.UpdateRequired:
return Brushes.DodgerBlue;
case PluginState.UninstallRequested:
return Brushes.Gold;
case PluginState.NotInstalled:
case PluginState.DisabledUser:
return Brushes.Gray;
case PluginState.Enabled:
return Brushes.Transparent;
default:
throw new ArgumentOutOfRangeException();
}
}
}
public string ToolTip
{
get { switch (Plugin.State)
{
case PluginState.NotInitialized:
return "Error during load.";
case PluginState.DisabledError:
return "Disabled due to error on load.";
case PluginState.DisabledUser:
return "Disabled.";
case PluginState.UpdateRequired:
return "Update required.";
case PluginState.UninstallRequested:
return "Marked for uninstall.";
case PluginState.NotInstalled:
return "Not installed. Click 'Enable'";
case PluginState.Enabled:
return string.Empty;
case PluginState.MissingDependency:
return "Dependency missing. Check the log.";
default:
throw new ArgumentOutOfRangeException();
}
}
}
}
}