From 2472f8011175e4c7e04e87429c4de8df4042894d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Hamal=20Dvo=C5=99=C3=A1k?= <mordae@anilinux.org> Date: Sun, 9 Mar 2025 10:52:34 +0100 Subject: [PATCH] Tweak watched status --- lazy_player/__init__.py | 43 ++++++++++++++++++++++----------------- lazy_player/file_model.py | 5 +++++ 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/lazy_player/__init__.py b/lazy_player/__init__.py index 1ed4855..cc1a8d7 100644 --- a/lazy_player/__init__.py +++ b/lazy_player/__init__.py @@ -153,6 +153,10 @@ class MainWindow(Gtk.ApplicationWindow): return position = file_item.load_attribute("position", 0) + duration = file_item.load_attribute("duration", 1) or 1 + + if (position / duration) >= 0.99: + position = 0 # Start playing the video full_path = os.path.abspath(file_item.full_path) @@ -235,26 +239,27 @@ class MainWindow(Gtk.ApplicationWindow): label = cast(Gtk.Label, box.get_last_child()) item = cast(FileItem, list_item.get_item()) - # Set appropriate icon - icon.set_opacity(1.0) - if item.file_type == FileType.DIRECTORY: - icon.set_from_icon_name("folder-symbolic") - icon.set_css_classes(["file-icon"]) - else: - position = item.load_attribute("position", 0) - duration = item.load_attribute("duration", 1) or 1 - - if position == 0: - icon.set_from_icon_name("checkbox-symbolic") - icon.set_css_classes(["file-icon", "unwatched"]) - elif (position / duration) >= 0.9: - icon.set_from_icon_name("object-select-symbolic") - icon.set_css_classes(["file-icon", "completed"]) + def update_icon(*args: object) -> None: + if item.file_type == FileType.DIRECTORY: + icon.set_from_icon_name("folder-symbolic") + icon.set_css_classes(["file-icon"]) else: - icon.set_from_icon_name("media-playback-pause-symbolic") - icon.set_css_classes(["file-icon", "in-progress"]) + position = item.load_attribute("position", 0) + duration = item.load_attribute("duration", 1) or 1 + + if position == 0: + icon.set_from_icon_name("media-playback-start-symbolic") + icon.set_css_classes(["file-icon", "unwatched"]) + elif (position / duration) >= 0.99: + icon.set_from_icon_name("object-select-symbolic") + icon.set_css_classes(["file-icon", "completed"]) + else: + icon.set_from_icon_name("media-playback-pause-symbolic") + icon.set_css_classes(["file-icon", "in-progress"]) label.set_text(item.name) + item.connect("notify::attrs-changed", update_icon) + update_icon() def _on_selection_changed( self, @@ -340,8 +345,8 @@ class MainWindow(Gtk.ApplicationWindow): position = file_item.load_attribute("position", 0) duration = file_item.load_attribute("duration", 1) or 1 - # If position exists and is >= 90% through, clear it - if position > 0 and (position / duration) >= 0.9: + # If position exists and is >= 99% through, clear it + if position > 0 and (position / duration) >= 0.99: file_item.save_attribute("position", None) else: # Otherwise mark as complete diff --git a/lazy_player/file_model.py b/lazy_player/file_model.py index 62c021c..ef640c9 100644 --- a/lazy_player/file_model.py +++ b/lazy_player/file_model.py @@ -21,8 +21,11 @@ class FileItem(GObject.Object): __gtype_name__ = "FileItem" + attrs_changed = GObject.Property(type=int, default=0) + def __init__(self, name: str, file_type: FileType, full_path: str): super().__init__() + self.attrs_changed = 0 self.name = name self.file_type = file_type self.full_path = full_path @@ -62,3 +65,5 @@ class FileItem(GObject.Object): os.setxattr(self.full_path, f"user.lazy_player.{name}", str(value).encode("utf8")) except OSError: pass + + self.notify("attrs-changed")