diff options
| author | Joris Guyonvarch | 2026-01-16 19:02:53 +0100 |
|---|---|---|
| committer | Joris Guyonvarch | 2026-01-16 19:02:53 +0100 |
| commit | f2656765a27a38b1a9e5602c3430dde1cbc361f1 (patch) | |
| tree | a103135f5155e5132bf5366a3fdee5c93575a9d4 /src | |
| parent | ef6087b36a4726663a1c475952dc0898ab7d0abd (diff) | |
Transfer book by book instead of all books
Diffstat (limited to 'src')
| -rw-r--r-- | src/book_detail.py | 40 | ||||
| -rw-r--r-- | src/book_flow.py | 13 | ||||
| -rw-r--r-- | src/book_transfer.py | 28 |
3 files changed, 40 insertions, 41 deletions
diff --git a/src/book_detail.py b/src/book_detail.py index 49ee8a7..9c36d9b 100644 --- a/src/book_detail.py +++ b/src/book_detail.py @@ -10,14 +10,18 @@ import pathlib import src.utils as utils import src.book_files as book_files import src.str_format as str_format +from src.book_transfer import BookTransfer class BookDetail(Gtk.Window): - def __init__(self, parent_window, library, book_id, data): + def __init__(self, parent_window, library, ereader, book_id, data): Gtk.Window.__init__(self) utils.configure_dialog(self, parent_window, data['title'], height=800) + self._library = library + self._ereader = ereader + scrolled_window = Gtk.ScrolledWindow() self.set_child(scrolled_window) @@ -44,24 +48,32 @@ class BookDetail(Gtk.Window): box.append(utils.label(data['summary'])) for path in book_files.get(library, book_id): - box.append(book_line(book_id, data, path)) + box.append(self._book_line(book_id, data, path)) -def has_info(data, key): - return key in data and data[key] + def _book_line(self, book_id, data, path): + box = Gtk.Box(spacing=20) + box.append(utils.label(os.path.basename(path))) + + open_button = Gtk.Button(label='Ouvrir') + open_button.connect('clicked', lambda _: open_book(path)) + box.append(open_button) -def book_line(book_id, data, path): - box = Gtk.Box(spacing=20) - box.append(utils.label(os.path.basename(path))) + download_button = Gtk.Button(label='Télécharger') + download_button.connect('clicked', lambda _: download_book(book_id, data, path)) + box.append(download_button) - open_button = Gtk.Button(label='Ouvrir') - open_button.connect('clicked', lambda _: open_book(path)) - box.append(open_button) + if self._ereader and os.path.exists(self._ereader): + transfer_button = Gtk.Button(label='Transférer') + transfer_button.connect('clicked', lambda _: self._transfer_book(book_id, data, path)) + box.append(transfer_button) - download_button = Gtk.Button(label='Télécharger') - download_button.connect('clicked', lambda _: download_book(book_id, data, path)) - box.append(download_button) + return box - return box + def _transfer_book(self, book_id, data, path): + BookTransfer(self, self._ereader, book_id, data, path).present() + +def has_info(data, key): + return key in data and data[key] def open_book(path): subprocess.run(['xdg-open', path]) diff --git a/src/book_flow.py b/src/book_flow.py index 25dfa73..eb0c6d8 100644 --- a/src/book_flow.py +++ b/src/book_flow.py @@ -13,7 +13,6 @@ import src.models as models from src.book_detail import BookDetail from src.book_delete import BookDelete from src.book_form import BookForm -from src.book_transfer import BookTransfer from src.picture_cache import PictureCache import src.book_files as book_files import src.str_format as str_format @@ -145,17 +144,10 @@ class BookFlow(Gtk.ScrolledWindow): delete_button.connect('clicked', lambda _: self._confirm_delete_book(book_id, data)) box.append(delete_button) - if self._ereader and os.path.exists(self._ereader): - paths = book_files.get(self._library, book_id) - if paths: - transfer_button = Gtk.Button(label='Transférer') - transfer_button.connect('clicked', lambda _: self._transfer_book(book_id, data, paths)) - box.append(transfer_button) - popover.popup() def _open_detail(self, book_id, data): - BookDetail(self._window, self._library, book_id, data).present() + BookDetail(self._window, self._library, self._ereader, book_id, data).present() def _update_book(self, book_id, data): book = {'id': book_id, 'data': data } @@ -169,9 +161,6 @@ class BookFlow(Gtk.ScrolledWindow): shutil.rmtree(f'{self._library}/{book_id}', ignore_errors=True) self._msg(['book-deleted', book_id, data]) - def _transfer_book(self, book_id, data, paths): - BookTransfer(self._window, self._ereader, book_id, data, paths).present() - def author_key(data): match data['authors']: case [author, *_]: diff --git a/src/book_transfer.py b/src/book_transfer.py index 3bda52f..073fa9c 100644 --- a/src/book_transfer.py +++ b/src/book_transfer.py @@ -12,13 +12,13 @@ import src.str_format as str_format class BookTransfer(Gtk.Window): - def __init__(self, parent_window, ereader, book_id, data, paths): + def __init__(self, parent_window, ereader, book_id, data, path): Gtk.Window.__init__(self) self._ereader = ereader self._book_id = book_id self._data = data - self._paths = paths + self._path = path utils.configure_dialog(self, parent_window, data['title'], width=None, height=None, allow_escape=False) @@ -26,9 +26,8 @@ class BookTransfer(Gtk.Window): self.set_child(self._box) utils.set_margin(self._box, 20) - for path in paths: - basename = os.path.basename(path) - self._box.append(utils.label(basename)) + basename = os.path.basename(path) + self._box.append(utils.label(basename)) self._spinner = Gtk.Spinner() self._spinner.start() @@ -43,24 +42,23 @@ class BookTransfer(Gtk.Window): self._box.append(utils.label('✔')) def _transfer_books_daemon(self): - for path in self._paths: - self._transfer_book(path) + self._transfer_book() GLib.idle_add(self._complete_animation) - def _transfer_book(self, path): - dest = self._dest_name(path) - if path.suffix in ['.mobi', '.azw3']: + def _transfer_book(self): + dest = self._dest_name() + if self._path.suffix in ['.mobi', '.azw3']: # Copy os.makedirs(os.path.dirname(dest), exist_ok=True) - shutil.copyfile(path, dest) + shutil.copyfile(self._path, dest) else: # Convert os.makedirs(os.path.dirname(dest), exist_ok=True) - subprocess.run(['ebook-convert', path, dest]) + subprocess.run(['ebook-convert', self._path, dest]) - def _dest_name(self, path): + def _dest_name(self): safe_author = str_format.safe_path(self._data['authors'][0]) if len(self._data['authors']) > 0 else self._book_id safe_title = str_format.safe_path(self._data['title']) - basename_no_ext = str_format.safe_path(os.path.splitext(os.path.basename(path))[0]) - ext = path.suffix if path.suffix in ['.mobi', '.azw3'] else '.mobi' + basename_no_ext = str_format.safe_path(os.path.splitext(os.path.basename(self._path))[0]) + ext = self._path.suffix if self._path.suffix in ['.mobi', '.azw3'] else '.mobi' return f'{self._ereader}/{safe_author}-{safe_title}-{basename_no_ext}{ext}' |
