improved recordings download

This commit is contained in:
DYefremov
2022-08-24 23:07:18 +03:00
parent 71f7b3a570
commit f4dac57d06
3 changed files with 19 additions and 14 deletions

View File

@@ -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.

View File

@@ -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):

View File

@@ -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"))