def init_predownloaded(self, mimetype, filedata): if DEBUG: log(self.log_prefix + 'init_predownloaded: mimetype', mimetype, 'len', len(filedata)) if self.dldoneflag.is_set(): if DEBUG: log(self.log_prefix + 'init_predownloaded: done flag is set, exit') return ext = self.guess_extension_from_mimetype(mimetype) filename = binascii.hexlify(self.dlhash) if len(ext): filename += '.' + ext content_length = len(filedata) self.fileinfo['filename'] = filename self.fileinfo['size'] = content_length self.fileinfo['mimetype'] = mimetype temp_dir = os.path.join(self.config['buffer_dir'], binascii.hexlify(self.dlhash)) if not os.path.isdir(temp_dir): os.mkdir(temp_dir) self.storage = Storage(self.dlhash, self.config, self.fileinfo, temp_dir, None, self.finished_callback, filedata=filedata) self.downloader.set_storage(self.storage) self.finished_callback() if self.dlmode == DLMODE_VOD: if DEBUG: log( self.log_prefix + 'init_predownloaded: starting in vod mode, but download is finished: fileinfo', self.fileinfo) self.vodeventcallback( self.fileinfo, VODEVENT_START, { 'complete': True, 'filename': self.storage.get_dest_path(), 'mimetype': self.fileinfo['mimetype'], 'stream': None, 'length': self.storage.get_content_length(), 'bitrate': self.fileinfo['bitrate'] })
def init(self, resumedata=None, content_length=None, mimetype=None): if DEBUG: log(self.log_prefix + 'init: resumedata', resumedata, 'content_length', content_length, 'mimetype', mimetype) if self.dldoneflag.is_set(): if DEBUG: log(self.log_prefix + 'init: done flag is set, exit') return if content_length is None: content_length, mimetype = self.downloader.init() if resumedata is not None: if content_length != resumedata['size']: raise Exception('content length differs from resumedata') if mimetype != resumedata['mimetype']: raise Exception('mime type differs from resumedata') filename = resumedata['filename'] duration = resumedata.get('duration', None) if duration: bitrate = content_length / duration self.fileinfo['duration'] = duration self.fileinfo['bitrate'] = bitrate if DEBUG: log( self.log_prefix + '__init__: got duration from resumedata: main_url', self.main_url, 'duration', duration, 'bitrate', bitrate) else: ext = self.guess_extension_from_mimetype(mimetype) filename = binascii.hexlify(self.dlhash) if len(ext): filename += '.' + ext self.fileinfo['filename'] = filename self.fileinfo['size'] = content_length self.fileinfo['mimetype'] = mimetype temp_dir = os.path.join(self.config['buffer_dir'], binascii.hexlify(self.dlhash)) if not os.path.isdir(temp_dir): os.mkdir(temp_dir) self.storage = Storage(self.dlhash, self.config, self.fileinfo, temp_dir, resumedata, self.finished_callback) self.downloader.set_storage(self.storage) completed = self.storage.is_finished() if completed: self.finished_callback() if self.dlmode == DLMODE_VOD: if completed: if DEBUG: log( self.log_prefix + '__init__: starting in vod mode, but download is finished: fileinfo', self.fileinfo) self.vodeventcallback( self.fileinfo, VODEVENT_START, { 'complete': True, 'filename': self.storage.get_dest_path(), 'mimetype': self.fileinfo['mimetype'], 'stream': None, 'length': self.storage.get_content_length(), 'bitrate': self.fileinfo['bitrate'] }) else: if DEBUG: log( self.log_prefix + '__init__: starting in vod mode: fileinfo', self.fileinfo) self.voddownload = VODTransporter(self, self.dlhash, self.fileinfo, self.vodeventcallback) self.storage.add_got_data_observer( self.voddownload.got_data_observer) if not completed: self.downloader.start()