python-libtorrent resume_data
This commit is contained in:
		
							parent
							
								
									63bf62b223
								
							
						
					
					
						commit
						3de1a28a97
					
				
							
								
								
									
										2
									
								
								Core.py
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Core.py
									
									
									
									
									
								
							@ -548,7 +548,7 @@ class Core:
 | 
				
			|||||||
                    clDimgray = '[COLOR FF696969]%s[/COLOR]'
 | 
					                    clDimgray = '[COLOR FF696969]%s[/COLOR]'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    title = title + chr(10) + clDimgray % '(%s)' % foldername.encode('utf-8')
 | 
					                    title = title + chr(10) + clDimgray % '(%s)' % foldername.encode('utf-8')
 | 
				
			||||||
                    if self.torrent_player == '2' and seek > 0:
 | 
					                    if self.torrent_player != '1' and seek > 0:
 | 
				
			||||||
                        seek_text = '%02d:%02d:%02d' % ((seek / (60*60)), (seek / 60) % 60, seek % 60)
 | 
					                        seek_text = '%02d:%02d:%02d' % ((seek / (60*60)), (seek / 60) % 60, seek % 60)
 | 
				
			||||||
                        contextMenu = [(self.localize('Play (from %s)') % seek_text, ListString % ('WatchedHistory', 'playwithseek', 'addtime', str(addtime))),
 | 
					                        contextMenu = [(self.localize('Play (from %s)') % seek_text, ListString % ('WatchedHistory', 'playwithseek', 'addtime', str(addtime))),
 | 
				
			||||||
                                       (self.localize('Play (from start)'), ListString % ('WatchedHistory', 'playnoseek', 'addtime', str(addtime))),]
 | 
					                                       (self.localize('Play (from start)'), ListString % ('WatchedHistory', 'playnoseek', 'addtime', str(addtime))),]
 | 
				
			||||||
 | 
				
			|||||||
@ -433,8 +433,19 @@ class Libtorrent:
 | 
				
			|||||||
        if self.save_resume_data:
 | 
					        if self.save_resume_data:
 | 
				
			||||||
            log('loading resume data')
 | 
					            log('loading resume data')
 | 
				
			||||||
            torrent_info['resume_data']=self.save_resume_data
 | 
					            torrent_info['resume_data']=self.save_resume_data
 | 
				
			||||||
        self.torrentHandle = self.session.add_torrent(torrent_info)
 | 
					        else:
 | 
				
			||||||
 | 
					            resume_file=self.resume_data_path()
 | 
				
			||||||
 | 
					            if xbmcvfs.exists(resume_file):
 | 
				
			||||||
 | 
					                log('loading resume data from file'+resume_file)
 | 
				
			||||||
 | 
					                try:
 | 
				
			||||||
 | 
					                    resumDataFile=xbmcvfs.File(resume_file,'rb')
 | 
				
			||||||
 | 
					                    self.save_resume_data=resumDataFile.read()
 | 
				
			||||||
 | 
					                    resumDataFile.close()
 | 
				
			||||||
 | 
					                    torrent_info['resume_data']=self.save_resume_data
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					                except:
 | 
				
			||||||
 | 
					                    log(' Failed to load resume data from file'+ resume_file)
 | 
				
			||||||
 | 
					        self.torrentHandle = self.session.add_torrent(torrent_info)
 | 
				
			||||||
        self.torrentHandle.set_sequential_download(True)
 | 
					        self.torrentHandle.set_sequential_download(True)
 | 
				
			||||||
        self.torrentHandle.set_max_connections(60)
 | 
					        self.torrentHandle.set_max_connections(60)
 | 
				
			||||||
        self.torrentHandle.set_max_uploads(-1)
 | 
					        self.torrentHandle.set_max_uploads(-1)
 | 
				
			||||||
