1 from Plugins.Plugin import PluginDescriptor
2 from Screens.Screen import Screen
3 from Screens.ChoiceBox import ChoiceBox
4 from Components.Label import Label
5 from Components.MenuList import MenuList
6 from Components.ActionMap import ActionMap
7 from Components.config import config,ConfigSubsection,ConfigSelection, getConfigListEntry
8 from Components.ConfigList import ConfigListScreen
10 from os import path as os_path, listdir as os_listdir, system as os_system, remove as os_remove
11 ###############################################################################
12 config.plugins.logomanager = ConfigSubsection()
13 config.plugins.logomanager.path = ConfigSelection([("/media/cf/bootlogos/",_("CF Drive")),("/media/hdd/bootlogos/",_("Harddisk"))],default="/media/hdd/bootlogos/")
15 def main(session,**kwargs):
16 if os_path.isdir(config.plugins.logomanager.path.value) is not True:
17 session.open(LogoManagerConfigScreen)
19 session.open(LogoManagerScreen)
21 def Plugins(path,**kwargs):
24 return PluginDescriptor(
26 description="manage logos to display at boottime",
27 where = PluginDescriptor.WHERE_PLUGINMENU,
30 ###############################################################################
31 class LogoManagerScreen(Screen):
33 <screen flags="wfNoBorder" position="60,450" size="600,29" title="Logo Manager" >
34 <widget name="filelist" position="0,0" size="600,30" />
38 ("bootlogo","/boot/bootlogo.mvi")
39 ,("wait","/boot/bootlogo_wait.mvi")
40 ,("backdrop","/boot/backdrop.mvi")
41 ,("radio","/usr/share/enigma2/radio.mvi")
44 def __init__(self, session, args = 0):
45 self.session = session
46 config.plugins.logomanager.path.value
47 self.skin = LogoManagerScreen.skin
48 Screen.__init__(self, session)
49 self["filelist"] = MenuList([])
50 self["filelist"].onSelectionChanged.append(self.showSelected)
51 self["actions"] = ActionMap(["WizardActions", "DirectionActions","MenuActions","ShortcutActions","GlobalActions"],
53 "ok": self.showSelected,
55 "menu": self.openMenu,
58 ## stop current service to free the videodevice
59 self.current_service = self.session.nav.getCurrentlyPlayingServiceReference()
60 self.session.nav.stopService()
63 self.setlist_to_avaiable()
65 self.makeBootWritable()
66 self.onShown.append(self.showSelected)
68 def check_backup(self):
69 """ if a copy of the original file is not found in the plugindir, backup them """
71 for target in self.targets:
72 file = target[1].split("/")[-1]
73 if os_path.isfile(plugin_path+file) is not True:
74 print "backing up original ",target[0]," from ",file
75 os_system("cp '%s' '%s'" %(target[1],plugin_path+"/"+file))
77 def restoreOriginal(self):
78 """ restoring original mvis from the backuped mvi in the plugindir"""
80 for target in self.targets:
81 file = target[1].split("/")[-1]
82 if os_path.isfile(plugin_path+"/"+file) is True:
83 print "restoring original ",target[0]," from ",plugin_path+"/"+file,"to",target[1]
84 os_system("cp '%s' '%s'" %(plugin_path+"/"+file,target[1]))
88 self.makeBootReadonly()
89 self.session.nav.playService(self.current_service)
92 def showSelected(self):
93 """ show the currently selected MVI of the list """
94 sel= self["filelist"].getCurrent()[1]
98 """ opens up the Main Menu """
100 menu.append(("install selected Logo as ...",self.action_install))
101 menu.append(("show aktive Logos",self.setlist_to_current))
102 menu.append(("show avaiable Logos",self.setlist_to_avaiable))
103 menu.append(("reset all Logos to default",self.restoreOriginal))
104 menu.append(("open configuration",self.openConfig))
105 self.session.openWithCallback(self.selectedMenu,ChoiceBox,_("please select a option"),menu)
107 def openConfig(self):
108 self.session.open(LogoManagerConfigScreen)
110 def selectedMenu(self,choice):
111 if choice is not None:
114 def setlist_to_current(self):
115 """ fills the list with the target MVIs"""
118 for i in self.targets:
119 filelist.append(i[1])
120 self.reloadPictures(filelist)
123 def setlist_to_avaiable(self):
124 """ fills the list with all found new MVIs"""
126 for i in os_listdir(config.plugins.logomanager.path.value):
127 if i.endswith(".mvi"):
128 filelist.append(config.plugins.logomanager.path.value+i)
130 self.reloadPictures(filelist)
133 def action_install(self):
134 """ choicebox, to select target to install an mvi to"""
135 self.session.openWithCallback(self.selectedTarget,ChoiceBox,_("select Target for logo"),self.targets)
137 def selectedTarget(self,choice):
138 if choice is not None:
139 self.installMVI(choice,self["filelist"].getCurrent()[1])
141 def reloadPictures(self,filelist):
142 """ build the menulist with givven files """
145 list.append((i.split("/")[-1],i))
146 self["filelist"].l.setList(list)
149 def showMVI(self,mvifile):
151 print "playing MVI",mvifile
152 os_system("/usr/bin/showiframe '%s'" % mvifile)
154 def installMVI(self,target,sourcefile):
155 """ installs a mvi by overwriting the target with a source mvi """
156 print "installing %s as %s on %s" %(sourcefile,target[0],target[1])
157 if os_path.isfile(target[1]):
159 os_system("cp '%s' '%s'"%(sourcefile,target[1]))
161 def makeBootWritable(self):
162 """ because /boot isnt writeable by default, we will change that here """
163 os_system("mount -o rw,remount /boot")
165 def makeBootReadonly(self):
166 """ make /boot writeprotected back again """
167 os_system("mount -o r,remount /boot")
169 class LogoManagerConfigScreen(ConfigListScreen,Screen):
171 <screen position="100,100" size="550,400" title="LogoManager Setup" >
172 <widget name="config" position="0,0" size="550,360" scrollbarMode="showOnDemand" />
173 <widget name="buttonred" position="10,360" size="100,40" backgroundColor="red" valign="center" halign="center" zPosition="2" foregroundColor="white" font="Regular;18"/>
174 <widget name="buttongreen" position="120,360" size="100,40" backgroundColor="green" valign="center" halign="center" zPosition="2" foregroundColor="white" font="Regular;18"/>
176 def __init__(self, session, args = 0):
177 self.session = session
178 Screen.__init__(self, session)
180 self.list.append(getConfigListEntry(_("Directory to scan for Logos"), config.plugins.logomanager.path))
181 ConfigListScreen.__init__(self, self.list)
182 self["buttonred"] = Label(_("cancel"))
183 self["buttongreen"] = Label(_("ok"))
184 self["setupActions"] = ActionMap(["SetupActions"],
189 "cancel": self.cancel,
195 for x in self["config"].list:
201 for x in self["config"].list: