def is_cloaked(nzo, path, names): """ Return True if this is likely to be a cloaked encrypted post """ fname = unicoder(get_filename(path)).lower() fname = os.path.splitext(fname)[0] for name in names: name = get_filename(name.lower()) name, ext = os.path.splitext(unicoder(name)) if ext == u'.rar' and fname.startswith(name) and (len(fname) - len( name)) < 8 and len(names) < 3 and not RE_SUBS.search(fname): # Only warn once if nzo.encrypted == 0: logging.warning( T('Job "%s" is probably encrypted due to RAR with same name inside this RAR' ), nzo.final_name) nzo.encrypted = 1 return True elif 'password' in name and ext not in SAFE_EXTS: # Only warn once if nzo.encrypted == 0: logging.warning( T('Job "%s" is probably encrypted: "password" in filename "%s"' ), nzo.final_name, name) nzo.encrypted = 1 return True return False
def run(self): while 1: job = self.queue.get() if not job: logging.info("Shutting down") break nzo, nzf = job if nzf: # Check if enough disk space is free, if not pause downloader and send email if diskspace(force=True)['download_dir'][1] < ( cfg.download_free.get_float() + nzf.bytes) / GIGI: # Only warn and email once if not sabnzbd.downloader.Downloader.do.paused: logging.warning( T('Too little diskspace forcing PAUSE')) # Pause downloader, but don't save, since the disk is almost full! sabnzbd.downloader.Downloader.do.pause() sabnzbd.emailer.diskfull() # Abort all direct unpackers, just to be sure sabnzbd.directunpacker.abort_all() # Place job back in queue and wait 30 seconds to hope it gets resolved self.process(job) sleep(30) continue # Prepare filename nzo.verify_nzf_filename(nzf) nzf.filename = sanitize_filename(nzf.filename) filepath = get_filepath(long_path(cfg.download_dir.get_path()), nzo, nzf.filename) nzf.filename = get_filename(filepath) if filepath: logging.info('Decoding %s %s', filepath, nzf.type) try: filepath = self.assemble(nzf, filepath) except IOError, (errno, strerror): # If job was deleted or in active post-processing, ignore error if not nzo.deleted and not nzo.is_gone( ) and not nzo.pp_active: # 28 == disk full => pause downloader if errno == 28: logging.error(T('Disk full! Forcing Pause')) else: logging.error( T('Disk error on creating file %s'), clip_path(filepath)) # Log traceback logging.info('Traceback: ', exc_info=True) # Pause without saving sabnzbd.downloader.Downloader.do.pause() continue except: logging.error(T('Fatal error in Assembler'), exc_info=True) break
def is_cloaked(nzo, path, names): """ Return True if this is likely to be a cloaked encrypted post """ fname = unicoder(get_filename(path)).lower() fname = os.path.splitext(fname)[0] for name in names: name = get_filename(name.lower()) name, ext = os.path.splitext(unicoder(name)) if ext == u'.rar' and fname.startswith(name) and (len(fname) - len(name)) < 8 and len(names) < 3 and not RE_SUBS.search(fname): # Only warn once if nzo.encrypted == 0: logging.warning(T('Job "%s" is probably encrypted due to RAR with same name inside this RAR'), nzo.final_name) nzo.encrypted = 1 return True elif 'password' in name and ext not in SAFE_EXTS: # Only warn once if nzo.encrypted == 0: logging.warning(T('Job "%s" is probably encrypted: "password" in filename "%s"'), nzo.final_name, name) nzo.encrypted = 1 return True return False
def run(self): while 1: job = self.queue.get() if not job: logging.info("Shutting down") break nzo, nzf = job if nzf: # Check if enough disk space is free, if not pause downloader and send email if diskspace(force=True)['download_dir'][1] < (cfg.download_free.get_float() + nzf.bytes) / GIGI: # Only warn and email once if not sabnzbd.downloader.Downloader.do.paused: logging.warning(T('Too little diskspace forcing PAUSE')) # Pause downloader, but don't save, since the disk is almost full! sabnzbd.downloader.Downloader.do.pause() sabnzbd.emailer.diskfull() # Abort all direct unpackers, just to be sure sabnzbd.directunpacker.abort_all() # Place job back in queue and wait 30 seconds to hope it gets resolved self.process(job) sleep(30) continue # Prepare filename nzo.verify_nzf_filename(nzf) nzf.filename = sanitize_filename(nzf.filename) filepath = get_filepath(long_path(cfg.download_dir.get_path()), nzo, nzf.filename) nzf.filename = get_filename(filepath) if filepath: logging.info('Decoding %s %s', filepath, nzf.type) try: filepath = self.assemble(nzf, filepath) except IOError, (errno, strerror): # If job was deleted or in active post-processing, ignore error if not nzo.deleted and not nzo.is_gone() and not nzo.pp_active: # 28 == disk full => pause downloader if errno == 28: logging.error(T('Disk full! Forcing Pause')) else: logging.error(T('Disk error on creating file %s'), clip_path(filepath)) # Log traceback logging.info('Traceback: ', exc_info=True) # Pause without saving sabnzbd.downloader.Downloader.do.pause() continue except: logging.error(T('Fatal error in Assembler'), exc_info=True) break
def add_local(f): """ Function for easily adding nzb/zip/rar/nzb.gz to sabnzbd """ if os.path.exists(f): fn = get_filename(f) if fn: if get_ext(fn) in VALID_ARCHIVES: ProcessArchiveFile(fn, f, keep=True) elif get_ext(fn) in VALID_NZB_FILES: ProcessSingleFile(fn, f, keep=True) else: logging.error("Filename not found: %s", f) else: logging.error("File not found: %s", f)
def application_openFiles_(self, nsapp, filenames): #logging.info('[osx] file open') #logging.info('[osx] file : %s' % (filenames)) for name in filenames : logging.info('[osx] receiving from OSX : %s' % name) if os.path.exists(name): fn = get_filename(name) #logging.info('[osx] filename : %s' % (fn)) if fn: if get_ext(name) in ('.zip', '.rar'): #logging.info('[osx] archive') dirscanner.ProcessArchiveFile(fn, name, keep=True) elif get_ext(name) in ('.nzb', '.gz'): #logging.info('[osx] nzb') dirscanner.ProcessSingleFile(fn, name, keep=True)
def application_openFiles_(self, nsapp, filenames): # logging.info('[osx] file open') # logging.info('[osx] file : %s' % (filenames)) for name in filenames: logging.info('[osx] receiving from OSX : %s', name) if os.path.exists(name): fn = get_filename(name) # logging.info('[osx] filename : %s' % (fn)) if fn: if get_ext(name) in VALID_ARCHIVES: # logging.info('[osx] archive') dirscanner.ProcessArchiveFile(fn, name, keep=True) elif get_ext(name) in ('.nzb', '.gz', '.bz2'): # logging.info('[osx] nzb') dirscanner.ProcessSingleFile(fn, name, keep=True)