def one(self, **kwargs): """ Accept language and show server page """ if cfg.configlock() or not sabnzbd.interface.check_access(): return sabnzbd.interface.Protected() if not sabnzbd.interface.check_login(): raise sabnzbd.interface.NeedLogin() language = kwargs.get('lang') if kwargs.get('lang') else cfg.language() cfg.language.set(language) set_language(language) sabnzbd.api.clear_trans_cache() # Always setup Glitter sabnzbd.interface.change_web_dir('Glitter - Default') info = self.info.copy() info['session'] = cfg.api_key() info['language'] = cfg.language() info['active_lang'] = info['language'] info['T'] = Ttemplate info['have_ssl_context'] = sabnzbd.HAVE_SSL_CONTEXT servers = config.get_servers() if not servers: info['host'] = '' info['port'] = '' info['username'] = '' info['password'] = '' info['connections'] = '' info['ssl'] = 0 info['ssl_verify'] = 2 else: # Sort servers to get the first enabled one server_names = sorted( servers.keys(), key=lambda svr: '%d%02d%s' % (int(not servers[svr].enable()), servers[svr].priority(), servers[svr].displayname().lower())) for server in server_names: # If there are multiple servers, just use the first enabled one s = servers[server] info['host'] = s.host() info['port'] = s.port() info['username'] = s.username() info['password'] = s.password.get_stars() info['connections'] = s.connections() info['ssl'] = s.ssl() info['ssl_verify'] = s.ssl_verify() if s.enable(): break template = Template(file=os.path.join(self.__web_dir, 'one.html'), searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) return template.respond()
def two(self, **kwargs): """ Accept server and show the final page for restart """ if cfg.configlock() or not sabnzbd.interface.check_access(): return sabnzbd.interface.Protected() if not sabnzbd.interface.check_login(): raise sabnzbd.interface.NeedLogin() # Save server details if kwargs: kwargs['enable'] = 1 sabnzbd.interface.handle_server(kwargs) config.save_config() # Show Restart screen info = self.info.copy() info['helpuri'] = 'https://sabnzbd.org/wiki/' info['session'] = cfg.api_key() info['access_url'], info['urls'] = self.get_access_info() info['active_lang'] = cfg.language() info['T'] = Ttemplate info['download_dir'] = cfg.download_dir.get_path() info['complete_dir'] = cfg.complete_dir.get_path() template = Template(file=os.path.join(self.__web_dir, 'two.html'), searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) return template.respond()
def index(self, **kwargs): """ Show the language selection page """ if cfg.configlock() or not sabnzbd.interface.check_access(): return sabnzbd.interface.Protected() if not sabnzbd.interface.check_login(): raise sabnzbd.interface.NeedLogin() info = self.info.copy() lng = None if sabnzbd.WIN32: import util.apireg lng = util.apireg.get_install_lng() logging.debug('Installer language code "%s"', lng) info['lang'] = lng or cfg.language() info['active_lang'] = info['lang'] info['languages'] = list_languages() info['T'] = Ttemplate set_language(info['lang']) sabnzbd.api.clear_trans_cache() if not os.path.exists(self.__web_dir): # If the wizard folder does not exist, simply load the normal page raise cherrypy.HTTPRedirect('') else: template = Template(file=os.path.join(self.__web_dir, 'index.html'), searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) return template.respond()
def one(self, **kwargs): """ Accept language and show server page """ language = kwargs.get('lang') if kwargs.get('lang') else cfg.language() cfg.language.set(language) set_language(language) sabnzbd.api.clear_trans_cache() # Always setup Glitter sabnzbd.interface.change_web_dir('Glitter - Default') info = self.info.copy() info['session'] = cfg.api_key() info['language'] = cfg.language() info['active_lang'] = info['language'] info['T'] = Ttemplate info['have_ssl_context'] = sabnzbd.HAVE_SSL_CONTEXT servers = config.get_servers() if not servers: info['host'] = '' info['port'] = '' info['username'] = '' info['password'] = '' info['connections'] = '' info['ssl'] = 0 info['ssl_verify'] = 2 else: for server in servers: # If there are multiple servers, just use the first enabled one s = servers[server] info['host'] = s.host() info['port'] = s.port() info['username'] = s.username() info['password'] = s.password.get_stars() info['connections'] = s.connections() info['ssl'] = s.ssl() info['ssl_verify'] = s.ssl_verify() if s.enable(): break template = Template(file=os.path.join(self.__web_dir, 'one.html'), searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) return template.respond()
def send_with_template(prefix, parm, test=None): """ Send an email using template """ parm['from'] = cfg.email_from() parm['date'] = get_email_date() lst = [] path = cfg.email_dir.get_path() if path and os.path.exists(path): try: lst = glob.glob(os.path.join(path, '%s-*.tmpl' % prefix)) except: logging.error(Ta('Cannot find email templates in %s'), path) else: path = os.path.join(sabnzbd.DIR_PROG, DEF_EMAIL_TMPL) tpath = os.path.join(path, '%s-%s.tmpl' % (prefix, cfg.language())) if os.path.exists(tpath): lst = [tpath] else: lst = [os.path.join(path, '%s-en.tmpl' % prefix)] sent = False for temp in lst: if os.access(temp, os.R_OK): source = _decode_file(temp) if source: sent = True if test: recipients = [test.get('email_to')] else: recipients = cfg.email_to() if len(recipients): for recipient in recipients: parm['to'] = recipient message = Template(source=source, searchList=[parm], filter=EmailFilter, compilerSettings={ 'directiveStartToken': '<!--#', 'directiveEndToken': '#-->' }) ret = send(message.respond(), recipient, test) del message else: ret = T('No recipients given, no email sent') else: ret = T('Invalid encoding of email template %s') % temp errormsg(ret) if not sent: ret = T('No email templates found') errormsg(ret) return ret
def send_with_template(prefix, parm, test=None): """ Send an email using template """ parm['from'] = cfg.email_from() parm['date'] = get_email_date() lst = [] path = cfg.email_dir.get_path() if path and os.path.exists(path): try: lst = glob.glob(os.path.join(path, '%s-*.tmpl' % prefix)) except: logging.error(Ta('Cannot find email templates in %s'), path) else: path = os.path.join(sabnzbd.DIR_PROG, DEF_EMAIL_TMPL) tpath = os.path.join(path, '%s-%s.tmpl' % (prefix, cfg.language())) if os.path.exists(tpath): lst = [tpath] else: lst = [os.path.join(path, '%s-en.tmpl' % prefix)] sent = False for temp in lst: if os.access(temp, os.R_OK): source = _decode_file(temp) if source: sent = True if test: recipients = [ test.get('email_to') ] else: recipients = cfg.email_to() if len(recipients): for recipient in recipients: parm['to'] = recipient message = Template(source=source, searchList=[parm], filter=EmailFilter, compilerSettings={'directiveStartToken': '<!--#', 'directiveEndToken': '#-->'}) ret = send(message.respond(), recipient, test) del message else: ret = T('No recipients given, no email sent') else: ret = T('Invalid encoding of email template %s') % temp errormsg(ret) if not sent: ret = T('No email templates found') errormsg(ret) return ret
def send_with_template(prefix, parm, test=None): """ Send an email using template """ parm["from"] = cfg.email_from() parm["date"] = get_email_date() ret = None email_templates = [] path = cfg.email_dir.get_path() if path and os.path.exists(path): try: email_templates = glob.glob( os.path.join(path, "%s-*.tmpl" % prefix)) except: logging.error(T("Cannot find email templates in %s"), path) else: path = os.path.join(sabnzbd.DIR_PROG, DEF_EMAIL_TMPL) tpath = os.path.join(path, "%s-%s.tmpl" % (prefix, cfg.language())) if os.path.exists(tpath): email_templates = [tpath] else: email_templates = [os.path.join(path, "%s-en.tmpl" % prefix)] for template_file in email_templates: logging.debug("Trying to send email using template %s", template_file) if os.access(template_file, os.R_OK): if test: recipients = [test.get("email_to")] else: recipients = cfg.email_to() if len(recipients): for recipient in recipients: # Force-open as UTF-8, otherwise Cheetah breaks it with open(template_file, "r", encoding="utf-8") as template_fp: parm["to"] = recipient message = Template(file=template_fp, searchList=[parm], compilerSettings=CHEETAH_DIRECTIVES) ret = send_email(message.respond(), recipient, test) else: ret = T("No recipients given, no email sent") else: # Can't open or read file, stop return errormsg(T("Cannot read %s") % template_file) # Did we send any emails at all? if not ret: ret = T("No email templates found") return ret
def index(self, **kwargs): """ Show the language selection page """ info = self.info.copy() info['num'] = '' info['number'] = 0 info['lang'] = cfg.language() info['languages'] = list_languages() info['T'] = Ttemplate if not os.path.exists(self.__web_dir): # If the wizard folder does not exist, simply load the normal page raise cherrypy.HTTPRedirect('') else: template = Template(file=os.path.join(self.__web_dir, 'index.html'), searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) return template.respond()
def one(self, **kwargs): """ Accept language and show server page """ language = kwargs.get('lang') cfg.language.set(language) set_language(language) sabnzbd.api.clear_trans_cache() # Always setup Plush sabnzbd.interface.change_web_dir('Plush - Gold') info = self.info.copy() info['num'] = '» %s' % T('Step One') info['number'] = 1 info['session'] = cfg.api_key() info['language'] = cfg.language() info['T'] = Ttemplate info['have_ssl'] = bool(sabnzbd.newswrapper.HAVE_SSL) servers = config.get_servers() if not servers: info['host'] = '' info['port'] = '' info['username'] = '' info['password'] = '' info['connections'] = '' info['ssl'] = 0 else: for server in servers: # If there are multiple servers, just use the first enabled one s = servers[server] info['host'] = s.host() info['port'] = s.port() info['username'] = s.username() info['password'] = s.password.get_stars() info['connections'] = s.connections() info['ssl'] = s.ssl() if s.enable(): break template = Template(file=os.path.join(self.__web_dir, 'one.html'), searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) return template.respond()
def two(self, **kwargs): """ Accept server and show the final page for restart """ # Save server details if kwargs: kwargs['enable'] = 1 sabnzbd.interface.handle_server(kwargs) config.save_config() # Show Restart screen info = self.info.copy() info['helpuri'] = 'https://sabnzbd.org/wiki/' info['session'] = cfg.api_key() info['access_url'], info['urls'] = self.get_access_info() info['active_lang'] = cfg.language() info['T'] = Ttemplate template = Template(file=os.path.join(self.__web_dir, 'two.html'), searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) return template.respond()
def two(self, **kwargs): """ Accept server and show the final page for restart """ # Save server details if kwargs: kwargs['enable'] = 1 sabnzbd.interface.handle_server(kwargs) config.save_config() # Show Restart screen info = self.info.copy() info['helpuri'] = 'http://wiki.sabnzbd.org/' info['session'] = cfg.api_key() info['access_url'], info['urls'] = self.get_access_info() info['active_lang'] = cfg.language() info['T'] = Ttemplate template = Template(file=os.path.join(self.__web_dir, 'two.html'), searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) return template.respond()
def index(self, **kwargs): """ Show the language selection page """ info = self.info.copy() lng = None if sabnzbd.WIN32: import util.apireg lng = util.apireg.get_install_lng() logging.debug('Installer language code "%s"', lng) info['lang'] = lng or cfg.language() info['active_lang'] = info['lang'] info['languages'] = list_languages() info['T'] = Ttemplate set_language(info['lang']) sabnzbd.api.clear_trans_cache() if not os.path.exists(self.__web_dir): # If the wizard folder does not exist, simply load the normal page raise cherrypy.HTTPRedirect('') else: template = Template(file=os.path.join(self.__web_dir, 'index.html'), searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) return template.respond()
def initialize(pause_downloader = False, clean_up = False, evalSched=False, repair=0): global __INITIALIZED__, __SHUTTING_DOWN__,\ LOGFILE, WEBLOGFILE, LOGHANDLER, GUIHANDLER, AMBI_LOCALHOST, WAITEXIT, \ DAEMON, MY_NAME, MY_FULLNAME, NEW_VERSION, \ DIR_HOME, DIR_APPDATA, DIR_LCLDATA, DIR_PROG , DIR_INTERFACES, \ DARWIN, RESTART_REQ, OSX_ICON, OLD_QUEUE if __INITIALIZED__: return False __SHUTTING_DOWN__ = False ### Set global database connection for Web-UI threads cherrypy.engine.subscribe('start_thread', connect_db) ### Clean-up, if requested if clean_up: # Old cache folder misc.remove_all(cfg.cache_dir.get_path(), '*.sab') misc.remove_all(cfg.cache_dir.get_path(), 'SABnzbd_*') # New admin folder misc.remove_all(cfg.admin_dir.get_path(), '*.sab') ### If dirscan_dir cannot be created, set a proper value anyway. ### Maybe it's a network path that's temporarily missing. path = cfg.dirscan_dir.get_path() if not os.path.exists(path): sabnzbd.misc.create_real_path(cfg.dirscan_dir.ident(), '', path, False) ### Set call backs for Config items cfg.cache_limit.callback(new_limit) cfg.cherryhost.callback(guard_restart) cfg.cherryport.callback(guard_restart) cfg.web_dir.callback(guard_restart) cfg.web_dir2.callback(guard_restart) cfg.web_color.callback(guard_restart) cfg.web_color2.callback(guard_restart) cfg.log_dir.callback(guard_restart) cfg.cache_dir.callback(guard_restart) cfg.https_port.callback(guard_restart) cfg.https_cert.callback(guard_restart) cfg.https_key.callback(guard_restart) cfg.enable_https.callback(guard_restart) cfg.bandwidth_limit.callback(guard_speedlimit) cfg.top_only.callback(guard_top_only) cfg.pause_on_post_processing.callback(guard_pause_on_pp) ### Set cache limit ArticleCache.do.new_limit(cfg.cache_limit.get_int()) ### Handle language upgrade from 0.5.x to 0.6.x cfg.language.set(LANG_MAP.get(cfg.language(), cfg.language())) ### Set language files lang.set_locale_info('SABnzbd', DIR_LANGUAGE) lang.set_language(cfg.language()) sabnzbd.api.cache_skin_trans() ### Check for old queue (when a new queue is not present) if not os.path.exists(os.path.join(cfg.cache_dir.get_path(), QUEUE_FILE_NAME)): OLD_QUEUE = bool(misc.globber(cfg.cache_dir.get_path(), QUEUE_FILE_TMPL % '?')) sabnzbd.change_queue_complete_action(cfg.queue_complete(), new=False) if check_repair_request(): repair = 2 pause_downloader = True else: # Check crash detection file #if load_admin(TERM_FLAG_FILE, remove=True): # Repair mode 2 is a bit over an over-reaction! pass # repair = 2 # Set crash detection file #save_admin(1, TERM_FLAG_FILE) ### ### Initialize threads ### Bookmarks() rss.init() BPSMeter.do.read() PostProcessor() NzbQueue() NzbQueue.do.read_queue(repair) Assembler() Downloader(pause_downloader) DirScanner() MSGIDGrabber() URLGrabber() scheduler.init() if evalSched: scheduler.analyse(pause_downloader) logging.info('All processes started') RESTART_REQ = False __INITIALIZED__ = True return True
def initialize(pause_downloader=False, clean_up=False, evalSched=False, repair=0): global __INITIALIZED__, __SHUTTING_DOWN__, LOGFILE, WEBLOGFILE, LOGHANDLER, GUIHANDLER, AMBI_LOCALHOST, WAITEXIT, DAEMON, MY_NAME, MY_FULLNAME, NEW_VERSION, DIR_HOME, DIR_APPDATA, DIR_LCLDATA, DIR_PROG, DIR_INTERFACES, DARWIN, RESTART_REQ if __INITIALIZED__: return False __SHUTTING_DOWN__ = False # Set global database connection for Web-UI threads cherrypy.engine.subscribe("start_thread", get_db_connection) # Paused? pause_downloader = pause_downloader or cfg.start_paused() # Clean-up, if requested if clean_up: # New admin folder filesystem.remove_all(cfg.admin_dir.get_path(), "*.sab") # Optionally wait for "incomplete" to become online if cfg.wait_for_dfolder(): wait_for_download_folder() else: cfg.download_dir.set(cfg.download_dir(), create=True) cfg.download_dir.set_create(True) # Set access rights for "incomplete" base folder filesystem.set_permissions(cfg.download_dir.get_path(), recursive=False) # If dirscan_dir cannot be created, set a proper value anyway. # Maybe it's a network path that's temporarily missing. path = cfg.dirscan_dir.get_path() if not os.path.exists(path): filesystem.create_real_path(cfg.dirscan_dir.ident(), "", path, False) # Set call backs for Config items cfg.cache_limit.callback(new_limit) cfg.cherryhost.callback(guard_restart) cfg.cherryport.callback(guard_restart) cfg.web_dir.callback(guard_restart) cfg.web_color.callback(guard_restart) cfg.username.callback(guard_restart) cfg.password.callback(guard_restart) cfg.log_dir.callback(guard_restart) cfg.https_port.callback(guard_restart) cfg.https_cert.callback(guard_restart) cfg.https_key.callback(guard_restart) cfg.enable_https.callback(guard_restart) cfg.top_only.callback(guard_top_only) cfg.pause_on_post_processing.callback(guard_pause_on_pp) cfg.quota_size.callback(guard_quota_size) cfg.quota_day.callback(guard_quota_dp) cfg.quota_period.callback(guard_quota_dp) cfg.language.callback(guard_language) cfg.enable_https_verification.callback(guard_https_ver) guard_https_ver() # Set cache limit if not cfg.cache_limit() or (cfg.cache_limit() in ("200M", "450M") and (sabnzbd.WIN32 or sabnzbd.DARWIN)): cfg.cache_limit.set(misc.get_cache_limit()) ArticleCache.do.new_limit(cfg.cache_limit.get_int()) check_incomplete_vs_complete() # Set language files lang.set_locale_info("SABnzbd", DIR_LANGUAGE) lang.set_language(cfg.language()) sabnzbd.api.clear_trans_cache() sabnzbd.change_queue_complete_action(cfg.queue_complete(), new=False) # One time conversion "speedlimit" in schedules. if not cfg.sched_converted(): schedules = cfg.schedules() newsched = [] for sched in schedules: if "speedlimit" in sched: newsched.append(re.sub(r"(speedlimit \d+)$", r"\1K", sched)) else: newsched.append(sched) cfg.schedules.set(newsched) cfg.sched_converted.set(1) # Second time schedule conversion if cfg.sched_converted() != 2: cfg.schedules.set(["%s %s" % (1, schedule) for schedule in cfg.schedules()]) cfg.sched_converted.set(2) config.save_config() # Convert auto-sort if cfg.auto_sort() == "0": cfg.auto_sort.set("") elif cfg.auto_sort() == "1": cfg.auto_sort.set("avg_age asc") # Add hostname to the whitelist if not cfg.host_whitelist(): cfg.host_whitelist.set(socket.gethostname()) # Do repair if requested if check_repair_request(): repair = 2 pause_downloader = True # Initialize threads rss.init() paused = BPSMeter.do.read() NzbQueue() Downloader(pause_downloader or paused) Decoder() Assembler() PostProcessor() NzbQueue.do.read_queue(repair) DirScanner() Rating() URLGrabber() scheduler.init() if evalSched: scheduler.analyse(pause_downloader) logging.info("All processes started") RESTART_REQ = False __INITIALIZED__ = True return True
def initialize(pause_downloader=False, clean_up=False, evalSched=False, repair=0): global __INITIALIZED__, __SHUTTING_DOWN__, LOGFILE, WEBLOGFILE, LOGHANDLER, GUIHANDLER, AMBI_LOCALHOST, WAITEXIT, DAEMON, MY_NAME, MY_FULLNAME, NEW_VERSION, DIR_HOME, DIR_APPDATA, DIR_LCLDATA, DIR_PROG, DIR_INTERFACES, DARWIN, RESTART_REQ, OLD_QUEUE if __INITIALIZED__: return False __SHUTTING_DOWN__ = False # Set global database connection for Web-UI threads cherrypy.engine.subscribe("start_thread", connect_db) # Paused? pause_downloader = pause_downloader or cfg.start_paused() # Clean-up, if requested if clean_up: # New admin folder misc.remove_all(cfg.admin_dir.get_path(), "*.sab") # Optionally wait for "incomplete" to become online if cfg.wait_for_dfolder(): wait_for_download_folder() else: cfg.download_dir.set(cfg.download_dir(), create=True) cfg.download_dir.set_create(True) # Set access rights for "incomplete" base folder misc.set_permissions(cfg.download_dir.get_path(), recursive=False) # If dirscan_dir cannot be created, set a proper value anyway. # Maybe it's a network path that's temporarily missing. path = cfg.dirscan_dir.get_path() if not os.path.exists(path): sabnzbd.misc.create_real_path(cfg.dirscan_dir.ident(), "", path, False) # Set call backs for Config items cfg.cache_limit.callback(new_limit) cfg.cherryhost.callback(guard_restart) cfg.cherryport.callback(guard_restart) cfg.web_dir.callback(guard_restart) cfg.web_dir2.callback(guard_restart) cfg.web_color.callback(guard_restart) cfg.web_color2.callback(guard_restart) cfg.log_dir.callback(guard_restart) cfg.https_port.callback(guard_restart) cfg.https_cert.callback(guard_restart) cfg.https_key.callback(guard_restart) cfg.enable_https.callback(guard_restart) cfg.top_only.callback(guard_top_only) cfg.pause_on_post_processing.callback(guard_pause_on_pp) cfg.growl_server.callback(sabnzbd.growler.change_value) cfg.growl_password.callback(sabnzbd.growler.change_value) cfg.quota_size.callback(guard_quota_size) cfg.quota_day.callback(guard_quota_dp) cfg.quota_period.callback(guard_quota_dp) cfg.fsys_type.callback(guard_fsys_type) cfg.language.callback(sabnzbd.growler.reset_growl) cfg.enable_https_verification.callback(guard_https_ver) guard_https_ver() # Set Posix filesystem encoding sabnzbd.encoding.change_fsys(cfg.fsys_type()) # Set cache limit if (sabnzbd.WIN32 or sabnzbd.DARWIN) and not cfg.cache_limit(): cfg.cache_limit.set("200M") ArticleCache.do.new_limit(cfg.cache_limit.get_int()) check_incomplete_vs_complete() # Handle language upgrade from 0.5.x to 0.6.x cfg.language.set(LANG_MAP.get(cfg.language(), cfg.language())) # Set language files lang.set_locale_info("SABnzbd", DIR_LANGUAGE) lang.set_language(cfg.language()) sabnzbd.api.clear_trans_cache() OLD_QUEUE = check_old_queue() sabnzbd.change_queue_complete_action(cfg.queue_complete(), new=False) sabnzbd.EXTERNAL_IPV6 = test_ipv6() logging.debug("External IPv6 test result: %s", sabnzbd.EXTERNAL_IPV6) # One time conversion "speedlimit" in schedules. if not cfg.sched_converted(): schedules = cfg.schedules() newsched = [] for sched in schedules: if "speedlimit" in sched: newsched.append(re.sub(r"(speedlimit \d+)$", r"\1K", sched)) else: newsched.append(sched) cfg.schedules.set(newsched) cfg.sched_converted.set(True) if check_repair_request(): repair = 2 pause_downloader = True else: # Check crash detection file # if load_admin(TERM_FLAG_FILE, remove=True): # Repair mode 2 is a bit over an over-reaction! pass # repair = 2 # Set crash detection file # save_admin(1, TERM_FLAG_FILE) # Initialize threads rss.init() paused = BPSMeter.do.read() PostProcessor() NzbQueue() Assembler() NzbQueue.do.read_queue(repair) Downloader(pause_downloader or paused) DirScanner() Rating() URLGrabber() scheduler.init() if evalSched: scheduler.analyse(pause_downloader) logging.info("All processes started") RESTART_REQ = False __INITIALIZED__ = True return True
def initialize(pause_downloader=False, clean_up=False, evalSched=False, repair=0): global __INITIALIZED__, __SHUTTING_DOWN__,\ LOGFILE, WEBLOGFILE, LOGHANDLER, GUIHANDLER, AMBI_LOCALHOST, WAITEXIT, \ DAEMON, MY_NAME, MY_FULLNAME, NEW_VERSION, \ DIR_HOME, DIR_APPDATA, DIR_LCLDATA, DIR_PROG, DIR_INTERFACES, \ DARWIN, RESTART_REQ, OLD_QUEUE if __INITIALIZED__: return False __SHUTTING_DOWN__ = False # Set global database connection for Web-UI threads cherrypy.engine.subscribe('start_thread', connect_db) # Paused? pause_downloader = pause_downloader or cfg.start_paused() # Clean-up, if requested if clean_up: # New admin folder misc.remove_all(cfg.admin_dir.get_path(), '*.sab') # Optionally wait for "incomplete" to become online if cfg.wait_for_dfolder(): wait_for_download_folder() else: cfg.download_dir.set(cfg.download_dir(), create=True) cfg.download_dir.set_create(True) # Set access rights for "incomplete" base folder misc.set_permissions(cfg.download_dir.get_path(), recursive=False) # If dirscan_dir cannot be created, set a proper value anyway. # Maybe it's a network path that's temporarily missing. path = cfg.dirscan_dir.get_path() if not os.path.exists(path): sabnzbd.misc.create_real_path(cfg.dirscan_dir.ident(), '', path, False) # Set call backs for Config items cfg.cache_limit.callback(new_limit) cfg.cherryhost.callback(guard_restart) cfg.cherryport.callback(guard_restart) cfg.web_dir.callback(guard_restart) cfg.web_dir2.callback(guard_restart) cfg.web_color.callback(guard_restart) cfg.web_color2.callback(guard_restart) cfg.username.callback(guard_restart) cfg.password.callback(guard_restart) cfg.log_dir.callback(guard_restart) cfg.https_port.callback(guard_restart) cfg.https_cert.callback(guard_restart) cfg.https_key.callback(guard_restart) cfg.enable_https.callback(guard_restart) cfg.top_only.callback(guard_top_only) cfg.pause_on_post_processing.callback(guard_pause_on_pp) cfg.growl_server.callback(sabnzbd.notifier.change_value) cfg.growl_password.callback(sabnzbd.notifier.change_value) cfg.quota_size.callback(guard_quota_size) cfg.quota_day.callback(guard_quota_dp) cfg.quota_period.callback(guard_quota_dp) cfg.fsys_type.callback(guard_fsys_type) cfg.language.callback(sabnzbd.notifier.reset_growl) cfg.enable_https_verification.callback(guard_https_ver) guard_https_ver() # Set Posix filesystem encoding sabnzbd.encoding.change_fsys(cfg.fsys_type()) # Set cache limit if sabnzbd.WIN32 or sabnzbd.DARWIN: if cfg.cache_limit() == '' or cfg.cache_limit() == '200M': cfg.cache_limit.set('450M') ArticleCache.do.new_limit(cfg.cache_limit.get_int()) check_incomplete_vs_complete() # Set language files lang.set_locale_info('SABnzbd', DIR_LANGUAGE) lang.set_language(cfg.language()) sabnzbd.api.clear_trans_cache() OLD_QUEUE = check_old_queue() sabnzbd.change_queue_complete_action(cfg.queue_complete(), new=False) sabnzbd.EXTERNAL_IPV6 = test_ipv6() logging.debug('External IPv6 test result: %s', sabnzbd.EXTERNAL_IPV6) # One time conversion "speedlimit" in schedules. if not cfg.sched_converted(): schedules = cfg.schedules() newsched = [] for sched in schedules: if 'speedlimit' in sched: newsched.append(re.sub(r'(speedlimit \d+)$', r'\1K', sched)) else: newsched.append(sched) cfg.schedules.set(newsched) cfg.sched_converted.set(True) if check_repair_request(): repair = 2 pause_downloader = True # Initialize threads rss.init() paused = BPSMeter.do.read() PostProcessor() NzbQueue() Assembler() NzbQueue.do.read_queue(repair) Downloader(pause_downloader or paused) DirScanner() Rating() URLGrabber() scheduler.init() if evalSched: scheduler.analyse(pause_downloader) logging.info('All processes started') RESTART_REQ = False __INITIALIZED__ = True return True
def initialize(pause_downloader=False, clean_up=False, evalSched=False, repair=0): global __INITIALIZED__, __SHUTTING_DOWN__,\ LOGFILE, WEBLOGFILE, LOGHANDLER, GUIHANDLER, AMBI_LOCALHOST, WAITEXIT, \ DAEMON, MY_NAME, MY_FULLNAME, NEW_VERSION, \ DIR_HOME, DIR_APPDATA, DIR_LCLDATA, DIR_PROG, DIR_INTERFACES, \ DARWIN, RESTART_REQ, OLD_QUEUE if __INITIALIZED__: return False __SHUTTING_DOWN__ = False # Set global database connection for Web-UI threads cherrypy.engine.subscribe('start_thread', connect_db) # Paused? pause_downloader = pause_downloader or cfg.start_paused() # Clean-up, if requested if clean_up: # New admin folder misc.remove_all(cfg.admin_dir.get_path(), '*.sab') # Optionally wait for "incomplete" to become online if cfg.wait_for_dfolder(): wait_for_download_folder() else: cfg.download_dir.set(cfg.download_dir(), create=True) cfg.download_dir.set_create(True) # Set access rights for "incomplete" base folder misc.set_permissions(cfg.download_dir.get_path(), recursive=False) # If dirscan_dir cannot be created, set a proper value anyway. # Maybe it's a network path that's temporarily missing. path = cfg.dirscan_dir.get_path() if not os.path.exists(path): sabnzbd.misc.create_real_path(cfg.dirscan_dir.ident(), '', path, False) # Set call backs for Config items cfg.cache_limit.callback(new_limit) cfg.cherryhost.callback(guard_restart) cfg.cherryport.callback(guard_restart) cfg.web_dir.callback(guard_restart) cfg.web_color.callback(guard_restart) cfg.username.callback(guard_restart) cfg.password.callback(guard_restart) cfg.log_dir.callback(guard_restart) cfg.https_port.callback(guard_restart) cfg.https_cert.callback(guard_restart) cfg.https_key.callback(guard_restart) cfg.enable_https.callback(guard_restart) cfg.top_only.callback(guard_top_only) cfg.pause_on_post_processing.callback(guard_pause_on_pp) cfg.growl_server.callback(sabnzbd.notifier.change_value) cfg.growl_password.callback(sabnzbd.notifier.change_value) cfg.quota_size.callback(guard_quota_size) cfg.quota_day.callback(guard_quota_dp) cfg.quota_period.callback(guard_quota_dp) cfg.fsys_type.callback(guard_fsys_type) cfg.language.callback(sabnzbd.notifier.reset_growl) cfg.enable_https_verification.callback(guard_https_ver) guard_https_ver() # Set Posix filesystem encoding sabnzbd.encoding.change_fsys(cfg.fsys_type()) # Set cache limit if not cfg.cache_limit() or (cfg.cache_limit() == '200M' and (sabnzbd.WIN32 or sabnzbd.DARWIN)): cfg.cache_limit.set(misc.get_cache_limit()) ArticleCache.do.new_limit(cfg.cache_limit.get_int()) check_incomplete_vs_complete() # Set language files lang.set_locale_info('SABnzbd', DIR_LANGUAGE) lang.set_language(cfg.language()) sabnzbd.api.clear_trans_cache() OLD_QUEUE = check_old_queue() sabnzbd.change_queue_complete_action(cfg.queue_complete(), new=False) # One time conversion "speedlimit" in schedules. if not cfg.sched_converted(): schedules = cfg.schedules() newsched = [] for sched in schedules: if 'speedlimit' in sched: newsched.append(re.sub(r'(speedlimit \d+)$', r'\1K', sched)) else: newsched.append(sched) cfg.schedules.set(newsched) cfg.sched_converted.set(1) # Second time schedule conversion if cfg.sched_converted() != 2: cfg.schedules.set(['%s %s' % (1, schedule) for schedule in cfg.schedules()]) cfg.sched_converted.set(2) if check_repair_request(): repair = 2 pause_downloader = True # Initialize threads rss.init() paused = BPSMeter.do.read() PostProcessor() NzbQueue() Assembler() NzbQueue.do.read_queue(repair) Downloader(pause_downloader or paused) DirScanner() Rating() URLGrabber() scheduler.init() if evalSched: scheduler.analyse(pause_downloader) logging.info('All processes started') RESTART_REQ = False __INITIALIZED__ = True return True
def guard_language(): """ Callback for change of the interface language """ sabnzbd.lang.set_language(cfg.language()) sabnzbd.api.clear_trans_cache()
def guard_language(): """ Callback for change of the interface language """ sabnzbd.notifier.reset_growl() sabnzbd.lang.set_language(cfg.language()) sabnzbd.api.clear_trans_cache()
def initialize(pause_downloader=False, clean_up=False, evalSched=False, repair=0): global __INITIALIZED__, __SHUTTING_DOWN__,\ LOGFILE, WEBLOGFILE, LOGHANDLER, GUIHANDLER, AMBI_LOCALHOST, WAITEXIT, \ DAEMON, MY_NAME, MY_FULLNAME, NEW_VERSION, \ DIR_HOME, DIR_APPDATA, DIR_LCLDATA, DIR_PROG , DIR_INTERFACES, \ DARWIN, RESTART_REQ, OLD_QUEUE if __INITIALIZED__: return False __SHUTTING_DOWN__ = False ### Set global database connection for Web-UI threads cherrypy.engine.subscribe('start_thread', connect_db) ### Paused? pause_downloader = pause_downloader or cfg.start_paused() ### Clean-up, if requested if clean_up: # Old cache folder misc.remove_all(cfg.cache_dir.get_path(), '*.sab') misc.remove_all(cfg.cache_dir.get_path(), 'SABnzbd_*') # New admin folder misc.remove_all(cfg.admin_dir.get_path(), '*.sab') ### Optionally wait for "incomplete" to become online if cfg.wait_for_dfolder(): wait_for_download_folder() else: cfg.download_dir.set(cfg.download_dir(), create=True) cfg.download_dir.set_create(True) ### Set access rights for "incomplete" base folder misc.set_permissions(cfg.download_dir.get_path(), recursive=False) ### If dirscan_dir cannot be created, set a proper value anyway. ### Maybe it's a network path that's temporarily missing. path = cfg.dirscan_dir.get_path() if not os.path.exists(path): sabnzbd.misc.create_real_path(cfg.dirscan_dir.ident(), '', path, False) ### Set call backs for Config items cfg.cache_limit.callback(new_limit) cfg.cherryhost.callback(guard_restart) cfg.cherryport.callback(guard_restart) cfg.web_dir.callback(guard_restart) cfg.web_dir2.callback(guard_restart) cfg.web_color.callback(guard_restart) cfg.web_color2.callback(guard_restart) cfg.log_dir.callback(guard_restart) cfg.cache_dir.callback(guard_restart) cfg.https_port.callback(guard_restart) cfg.https_cert.callback(guard_restart) cfg.https_key.callback(guard_restart) cfg.enable_https.callback(guard_restart) cfg.bandwidth_limit.callback(guard_speedlimit) cfg.top_only.callback(guard_top_only) cfg.pause_on_post_processing.callback(guard_pause_on_pp) cfg.growl_server.callback(sabnzbd.growler.change_value) cfg.growl_password.callback(sabnzbd.growler.change_value) cfg.quota_size.callback(guard_quota_size) cfg.quota_day.callback(guard_quota_dp) cfg.quota_period.callback(guard_quota_dp) cfg.fsys_type.callback(guard_fsys_type) cfg.language.callback(sabnzbd.growler.reset_growl) ### Set Posix filesystem encoding sabnzbd.encoding.change_fsys(cfg.fsys_type()) ### Set cache limit if (sabnzbd.WIN32 or sabnzbd.DARWIN) and not cfg.cache_limit(): cfg.cache_limit.set('200M') ArticleCache.do.new_limit(cfg.cache_limit.get_int()) check_incomplete_vs_complete() ### Handle language upgrade from 0.5.x to 0.6.x cfg.language.set(LANG_MAP.get(cfg.language(), cfg.language())) ### Set language files lang.set_locale_info('SABnzbd', DIR_LANGUAGE) lang.set_language(cfg.language()) sabnzbd.api.clear_trans_cache() ### Check for old queue (when a new queue is not present) if not os.path.exists( os.path.join(cfg.cache_dir.get_path(), QUEUE_FILE_NAME)): OLD_QUEUE = bool( misc.globber(cfg.cache_dir.get_path(), QUEUE_FILE_TMPL % '?')) sabnzbd.change_queue_complete_action(cfg.queue_complete(), new=False) if check_repair_request(): repair = 2 pause_downloader = True else: # Check crash detection file #if load_admin(TERM_FLAG_FILE, remove=True): # Repair mode 2 is a bit over an over-reaction! pass # repair = 2 # Set crash detection file #save_admin(1, TERM_FLAG_FILE) ### ### Initialize threads ### Bookmarks() rss.init() paused = BPSMeter.do.read() PostProcessor() NzbQueue() Assembler() NzbQueue.do.read_queue(repair) Downloader(pause_downloader or paused) DirScanner() MSGIDGrabber() Rating() URLGrabber() scheduler.init() if evalSched: scheduler.analyse(pause_downloader) logging.info('All processes started') RESTART_REQ = False __INITIALIZED__ = True return True
def initialize(pause_downloader=False, clean_up=False, repair=0): if sabnzbd.__INITIALIZED__: return False sabnzbd.__SHUTTING_DOWN__ = False # Set global database connection for Web-UI threads cherrypy.engine.subscribe("start_thread", get_db_connection) # Paused? pause_downloader = pause_downloader or cfg.start_paused() # Clean-up, if requested if clean_up: # New admin folder filesystem.remove_all(cfg.admin_dir.get_path(), "*.sab") # Optionally wait for "incomplete" to become online if cfg.wait_for_dfolder(): wait_for_download_folder() else: cfg.download_dir.set(cfg.download_dir(), create=True) cfg.download_dir.set_create(True) # Set access rights for "incomplete" base folder filesystem.set_permissions(cfg.download_dir.get_path(), recursive=False) # If dirscan_dir cannot be created, set a proper value anyway. # Maybe it's a network path that's temporarily missing. path = cfg.dirscan_dir.get_path() if not os.path.exists(path): filesystem.create_real_path(cfg.dirscan_dir.ident(), "", path, False) # Set call backs for Config items cfg.cache_limit.callback(new_limit) cfg.cherryhost.callback(guard_restart) cfg.cherryport.callback(guard_restart) cfg.web_dir.callback(guard_restart) cfg.web_color.callback(guard_restart) cfg.username.callback(guard_restart) cfg.password.callback(guard_restart) cfg.log_dir.callback(guard_restart) cfg.https_port.callback(guard_restart) cfg.https_cert.callback(guard_restart) cfg.https_key.callback(guard_restart) cfg.enable_https.callback(guard_restart) cfg.top_only.callback(guard_top_only) cfg.pause_on_post_processing.callback(guard_pause_on_pp) cfg.quota_size.callback(guard_quota_size) cfg.quota_day.callback(guard_quota_dp) cfg.quota_period.callback(guard_quota_dp) cfg.language.callback(guard_language) cfg.enable_https_verification.callback(guard_https_ver) guard_https_ver() check_incomplete_vs_complete() # Set language files lang.set_locale_info("SABnzbd", DIR_LANGUAGE) lang.set_language(cfg.language()) sabnzbd.api.clear_trans_cache() # Set end-of-queue action sabnzbd.change_queue_complete_action(cfg.queue_complete(), new=False) # Convert auto-sort if cfg.auto_sort() == "0": cfg.auto_sort.set("") elif cfg.auto_sort() == "1": cfg.auto_sort.set("avg_age asc") # Add hostname to the whitelist if not cfg.host_whitelist(): cfg.host_whitelist.set(socket.gethostname()) # Do repair if requested if check_repair_request(): repair = 2 pause_downloader = True # Initialize threads sabnzbd.ArticleCache = sabnzbd.articlecache.ArticleCache() sabnzbd.BPSMeter = sabnzbd.bpsmeter.BPSMeter() sabnzbd.NzbQueue = sabnzbd.nzbqueue.NzbQueue() sabnzbd.Downloader = sabnzbd.downloader.Downloader(sabnzbd.BPSMeter.read() or pause_downloader) sabnzbd.Decoder = sabnzbd.decoder.Decoder() sabnzbd.Assembler = sabnzbd.assembler.Assembler() sabnzbd.PostProcessor = sabnzbd.postproc.PostProcessor() sabnzbd.DirScanner = sabnzbd.dirscanner.DirScanner() sabnzbd.Rating = sabnzbd.rating.Rating() sabnzbd.URLGrabber = sabnzbd.urlgrabber.URLGrabber() sabnzbd.RSSReader = sabnzbd.rss.RSSReader() sabnzbd.Scheduler = sabnzbd.scheduler.Scheduler() # Run startup tasks sabnzbd.NzbQueue.read_queue(repair) sabnzbd.Scheduler.analyse(pause_downloader) # Set cache limit for new users if not cfg.cache_limit(): cfg.cache_limit.set(misc.get_cache_limit()) sabnzbd.ArticleCache.new_limit(cfg.cache_limit.get_int()) logging.info("All processes started") sabnzbd.RESTART_REQ = False sabnzbd.__INITIALIZED__ = True