aboutsummaryrefslogtreecommitdiff
path: root/src/book_flow.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/book_flow.py')
-rw-r--r--src/book_flow.py52
1 files changed, 25 insertions, 27 deletions
diff --git a/src/book_flow.py b/src/book_flow.py
index ff77616..37f4866 100644
--- a/src/book_flow.py
+++ b/src/book_flow.py
@@ -9,6 +9,7 @@ import subprocess
import src.utils as utils
import src.db as db
+import src.models as models
from src.book_detail import BookDetail
from src.book_delete import BookDelete
from src.book_form import BookForm
@@ -18,7 +19,7 @@ import src.book_files as book_files
class BookFlow(Gtk.FlowBox):
- def __init__(self, window, resources, library, ereader, conn, progress, update_filter_progress):
+ def __init__(self, window, resources, library, ereader, conn, books, progress, genre, msg):
Gtk.FlowBox.__init__(self)
self._window = window
@@ -26,29 +27,23 @@ class BookFlow(Gtk.FlowBox):
self._library = library
self._ereader = ereader
self._conn = conn
- self._progress = progress
- self._update_filter_progress = update_filter_progress
+ self._msg = msg
self._picture_cache = PictureCache()
- self._books = db.get_books(self._conn)
- self._reset_view()
+ self.reset(books, progress, genre)
- def add_book(self, book_id, data):
- self._books[book_id] = data
- self.update_progress(data['progress'])
- self.select_child(self._flow_box_children[book_id])
+ def select_book(self, book_id):
+ if book_id in self._flow_box_children:
+ self.select_child(self._flow_box_children[book_id])
- def update_progress(self, progress):
- self._progress = progress
- self._reset_view()
+ def reset(self, books, progress, genre, book_id=None):
+ if book_id:
+ self._picture_cache.invalidate(f'{self._library}/{book_id}/cover-min.png')
- # Private
-
- def _reset_view(self):
self.remove_all()
self._flow_box_children = {}
- for book_id, data in sorted(self._books.items(), key=book_sort):
- if data['progress'] == self._progress:
+ for book_id, data in sorted(books.items(), key=book_sort):
+ if self._is_selected(data, progress, genre):
picture = self._picture_cache.get(f'{self._library}/{book_id}/cover-min.png')
picture.set_can_shrink(False)
@@ -66,6 +61,17 @@ class BookFlow(Gtk.FlowBox):
self._flow_box_children[book_id] = flow_box_child
self.append(flow_box_child)
+ # Private
+
+ def _is_selected(self, data, progress, genre):
+ if data['progress'] != progress:
+ return False
+ if genre == models.all_genres:
+ return True
+ if genre == models.no_genre:
+ return len(data['genres']) == 0
+ return genre in data['genres']
+
def _on_left_click(self, gesture, n_press, x, y, book_id, data):
if n_press == 2:
self._open_detail(book_id, data)
@@ -103,23 +109,15 @@ class BookFlow(Gtk.FlowBox):
def _update_book(self, book_id, data):
book = {'id': book_id, 'data': data }
- BookForm(self._window, self._resources, self._library, self._conn, data['progress'], self._on_book_updated, book).present()
-
- def _on_book_updated(self, book_id, data):
- self._picture_cache.invalidate(f'{self._library}/{book_id}/cover-min.png')
- self._books[book_id] = data
- self.update_progress(data['progress']) # Note: this redraws everything, this is overkill in some cases
- self._update_filter_progress(data['progress'])
- self.select_child(self._flow_box_children[book_id])
+ BookForm(self._window, self._resources, self._library, self._conn, data['progress'], self._msg, book).present()
def _confirm_delete_book(self, book_id, data):
BookDelete(self._window, self._library, book_id, data, lambda: self._delete_book(book_id, data)).present()
def _delete_book(self, book_id, data):
- del self._books[book_id]
db.delete_book(self._conn, book_id)
shutil.rmtree(f'{self._library}/{book_id}', ignore_errors=True)
- self._reset_view()
+ 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()