def download(url, path, filename): """Pobiera plik, korzysta z RapidWaiter i RapidDownloader""" waiter = rapid.RapidWaiter(url) threads.append(waiter) waiter.wait() overloaded = limit = busy = False while not waiter.done: if waiter.limit and not limit: print("Przekroczyłeś limit pobierania") limit = True if waiter.busy and not busy: print("Twój adres ip pobiera już pliki") busy = True if waiter.overloaded and not overloaded: print("Zbyt wiele użytkowników pobiera teraz pliki") overloaded = True if waiter.count > 0: if waiter.busy or waiter.limit or waiter.overloaded: _sleep(waiter.count, True) else: _sleep(waiter.count) else: time.sleep(0.3) print("Pobieram plik: {0}".format(filename)) downloader = rapid.RapidDownloader(waiter.download_url, \ os.path.join(path, filename)) threads.append(downloader) downloader.download() # poczekaj aż plik zostanie otwarty while downloader.filesize == 0: time.sleep(0.1) progressbar = progbar.ProgressBar(downloader.filesize) progbar.cone() def print_progbar(): progbar.ctwo() sys.stdout.write("{0}".format(progressbar)) progbar.cthree() print_progbar() while not downloader.is_downloaded(): progressbar.update(downloader.current_pos) print_progbar() progressbar.update(downloader.filesize) print_progbar() print("\nPlik został pobrany")
def _sleep(count, delete=False): """Wyświetla ile jeszcze musimy czekać na pobranie pliku. Czyści aktualną linię i w nią wpisuje napis. """ progbar.cone() while count >= 0: minutes = count / 60 seconds = count - minutes * 60 progbar.ctwo() sys.stdout.write("Oczekuję na plik jeszcze {0} minut, " "{1} sekund".format(minutes, seconds)) progbar.cthree() count -= 1 time.sleep(1) # wyczyść aktualną linię if delete: progbar.ctwo() else: print("")