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