Changeset 7246
- Timestamp:
- Apr 20, 2011, 6:48:47 PM (15 years ago)
- Location:
- ipk/source
- Files:
-
- 4 edited
- 2 moved
-
mediacenter_mediathek_2_9 (moved) (moved from ipk/source/mediacenter_mediathek_2_8 )
-
mediacenter_mediathek_2_9/CONTROL/control (modified) (1 diff)
-
mediacenter_mediathek_2_9/usr/lib/enigma2/python/Plugins/Extensions/MultiMediathek/plugin.py (modified) (37 diffs)
-
swapmediacenter_mediathek_2_9 (moved) (moved from ipk/source/swapmediacenter_mediathek_2_8 )
-
swapmediacenter_mediathek_2_9/CONTROL/control (modified) (1 diff)
-
swapmediacenter_mediathek_2_9/var/swap/extensions/MultiMediathek/plugin.py (modified) (37 diffs)
Legend:
- Unmodified
- Added
- Removed
-
ipk/source/mediacenter_mediathek_2_9/CONTROL/control
r7149 r7246 1 1 Package: enigma2-plugin-mediacenter-multimediathek 2 Version: 2. 82 Version: 2.9 3 3 Architecture: sh4 4 4 OE: MultiMediathek -
ipk/source/mediacenter_mediathek_2_9/usr/lib/enigma2/python/Plugins/Extensions/MultiMediathek/plugin.py
r7146 r7246 3 3 # Coded by Homey (c) 2011 4 4 # 5 # Version: 2. 8.25 # Version: 2.9 6 6 # Support: www.i-have-a-dreambox.com 7 7 ##################################################### … … 61 61 config.plugins.multimediathek.showadultcontent = ConfigYesNo(default=False) 62 62 config.plugins.multimediathek.showsecretcontent = ConfigYesNo(default=False) 63 config.plugins.multimediathek.version = NoSave(ConfigText(default="2 82"))63 config.plugins.multimediathek.version = NoSave(ConfigText(default="290")) 64 64 65 65 default = config.plugins.multimediathek.storagepath.value + "/mediathek/movies" … … 75 75 class downloadJob(Job): 76 76 def __init__(self, toolbox, cmdline, filename, filetitle): 77 Job.__init__(self, _("Download Movie"))77 Job.__init__(self, "Download: %s" % filetitle) 78 78 self.filename = filename 79 79 self.toolbox = toolbox 80 80 self.retrycount = 0 81 downloadTask(self, cmdline, filename , filetitle)81 downloadTask(self, cmdline, filename) 82 82 83 83 def retry(self): … … 89 89 self.abort() 90 90 os_system("rm -f %s" % self.filename) 91 91 92 92 class downloadTask(Task): 93 93 ERROR_CORRUPT_FILE, ERROR_RTMP_ReadPacket, ERROR_SEGFAULT, ERROR_SERVER, ERROR_UNKNOWN = range(5) 94 def __init__(self, job, cmdline, filename , filetitle):95 Task.__init__(self, job, filetitle)94 def __init__(self, job, cmdline, filename): 95 Task.__init__(self, job, _("Downloading ...")) 96 96 self.postconditions.append(downloadTaskPostcondition()) 97 97 self.setCmdline(cmdline) … … 100 100 self.error = None 101 101 self.lasterrormsg = None 102 102 103 103 def processOutput(self, data): 104 104 try: … … 120 120 def processOutputLine(self, line): 121 121 line = line[:-1] 122 #print "[MultiMediathek DownloadTask STATUS MSG] %s" % line123 122 self.lasterrormsg = line 124 123 if line.startswith("ERROR:"): … … 135 134 elif line.find("Segmentation fault") != -1: 136 135 self.error = self.ERROR_SEGFAULT 137 136 138 137 def afterRun(self): 139 138 pass … … 182 181 183 182 def doEofInternal(self, playing): 184 self.leavePlayerConfirmed(True) 183 currPlay = self.session.nav.getCurrentService() 184 message = currPlay.info().getInfoString(iServiceInformation.sUser+12) 185 if message.find('Flash demuxer not available') != -1 or message.find('(AVI) demuxer not available') != -1: 186 self.session.openWithCallback(self.GSTplugincallback, MessageBox, _("Your Dreambox can't decode this video stream!\n%s\nDo you want to download and install it now?") % message, MessageBox.TYPE_YESNO) 187 elif message.find('GStreamer plugin') != -1 and message.find('not available') != -1: 188 self.__evPluginError() 189 else: 190 self.leavePlayerConfirmed(True) 185 191 186 192 def showMovies(self): … … 207 213 else: 208 214 self.session.open(MessageBox, _("Your Dreambox can't decode this video stream!\n%s") % message, type=MessageBox.TYPE_INFO, timeout=20) 215 216 def GSTplugincallback(self, answer): 217 if answer is True: 218 self.container=eConsoleAppContainer() 219 self.container.appClosed.append(self.finishedPluginInstall) 220 self.container.execute("opkg update && opkg install gst-plugin-avi && opkg install gst-plugin-flv && opkg install gst-plugin-rtsp") 221 else: 222 self.close() 223 224 def finishedPluginInstall(self,retval): 225 self.session.openWithCallback(self.restartGUI, MessageBox, _("Missing GStreamer-Plugins were installed!\nDo you want to restart Enigma2 GUI now?"), MessageBox.TYPE_YESNO) 226 227 def restartGUI(self, answer): 228 if answer is True: 229 self.session.open(TryQuitMainloop, 3) 209 230 210 231 def VLCcallback(self, answer): … … 322 343 # Get FrameBuffer Scale for ePicLoad() 323 344 sc = AVSwitch().getFramebufferScale() 324 345 325 346 # Init Thumb PicLoad 326 347 self.picload = ePicLoad() … … 395 416 396 417 def finishedPluginUpdate(self,retval): 397 self.session.openWithCallback(self.restartGUI, MessageBox, _("Mediathek-Plugin successfully updated!\nDo you want to restart Enigma2 GUI now?"), MessageBox.TYPE_YESNO)418 self.session.openWithCallback(self.restartGUI, MessageBox, _("Mediathek-Plugin successfully updated!\nDo you want to restart Enigma2 GUI now?"), MessageBox.TYPE_YESNO) 398 419 399 420 def restartGUI(self, answer): … … 409 430 if config.plugins.multimediathek.showsecretcontent.value: 410 431 feedurl = feedurl + "&showsecret=1" 411 432 412 433 if '-->' in feedurl: 413 434 # Request to download external page … … 422 443 # We send the received page directly to my webserver and parse it there ... 423 444 getPage(url=self.postpageurl, method='POST', headers={'Content-Type':'application/x-www-form-urlencoded'}, postdata=urlencode({'pagedata' : html})).addCallback(self.gotxmlfeed).addErrback(self.getxmlfeedError) 424 445 425 446 def getxmlfeedError(self, error=""): 426 447 self["pageinfo"].setText("Error downloading XML Feed!\n\n" + str(error)) 427 448 print error 428 449 429 450 def gotxmlfeed(self, page=""): 430 451 print page … … 525 546 if self.thumbcount+1 < len(self.Thumbnaillist): 526 547 self.getThumbnail() 527 548 528 549 def showThumbPixmap(self, picInfo=None): 529 550 ptr = self.picload.getData() … … 608 629 609 630 def key_menu(self): 610 if self.feedtitle == "Startseite": 611 self.session.openWithCallback(self.loadFrame, MultiMediathek_Settings) 612 elif self.itemlist: 631 if self.itemlist: 613 632 self.session.openWithCallback(self.loadFrame, MultiMediathek_MenuOptions, self.itemlist[self.index]) 614 633 … … 734 753 # Get FrameBuffer Scale for ePicLoad() 735 754 sc = AVSwitch().getFramebufferScale() 736 755 737 756 # Init ePicLoad 738 757 self.picload = ePicLoad() 739 758 self.picload.PictureData.get().append(self.showPosterPixmap) 740 759 self.picload.setPara((270, 350, sc[0], sc[1], config.plugins.multimediathek.imagecache.value, int(config.plugins.multimediathek.imagescaling.value), "#00000000")) 741 760 742 761 self.onFirstExecBegin.append(self.GetMovieInfo) 743 762 … … 756 775 def keyBlue(self): 757 776 if self.movieinfo is not None: 758 os_system("echo 'movie:::%s:::%s:::%s \n' >> /etc/enigma2/multimediathek.bookmarks" % (self.movieinfo[0], self.url, self.movieinfo[3]))777 os_system("echo 'movie:::%s:::%s:::%s' >> /etc/enigma2/multimediathek.bookmarks" % (self.movieinfo[0], self.url, self.movieinfo[3])) 759 778 self.session.open(MessageBox, _("Bookmark added!"), MessageBox.TYPE_INFO, timeout=5) 760 779 … … 775 794 # We send the received page directly to my webserver and parse it there ... 776 795 getPage(url=self.postpageurl, method='POST', headers={'Content-Type':'application/x-www-form-urlencoded'}, postdata=urlencode({'pagedata' : html})).addCallback(self.GotMovieInfo).addErrback(self.error) 777 796 778 797 def GotMovieInfo(self, html): 779 798 self.movieinfo = html.splitlines() … … 792 811 except Exception, error: 793 812 print "[MultiMediathek] Getting UserAgent String failed. Using default ..." 794 813 795 814 # Download Image 796 815 downloadPage(self.movieinfo[3], self.imagefolder+"/poster.jpg", agent="Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.2) Gecko/2008091620 Firefox/3.0.2").addCallback(self.downloadPosterCallback) … … 873 892 else: 874 893 self.session.open(MessageBox, _("Sorry, no supported videos found here."), MessageBox.TYPE_ERROR, timeout=10) 875 894 876 895 def movieSelectCallback(self, movieinfo): 877 896 self.selmovieinfo = movieinfo … … 884 903 getPage(getpageurl, agent="Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)").addCallback(self.ForwardExternalMovieList).addErrback(self.error) 885 904 return 886 905 887 906 if self.action == "cachedplayback": 888 907 self.session.open(PlayMovie, movieinfo, self.movieinfo[0], self.useragent) … … 923 942 924 943 def saveMovie(self, title, url, filename, fileid): 925 if '(VLC)' in title and VLCSUPPORT:926 try:927 if vlcServerConfig.getDefaultServer() is None:928 self.session.open(MessageBox, _("No Default Server configured in VLC Settings"), MessageBox.TYPE_ERROR)929 else:930 url = vlcServerConfig.getDefaultServer().playFile(url, 0x44, 0x45)931 except Exception, error:932 self.session.open(MessageBox,("VLC Plugin Error: %s") % error, MessageBox.TYPE_ERROR)933 934 944 if self.movieinfo[0]: 935 945 if fileid > 1: … … 944 954 else: 945 955 useragentcmd = "" 946 956 947 957 JobManager.AddJob(downloadJob(self, "wget %s -c '%s' -O '%s/%s'" % (useragentcmd, url, self.moviefolder, filename), self.moviefolder+"/"+filename, self.movieinfo[0])) 958 self.createMetaFile(filename) 948 959 self.LastJobView() 949 960 elif url[0:4] == "rtmp": 950 961 JobManager.AddJob(downloadJob(self, "rtmpdump -r '%s' -o '%s/%s' -e" % (url, self.moviefolder, filename), self.moviefolder+"/"+filename, self.movieinfo[0])) 962 self.createMetaFile(filename) 951 963 self.LastJobView() 952 964 else: … … 961 973 self.session.open(JobView, currentjob) 962 974 975 def createMetaFile(self, filename): 976 serviceref = eServiceReference(0x1001, 0, self.moviefolder + filename) 977 metafile = open("%s/%s.meta" % (self.moviefolder, filename), "w") 978 metafile.write("%s\n%s\n%s\n%i\n" % (serviceref.toString(), self.movieinfo[0].replace("\n", ""), self.movieinfo[2].replace("\n", ""), time())) 979 metafile.close() 980 963 981 def error(self, error): 964 982 self.session.open(MessageBox, _("Unexpected Error:\n%s") % (error), MessageBox.TYPE_ERROR) … … 973 991 class PlayMovie(Screen): 974 992 skin = """ 975 <screen position="center,center" size="400,240" title="Caching Video ..." > 976 <widget source="label_filename" transparent="1" render="Label" zPosition="2" position="10,10" size="380,20" font="Regular;19" /> 977 <widget source="label_destination" transparent="1" render="Label" zPosition="2" position="10,35" size="380,20" font="Regular;19" /> 978 <widget source="label_speed" transparent="1" render="Label" zPosition="2" position="10,60" size="380,20" font="Regular;19" /> 979 <widget source="label_timeleft" transparent="1" render="Label" zPosition="2" position="10,85" size="380,20" font="Regular;19" /> 980 <widget source="label_progress" transparent="1" render="Label" zPosition="2" position="10,110" size="380,20" font="Regular;19" /> 981 <widget name="activityslider" position="10,150" size="380,30" zPosition="3" transparent="0" /> 982 <widget name="key_green" position="50,200" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" /> 983 <widget name="key_red" position="200,200" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" /> 984 <ePixmap pixmap="/usr/share/enigma2/skin_default/buttons/green.png" position="50,200" size="140,40" alphatest="on" /> 985 <ePixmap pixmap="/usr/share/enigma2/skin_default/buttons/red.png" position="200,200" size="140,40" alphatest="on" /> 993 <screen position="center,center" size="450,240" title="Caching Video ..." > 994 <widget source="label_filename" transparent="1" render="Label" zPosition="2" position="10,10" size="430,21" font="Regular;19" /> 995 <widget source="label_destination" transparent="1" render="Label" zPosition="2" position="10,35" size="430,21" font="Regular;19" /> 996 <widget source="label_speed" transparent="1" render="Label" zPosition="2" position="10,60" size="430,21" font="Regular;19" /> 997 <widget source="label_timeleft" transparent="1" render="Label" zPosition="2" position="10,85" size="430,21" font="Regular;19" /> 998 <widget source="label_progress" transparent="1" render="Label" zPosition="2" position="10,110" size="430,21" font="Regular;19" /> 999 <widget name="activityslider" position="10,150" size="430,30" zPosition="3" transparent="0" /> 1000 <widget name="key_red" position="10,200" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" /> 1001 <widget name="key_green" position="155,200" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" /> 1002 <widget name="key_blue" position="300,200" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" /> 1003 <ePixmap pixmap="/usr/share/enigma2/skin_default/buttons/red.png" position="10,200" size="140,40" alphatest="on" /> 1004 <ePixmap pixmap="/usr/share/enigma2/skin_default/buttons/green.png" position="155,200" size="140,40" alphatest="on" /> 1005 <ePixmap pixmap="/usr/share/enigma2/skin_default/buttons/blue.png" position="300,200" size="140,40" alphatest="on" /> 986 1006 </screen>""" 987 1007 … … 999 1019 1000 1020 self.streamactive = False 1021 self.isVisible = True 1001 1022 1002 1023 self.container=eConsoleAppContainer() … … 1029 1050 self["key_green"] = Button(_("Play now")) 1030 1051 self["key_red"] = Button(_("Cancel")) 1052 self["key_blue"] = Button(_("Show/Hide")) 1031 1053 1032 1054 self["label_filename"] = StaticText("File: %s" % (self.filename)) … … 1041 1063 "ok": self.okbuttonClick, 1042 1064 "red": self.exit, 1043 "green": self.playfile 1065 "green": self.playfile, 1066 "blue": self.visibility 1044 1067 }, -1) 1045 1068 … … 1057 1080 1058 1081 def okbuttonClick(self): 1059 self.StatusTimer.start(5000, True)1060 self.UpdateStatus()1082 if self.isVisible == False: 1083 self.visibility() 1061 1084 1062 1085 def UpdateStatus(self): … … 1130 1153 def copyfinished(self,retval): 1131 1154 self.streamactive = False 1155 self.UpdateStatus() 1132 1156 self["label_progress"].setText("Progress: 100%") 1133 1157 self["activityslider"].setValue(100) … … 1144 1168 1145 1169 def MoviePlayerCallback(self, response=None): 1170 if self.isVisible == False: 1171 self.visibility() 1146 1172 self.UpdateStatus() 1147 1173 if response is not None and VLCSUPPORT: … … 1164 1190 return retstr 1165 1191 1192 def visibility(self): 1193 if self.isVisible == True: 1194 self.isVisible = False 1195 self.hide() 1196 else: 1197 self.isVisible = True 1198 self.show() 1199 1166 1200 def exit(self, retval=None): 1201 if self.isVisible == False: 1202 self.visibility() 1203 return 1204 1167 1205 self.container.kill() 1168 1206 self.BgFileEraser.erase(self.destination + self.filename) … … 1219 1257 tmpfile = open(bookmarkfile, "r") 1220 1258 for line in tmpfile: 1221 if self.movieinfo[5] not in line: 1222 tmpdata = tmpdata + line + "\n" 1223 1259 if self.movieinfo[5] not in line and line != "\n": 1260 tmpdata = tmpdata + line 1224 1261 tmpfile.close() 1225 1262 os_system("echo '%s' > %s" % (tmpdata,bookmarkfile)) … … 1247 1284 Screen.__init__(self, session) 1248 1285 self.session = session 1249 1286 1250 1287 self.skin = """ 1251 <screen name="MediathekTasksScreen" position="center,center" size="700,550" title=" Mediathek - Active Downloads">1252 <widget source=" tasklist" render="Listbox" position="30,120" size="640,370" zPosition="7" scrollbarMode="showOnDemand" transparent="1" >1288 <screen name="MediathekTasksScreen" position="center,center" size="700,550" title="Video Download List"> 1289 <widget source="movielist" render="Listbox" position="10,50" size="680,450" zPosition="7" scrollbarMode="showOnDemand" transparent="1" > 1253 1290 <convert type="TemplatedMultiContent"> 1254 1291 {"template": [ 1255 MultiContentEntryText(pos = (0, 1), size = ( 200, 24), font=1, flags = RT_HALIGN_LEFT, text = 1), # index 1 is the name1256 MultiContentEntryText(pos = ( 210, 1), size = (150, 24), font=1, flags = RT_HALIGN_RIGHT, text = 2), # index 2 is the state1257 MultiContentEntryProgress(pos = ( 370, 1), size = (100, 24), percent = -3), # index 3 should be progress1258 MultiContentEntryText(pos = ( 480, 1), size = (100, 24), font=1, flags = RT_HALIGN_RIGHT, text = 4), # index 4 is the percentage1292 MultiContentEntryText(pos = (0, 1), size = (310, 28), font=1, flags = RT_HALIGN_LEFT, text = 1), # index 1 is the name 1293 MultiContentEntryText(pos = (320, 1), size = (150, 28), font=1, flags = RT_HALIGN_RIGHT, text = 2), # index 2 is the state 1294 MultiContentEntryProgress(pos = (480, 1), size = (100, 28), percent = -3), # index 3 should be progress 1295 MultiContentEntryText(pos = (590, 1), size = (60, 28), font=1, flags = RT_HALIGN_RIGHT, text = 4), # index 4 is the percentage 1259 1296 ], 1260 "fonts": [gFont("Regular", 2 2),gFont("Regular", 18)],1261 "itemHeight": 2 51297 "fonts": [gFont("Regular", 26),gFont("Regular", 22)], 1298 "itemHeight": 29 1262 1299 } 1263 1300 </convert> 1264 1301 </widget> 1265 <ePixmap position="220,500" zPosition="4" size="140,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />1266 <widget name="key_red" position="220,500" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />1267 1302 </screen>""" 1268 1269 self["shortcuts"] = ActionMap([" SetupActions", "ColorActions"],1303 1304 self["shortcuts"] = ActionMap(["OkCancelActions"], 1270 1305 { 1271 1306 "ok": self.keyOK, 1272 "cancel": self.keyClose, 1273 "red": self.keyClose 1307 "cancel": self.keyClose 1274 1308 }, -1) 1275 1309 1276 self[" tasklist"] = List([])1310 self["movielist"] = List([]) 1277 1311 self["key_red"] = Button(_("Close")) 1278 1312 1279 1313 self.Timer = eTimer() 1280 1314 self.Timer.callback.append(self.TimerFire) … … 1282 1316 self.onLayoutFinish.append(self.layoutFinished) 1283 1317 self.onClose.append(self.__onClose) 1284 1318 1285 1319 def __onClose(self): 1286 1320 del self.Timer … … 1291 1325 def TimerFire(self): 1292 1326 self.Timer.stop() 1293 self.rebuildTaskList() 1294 1295 def rebuildTaskList(self): 1296 self.tasklist = [] 1327 self.rebuildMovieList() 1328 1329 def rebuildMovieList(self): 1330 self.movielist = [] 1331 1332 self.getTaskList() 1333 self.getMovieList() 1334 1335 self['movielist'].setList(self.movielist) 1336 self['movielist'].updateList(self.movielist) 1337 1338 1339 def getTaskList(self): 1297 1340 for job in JobManager.getPendingJobs(): 1298 self.tasklist.append((job, job.name, job.getStatustext(), int(100*job.progress/float(job.end)) ,str(100*job.progress/float(job.end)) + "%" )) 1299 self['tasklist'].setList(self.tasklist) 1300 self['tasklist'].updateList(self.tasklist) 1301 self.Timer.startLongTimer(2) 1341 self.movielist.append((job, job.name, job.getStatustext(), int(100*job.progress/float(job.end)) ,str(100*job.progress/float(job.end)) + "%" )) 1342 1343 if len(self.movielist) >= 1: 1344 self.Timer.startLongTimer(10) 1345 1346 def getMovieList(self): 1347 filelist = os_listdir(config.plugins.multimediathek.moviedir.value) 1348 if filelist is not None: 1349 filelist.sort() 1350 for filename in filelist: 1351 if os_path.isfile(config.plugins.multimediathek.moviedir.value + "/" + filename) and filename.endswith(".meta") is False: 1352 self.movielist.append(("movie", filename, _("Finished"), 100, "100%")) 1302 1353 1303 1354 def keyOK(self): 1304 current = self[" tasklist"].getCurrent()1355 current = self["movielist"].getCurrent() 1305 1356 if current: 1306 job = current[0] 1307 self.session.openWithCallback(self.JobViewCB, JobView, job) 1308 1357 if current[0] == "movie": 1358 sref = eServiceReference(0x1001, 0, config.plugins.multimediathek.moviedir.value + "/" + current[1]) 1359 sref.setName(current[1]) 1360 self.session.open(MediathekMoviePlayer, sref) 1361 else: 1362 job = current[0] 1363 self.session.openWithCallback(self.JobViewCB, JobView, job) 1364 1309 1365 def JobViewCB(self, why): 1310 1366 pass … … 1355 1411 self.cfglist.append(getConfigListEntry(_("Thumbnail Scaler:"), config.plugins.multimediathek.imagescaler)) 1356 1412 self.cfglist.append(getConfigListEntry(_("Show Adult Content:"), config.plugins.multimediathek.showadultcontent)) 1357 #self.cfglist.append(getConfigListEntry(_("Show Secret Content:"), config.plugins.multimediathek.showsecretcontent))1413 self.cfglist.append(getConfigListEntry(_("Show Secret Content:"), config.plugins.multimediathek.showsecretcontent)) 1358 1414 self.cfglist.append(getConfigListEntry(_("Download Directory:"), config.plugins.multimediathek.moviedir)) 1359 1415 self.cfglist.append(getConfigListEntry(_("Cache Folder:"), config.plugins.multimediathek.storagepath)) -
ipk/source/swapmediacenter_mediathek_2_9/CONTROL/control
r7149 r7246 1 1 Package: enigma2-plugin-swapmediacenter-multimediathek 2 Version: 2. 82 Version: 2.9 3 3 Architecture: sh4 4 4 OE: MultiMediathek -
ipk/source/swapmediacenter_mediathek_2_9/var/swap/extensions/MultiMediathek/plugin.py
r7146 r7246 3 3 # Coded by Homey (c) 2011 4 4 # 5 # Version: 2. 8.25 # Version: 2.9 6 6 # Support: www.i-have-a-dreambox.com 7 7 ##################################################### … … 61 61 config.plugins.multimediathek.showadultcontent = ConfigYesNo(default=False) 62 62 config.plugins.multimediathek.showsecretcontent = ConfigYesNo(default=False) 63 config.plugins.multimediathek.version = NoSave(ConfigText(default="2 82"))63 config.plugins.multimediathek.version = NoSave(ConfigText(default="290")) 64 64 65 65 default = config.plugins.multimediathek.storagepath.value + "/mediathek/movies" … … 75 75 class downloadJob(Job): 76 76 def __init__(self, toolbox, cmdline, filename, filetitle): 77 Job.__init__(self, _("Download Movie"))77 Job.__init__(self, "Download: %s" % filetitle) 78 78 self.filename = filename 79 79 self.toolbox = toolbox 80 80 self.retrycount = 0 81 downloadTask(self, cmdline, filename , filetitle)81 downloadTask(self, cmdline, filename) 82 82 83 83 def retry(self): … … 89 89 self.abort() 90 90 os_system("rm -f %s" % self.filename) 91 91 92 92 class downloadTask(Task): 93 93 ERROR_CORRUPT_FILE, ERROR_RTMP_ReadPacket, ERROR_SEGFAULT, ERROR_SERVER, ERROR_UNKNOWN = range(5) 94 def __init__(self, job, cmdline, filename , filetitle):95 Task.__init__(self, job, filetitle)94 def __init__(self, job, cmdline, filename): 95 Task.__init__(self, job, _("Downloading ...")) 96 96 self.postconditions.append(downloadTaskPostcondition()) 97 97 self.setCmdline(cmdline) … … 100 100 self.error = None 101 101 self.lasterrormsg = None 102 102 103 103 def processOutput(self, data): 104 104 try: … … 120 120 def processOutputLine(self, line): 121 121 line = line[:-1] 122 #print "[MultiMediathek DownloadTask STATUS MSG] %s" % line123 122 self.lasterrormsg = line 124 123 if line.startswith("ERROR:"): … … 135 134 elif line.find("Segmentation fault") != -1: 136 135 self.error = self.ERROR_SEGFAULT 137 136 138 137 def afterRun(self): 139 138 pass … … 182 181 183 182 def doEofInternal(self, playing): 184 self.leavePlayerConfirmed(True) 183 currPlay = self.session.nav.getCurrentService() 184 message = currPlay.info().getInfoString(iServiceInformation.sUser+12) 185 if message.find('Flash demuxer not available') != -1 or message.find('(AVI) demuxer not available') != -1: 186 self.session.openWithCallback(self.GSTplugincallback, MessageBox, _("Your Dreambox can't decode this video stream!\n%s\nDo you want to download and install it now?") % message, MessageBox.TYPE_YESNO) 187 elif message.find('GStreamer plugin') != -1 and message.find('not available') != -1: 188 self.__evPluginError() 189 else: 190 self.leavePlayerConfirmed(True) 185 191 186 192 def showMovies(self): … … 207 213 else: 208 214 self.session.open(MessageBox, _("Your Dreambox can't decode this video stream!\n%s") % message, type=MessageBox.TYPE_INFO, timeout=20) 215 216 def GSTplugincallback(self, answer): 217 if answer is True: 218 self.container=eConsoleAppContainer() 219 self.container.appClosed.append(self.finishedPluginInstall) 220 self.container.execute("opkg update && opkg install gst-plugin-avi && opkg install gst-plugin-flv && opkg install gst-plugin-rtsp") 221 else: 222 self.close() 223 224 def finishedPluginInstall(self,retval): 225 self.session.openWithCallback(self.restartGUI, MessageBox, _("Missing GStreamer-Plugins were installed!\nDo you want to restart Enigma2 GUI now?"), MessageBox.TYPE_YESNO) 226 227 def restartGUI(self, answer): 228 if answer is True: 229 self.session.open(TryQuitMainloop, 3) 209 230 210 231 def VLCcallback(self, answer): … … 322 343 # Get FrameBuffer Scale for ePicLoad() 323 344 sc = AVSwitch().getFramebufferScale() 324 345 325 346 # Init Thumb PicLoad 326 347 self.picload = ePicLoad() … … 395 416 396 417 def finishedPluginUpdate(self,retval): 397 self.session.openWithCallback(self.restartGUI, MessageBox, _("Mediathek-Plugin successfully updated!\nDo you want to restart Enigma2 GUI now?"), MessageBox.TYPE_YESNO)418 self.session.openWithCallback(self.restartGUI, MessageBox, _("Mediathek-Plugin successfully updated!\nDo you want to restart Enigma2 GUI now?"), MessageBox.TYPE_YESNO) 398 419 399 420 def restartGUI(self, answer): … … 409 430 if config.plugins.multimediathek.showsecretcontent.value: 410 431 feedurl = feedurl + "&showsecret=1" 411 432 412 433 if '-->' in feedurl: 413 434 # Request to download external page … … 422 443 # We send the received page directly to my webserver and parse it there ... 423 444 getPage(url=self.postpageurl, method='POST', headers={'Content-Type':'application/x-www-form-urlencoded'}, postdata=urlencode({'pagedata' : html})).addCallback(self.gotxmlfeed).addErrback(self.getxmlfeedError) 424 445 425 446 def getxmlfeedError(self, error=""): 426 447 self["pageinfo"].setText("Error downloading XML Feed!\n\n" + str(error)) 427 448 print error 428 449 429 450 def gotxmlfeed(self, page=""): 430 451 print page … … 525 546 if self.thumbcount+1 < len(self.Thumbnaillist): 526 547 self.getThumbnail() 527 548 528 549 def showThumbPixmap(self, picInfo=None): 529 550 ptr = self.picload.getData() … … 608 629 609 630 def key_menu(self): 610 if self.feedtitle == "Startseite": 611 self.session.openWithCallback(self.loadFrame, MultiMediathek_Settings) 612 elif self.itemlist: 631 if self.itemlist: 613 632 self.session.openWithCallback(self.loadFrame, MultiMediathek_MenuOptions, self.itemlist[self.index]) 614 633 … … 734 753 # Get FrameBuffer Scale for ePicLoad() 735 754 sc = AVSwitch().getFramebufferScale() 736 755 737 756 # Init ePicLoad 738 757 self.picload = ePicLoad() 739 758 self.picload.PictureData.get().append(self.showPosterPixmap) 740 759 self.picload.setPara((270, 350, sc[0], sc[1], config.plugins.multimediathek.imagecache.value, int(config.plugins.multimediathek.imagescaling.value), "#00000000")) 741 760 742 761 self.onFirstExecBegin.append(self.GetMovieInfo) 743 762 … … 756 775 def keyBlue(self): 757 776 if self.movieinfo is not None: 758 os_system("echo 'movie:::%s:::%s:::%s \n' >> /etc/enigma2/multimediathek.bookmarks" % (self.movieinfo[0], self.url, self.movieinfo[3]))777 os_system("echo 'movie:::%s:::%s:::%s' >> /etc/enigma2/multimediathek.bookmarks" % (self.movieinfo[0], self.url, self.movieinfo[3])) 759 778 self.session.open(MessageBox, _("Bookmark added!"), MessageBox.TYPE_INFO, timeout=5) 760 779 … … 775 794 # We send the received page directly to my webserver and parse it there ... 776 795 getPage(url=self.postpageurl, method='POST', headers={'Content-Type':'application/x-www-form-urlencoded'}, postdata=urlencode({'pagedata' : html})).addCallback(self.GotMovieInfo).addErrback(self.error) 777 796 778 797 def GotMovieInfo(self, html): 779 798 self.movieinfo = html.splitlines() … … 792 811 except Exception, error: 793 812 print "[MultiMediathek] Getting UserAgent String failed. Using default ..." 794 813 795 814 # Download Image 796 815 downloadPage(self.movieinfo[3], self.imagefolder+"/poster.jpg", agent="Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.2) Gecko/2008091620 Firefox/3.0.2").addCallback(self.downloadPosterCallback) … … 873 892 else: 874 893 self.session.open(MessageBox, _("Sorry, no supported videos found here."), MessageBox.TYPE_ERROR, timeout=10) 875 894 876 895 def movieSelectCallback(self, movieinfo): 877 896 self.selmovieinfo = movieinfo … … 884 903 getPage(getpageurl, agent="Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)").addCallback(self.ForwardExternalMovieList).addErrback(self.error) 885 904 return 886 905 887 906 if self.action == "cachedplayback": 888 907 self.session.open(PlayMovie, movieinfo, self.movieinfo[0], self.useragent) … … 923 942 924 943 def saveMovie(self, title, url, filename, fileid): 925 if '(VLC)' in title and VLCSUPPORT:926 try:927 if vlcServerConfig.getDefaultServer() is None:928 self.session.open(MessageBox, _("No Default Server configured in VLC Settings"), MessageBox.TYPE_ERROR)929 else:930 url = vlcServerConfig.getDefaultServer().playFile(url, 0x44, 0x45)931 except Exception, error:932 self.session.open(MessageBox,("VLC Plugin Error: %s") % error, MessageBox.TYPE_ERROR)933 934 944 if self.movieinfo[0]: 935 945 if fileid > 1: … … 944 954 else: 945 955 useragentcmd = "" 946 956 947 957 JobManager.AddJob(downloadJob(self, "wget %s -c '%s' -O '%s/%s'" % (useragentcmd, url, self.moviefolder, filename), self.moviefolder+"/"+filename, self.movieinfo[0])) 958 self.createMetaFile(filename) 948 959 self.LastJobView() 949 960 elif url[0:4] == "rtmp": 950 961 JobManager.AddJob(downloadJob(self, "rtmpdump -r '%s' -o '%s/%s' -e" % (url, self.moviefolder, filename), self.moviefolder+"/"+filename, self.movieinfo[0])) 962 self.createMetaFile(filename) 951 963 self.LastJobView() 952 964 else: … … 961 973 self.session.open(JobView, currentjob) 962 974 975 def createMetaFile(self, filename): 976 serviceref = eServiceReference(0x1001, 0, self.moviefolder + filename) 977 metafile = open("%s/%s.meta" % (self.moviefolder, filename), "w") 978 metafile.write("%s\n%s\n%s\n%i\n" % (serviceref.toString(), self.movieinfo[0].replace("\n", ""), self.movieinfo[2].replace("\n", ""), time())) 979 metafile.close() 980 963 981 def error(self, error): 964 982 self.session.open(MessageBox, _("Unexpected Error:\n%s") % (error), MessageBox.TYPE_ERROR) … … 973 991 class PlayMovie(Screen): 974 992 skin = """ 975 <screen position="center,center" size="400,240" title="Caching Video ..." > 976 <widget source="label_filename" transparent="1" render="Label" zPosition="2" position="10,10" size="380,20" font="Regular;19" /> 977 <widget source="label_destination" transparent="1" render="Label" zPosition="2" position="10,35" size="380,20" font="Regular;19" /> 978 <widget source="label_speed" transparent="1" render="Label" zPosition="2" position="10,60" size="380,20" font="Regular;19" /> 979 <widget source="label_timeleft" transparent="1" render="Label" zPosition="2" position="10,85" size="380,20" font="Regular;19" /> 980 <widget source="label_progress" transparent="1" render="Label" zPosition="2" position="10,110" size="380,20" font="Regular;19" /> 981 <widget name="activityslider" position="10,150" size="380,30" zPosition="3" transparent="0" /> 982 <widget name="key_green" position="50,200" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" /> 983 <widget name="key_red" position="200,200" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" /> 984 <ePixmap pixmap="/usr/share/enigma2/skin_default/buttons/green.png" position="50,200" size="140,40" alphatest="on" /> 985 <ePixmap pixmap="/usr/share/enigma2/skin_default/buttons/red.png" position="200,200" size="140,40" alphatest="on" /> 993 <screen position="center,center" size="450,240" title="Caching Video ..." > 994 <widget source="label_filename" transparent="1" render="Label" zPosition="2" position="10,10" size="430,21" font="Regular;19" /> 995 <widget source="label_destination" transparent="1" render="Label" zPosition="2" position="10,35" size="430,21" font="Regular;19" /> 996 <widget source="label_speed" transparent="1" render="Label" zPosition="2" position="10,60" size="430,21" font="Regular;19" /> 997 <widget source="label_timeleft" transparent="1" render="Label" zPosition="2" position="10,85" size="430,21" font="Regular;19" /> 998 <widget source="label_progress" transparent="1" render="Label" zPosition="2" position="10,110" size="430,21" font="Regular;19" /> 999 <widget name="activityslider" position="10,150" size="430,30" zPosition="3" transparent="0" /> 1000 <widget name="key_red" position="10,200" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" /> 1001 <widget name="key_green" position="155,200" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" /> 1002 <widget name="key_blue" position="300,200" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" /> 1003 <ePixmap pixmap="/usr/share/enigma2/skin_default/buttons/red.png" position="10,200" size="140,40" alphatest="on" /> 1004 <ePixmap pixmap="/usr/share/enigma2/skin_default/buttons/green.png" position="155,200" size="140,40" alphatest="on" /> 1005 <ePixmap pixmap="/usr/share/enigma2/skin_default/buttons/blue.png" position="300,200" size="140,40" alphatest="on" /> 986 1006 </screen>""" 987 1007 … … 999 1019 1000 1020 self.streamactive = False 1021 self.isVisible = True 1001 1022 1002 1023 self.container=eConsoleAppContainer() … … 1029 1050 self["key_green"] = Button(_("Play now")) 1030 1051 self["key_red"] = Button(_("Cancel")) 1052 self["key_blue"] = Button(_("Show/Hide")) 1031 1053 1032 1054 self["label_filename"] = StaticText("File: %s" % (self.filename)) … … 1041 1063 "ok": self.okbuttonClick, 1042 1064 "red": self.exit, 1043 "green": self.playfile 1065 "green": self.playfile, 1066 "blue": self.visibility 1044 1067 }, -1) 1045 1068 … … 1057 1080 1058 1081 def okbuttonClick(self): 1059 self.StatusTimer.start(5000, True)1060 self.UpdateStatus()1082 if self.isVisible == False: 1083 self.visibility() 1061 1084 1062 1085 def UpdateStatus(self): … … 1130 1153 def copyfinished(self,retval): 1131 1154 self.streamactive = False 1155 self.UpdateStatus() 1132 1156 self["label_progress"].setText("Progress: 100%") 1133 1157 self["activityslider"].setValue(100) … … 1144 1168 1145 1169 def MoviePlayerCallback(self, response=None): 1170 if self.isVisible == False: 1171 self.visibility() 1146 1172 self.UpdateStatus() 1147 1173 if response is not None and VLCSUPPORT: … … 1164 1190 return retstr 1165 1191 1192 def visibility(self): 1193 if self.isVisible == True: 1194 self.isVisible = False 1195 self.hide() 1196 else: 1197 self.isVisible = True 1198 self.show() 1199 1166 1200 def exit(self, retval=None): 1201 if self.isVisible == False: 1202 self.visibility() 1203 return 1204 1167 1205 self.container.kill() 1168 1206 self.BgFileEraser.erase(self.destination + self.filename) … … 1219 1257 tmpfile = open(bookmarkfile, "r") 1220 1258 for line in tmpfile: 1221 if self.movieinfo[5] not in line: 1222 tmpdata = tmpdata + line + "\n" 1223 1259 if self.movieinfo[5] not in line and line != "\n": 1260 tmpdata = tmpdata + line 1224 1261 tmpfile.close() 1225 1262 os_system("echo '%s' > %s" % (tmpdata,bookmarkfile)) … … 1247 1284 Screen.__init__(self, session) 1248 1285 self.session = session 1249 1286 1250 1287 self.skin = """ 1251 <screen name="MediathekTasksScreen" position="center,center" size="700,550" title=" Mediathek - Active Downloads">1252 <widget source=" tasklist" render="Listbox" position="30,120" size="640,370" zPosition="7" scrollbarMode="showOnDemand" transparent="1" >1288 <screen name="MediathekTasksScreen" position="center,center" size="700,550" title="Video Download List"> 1289 <widget source="movielist" render="Listbox" position="10,50" size="680,450" zPosition="7" scrollbarMode="showOnDemand" transparent="1" > 1253 1290 <convert type="TemplatedMultiContent"> 1254 1291 {"template": [ 1255 MultiContentEntryText(pos = (0, 1), size = ( 200, 24), font=1, flags = RT_HALIGN_LEFT, text = 1), # index 1 is the name1256 MultiContentEntryText(pos = ( 210, 1), size = (150, 24), font=1, flags = RT_HALIGN_RIGHT, text = 2), # index 2 is the state1257 MultiContentEntryProgress(pos = ( 370, 1), size = (100, 24), percent = -3), # index 3 should be progress1258 MultiContentEntryText(pos = ( 480, 1), size = (100, 24), font=1, flags = RT_HALIGN_RIGHT, text = 4), # index 4 is the percentage1292 MultiContentEntryText(pos = (0, 1), size = (310, 28), font=1, flags = RT_HALIGN_LEFT, text = 1), # index 1 is the name 1293 MultiContentEntryText(pos = (320, 1), size = (150, 28), font=1, flags = RT_HALIGN_RIGHT, text = 2), # index 2 is the state 1294 MultiContentEntryProgress(pos = (480, 1), size = (100, 28), percent = -3), # index 3 should be progress 1295 MultiContentEntryText(pos = (590, 1), size = (60, 28), font=1, flags = RT_HALIGN_RIGHT, text = 4), # index 4 is the percentage 1259 1296 ], 1260 "fonts": [gFont("Regular", 2 2),gFont("Regular", 18)],1261 "itemHeight": 2 51297 "fonts": [gFont("Regular", 26),gFont("Regular", 22)], 1298 "itemHeight": 29 1262 1299 } 1263 1300 </convert> 1264 1301 </widget> 1265 <ePixmap position="220,500" zPosition="4" size="140,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />1266 <widget name="key_red" position="220,500" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />1267 1302 </screen>""" 1268 1269 self["shortcuts"] = ActionMap([" SetupActions", "ColorActions"],1303 1304 self["shortcuts"] = ActionMap(["OkCancelActions"], 1270 1305 { 1271 1306 "ok": self.keyOK, 1272 "cancel": self.keyClose, 1273 "red": self.keyClose 1307 "cancel": self.keyClose 1274 1308 }, -1) 1275 1309 1276 self[" tasklist"] = List([])1310 self["movielist"] = List([]) 1277 1311 self["key_red"] = Button(_("Close")) 1278 1312 1279 1313 self.Timer = eTimer() 1280 1314 self.Timer.callback.append(self.TimerFire) … … 1282 1316 self.onLayoutFinish.append(self.layoutFinished) 1283 1317 self.onClose.append(self.__onClose) 1284 1318 1285 1319 def __onClose(self): 1286 1320 del self.Timer … … 1291 1325 def TimerFire(self): 1292 1326 self.Timer.stop() 1293 self.rebuildTaskList() 1294 1295 def rebuildTaskList(self): 1296 self.tasklist = [] 1327 self.rebuildMovieList() 1328 1329 def rebuildMovieList(self): 1330 self.movielist = [] 1331 1332 self.getTaskList() 1333 self.getMovieList() 1334 1335 self['movielist'].setList(self.movielist) 1336 self['movielist'].updateList(self.movielist) 1337 1338 1339 def getTaskList(self): 1297 1340 for job in JobManager.getPendingJobs(): 1298 self.tasklist.append((job, job.name, job.getStatustext(), int(100*job.progress/float(job.end)) ,str(100*job.progress/float(job.end)) + "%" )) 1299 self['tasklist'].setList(self.tasklist) 1300 self['tasklist'].updateList(self.tasklist) 1301 self.Timer.startLongTimer(2) 1341 self.movielist.append((job, job.name, job.getStatustext(), int(100*job.progress/float(job.end)) ,str(100*job.progress/float(job.end)) + "%" )) 1342 1343 if len(self.movielist) >= 1: 1344 self.Timer.startLongTimer(10) 1345 1346 def getMovieList(self): 1347 filelist = os_listdir(config.plugins.multimediathek.moviedir.value) 1348 if filelist is not None: 1349 filelist.sort() 1350 for filename in filelist: 1351 if os_path.isfile(config.plugins.multimediathek.moviedir.value + "/" + filename) and filename.endswith(".meta") is False: 1352 self.movielist.append(("movie", filename, _("Finished"), 100, "100%")) 1302 1353 1303 1354 def keyOK(self): 1304 current = self[" tasklist"].getCurrent()1355 current = self["movielist"].getCurrent() 1305 1356 if current: 1306 job = current[0] 1307 self.session.openWithCallback(self.JobViewCB, JobView, job) 1308 1357 if current[0] == "movie": 1358 sref = eServiceReference(0x1001, 0, config.plugins.multimediathek.moviedir.value + "/" + current[1]) 1359 sref.setName(current[1]) 1360 self.session.open(MediathekMoviePlayer, sref) 1361 else: 1362 job = current[0] 1363 self.session.openWithCallback(self.JobViewCB, JobView, job) 1364 1309 1365 def JobViewCB(self, why): 1310 1366 pass … … 1355 1411 self.cfglist.append(getConfigListEntry(_("Thumbnail Scaler:"), config.plugins.multimediathek.imagescaler)) 1356 1412 self.cfglist.append(getConfigListEntry(_("Show Adult Content:"), config.plugins.multimediathek.showadultcontent)) 1357 #self.cfglist.append(getConfigListEntry(_("Show Secret Content:"), config.plugins.multimediathek.showsecretcontent))1413 self.cfglist.append(getConfigListEntry(_("Show Secret Content:"), config.plugins.multimediathek.showsecretcontent)) 1358 1414 self.cfglist.append(getConfigListEntry(_("Download Directory:"), config.plugins.multimediathek.moviedir)) 1359 1415 self.cfglist.append(getConfigListEntry(_("Cache Folder:"), config.plugins.multimediathek.storagepath))
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/openaaf/chrome/common/titannit_trac_banner.png)