@ -443,6 +454,7 @@ class Libtorrent:
 | 
				
			|||||||
    def stopSession(self):
 | 
					    def stopSession(self):
 | 
				
			||||||
        for i in range(self.torrentFileInfo.num_pieces()):
 | 
					        for i in range(self.torrentFileInfo.num_pieces()):
 | 
				
			||||||
            self.torrentHandle.piece_priority(i, 0)
 | 
					            self.torrentHandle.piece_priority(i, 0)
 | 
				
			||||||
 | 
					        self.resume_data()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def continueSession(self, contentId=0, Offset=0, seeding=False, isMP4=False):
 | 
					    def continueSession(self, contentId=0, Offset=0, seeding=False, isMP4=False):
 | 
				
			||||||
        self.piece_length = self.torrentFileInfo.piece_length()
 | 
					        self.piece_length = self.torrentFileInfo.piece_length()
 | 
				
			||||||
@ -479,6 +491,19 @@ class Libtorrent:
 | 
				
			|||||||
            self.session.stop_dht()
 | 
					            self.session.stop_dht()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def resume_data(self):
 | 
					    def resume_data(self):
 | 
				
			||||||
 | 
					        self.session.pause()
 | 
				
			||||||
 | 
					        self.save_resume_data=None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            if not self.torrentHandle.is_valid():
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					            status = self.torrentHandle.status()
 | 
				
			||||||
 | 
					            if not status.has_metadata:
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					            if not status.need_save_resume:
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					            log('[save_resume_data]: waiting for alert...')
 | 
				
			||||||
            self.torrentHandle.save_resume_data()
 | 
					            self.torrentHandle.save_resume_data()
 | 
				
			||||||
            received=False
 | 
					            received=False
 | 
				
			||||||
            while not received:   
 | 
					            while not received:   
 | 
				
			||||||
@ -489,7 +514,21 @@ class Libtorrent:
 | 
				
			|||||||
                    received = True
 | 
					                    received = True
 | 
				
			||||||
                    debug('[save_resume_data]: '+str(dir(a)))
 | 
					                    debug('[save_resume_data]: '+str(dir(a)))
 | 
				
			||||||
                    self.save_resume_data=self.lt.bencode(a.resume_data)
 | 
					                    self.save_resume_data=self.lt.bencode(a.resume_data)
 | 
				
			||||||
        log('[save_resume_data]: the torrent resume data are saved')
 | 
					                    log('[save_resume_data]: the torrent resume data are received')
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        resumeFileHandler = xbmcvfs.File(self.resume_data_path(), "w+b")
 | 
				
			||||||
 | 
					                        resumeFileHandler.write(self.save_resume_data)
 | 
				
			||||||
 | 
					                        resumeFileHandler.close()
 | 
				
			||||||
 | 
					                        log('[save_resume_data]: the torrent resume data to file' + self.resume_data_path()) 
 | 
				
			||||||
 | 
					                    except:
 | 
				
			||||||
 | 
					                       log('[save_resume_data]: failed to save the torrent resume data to file') 
 | 
				
			||||||
 | 
					                elif type(a) == self.lt.save_resume_data_failed_alert:
 | 
				
			||||||
 | 
					                    received = True
 | 
				
			||||||
 | 
					                    log('[save_resume_data]: save_resume_data() failed')
 | 
				
			||||||
 | 
					            log('[save_resume_data]: done.')
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        finally:
 | 
				
			||||||
 | 
					            self.session.resume()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def debug(self):
 | 
					    def debug(self):
 | 
				
			||||||
        #try:
 | 
					        #try:
 | 
				
			||||||
@ -564,3 +603,7 @@ class Libtorrent:
 | 
				
			|||||||
                log("'%s':'%s'," % (attr, getattr(obj, attr)))
 | 
					                log("'%s':'%s'," % (attr, getattr(obj, attr)))
 | 
				
			||||||
            except:
 | 
					            except:
 | 
				
			||||||
                pass
 | 
					                pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def resume_data_path(self):
 | 
				
			||||||
 | 
					        path=self.torrentFile + ".resume_data"
 | 
				
			||||||
 | 
					        return path
 | 
				
			||||||
 | 
				
			|||||||
