Пример #1
0
 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']
             })
Пример #2
0
 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()