Changeset 6605


Ignore:
Timestamp:
Mar 23, 2011, 10:22:21 PM (15 years ago)
Author:
obi
Message:

[ipk] update MultiMediathek to 2.3

Location:
ipk/source/players_mediathek_2_2
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • ipk/source/players_mediathek_2_2/CONTROL/control

    r6536 r6605  
    11Package: enigma2-plugin-players-multimediathek
    2 Version: 2.2
     2Version: 2.3
    33Architecture: sh4
    44OE: MultiMediathek
  • ipk/source/players_mediathek_2_2/usr/lib/enigma2/python/Plugins/Extensions/MultiMediathek/plugin.py

    r6536 r6605  
    33# Coded by Homey (c) 2011
    44#
    5 # Version: 2.2
     5# Version: 2.3
    66# Support: www.i-have-a-dreambox.com
    77#####################################################
     
    1717from Components.Sources.List import List
    1818from Components.Sources.StaticText import StaticText
    19 from Components.Task import Task, Job, job_manager as JobManager
     19from Components.Task import Task, Job, job_manager as JobManager, Condition
    2020from Screens.Screen import Screen
    2121from Screens.MessageBox import MessageBox
     
    6060config.plugins.multimediathek.showsecretcontent = ConfigYesNo(default=False)
    6161config.plugins.multimediathek.checkforupdate = ConfigYesNo(default=True)
    62 config.plugins.multimediathek.version = NoSave(ConfigText(default="220"))
     62config.plugins.multimediathek.version = NoSave(ConfigText(default="230"))
    6363
    6464#################################
     
    7070                Job.__init__(self, _("Saving Movie from Mediathek"))
    7171                self.toolbox = toolbox
     72                self.retrycount = 0
    7273                downloadTask(self, cmdline, filename, filetitle)
    7374
     75        def retry(self):
     76                assert self.status == self.FAILED
     77                self.retrycount += 1
     78                self.restart()
     79       
    7480class downloadTask(Task):
     81        ERROR_CORRUPT_FILE, ERROR_RTMP_ReadPacket, ERROR_SEGFAULT, ERROR_SERVER, ERROR_UNKNOWN = range(5)
    7582        def __init__(self, job, cmdline, filename, filetitle):
    7683                Task.__init__(self, job, filetitle)
     84                self.postconditions.append(downloadTaskPostcondition())
    7785                self.setCmdline(cmdline)
    7886                self.filename = filename
    7987                self.toolbox = job.toolbox
    80 
     88                self.error = None
     89                self.lasterrormsg = None
     90               
    8191        def processOutput(self, data):
    8292                try:
     
    8797                        elif data.find('%') != -1:
    8898                                tmpvalue = data[:data.find("%")]
    89                                 self.progress = int(tmpvalue[tmpvalue.rfind(" "):].strip())
     99                                tmpvalue = tmpvalue[tmpvalue.rfind(" "):].strip()
     100                                tmpvalue = tmpvalue[tmpvalue.rfind("(")+1:].strip()
     101                                self.progress = int(float(tmpvalue))
    90102                        else:
    91103                                Task.processOutput(self, data)
     
    94106                        Task.processOutput(self, data)
    95107
     108        def processOutputLine(self, line):
     109                line = line[:-1]
     110                #print "[MultiMediathek DownloadTask STATUS MSG] %s" % line
     111                if line.startswith("ERROR:"):
     112                        self.lasterrormsg = line
     113                        if line.find("RTMP_ReadPacket") != -1:
     114                                self.error = self.ERROR_RTMP_ReadPacket
     115                        elif line.find("corrupt file!") != -1:
     116                                self.error = self.ERROR_CORRUPT_FILE
     117                                os_system("rm -f %s" % self.filename)
     118                        else:
     119                                self.error = self.ERROR_UNKNOWN
     120                elif line.startswith("wget:"):
     121                        self.lasterrormsg = line
     122                        if line.find("server returned error") != -1:
     123                                self.error = self.ERROR_SERVER
     124                elif line.find("Segmentation fault") != -1:
     125                        self.error = self.ERROR_SEGFAULT
     126                       
    96127        def afterRun(self):
    97128                pass
     
    99130                #if self.getProgress() == 0 or self.getProgress() == 100:
    100131                #       Notifications.AddNotification(MessageBox, _("Movie successfully transfered to your HDD!") +"\n"+self.filename, MessageBox.TYPE_INFO, timeout=10)
     132
     133class downloadTaskPostcondition(Condition):
     134        RECOVERABLE = True
     135        def check(self, task):
     136                if task.returncode == 0 or task.error is None:
     137                        return True
     138                else:
     139                        return False
     140
     141        def getErrorMessage(self, task):
     142                return {
     143                        task.ERROR_CORRUPT_FILE: _("Video Download Failed!\n\nCorrupted Download File:\n%s" % task.lasterrormsg),
     144                        task.ERROR_RTMP_ReadPacket: _("Video Download Failed!\n\nCould not read RTMP-Packet:\n%s" % task.lasterrormsg),
     145                        task.ERROR_SEGFAULT: _("Video Download Failed!\n\nSegmentation fault:\n%s" % task.lasterrormsg),
     146                        task.ERROR_SERVER: _("Video Download Failed!\n\nServer returned error:\n%s" % task.lasterrormsg),
     147                        task.ERROR_UNKNOWN: _("Video Download Failed!\n\nUnknown Error:\n%s" % task.lasterrormsg)
     148                }[task.error]
    101149
    102150###################################################
     
    579627                                                self.BgFileEraser.erase(filelocation)
    580628
    581                 self.close()
    582 
    583 #------------------------------------------------------------------------------------------
    584 
    585 class MultiMediathek_ItemOptions(Screen):
    586         def __init__(self, session, movieinfo):
    587                 Screen.__init__(self, session)
    588 
    589                 self.skin = """
    590                         <screen position="center,center" size="400,200" title="Mediathek - Item Options">
    591                                 <widget source="itemname" transparent="1" render="Label" zPosition="2" position="10,180" size="380,20" font="Regular;16" />
    592                                 <widget source="menu" render="Listbox" zPosition="5" transparent="1" position="10,10" size="380,160" scrollbarMode="showOnDemand" >
    593                                         <convert type="StringList" />
    594                                 </widget>
    595                         </screen>"""
    596 
    597                 list = []
    598                 self.movieinfo = movieinfo
    599                 if self.movieinfo[7] == "bookmark":
    600                         list.append(("Delete this bookmark", "delbookmark", "menu_delbookmark", "50"))
    601                 elif self.movieinfo[6] == "movie":
    602                         list.append(("Bookmark this movie", "addbookmark", "menu_addbookmark", "50"))
    603                 elif self.movieinfo[6] == "cat":
    604                         list.append(("Bookmark this category", "addbookmark", "menu_addbookmark", "50"))
    605                 list.append(("View Bookmarks", "viewbookmarks", "menu_viewbookmarks", "50"))
    606                 list.append(("Mediathek Settings", "settingsmenu", "menu_settings", "50"))
    607 
    608                 self["menu"] = List(list)
    609                 self["itemname"] = StaticText(self.movieinfo[3])
    610 
    611                 self["actions"] = ActionMap(["OkCancelActions"],
    612                 {
    613                         "cancel": self.Exit,
    614                         "ok": self.okbuttonClick
    615                 }, -1)
    616 
    617         def okbuttonClick(self):
    618                 selection = self["menu"].getCurrent()
    619                 if selection:
    620                         if selection[1] == "addbookmark":
    621                                 os_system("echo '%s:::%s:::%s:::%s' >> /etc/enigma2/multimediathek.bookmarks" % (self.movieinfo[6], self.movieinfo[3], self.movieinfo[5], self.movieinfo[4]))
    622                                 #self.session.openWithCallback(self.Exit, MessageBox, _("Bookmark added!"), MessageBox.TYPE_INFO, timeout=5)
    623                                 self.Exit()
    624                         if selection[1] == "delbookmark":
    625                                 bookmarkfile = "/etc/enigma2/multimediathek.bookmarks"
    626                                 if fileExists(bookmarkfile, 'r'):
    627                                         tmpdata = ""
    628                                         tmpfile = open(bookmarkfile, "r")
    629                                         for line in tmpfile:
    630                                                 if self.movieinfo[5] not in line:
    631                                                         tmpdata = tmpdata + line + "\n"
    632 
    633                                         tmpfile.close()
    634                                         os_system("echo '%s' > %s" % (tmpdata,bookmarkfile))
    635 
    636                                 #self.session.openWithCallback(self.Exit, MessageBox, _("Bookmark deleted!"), MessageBox.TYPE_INFO, timeout=5)
    637                                 self.Exit()
    638                         elif selection[1] == "viewbookmarks":
    639                                 self.session.open(MultiMediathek, self.movieinfo[5], "Bookmarks", "Bookmarks from your favorite Movies")
    640                         elif selection[1] == "settingsmenu":
    641                                 self.session.openWithCallback(self.Exit, MultiMediathek_Settings)
    642                         else:
    643                                 self.Exit()
    644                 else:
    645                         self.Exit()
    646 
    647         def Exit(self, retval=None):
    648629                self.close()
    649630
     
    801782                                if url and url != "":
    802783                                        filecount += 1
    803                                         entrylist.append((title,url,filename))
     784                                        entrylist.append((title,url,filename,filecount))
    804785
    805786                if filecount == 0:
     
    810791                        tmpanswer.append((url))
    811792                        tmpanswer.append((filename))
     793                        tmpanswer.append((filecount))
    812794                        self.movieSelectCallback(tmpanswer)
    813795                else:
     
    837819
    838820                        elif self.action == "savemovie":
    839                                 self.saveMovie(movieinfo[0], movieinfo[1], movieinfo[2])
     821                                self.saveMovie(movieinfo[0], movieinfo[1], movieinfo[2], movieinfo[3])
    840822
    841823        def switchToCPBCallback(self, answer):
     
    850832                        tmpinfo.append((response[1]))
    851833                        tmpinfo.append((response[2]))
     834                        tmpinfo.append((response[3]))
    852835                        self.action = "vlcplayback"
    853836                        self.movieSelectCallback(tmpinfo)
    854837
    855         def saveMovie(self, title, url, filename):
     838        def saveMovie(self, title, url, filename, fileid):
    856839                if '(VLC)' in title and VLCSUPPORT:
    857840                        try:
     
    864847
    865848                if self.movieinfo[0]:
    866                         filename = ASCIItranslit.legacyEncode(self.movieinfo[0]+"."+filename.split('.')[-1]).lower()
     849                        if fileid > 1:
     850                                addfilenumber = "_"+str(fileid)
     851                        else:
     852                                addfilenumber = ""
     853                        filename = ASCIItranslit.legacyEncode(self.movieinfo[0]+addfilenumber+"."+filename.split('.')[-1]).lower()
    867854
    868855                if url[0:4] == "http" or url[0:3] == "ftp":
     
    870857                        self.LastJobView()
    871858                elif url[0:4] == "rtmp":
    872                         JobManager.AddJob(downloadJob(self, "rtmpdump -r '%s' -o '%s/%s'" % (url, self.moviefolder, filename), self.moviefolder+"/"+filename, self.movieinfo[0]))
     859                        JobManager.AddJob(downloadJob(self, "rtmpdump -r '%s' -o '%s/%s' -e" % (url, self.moviefolder, filename), self.moviefolder+"/"+filename, self.movieinfo[0]))
    873860                        self.LastJobView()
    874861                else:
     
    10821069#------------------------------------------------------------------------------------------
    10831070
     1071class MultiMediathek_ItemOptions(Screen):
     1072        def __init__(self, session, movieinfo):
     1073                Screen.__init__(self, session)
     1074
     1075                self.skin = """
     1076                        <screen position="center,center" size="400,200" title="Mediathek - Item Options">
     1077                                <widget source="itemname" transparent="1" render="Label" zPosition="2" position="10,180" size="380,20" font="Regular;16" />
     1078                                <widget source="menu" render="Listbox" zPosition="5" transparent="1" position="10,10" size="380,160" scrollbarMode="showOnDemand" >
     1079                                        <convert type="StringList" />
     1080                                </widget>
     1081                        </screen>"""
     1082
     1083                list = []
     1084                self.movieinfo = movieinfo
     1085                if self.movieinfo[7] == "bookmark":
     1086                        list.append(("Delete this bookmark", "delbookmark", "menu_delbookmark", "50"))
     1087                elif self.movieinfo[6] == "movie":
     1088                        list.append(("Bookmark this movie", "addbookmark", "menu_addbookmark", "50"))
     1089                elif self.movieinfo[6] == "cat":
     1090                        list.append(("Bookmark this category", "addbookmark", "menu_addbookmark", "50"))
     1091                list.append(("View Bookmarks", "viewbookmarks", "menu_viewbookmarks", "50"))
     1092                list.append(("Mediathek Settings", "settingsmenu", "menu_settings", "50"))
     1093
     1094                self["menu"] = List(list)
     1095                self["itemname"] = StaticText(self.movieinfo[3])
     1096
     1097                self["actions"] = ActionMap(["OkCancelActions"],
     1098                {
     1099                        "cancel": self.Exit,
     1100                        "ok": self.okbuttonClick
     1101                }, -1)
     1102
     1103        def okbuttonClick(self):
     1104                selection = self["menu"].getCurrent()
     1105                if selection:
     1106                        if selection[1] == "addbookmark":
     1107                                os_system("echo '%s:::%s:::%s:::%s' >> /etc/enigma2/multimediathek.bookmarks" % (self.movieinfo[6], self.movieinfo[3], self.movieinfo[5], self.movieinfo[4]))
     1108                                #self.session.openWithCallback(self.Exit, MessageBox, _("Bookmark added!"), MessageBox.TYPE_INFO, timeout=5)
     1109                                self.Exit()
     1110                        if selection[1] == "delbookmark":
     1111                                bookmarkfile = "/etc/enigma2/multimediathek.bookmarks"
     1112                                if fileExists(bookmarkfile, 'r'):
     1113                                        tmpdata = ""
     1114                                        tmpfile = open(bookmarkfile, "r")
     1115                                        for line in tmpfile:
     1116                                                if self.movieinfo[5] not in line:
     1117                                                        tmpdata = tmpdata + line + "\n"
     1118
     1119                                        tmpfile.close()
     1120                                        os_system("echo '%s' > %s" % (tmpdata,bookmarkfile))
     1121
     1122                                #self.session.openWithCallback(self.Exit, MessageBox, _("Bookmark deleted!"), MessageBox.TYPE_INFO, timeout=5)
     1123                                self.Exit()
     1124                        elif selection[1] == "viewbookmarks":
     1125                                self.session.open(MultiMediathek, self.movieinfo[5], "Bookmarks", "Bookmarks from your favorite Movies")
     1126                        elif selection[1] == "settingsmenu":
     1127                                self.session.openWithCallback(self.Exit, MultiMediathek_Settings)
     1128                        else:
     1129                                self.Exit()
     1130                else:
     1131                        self.Exit()
     1132
     1133        def Exit(self, retval=None):
     1134                self.close()
     1135
     1136#------------------------------------------------------------------------------------------
     1137
    10841138class MultiMediathek_Settings(Screen, ConfigListScreen):
    10851139        skin = """
Note: See TracChangeset for help on using the changeset viewer.