def doInstallCallback(self, result): if result: self.KodiInstallation = InstallSomething(self.session, [self.kodi_name]) self.KodiInstallation.__install__() self.isinstalled = True # actually very bad, we did not check for errors os.system("touch /etc/.kodistart" ) # but enigma2.sh checks for /usr/bin/xbmc
def doInstallCallback(self, result): if result: self.KodiInstallation = InstallSomething(self.session, [self.kodi_name]) self.KodiInstallation.__install__() self.isinstalled = True # actually very bad, we did not check for errors os.system("touch /etc/.kodistart") # but enigma2.sh checks for /usr/bin/xbmc
class StartKodi2(Screen): kodi_name = "kodi-amlogic" kodineeds = 200 # TODO: check real needs, more likely to be ~ 300MB caninstall = False isinstalled = False skin = """ <screen position="center,center" size="500,200" title="Start Kodi"> <widget name="text" position="30,30" size="360,25" font="Regular;25" /> <widget name="sd_label" position="30,100" size="310,25" font="Regular;20" /> <widget name="freespace_label" position="30,125" size="310,25" font="Regular;20" /> <widget name="installed_label" position="30,150" size="310,25" font="Regular;20" /> <widget name="sd" position="340,100" size="150,25" font="Regular;20" /> <widget name="freespace" position="340,125" size="150,25" font="Regular;20" /> <widget name="installed" position="340,150" size="150,25" font="Regular;20" /> </screen>""" def __init__(self, session, args=0): self.session = session Screen.__init__(self, session) freembsd = str(self.getFreeSD()) freemb = str(self.getFreeNand()) isInstalled = str(self.isKodiInstalled()) self["text"] = Label(_("Please press OK to start Kodi...")) self["sd_label"] = Label(_("Kodi/extra partition free space:")) self["freespace_label"] = Label(_("System partition free space:")) self["installed_label"] = Label(_("Kodi installed:")) self["sd"] = Label(freembsd + " MB") self["freespace"] = Label(freemb + " MB") self["installed"] = Label(isInstalled) self["actions"] = ActionMap(["OkCancelActions"], { "ok": self.ok, "cancel": self.close, }) self.onShown.append( self.onFirstShown) ### !!! A must to avoid modal crap def onFirstShown(self): self.onShown.remove(self.onFirstShown) ### avoid perpetual installs if (self.isinstalled): self["text"] = Label(_("\n Please press OK to start Kodi...")) elif (self.caninstall is False): self["text"] = Label( _("\n WARNING: \n There is not enough space to install Kodi!" )) else: self.session.openWithCallback( self.doInstallCallback, MessageBox, _("\n Kodi not present. Proceed with install?")) ### wo callback message is shown after install # self.session.open(MessageBox,_("\n Kodi not present, installing, please wait..."), MessageBox.TYPE_INFO, timeout = 5) # self["text"] = Label(_("\n Kodi not present, installing, please wait...")) # os.system("opkg install kodi-amlogic") # os.system("touch /etc/.kodistart") # Try more civilized download # self.KodiInstallation = InstallSomething(self.session, self.kodi_name) # self.KodiInstallation.__install__() # self.isinstalled = True def doInstallCallback(self, result): if result: self.KodiInstallation = InstallSomething(self.session, [self.kodi_name]) self.KodiInstallation.__install__() self.isinstalled = True # actually very bad, we did not check for errors os.system("touch /etc/.kodistart" ) # but enigma2.sh checks for /usr/bin/xbmc ### TODO: done touch(es) should go here def ok(self): if (self.isinstalled): # self.[text] = Label(_("Starting Kodi...")) # self["text"].hide() # self["text"].show() # StartKodi2.already_shown = False # StartKodi2.hide(self) # StartKodi2.show(self) # StartKodi2.update(self) os.system("touch /etc/.kodistart") quitMainloop(3) else: self.close() ### TODO: check portability (busybox vs coreutils) def getFreeNand(self): os.system('sync ; sync ; sync') sizeread = os.popen("df | grep %s | tr -s ' '" % 'root') c = sizeread.read().strip().split(" ") sizeread.close() free = int(c[3]) / 1024 if (free > self.kodineeds): self.caninstall = True else: self.caninstall = False return free #hopefully returrn free MBs in NAND/uSD #self["lab_flash"].setText("%sB out of %sB" % (c[3], c[1])) #self["Used"].setText("Used: %s" % c[2]) #self["Available"].setText("Available: %s" % c[3]) #self["Use in %"].setText("Use: %s" % c[4]) #self["Partition"].setText("Partition: %s" % c[0]) ### TODO: check if partition exists check portability (busybox vs coreutils) def getFreeSD(self): # os.system('sync ; sync ; sync' ) sizeread = os.popen("df | grep %s | tr -s ' '" % 'uSDextra') c = sizeread.read().strip().split(" ") sizeread.close() if os.path.exists("/media/uSDextra"): free = int(c[3]) / 1024 else: free = "Not available" return free ### not very clever... def isKodiInstalled(self): if os.path.exists("/usr/lib/kodi/kodi.bin"): self.isinstalled = True return True else: self.isinstalled = False return False
class StartKodi2(Screen): kodi_name = "kodi-amlogic" kodineeds = 200 # TODO: check real needs, more likely to be ~ 300MB caninstall = False isinstalled = False skin = """ <screen position="center,center" size="500,200" title="Start Kodi"> <widget name="text" position="30,30" size="360,25" font="Regular;25" /> <widget name="sd_label" position="30,100" size="310,25" font="Regular;20" /> <widget name="freespace_label" position="30,125" size="310,25" font="Regular;20" /> <widget name="installed_label" position="30,150" size="310,25" font="Regular;20" /> <widget name="sd" position="340,100" size="150,25" font="Regular;20" /> <widget name="freespace" position="340,125" size="150,25" font="Regular;20" /> <widget name="installed" position="340,150" size="150,25" font="Regular;20" /> </screen>""" def __init__(self, session, args = 0): self.session = session Screen.__init__(self, session) freembsd = str(self.getFreeSD()) freemb = str(self.getFreeNand()) isInstalled = str(self.isKodiInstalled()) self["text"] = Label(_("Please press OK to start Kodi...")) self["sd_label"] = Label(_("Kodi/extra partition free space:")) self["freespace_label"] = Label(_("System partition free space:")) self["installed_label"] = Label(_("Kodi installed:")) self["sd"] = Label(freembsd + " MB") self["freespace"] = Label(freemb + " MB") self["installed"] = Label(isInstalled) self["actions"] = ActionMap(["OkCancelActions"], { "ok": self.ok, "cancel": self.close, }) self.onShown.append(self.onFirstShown) ### !!! A must to avoid modal crap def onFirstShown(self): self.onShown.remove(self.onFirstShown) ### avoid perpetual installs if (self.isinstalled): self["text"] = Label(_("\n Please press OK to start Kodi...")) elif (self.caninstall is False): self["text"] = Label(_("\n WARNING: \n There is not enough space to install Kodi!")) else: self.session.openWithCallback(self.doInstallCallback, MessageBox, _("\n Kodi not present. Proceed with install?")) ### wo callback message is shown after install # self.session.open(MessageBox,_("\n Kodi not present, installing, please wait..."), MessageBox.TYPE_INFO, timeout = 5) # self["text"] = Label(_("\n Kodi not present, installing, please wait...")) # os.system("opkg install kodi-amlogic") # os.system("touch /etc/.kodistart") # Try more civilized download # self.KodiInstallation = InstallSomething(self.session, self.kodi_name) # self.KodiInstallation.__install__() # self.isinstalled = True def doInstallCallback(self, result): if result: self.KodiInstallation = InstallSomething(self.session, [self.kodi_name]) self.KodiInstallation.__install__() self.isinstalled = True # actually very bad, we did not check for errors os.system("touch /etc/.kodistart") # but enigma2.sh checks for /usr/bin/xbmc ### TODO: done touch(es) should go here def ok(self): if (self.isinstalled): # self.[text] = Label(_("Starting Kodi...")) # self["text"].hide() # self["text"].show() # StartKodi2.already_shown = False # StartKodi2.hide(self) # StartKodi2.show(self) # StartKodi2.update(self) os.system("touch /etc/.kodistart") quitMainloop(3) else: self.close() ### TODO: check portability (busybox vs coreutils) def getFreeNand(self): os.system('sync ; sync ; sync' ) sizeread = os.popen("df | grep %s | tr -s ' '" % 'root') c = sizeread.read().strip().split(" ") sizeread.close() free = int(c[3])/1024 if (free > self.kodineeds): self.caninstall = True else: self.caninstall = False return free #hopefully returrn free MBs in NAND/uSD #self["lab_flash"].setText("%sB out of %sB" % (c[3], c[1])) #self["Used"].setText("Used: %s" % c[2]) #self["Available"].setText("Available: %s" % c[3]) #self["Use in %"].setText("Use: %s" % c[4]) #self["Partition"].setText("Partition: %s" % c[0]) ### TODO: check if partition exists check portability (busybox vs coreutils) def getFreeSD(self): # os.system('sync ; sync ; sync' ) sizeread = os.popen("df | grep %s | tr -s ' '" % 'uSDextra') c = sizeread.read().strip().split(" ") sizeread.close() if os.path.exists("/media/uSDextra"): free = int(c[3])/1024 else: free = "Not available" return free ### not very clever... def isKodiInstalled(self): if os.path.exists("/usr/lib/kodi/kodi.bin"): self.isinstalled = True return True else: self.isinstalled = False return False