def three(self, **kwargs): """ Accept webserver parms and show Indexers page """ if kwargs: if 'access' in kwargs: cfg.cherryhost.set(kwargs['access']) cfg.enable_https.set(kwargs.get('enable_https',0)) cfg.autobrowser.set(kwargs.get('autobrowser',0)) cfg.username.set(kwargs.get('web_user', '')) cfg.password.set(kwargs.get('web_pass', '')) if not cfg.username() or not cfg.password(): sabnzbd.interface.set_auth(cherrypy.config) # Create Indexers page info = self.info.copy() info['num'] = '» %s' % T('Step Three') info['number'] = 3 info['newzbin_user'] = cfg.newzbin_username() info['newzbin_pass'] = cfg.newzbin_password.get_stars() info['newzbin_bookmarks'] = cfg.newzbin_bookmarks() info['newzbin_url'] = cfg.newzbin_url() info['matrix_user'] = cfg.matrix_username() info['matrix_apikey'] = cfg.matrix_apikey() info['T'] = Ttemplate template = Template(file=os.path.join(self.__web_dir, 'three.html'), searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) return template.respond()
def three(self, **kwargs): """ Accept webserver parms and show Indexers page """ if kwargs: if 'access' in kwargs: cfg.cherryhost.set(kwargs['access']) cfg.enable_https.set(kwargs.get('enable_https', 0)) cfg.autobrowser.set(kwargs.get('autobrowser', 0)) cfg.username.set(kwargs.get('web_user', '')) cfg.password.set(kwargs.get('web_pass', '')) if not cfg.username() or not cfg.password(): sabnzbd.interface.set_auth(cherrypy.config) # Create Indexers page info = self.info.copy() info['num'] = '» %s' % T('Step Three') info['number'] = 3 info['newzbin_user'] = cfg.newzbin_username() info['newzbin_pass'] = cfg.newzbin_password.get_stars() info['newzbin_bookmarks'] = cfg.newzbin_bookmarks() info['newzbin_url'] = cfg.newzbin_url() info['matrix_user'] = cfg.matrix_username() info['matrix_apikey'] = cfg.matrix_apikey() info['T'] = Ttemplate template = Template(file=os.path.join(self.__web_dir, 'three.html'), searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) return template.respond()
def run(self, delete=None, force=False): if not (cfg.newzbin_bookmarks() or force): return if not (cfg.newzbin_username() and cfg.newzbin_password()): return headers = { 'User-Agent': 'SABnzbd+/%s' % sabnzbd.__version__, } # Connect to Newzbin try: if _HAVE_SSL: conn = httplib.HTTPSConnection(cfg.newzbin_url()) else: conn = httplib.HTTPConnection(cfg.newzbin_url()) if delete: logging.debug('Trying to delete Newzbin bookmark %s', delete) postdata = { 'username': cfg.newzbin_username(), 'password': cfg.newzbin_password(), 'action': 'delete', \ 'reportids' : delete } else: logging.info('Fetching Newzbin bookmarks') postdata = { 'username': cfg.newzbin_username(), 'password': cfg.newzbin_password(), 'action': 'fetch'} postdata = urllib.urlencode(postdata) headers['Content-type'] = 'application/x-www-form-urlencoded' fetchurl = '/api/bookmarks/' conn.request('POST', fetchurl, postdata, headers) response = conn.getresponse() except: _warn_user('Problem accessing Newzbin server.') logging.info("Traceback: ", exc_info = True) return data = response.read() # Get the status rcode = str(response.status) # Official return codes: # 200 = OK, NZB content follows # 204 = No content # 400 = Bad Request, please supply all parameters # (this generally means reportid or fileid is missing; missing user/pass gets you a 401) # 401 = Unauthorised, check username/password? # 402 = Payment Required, not Premium # 403 = Forbidden (incorrect auth) # 500 = Internal Server Error, please report to Administrator # 503 = Service Unavailable, site is currently down if rcode not in ('500', '503'): _access_ok() if rcode == '204': logging.debug("No bookmarks set") elif rcode in ('401', '403'): logging.warning(Ta('Unauthorised, check your newzbin username/password')) elif rcode in ('402'): logging.warning(Ta('You have no credit on your Newzbin account')) elif rcode in ('500', '503'): _warn_user('Newzbin has a server problem (%s).' % rcode) elif rcode == '200': if delete: if data.startswith('1'): logging.info('Deleted newzbin bookmark %s', delete) if delete in self.bookmarks: self.bookmarks.remove(delete) else: if delete in self.bookmarks: logging.warning(Ta('Could not delete newzbin bookmark %s'), delete) else: for line in data.split('\n'): try: msgid, size, text = line.split('\t', 2) except: msgid = size = text = None if msgid and (msgid not in self.bookmarks): self.bookmarks.append(msgid) logging.info("Found new bookmarked msgid %s (%s)", msgid, text) sabnzbd.add_msgid(int(msgid), None, None, priority=None) else: logging.error(Ta('Newzbin gives undocumented error code (%s)'), rcode) self._save() self.__busy = False
def init(): """ Create the scheduler and set all required events """ global __SCHED reset_guardian() __SCHED = kronos.ThreadedScheduler() rss_planned = False for schedule in cfg.schedules(): arguments = [] argument_list = None try: m, h, d, action_name = schedule.split() except: m, h, d, action_name, argument_list = schedule.split(None, 4) if argument_list: arguments = argument_list.split() action_name = action_name.lower() try: m = int(m) h = int(h) except: logging.warning(Ta('Bad schedule %s at %s:%s'), action_name, m, h) continue if d.isdigit(): d = [int(d)] else: d = range(1, 8) if action_name == 'resume': action = scheduled_resume arguments = [] elif action_name == 'pause': action = sabnzbd.downloader.Downloader.do.pause arguments = [] elif action_name == 'pause_all': action = sabnzbd.pause_all arguments = [] elif action_name == 'shutdown': action = sabnzbd.shutdown_program arguments = [] elif action_name == 'restart': action = sabnzbd.restart_program arguments = [] elif action_name == 'pause_post': action = pp_pause elif action_name == 'resume_post': action = pp_resume elif action_name == 'speedlimit' and arguments != []: action = sabnzbd.downloader.Downloader.do.limit_speed elif action_name == 'enable_server' and arguments != []: action = sabnzbd.enable_server elif action_name == 'disable_server' and arguments != []: action = sabnzbd.disable_server elif action_name == 'scan_folder': action = sabnzbd.dirscanner.dirscan elif action_name == 'rss_scan': action = rss.run_method rss_planned = True else: logging.warning(Ta('Unknown action: %s'), action_name) continue logging.debug("scheduling %s(%s) on days %s at %s:%s", action_name, arguments, d, h, m) __SCHED.add_daytime_task(action, action_name, d, None, (h, m), kronos.method.sequential, arguments, None) # Set Guardian interval to 30 seconds __SCHED.add_interval_task(sched_guardian, "Guardian", 15, 30, kronos.method.sequential, None, None) # Set RSS check interval if not rss_planned: interval = cfg.rss_rate() delay = random.randint(0, interval-1) logging.debug("Scheduling RSS interval task every %s min (delay=%s)", interval, delay) __SCHED.add_interval_task(rss.run_method, "RSS", delay*60, interval*60, kronos.method.sequential, None, None) __SCHED.add_single_task(rss.run_method, 'RSS', 15, kronos.method.sequential, None, None) if cfg.version_check(): # Check for new release, once per week on random time m = random.randint(0, 59) h = random.randint(0, 23) d = (random.randint(1, 7), ) logging.debug("Scheduling VersionCheck on day %s at %s:%s", d[0], h, m) __SCHED.add_daytime_task(sabnzbd.misc.check_latest_version, 'VerCheck', d, None, (h, m), kronos.method.sequential, [], None) if cfg.newzbin_bookmarks(): interval = cfg.bookmark_rate() delay = random.randint(0, interval-1) logging.debug("Scheduling Bookmark interval task every %s min (delay=%s)", interval, delay) __SCHED.add_interval_task(Bookmarks.do.run, 'Bookmarks', delay*60, interval*60, kronos.method.sequential, None, None) __SCHED.add_single_task(Bookmarks.do.run, 'Bookmarks', 20, kronos.method.sequential, None, None) # Subscribe to special schedule changes cfg.newzbin_bookmarks.callback(schedule_guard) cfg.bookmark_rate.callback(schedule_guard) cfg.rss_rate.callback(schedule_guard)
def run(self, delete=None, force=False): if not (cfg.newzbin_bookmarks() or force): return if not (cfg.newzbin_username() and cfg.newzbin_password()): return headers = { 'User-Agent': 'SABnzbd+/%s' % sabnzbd.__version__, } # Connect to Newzbin try: if _HAVE_SSL: conn = httplib.HTTPSConnection(cfg.newzbin_url()) else: conn = httplib.HTTPConnection(cfg.newzbin_url()) if delete: logging.debug('Trying to delete Newzbin bookmark %s', delete) postdata = { 'username': cfg.newzbin_username(), 'password': cfg.newzbin_password(), 'action': 'delete', \ 'reportids' : delete } else: logging.info('Fetching Newzbin bookmarks') postdata = { 'username': cfg.newzbin_username(), 'password': cfg.newzbin_password(), 'action': 'fetch' } postdata = urllib.urlencode(postdata) headers['Content-type'] = 'application/x-www-form-urlencoded' fetchurl = '/api/bookmarks/' conn.request('POST', fetchurl, postdata, headers) response = conn.getresponse() except: _warn_user('Problem accessing Newzbin server.') logging.info("Traceback: ", exc_info=True) return data = response.read() # Get the status rcode = str(response.status) # Official return codes: # 200 = OK, NZB content follows # 204 = No content # 400 = Bad Request, please supply all parameters # (this generally means reportid or fileid is missing; missing user/pass gets you a 401) # 401 = Unauthorised, check username/password? # 402 = Payment Required, not Premium # 403 = Forbidden (incorrect auth) # 500 = Internal Server Error, please report to Administrator # 503 = Service Unavailable, site is currently down if rcode not in ('500', '503'): _access_ok() if rcode == '204': logging.debug("No bookmarks set") elif rcode in ('401', '403'): logging.warning( Ta('Unauthorised, check your newzbin username/password')) elif rcode in ('402'): logging.warning(Ta('You have no credit on your Newzbin account')) elif rcode in ('500', '503'): _warn_user('Newzbin has a server problem (%s).' % rcode) elif rcode == '200': if delete: if data.startswith('1'): logging.info('Deleted newzbin bookmark %s', delete) if delete in self.bookmarks: self.bookmarks.remove(delete) else: if delete in self.bookmarks: logging.warning( Ta('Could not delete newzbin bookmark %s'), delete) else: for line in data.split('\n'): try: msgid, size, text = line.split('\t', 2) except: msgid = size = text = None if msgid and (msgid not in self.bookmarks): self.bookmarks.append(msgid) logging.info("Found new bookmarked msgid %s (%s)", msgid, text) sabnzbd.add_msgid(int(msgid), None, None, priority=None) else: logging.error(Ta('Newzbin gives undocumented error code (%s)'), rcode) self._save() self.__busy = False
def init(): """ Create the scheduler and set all required events """ global __SCHED reset_guardian() __SCHED = kronos.ThreadedScheduler() rss_planned = False for schedule in cfg.schedules(): arguments = [] argument_list = None try: m, h, d, action_name = schedule.split() except: m, h, d, action_name, argument_list = schedule.split(None, 4) if argument_list: arguments = argument_list.split() action_name = action_name.lower() try: m = int(m) h = int(h) except: logging.warning(Ta('Bad schedule %s at %s:%s'), action_name, m, h) continue if d.isdigit(): d = [int(i) for i in d] else: d = range(1, 8) if action_name == 'resume': action = scheduled_resume arguments = [] elif action_name == 'pause': action = sabnzbd.downloader.Downloader.do.pause arguments = [] elif action_name == 'pause_all': action = sabnzbd.pause_all arguments = [] elif action_name == 'shutdown': action = sabnzbd.shutdown_program arguments = [] elif action_name == 'restart': action = sabnzbd.restart_program arguments = [] elif action_name == 'pause_post': action = pp_pause elif action_name == 'resume_post': action = pp_resume elif action_name == 'speedlimit' and arguments != []: action = sabnzbd.downloader.Downloader.do.limit_speed elif action_name == 'enable_server' and arguments != []: action = sabnzbd.enable_server elif action_name == 'disable_server' and arguments != []: action = sabnzbd.disable_server elif action_name == 'scan_folder': action = sabnzbd.dirscanner.dirscan elif action_name == 'rss_scan': action = rss.run_method rss_planned = True elif action_name == 'remove_failed': action = sabnzbd.api.history_remove_failed else: logging.warning(Ta('Unknown action: %s'), action_name) continue logging.debug("scheduling %s(%s) on days %s at %s:%s", action_name, arguments, d, h, m) __SCHED.add_daytime_task(action, action_name, d, None, (h, m), kronos.method.sequential, arguments, None) # Set Guardian interval to 30 seconds __SCHED.add_interval_task(sched_guardian, "Guardian", 15, 30, kronos.method.sequential, None, None) # Set RSS check interval if not rss_planned: interval = cfg.rss_rate() delay = random.randint(0, interval - 1) logging.debug("Scheduling RSS interval task every %s min (delay=%s)", interval, delay) __SCHED.add_interval_task(rss.run_method, "RSS", delay * 60, interval * 60, kronos.method.sequential, None, None) __SCHED.add_single_task(rss.run_method, 'RSS', 15, kronos.method.sequential, None, None) if cfg.version_check(): # Check for new release, once per week on random time m = random.randint(0, 59) h = random.randint(0, 23) d = (random.randint(1, 7), ) logging.debug("Scheduling VersionCheck on day %s at %s:%s", d[0], h, m) __SCHED.add_daytime_task(sabnzbd.misc.check_latest_version, 'VerCheck', d, None, (h, m), kronos.method.sequential, [], None) if cfg.newzbin_bookmarks(): interval = cfg.bookmark_rate() delay = random.randint(0, interval - 1) logging.debug( "Scheduling Bookmark interval task every %s min (delay=%s)", interval, delay) __SCHED.add_interval_task(Bookmarks.do.run, 'Bookmarks', delay * 60, interval * 60, kronos.method.sequential, None, None) __SCHED.add_single_task(Bookmarks.do.run, 'Bookmarks', 20, kronos.method.sequential, None, None) action, hour, minute = sabnzbd.bpsmeter.BPSMeter.do.get_quota() if action: logging.info('Setting schedule for quota check daily at %s:%s', hour, minute) __SCHED.add_daytime_task(action, 'quota_reset', range(1, 8), None, (hour, minute), kronos.method.sequential, [], None) # Subscribe to special schedule changes cfg.newzbin_bookmarks.callback(schedule_guard) cfg.bookmark_rate.callback(schedule_guard) cfg.rss_rate.callback(schedule_guard)