From f4dac57d065f6259ad474dfbbbf341794d8bb1ce Mon Sep 17 00:00:00 2001 From: DYefremov Date: Wed, 24 Aug 2022 23:07:18 +0300 Subject: [PATCH] improved recordings download --- app/connections.py | 20 +++++++++++--------- app/ui/recordings.py | 11 +++++++---- app/ui/tasks.py | 2 +- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/app/connections.py b/app/connections.py index 2c894dca..3b29c06d 100644 --- a/app/connections.py +++ b/app/connections.py @@ -113,19 +113,21 @@ class UtfFTP(FTP): def download_file(self, name, save_path, callback=None): with open(save_path + name, "wb") as f: msg = "Downloading file: {}. Status: {}" - try: - resp = str(self.retrbinary("RETR " + name, f.write)) - except all_errors as e: - resp = str(e) - msg = msg.format(name, e) - log(msg.rstrip()) - else: - msg = msg.format(name, resp) - + resp = self.download_binary(name, f) + msg = msg.format(name, resp) callback(msg) if callback else log(msg.rstrip()) return resp + def download_binary(self, src, fo): + try: + resp = str(self.retrbinary(f"RETR {src}", fo.write)) + except all_errors as e: + resp = str(e) + log(f"Error. {e}") + + return resp + def download_dir(self, path, save_path, callback=None): """ Downloads directory from FTP with all contents. diff --git a/app/ui/recordings.py b/app/ui/recordings.py index 0a912760..01ecd1f0 100644 --- a/app/ui/recordings.py +++ b/app/ui/recordings.py @@ -31,7 +31,6 @@ import os from datetime import datetime from ftplib import all_errors from io import BytesIO, TextIOWrapper -from pathlib import Path from urllib.parse import quote from app.ui.tasks import BGTaskWidget @@ -123,13 +122,17 @@ class RecordingsTool(Gtk.Box): if response in (Gtk.ResponseType.CANCEL, Gtk.ResponseType.DELETE_EVENT): return - files = (Path(model[p][-1].get("e2filename", "")).name for p in paths) + files = (model[p][5] for p in paths) bgw = BGTaskWidget(self._app, "Downloading recordings...", self.download_recordings, files, response) self._app.emit("add-background-task", bgw) def download_recordings(self, files, dst): - for f in files: - self._ftp.download_file(f, dst) + for file in files: + try: + with open(os.path.join(dst, os.path.basename(file)), "wb") as f: + log(f"Downloading recording: {file}. Status: {self._ftp.download_binary(file, f)}".rstrip()) + except OSError as e: + log(str(e)) @run_task def init(self, app=None, arg=None): diff --git a/app/ui/tasks.py b/app/ui/tasks.py index 598aaecd..ae96329f 100644 --- a/app/ui/tasks.py +++ b/app/ui/tasks.py @@ -43,7 +43,7 @@ class BGTaskWidget(Gtk.Box): self._spinner = Gtk.Spinner(active=True) self.pack_start(self._spinner, False, False, 0) - close_button = Gtk.Button.new_from_icon_name("gtk-close", Gtk.IconSize.MENU) + close_button = Gtk.Button.new_from_icon_name("window-close", Gtk.IconSize.MENU) close_button.set_relief(Gtk.ReliefStyle.NONE) close_button.set_valign(Gtk.Align.CENTER) close_button.set_tooltip_text(get_message("Cancel"))