def run(params): cols = 80 h = HeadlessDisplayer() while 1: configdir = ConfigDir('downloadheadless') defaultsToIgnore = ['responsefile', 'url', 'priority'] configdir.setDefaults(defaults, defaultsToIgnore) configdefaults = configdir.loadConfig() defaults.append(( 'save_options', 0, "whether to save the current options as the new default configuration " + "(only for btdownloadheadless.py)")) try: config = parse_params(params, configdefaults) except ValueError, e: print 'error: ' + str( e) + '\nrun with no args for parameter explanations' break if not config: print get_usage(defaults, 80, configdefaults) break if config['save_options']: configdir.saveConfig(config) configdir.deleteOldCacheData(config['expire_cache_data']) myid = createPeerID() seed(myid) global doneFlag doneFlag = Event() def disp_exception(text): print text rawserver = RawServer(doneFlag, config['timeout_check_interval'], config['timeout'], ipv6_enable=config['ipv6_enabled'], failfunc=h.failed, errorfunc=disp_exception) upnp_type = UPnP_test(config['upnp_nat_access']) while True: try: listen_port = rawserver.find_and_bind( config['minport'], config['maxport'], config['bind'], ipv6_socket_style=config['ipv6_binds_v4'], upnp=upnp_type, randomizer=config['random_port']) break except socketerror, e: if upnp_type and e == UPnP_ERROR: print 'WARNING: COULD NOT FORWARD VIA UPnP' upnp_type = 0 continue print "error: Couldn't listen - " + str(e) h.failed() return
def download(self, params): action = params[0] self.logger = logging.getLogger(action) defaults.extend( [ ( 'parse_dir_interval', 60, "how often to rescan the torrent directory, in seconds" ), ( 'recursive_torrents_search', True, "search folder for torrents recursively or semi-resursively in launchmany mode" ), ( 'saveas_style', 1, "How to name torrent downloads (1 = rename to torrent name, " + "2 = save under name in torrent, 3 = save in directory under torrent name)" ), ( 'display_path', 1, "whether to display the full path or the torrent contents for each torrent" ), ] ) try: configdir = ConfigDir('launchmany') defaultsToIgnore = ['responsefile', 'url', 'priority'] configdir.setDefaults(defaults,defaultsToIgnore) configdefaults = configdir.loadConfig() defaults.append(('save_options',0, "whether to save the current options as the new default configuration " + "(only for btlaunchmany.py)")) config, args = parseargs(params[1:], defaults, 1, 1, configdefaults) if config['save_options']: configdir.saveConfig(config) configdir.deleteOldCacheData(config['expire_cache_data']) if not os.path.isdir(args[0]): raise ValueError("Warning: "+args[0]+" is not a directory") config['torrent_dir'] = args[0] except ValueError, e: self.logger.error(str(e) + '\nrun with no args for parameter explanations') exit(1)
def run(params): #cols = 80 def disp_exception(text): print text h = HeadlessDisplayer() while 1: configdir = ConfigDir('downloadheadless') defaultsToIgnore = ['responsefile', 'url', 'priority'] configdir.setDefaults(defaults, defaultsToIgnore) configdefaults = configdir.loadConfig() defaults.append(('save_options', 0, "whether to save the current " "options as the new default configuration " "(only for btdownloadheadless.py)")) try: config = parse_params(params, configdefaults) except ValueError, e: print 'error: %s \nrun with no args for parameter explanations' % e break if not config: print get_usage(defaults, 80, configdefaults) break if config['save_options']: configdir.saveConfig(config) configdir.deleteOldCacheData(config['expire_cache_data']) myid = createPeerID() seed(myid) global doneFlag doneFlag = Event() rawserver = RawServer(doneFlag, config['timeout_check_interval'], config['timeout'], ipv6_enable=config['ipv6_enabled'], failfunc=h.failed, errorfunc=disp_exception) upnp_type = UPnP_test(config['upnp_nat_access']) while True: try: listen_port = rawserver.find_and_bind( config['minport'], config['maxport'], config['bind'], ipv6_socket_style=config['ipv6_binds_v4'], upnp=upnp_type, randomizer=config['random_port']) break except socketerror, e: if upnp_type and e == UPnP_ERROR: print 'WARNING: COULD NOT FORWARD VIA UPnP' upnp_type = 0 continue print "error: Couldn't listen - " + str(e) h.failed() return
if __name__ == '__main__': if sys.argv[1:] == ['--version']: print version sys.exit(0) defaults.extend([ ('parse_dir_interval', 60, "how often to rescan the torrent directory, in seconds"), ('saveas_style', 1, 'How to name torrent downloads (1 = rename to ' 'torrent name, 2 = save under name in torrent, 3 = save in directory ' 'under torrent name)'), ('display_path', 1, 'whether to display the full path or the torrent ' 'contents for each torrent'), ]) try: configdir = ConfigDir('launchmany') defaultsToIgnore = ['responsefile', 'url', 'priority'] configdir.setDefaults(defaults, defaultsToIgnore) configdefaults = configdir.loadConfig() defaults.append( ('save_options', 0, 'whether to save the current options as the ' 'new default configuration (only for btlaunchmany.py)')) if len(sys.argv) < 2: print "Usage: btlaunchmany.py <directory> <global options>\n" print "<directory> - directory to look for .torrent files " \ "(semi-recursive)" print get_usage(defaults, 80, configdefaults) sys.exit(1) config, args = parseargs(sys.argv[1:], defaults, 1, 1, configdefaults) if config['save_options']: configdir.saveConfig(config)
if __name__ == '__main__': if sys.argv[1:] == ['--version']: print version sys.exit(0) defaults.extend([ ('parse_dir_interval', 60, 'how often to rescan the torrent directory, in seconds'), ('saveas_style', 2, 'How to name torrent downloads (1 = rename to ' 'torrent name, 2 = save under name in torrent, 3 = save in directory ' 'under torrent name)'), ('display_path', 0, 'whether to display the full path or the torrent ' 'contents for each torrent'), ]) try: configdir = ConfigDir('launchmanycurses') defaultsToIgnore = ['responsefile', 'url', 'priority'] configdir.setDefaults(defaults, defaultsToIgnore) configdefaults = configdir.loadConfig() defaults.append(('save_options', 0, 'whether to save the current ' 'options as the new default configuration (only for ' 'btlaunchmanycurses.py)')) if len(sys.argv) < 2: print "Usage: btlaunchmanycurses.py <directory> <global options>\n" print "<directory> - directory to look for .torrent files " \ "(semi-recursive)" print get_usage(defaults, 80, configdefaults) sys.exit(1) config, args = parseargs(sys.argv[1:], defaults, 1, 1, configdefaults) if config['save_options']: configdir.saveConfig(config)
def run(scrwin, errlist, params): doneflag = Event() d = CursesDisplayer(scrwin, errlist, doneflag) try: while 1: configdir = ConfigDir('downloadcurses') defaultsToIgnore = ['responsefile', 'url', 'priority'] configdir.setDefaults(defaults,defaultsToIgnore) configdefaults = configdir.loadConfig() defaults.append(('save_options',0, "whether to save the current options as the new default configuration " + "(only for btdownloadcurses.py)")) try: config = parse_params(params, configdefaults) except ValueError, e: d.error('error: ' + str(e) + '\nrun with no args for parameter explanations') break if not config: d.error(get_usage(defaults, d.fieldw, configdefaults)) break if config['save_options']: configdir.saveConfig(config) configdir.deleteOldCacheData(config['expire_cache_data']) myid = createPeerID() seed(myid) rawserver = RawServer(doneflag, config['timeout_check_interval'], config['timeout'], ipv6_enable = config['ipv6_enabled'], failfunc = d.failed, errorfunc = d.error) upnp_type = UPnP_test(config['upnp_nat_access']) while True: try: listen_port = rawserver.find_and_bind(config['minport'], config['maxport'], config['bind'], ipv6_socket_style = config['ipv6_binds_v4'], upnp = upnp_type, randomizer = config['random_port']) break except socketerror, e: if upnp_type and e == UPnP_ERROR: d.error('WARNING: COULD NOT FORWARD VIA UPnP') upnp_type = 0 continue d.error("Couldn't listen - " + str(e)) d.failed() return response = get_response(config['responsefile'], config['url'], d.error) if not response: break infohash = sha(bencode(response['info'])).digest() dow = BT1Download(d.display, d.finished, d.error, d.error, doneflag, config, response, infohash, myid, rawserver, listen_port, configdir) if not dow.saveAs(d.chooseFile): break if not dow.initFiles(old_style = True): break if not dow.startEngine(): dow.shutdown() break dow.startRerequester() dow.autoStats() if not dow.am_I_finished(): d.display(activity = 'connecting to peers') rawserver.listen_forever(dow.getPortHandler()) d.display(activity = 'shutting down') dow.shutdown() break
def download(self, params): role = params[0] if role == 'download': self.isDownloader = True self.logger = logging.getLogger(role) params.remove(role) while True: configdir = ConfigDir('downloadheadless') defaultsToIgnore = ['responsefile', 'url', 'priority'] configdir.setDefaults(defaults,defaultsToIgnore) configdefaults = configdir.loadConfig() defaults.append(('save_options',0, "whether to save the current options as the new default configuration " + "(only for btdownloadheadless.py)")) try: config = parse_params(params, configdefaults) except ValueError, e: print 'error: ' + str(e) + '\nrun with no args for parameter explanations' break if not config: print get_usage(defaults, 80, configdefaults) break if config['save_options']: configdir.saveConfig(config) configdir.deleteOldCacheData(config['expire_cache_data']) if config['url']: self.torrent = config['url'] elif config['responsefile']: self.torrent = config['responsefile'] for k in adjustDownloader: config[k] = adjustDownloader[k] myid = createPeerID() seed(myid) def disp_exception(text): self.logger.info( text) rawserver = RawServer(self.doneflag, config['timeout_check_interval'], config['timeout'], ipv6_enable = config['ipv6_enabled'], failfunc = self.failed, errorfunc = disp_exception) upnp_type = UPnP_test(config['upnp_nat_access']) while True: try: listen_port = rawserver.find_and_bind(config['minport'], config['maxport'], config['bind'], ipv6_socket_style = config['ipv6_binds_v4'], upnp = upnp_type, randomizer = config['random_port']) break except socketerror, e: if upnp_type and e == UPnP_ERROR: self.logger.info( 'WARNING: COULD NOT FORWARD VIA UPnP') upnp_type = 0 continue self.logger.info( "error: Couldn't listen - " + str(e)) self.failed() return "error: Couldn't listen - " + str(e)
def run(scrwin, errlist, params): doneflag = threading.Event() d = CursesDisplayer(scrwin, errlist, doneflag) try: while 1: configdir = ConfigDir('downloadcurses') defaultsToIgnore = ['responsefile', 'url', 'priority'] configdir.setDefaults(defaults, defaultsToIgnore) configdefaults = configdir.loadConfig() defaults.append( ('save_options', 0, 'whether to save the current options as ' 'the new default configuration (only for btdownloadcurses.py)' )) try: config = parse_params(params, configdefaults) except ValueError as e: d.error('error: {}\nrun with no args for parameter ' 'explanations'.format(e)) break if not config: d.error(get_usage(defaults, d.fieldw, configdefaults)) break if config['save_options']: configdir.saveConfig(config) configdir.deleteOldCacheData(config['expire_cache_data']) myid = createPeerID() random.seed(myid) rawserver = RawServer(doneflag, config['timeout_check_interval'], config['timeout'], ipv6_enable=config['ipv6_enabled'], failfunc=d.failed, errorfunc=d.error) upnp_type = UPnP_test(config['upnp_nat_access']) while True: try: listen_port = rawserver.find_and_bind( config['minport'], config['maxport'], config['bind'], ipv6_socket_style=config['ipv6_binds_v4'], upnp=upnp_type, randomizer=config['random_port']) break except socket.error as e: if upnp_type and e == UPnP_ERROR: d.error('WARNING: COULD NOT FORWARD VIA UPnP') upnp_type = 0 continue d.error("Couldn't listen - " + str(e)) d.failed() return response = get_response(config['responsefile'], config['url'], d.error) if not response: break infohash = hashlib.sha1(bencode(response['info'])).digest() dow = BT1Download(d.display, d.finished, d.error, d.error, doneflag, config, response, infohash, myid, rawserver, listen_port, configdir) if not dow.saveAs(d.chooseFile): break if not dow.initFiles(old_style=True): break if not dow.startEngine(): dow.shutdown() break dow.startRerequester() dow.autoStats() if not dow.am_I_finished(): d.display(activity='connecting to peers') rawserver.listen_forever(dow.getPortHandler()) d.display(activity='shutting down') dow.shutdown() break except KeyboardInterrupt: # ^C to exit... pass try: rawserver.shutdown() except: pass if not d.done: d.failed()
def run(params): h = HeadlessDisplayer() while 1: configdir = ConfigDir('downloadheadless') defaultsToIgnore = ['responsefile', 'url', 'priority'] configdir.setDefaults(defaults, defaultsToIgnore) configdefaults = configdir.loadConfig() defaults.append( ('save_options', 0, 'whether to save the current options as the ' 'new default configuration (only for btdownloadheadless.py)')) try: config = parse_params(params, configdefaults) except ValueError as e: print 'error: {}\nrun with no args for parameter explanations' \ ''.format(e) break if not config: print get_usage(defaults, 80, configdefaults) break if config['save_options']: configdir.saveConfig(config) configdir.deleteOldCacheData(config['expire_cache_data']) myid = createPeerID() random.seed(myid) doneflag = threading.Event() def disp_exception(text): print text rawserver = RawServer( doneflag, config['timeout_check_interval'], config['timeout'], ipv6_enable=config['ipv6_enabled'], failfunc=h.failed, errorfunc=disp_exception) upnp_type = UPnP_test(config['upnp_nat_access']) while True: try: listen_port = rawserver.find_and_bind( config['minport'], config['maxport'], config['bind'], ipv6_socket_style=config['ipv6_binds_v4'], upnp=upnp_type, randomizer=config['random_port']) break except socket.error as e: if upnp_type and e == UPnP_ERROR: print 'WARNING: COULD NOT FORWARD VIA UPnP' upnp_type = 0 continue print "error: Couldn't listen - " + str(e) h.failed() return response = get_response(config['responsefile'], config['url'], h.error) if not response: break infohash = hashlib.sha1(bencode(response['info'])).digest() dow = BT1Download( h.display, h.finished, h.error, disp_exception, doneflag, config, response, infohash, myid, rawserver, listen_port, configdir) if not dow.saveAs(h.chooseFile, h.newpath): break if not dow.initFiles(old_style=True): break if not dow.startEngine(): dow.shutdown() break dow.startRerequester() dow.autoStats() if not dow.am_I_finished(): h.display(activity='connecting to peers') rawserver.listen_forever(dow.getPortHandler()) h.display(activity='shutting down') dow.shutdown() break try: rawserver.shutdown() except: pass if not h.done: h.failed()
def run(params): cols = 80 h = HeadlessDisplayer() while 1: configdir = ConfigDir("downloadheadless") defaultsToIgnore = ["responsefile", "url", "priority"] configdir.setDefaults(defaults, defaultsToIgnore) configdefaults = configdir.loadConfig() defaults.append( ( "save_options", 0, "whether to save the current options as the new default configuration " + "(only for btdownloadheadless.py)", ) ) try: config = parse_params(params, configdefaults) except ValueError, e: print "error: " + str(e) + "\nrun with no args for parameter explanations" break if not config: print get_usage(defaults, 80, configdefaults) break if config["save_options"]: configdir.saveConfig(config) configdir.deleteOldCacheData(config["expire_cache_data"]) myid = createPeerID() seed(myid) global doneFlag doneFlag = Event() def disp_exception(text): print text rawserver = RawServer( doneFlag, config["timeout_check_interval"], config["timeout"], ipv6_enable=config["ipv6_enabled"], failfunc=h.failed, errorfunc=disp_exception, ) upnp_type = UPnP_test(config["upnp_nat_access"]) while True: try: listen_port = rawserver.find_and_bind( config["minport"], config["maxport"], config["bind"], ipv6_socket_style=config["ipv6_binds_v4"], upnp=upnp_type, randomizer=config["random_port"], ) break except socketerror, e: if upnp_type and e == UPnP_ERROR: print "WARNING: COULD NOT FORWARD VIA UPnP" upnp_type = 0 continue print "error: Couldn't listen - " + str(e) h.failed() return
def doTheDownloadThing(self): """ This was copied and modified directly from btdownloadheadless.py """ if self.disabled: LOGERROR('Attempted to start DL but DISABLE_TORRENT is True') return while 1: # Use this var to identify if we've started downloading self.startTime = RightNow() configdir = ConfigDir(self.cacheDir) defaultsToIgnore = ['responsefile', 'url', 'priority'] configdir.setDefaults(defaults, defaultsToIgnore) config = configdir.loadConfig() config['responsefile'] = self.torrent config['url'] = '' config['priority'] = '' config['saveas'] = self.savePath_temp config['save_options'] = 0 config['max_uploads'] = 0 config['max_files_open'] = 25 configdir.deleteOldCacheData(config['expire_cache_data']) myid = createPeerID() seed(myid) rawserver = RawServer( self.doneObj, config['timeout_check_interval'], config['timeout'], ipv6_enable = config['ipv6_enabled'], failfunc = self.failedFunc, errorfunc = self.errorFunc) upnp_type = UPnP_test(config['upnp_nat_access']) while True: try: listen_port = rawserver.find_and_bind( \ config['minport'], config['maxport'], config['bind'], ipv6_socket_style = config['ipv6_binds_v4'], upnp = upnp_type, randomizer = config['random_port']) break except socketerror, e: if upnp_type and e == UPnP_ERROR: LOGWARN('WARNING: COULD NOT FORWARD VIA UPnP') upnp_type = 0 continue LOGERROR("error: Couldn't listen - " + str(e)) self.failedFunc() return if not self.response: break infohash = sha(bencode(self.response['info'])).digest() LOGINFO('Downloading: %s', self.torrentName) curr,tot = [float(a)/MEGABYTE for a in self.fileProgress()] if curr == 0: LOGINFO('Starting new download') elif curr==tot: LOGINFO('Torrent already finished!') return else: LOGINFO('Picking up where left off at %0.0f of %0.0f MB' % (curr,tot)) self.bt1dow = BT1Download( self.statusFunc, self.finishedFunc, self.errorFunc, self.excFunc, self.doneObj, config, self.response, infohash, myid, rawserver, listen_port, configdir) if not self.bt1dow.saveAs(self.chooseFileFunc): break if not self.bt1dow.initFiles(old_style = True): break if not self.bt1dow.startEngine(): self.bt1dow.shutdown() break self.bt1dow.startRerequester() self.bt1dow.autoStats() if not self.bt1dow.am_I_finished(): self.statusFunc(activity = 'Connecting to peers') rawserver.listen_forever(self.bt1dow.getPortHandler()) self.statusFunc(activity = 'Shutting down') self.bt1dow.shutdown() break
def doTheDownloadThing(self): """ This was copied and modified directly from btdownloadheadless.py """ if self.disabled: LOGERROR('Attempted to start DL but DISABLE_TORRENT is True') return while 1: # Use this var to identify if we've started downloading self.startTime = RightNow() configdir = ConfigDir(self.cacheDir) defaultsToIgnore = ['responsefile', 'url', 'priority'] configdir.setDefaults(defaults, defaultsToIgnore) config = configdir.loadConfig() config['responsefile'] = self.torrent config['url'] = '' config['priority'] = '' config['saveas'] = self.savePath_temp config['save_options'] = 0 config['max_uploads'] = 0 config['max_files_open'] = 25 configdir.deleteOldCacheData(config['expire_cache_data']) myid = createPeerID() seed(myid) rawserver = RawServer( self.doneObj, config['timeout_check_interval'], config['timeout'], ipv6_enable = config['ipv6_enabled'], failfunc = self.failedFunc, errorfunc = self.errorFunc) upnp_type = UPnP_test(config['upnp_nat_access']) while True: try: listen_port = rawserver.find_and_bind( \ config['minport'], config['maxport'], config['bind'], ipv6_socket_style = config['ipv6_binds_v4'], upnp = upnp_type, randomizer = config['random_port']) break except socketerror, e: if upnp_type and e == UPnP_ERROR: LOGWARN('WARNING: COULD NOT FORWARD VIA UPnP') upnp_type = 0 continue LOGERROR("error: Couldn't listen - " + str(e)) self.failedFunc() return if not self.response: break infohash = sha(bencode(self.response['info'])).digest() LOGINFO('Downloading: %s', self.torrentName) curr,tot = [float(a)/MEGABYTE for a in self.fileProgress()] if curr == 0: LOGINFO('Starting new download') elif curr==tot: LOGINFO('Torrent already finished!') return else: LOGINFO('Picking up where left off at %0.0f of %0.0f MB' % (curr,tot)) self.bt1dow = BT1Download( self.statusFunc, self.finishedFunc, self.errorFunc, self.excFunc, self.doneObj, config, self.response, infohash, myid, rawserver, listen_port, configdir) if not self.bt1dow.saveAs(self.chooseFileFunc): break if not self.bt1dow.initFiles(old_style = True): break if not self.bt1dow.startEngine(): self.bt1dow.shutdown() break if self.nHashFailures >= self.killAfterNHashFails: self.bt1dow.shutdown() self.customCallbacks['errorFunc']('hashFail') break self.bt1dow.startRerequester() self.bt1dow.autoStats() if not self.bt1dow.am_I_finished(): self.statusFunc(activity = 'Connecting to peers') rawserver.listen_forever(self.bt1dow.getPortHandler()) self.statusFunc(activity = 'Shutting down') self.bt1dow.shutdown() break
def setupConfigPath(self): configdir = ConfigDir() self.dir_root = configdir.dir_root
def doTheDownloadThing(self): """ This was copied and modified directly from btdownloadheadless.py """ if self.disabled: LOGERROR("Attempted to start DL but DISABLE_TORRENT is True") return while 1: # Use this var to identify if we've started downloading self.startTime = RightNow() configdir = ConfigDir(self.cacheDir) defaultsToIgnore = ["responsefile", "url", "priority"] configdir.setDefaults(defaults, defaultsToIgnore) config = configdir.loadConfig() config["responsefile"] = self.torrent config["url"] = "" config["priority"] = "" config["saveas"] = self.savePath_temp config["save_options"] = 0 config["max_uploads"] = 0 config["max_files_open"] = 25 configdir.deleteOldCacheData(config["expire_cache_data"]) myid = createPeerID() seed(myid) rawserver = RawServer( self.doneObj, config["timeout_check_interval"], config["timeout"], ipv6_enable=config["ipv6_enabled"], failfunc=self.failedFunc, errorfunc=self.errorFunc, ) upnp_type = UPnP_test(config["upnp_nat_access"]) while True: try: listen_port = rawserver.find_and_bind( config["minport"], config["maxport"], config["bind"], ipv6_socket_style=config["ipv6_binds_v4"], upnp=upnp_type, randomizer=config["random_port"], ) break except socketerror, e: if upnp_type and e == UPnP_ERROR: LOGWARN("WARNING: COULD NOT FORWARD VIA UPnP") upnp_type = 0 continue LOGERROR("error: Couldn't listen - " + str(e)) self.failedFunc() return if not self.response: break infohash = sha(bencode(self.response["info"])).digest() LOGINFO("Downloading: %s", self.torrentName) curr, tot = [float(a) / MEGABYTE for a in self.fileProgress()] if curr == 0: LOGINFO("Starting new download") elif curr == tot: LOGINFO("Torrent already finished!") return else: LOGINFO("Picking up where left off at %0.0f of %0.0f MB" % (curr, tot)) self.bt1dow = BT1Download( self.statusFunc, self.finishedFunc, self.errorFunc, self.excFunc, self.doneObj, config, self.response, infohash, myid, rawserver, listen_port, configdir, ) if not self.bt1dow.saveAs(self.chooseFileFunc): break if not self.bt1dow.initFiles(old_style=True): break if not self.bt1dow.startEngine(): self.bt1dow.shutdown() break if self.nHashFailures >= self.killAfterNHashFails: self.bt1dow.shutdown() self.customCallbacks["errorFunc"]("hashFail") break self.bt1dow.startRerequester() self.bt1dow.autoStats() if not self.bt1dow.am_I_finished(): self.statusFunc(activity="Connecting to peers") rawserver.listen_forever(self.bt1dow.getPortHandler()) self.statusFunc(activity="Shutting down") self.bt1dow.shutdown() break