pluginhider: allow to run with e2 before plugin weight introduction
[enigma2-plugins.git] / pluginhider / src / plugin.py
1 from . import _
2
3 # Plugin definition
4 from Plugins.Plugin import PluginDescriptor
5
6 from Components.PluginComponent import PluginComponent
7 from Components.config import config, ConfigSubsection, ConfigSet
8
9 from PluginHiderSetup import PluginHiderSetup
10
11 config.plugins.pluginhider = ConfigSubsection()
12 config.plugins.pluginhider.hideextensions = ConfigSet(choices=[])
13 config.plugins.pluginhider.hideplugins = ConfigSet(choices=[])
14 config.plugins.pluginhider.hideeventinfo = ConfigSet(choices=[])
15
16 hasPluginWeight = True
17
18 def hidePlugin(plugin):
19         """Convenience function for external code to hide a plugin."""
20         hide = config.plugins.pluginhider.hideplugins.value
21         if not plugin.name in hide:
22                 hide.append(plugin.name)
23                 config.plugins.pluginhider.hideplugins.save()   
24
25 def PluginComponent_getPlugins(self, where):
26         if not isinstance(where, list):
27                 where = [ where ]
28
29         res = []
30         if PluginDescriptor.WHERE_EXTENSIONSMENU in where:
31                 hide = config.plugins.pluginhider.hideextensions.value
32                 res.extend((x for x in self.plugins.get(PluginDescriptor.WHERE_EXTENSIONSMENU, []) if x.name not in hide))
33                 where.remove(PluginDescriptor.WHERE_EXTENSIONSMENU)
34
35         if PluginDescriptor.WHERE_PLUGINMENU in where:
36                 hide = config.plugins.pluginhider.hideplugins.value
37                 res.extend((x for x in self.plugins.get(PluginDescriptor.WHERE_PLUGINMENU, []) if x.name not in hide))
38                 where.remove(PluginDescriptor.WHERE_PLUGINMENU)
39
40         if PluginDescriptor.WHERE_EVENTINFO in where:
41                 hide = config.plugins.pluginhider.hideeventinfo.value
42                 res.extend((x for x in self.plugins.get(PluginDescriptor.WHERE_EVENTINFO , []) if x.name not in hide))
43                 where.remove(PluginDescriptor.WHERE_EVENTINFO)
44
45         if where:
46                 res.extend(PluginComponent.pluginHider_baseGetPlugins(self, where))
47         if hasPluginWeight:
48                 res.sort(key=lambda x:x.weight)
49         return res
50
51 def autostart(reason, *args, **kwargs):
52         if reason == 0:
53                 PluginComponent.pluginHider_baseGetPlugins = PluginComponent.getPlugins
54                 PluginComponent.getPlugins = PluginComponent_getPlugins
55         else:
56                 PluginComponent.getPlugins = PluginComponent.pluginHider_baseGetPlugins
57
58 def main(session, *args, **kwargs):
59         session.open(PluginHiderSetup)
60
61 def menu(menuid):
62         if menuid != "system":
63                 return []
64         return [(_("Hide Plugins"), main, "pluginhider_setup", None)]
65
66 def Plugins(**kwargs):
67         pd =  PluginDescriptor(
68                 where=PluginDescriptor.WHERE_AUTOSTART,
69                 fnc=autostart,
70                 needsRestart=False,
71         )
72
73         if not hasattr(pd, 'weight'):
74                 global hasPluginWeight
75                 hasPluginWeight = False
76
77         return [
78                 pd,
79                 PluginDescriptor(
80                         where=PluginDescriptor.WHERE_MENU,
81                         fnc=menu,
82                         needsRestart=False,
83                 ),
84         ]