Skip to content

Commit

Permalink
make progress logging configurable
Browse files Browse the repository at this point in the history
this is done for download progress and sleeping in
streams

this is just an internal config variable
you can't set anything inside the .config files
  • Loading branch information
balrok committed Aug 27, 2014
1 parent 4d36436 commit 1d57d95
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 13 deletions.
29 changes: 20 additions & 9 deletions flashget/downloader.py
Expand Up @@ -10,7 +10,7 @@
# they are threads and callback through hooks
class Downloader(object):

def __init__(self, download_limit):
def __init__(self, download_limit, progress_handler = None):
self.download_limit = download_limit
# streams can be put in this queue
# and the downloader will try to start them
Expand All @@ -22,6 +22,10 @@ def __init__(self, download_limit):
self.alternativeStreams = {}
# holds the other parts of the current download
self.otherParts = {}
if progress_handler is None:
self.progress_handler = Downloader.progressDefault
else:
self.progress_handler = progress_handler

def print_current_downloads(self):
log.info('dl-list changed:')
Expand Down Expand Up @@ -97,12 +101,12 @@ def downloadProgressCallback(self, url_handle):
dl = self.current_downloads[url_handle.uid]
start = dl['start']

percent_str = calc_percent(url_handle.downloaded, url_handle.size)
eta_str = calc_eta(start, url_handle.size - url_handle.position, url_handle.downloaded - url_handle.position)
speed_str = calc_speed(start, url_handle.downloaded - url_handle.position)
downloaded_str = format_bytes(url_handle.downloaded)
self.logProgress(' [%s%%] %s/%s at %s ETA %s %s' % (percent_str, downloaded_str, format_bytes(url_handle.size), speed_str,
eta_str, dl['basename']), url_handle.uid)
self.progress_handler(self, url_handle.uid, "update", {"percent": calc_percent(url_handle.downloaded, url_handle.size),
"downloaded": format_bytes(url_handle.downloaded),
"size": format_bytes(url_handle.size),
"speed": calc_speed(start, url_handle.downloaded - url_handle.position),
"eta": calc_eta(start, url_handle.size - url_handle.position, url_handle.downloaded - url_handle.position),
"basename": dl['basename']})


def processErrorCallback(self, url):
Expand Down Expand Up @@ -140,7 +144,7 @@ def processSuccessCallback(self, url):
self.dl_postprocess(uid)

def dl_postprocess(self, uid):
self.logProgress(' ', uid) # clear our old line
self.progress_handler(self, uid, "delete", {}) # clear our old line
del self.current_downloads[uid]
self.print_current_downloads()
self.download_limit += 1
Expand Down Expand Up @@ -229,7 +233,14 @@ def callback(dl):
self.iterateCurrentDownloads(callback)
log.info("Done with ending Downloader")

def logProgress(self, text, dummy_uid):
def progressDefault(self, uid, event, data):
if event == "new" or event == "update":
self.logProgress(' [%s%%] %s/%s at %s ETA %s %s' % (data["percent"], data["downloaded"], data["size"], data["speed"],
data["eta"], data["basename"]))
elif event == "delete":
self.logProgress(' ') # clear our old line

def logProgress(self, text):
if text == ' ':
return
sys.stdout.write(text+u"\r")
Expand Down
2 changes: 1 addition & 1 deletion flashget/main.py
Expand Up @@ -79,7 +79,7 @@ def main(config=None):
log.info("running the program with following links:")
for link in links:
log.info(link)
downloader = Downloader(config.get('dl_instances', 6))
downloader = Downloader(config.get('dl_instances', 6), config.get("progress_handler", None))

for link in links:
# a link can be either a download-page or a stream
Expand Down
10 changes: 7 additions & 3 deletions flashget/stream.py
Expand Up @@ -27,9 +27,13 @@ def download(self, **kwargs):
return LargeDownload(**kwargs)
# you can overwrite this
def sleep(self, timeout):
log.debug("sleeping %d seconds", timeout)
time.sleep(timeout)
return True
sleep_handler = config.get('sleep_handler', None)
if sleep_handler is None:
log.debug("sleeping %d seconds", timeout)
time.sleep(timeout)
return True
else:
return sleep_handler(self, timeout)
@staticmethod
def getTestData():
raise Exception
Expand Down

0 comments on commit 1d57d95

Please sign in to comment.