@ -148,6 +148,9 @@ class TorrentPlayer(xbmc.Player):
 | 
				
			|||||||
        self.params = params
 | 
					        self.params = params
 | 
				
			||||||
        self.get = self.params.get
 | 
					        self.get = self.params.get
 | 
				
			||||||
        self.contentId = int(self.get("url"))
 | 
					        self.contentId = int(self.get("url"))
 | 
				
			||||||
 | 
					        if self.get("seek"):
 | 
				
			||||||
 | 
					            self.seek = int(self.get("seek"))
 | 
				
			||||||
 | 
					            log('[TorrentPlayer] Seek='+str(self.seek))   
 | 
				
			||||||
        self.torrent = Downloader.Torrent(self.userStorageDirectory, self.torrentUrl, self.torrentFilesDirectory).player
 | 
					        self.torrent = Downloader.Torrent(self.userStorageDirectory, self.torrentUrl, self.torrentFilesDirectory).player
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            if self.get("url2"):
 | 
					            if self.get("url2"):
 | 
				
			||||||
@ -347,13 +350,17 @@ class TorrentPlayer(xbmc.Player):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            xbmc.sleep(2000)  # very important, do not edit this, podavan
 | 
					            xbmc.sleep(2000)  # very important, do not edit this, podavan
 | 
				
			||||||
            i = 0
 | 
					            i = 0
 | 
				
			||||||
            while not xbmc.abortRequested or not self.isPlaying() or i < 50:
 | 
					            while not xbmc.abortRequested and not self.isPlaying() and i < 50:
 | 
				
			||||||
                xbmc.sleep(200)
 | 
					                xbmc.sleep(200)
 | 
				
			||||||
                i += 1
 | 
					                i += 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            log('[TorrentPlayer]: self.isPlaying() = %s, i = %d, xbmc.abortRequested - %s' % (str(self.isPlaying()), i, str(xbmc.abortRequested)))
 | 
					            log('[TorrentPlayer]: self.isPlaying() = %s, i = %d, xbmc.abortRequested - %s' % (str(self.isPlaying()), i, str(xbmc.abortRequested)))
 | 
				
			||||||
            if not self.isPlaying() or xbmc.abortRequested:
 | 
					            if not self.isPlaying() or xbmc.abortRequested:
 | 
				
			||||||
                return False
 | 
					                return False
 | 
				
			||||||
 | 
					            if self.seek > 0:
 | 
				
			||||||
 | 
					                log('[TorrentPlayer]: seekTime - '+str(self.seek))
 | 
				
			||||||
 | 
					                self.seekTime(self.seek)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return True
 | 
					            return True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def setup_subs(self, label, path):
 | 
					    def setup_subs(self, label, path):
 | 
				
			||||||
 | 
				
			|||||||
@ -1766,7 +1766,7 @@ def first_run_242():
 | 
				
			|||||||
            #                        Localization.localize('Torrent2HTTP enabled! Can be changed in Settings.'))
 | 
					            #                        Localization.localize('Torrent2HTTP enabled! Can be changed in Settings.'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def seeking_warning(seek):
 | 
					def seeking_warning(seek):
 | 
				
			||||||
    if __settings__.getSetting('torrent_player')=='2':
 | 
					    if __settings__.getSetting('torrent_player')!='1':
 | 
				
			||||||
        seek_point = '%02d:%02d:%02d' % ((seek / (60*60)), (seek / 60) % 60, seek % 60)
 | 
					        seek_point = '%02d:%02d:%02d' % ((seek / (60*60)), (seek / 60) % 60, seek % 60)
 | 
				
			||||||
        yes=xbmcgui.Dialog().yesno('< %s >' % (Localization.localize('Seeking')),
 | 
					        yes=xbmcgui.Dialog().yesno('< %s >' % (Localization.localize('Seeking')),
 | 
				
			||||||
            Localization.localize('Would you like to resume from %s?') % seek_point,)
 | 
					            Localization.localize('Would you like to resume from %s?') % seek_point,)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user