From 2c912f476d8eb2f04a09d295def45b2d8837bba2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=B3=20Albert=20i=20Beltran?= Date: Wed, 22 May 2024 19:20:52 +0200 Subject: [PATCH] Pending page ordered by priority MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Simó Albert i Beltran --- errands/state.py | 2 ++ errands/widgets/pending/pending_page.py | 27 +++++++++++++++++++ errands/widgets/pending/pending_page_name.py | 8 ++++++ .../widgets/pending/pending_sidebar_row.py | 12 +++++++++ errands/widgets/sidebar.py | 2 ++ errands/widgets/window.py | 7 +++++ 6 files changed, 58 insertions(+) create mode 100644 errands/widgets/pending/pending_page.py create mode 100644 errands/widgets/pending/pending_page_name.py create mode 100644 errands/widgets/pending/pending_sidebar_row.py diff --git a/errands/state.py b/errands/state.py index fb1f9fb6..b365a616 100644 --- a/errands/state.py +++ b/errands/state.py @@ -11,6 +11,7 @@ from errands.application import ErrandsApplication from errands.lib.notifications import ErrandsNotificationsDaemon from errands.widgets.loading_page import ErrandsLoadingPage + from errands.widgets.pending.pending_page import PendingPage from errands.widgets.shared.task_toolbar import ( ErrandsDateTimeWindow, ErrandsAttachmentsWindow, @@ -52,6 +53,7 @@ class State: loading_page: ErrandsLoadingPage | None = None view_stack: Adw.ViewStack | None = None today_page: TodayPage | None = None + pending_page: PendingPage | None = None tags_page: Tags | None = None trash_page: Trash | None = None diff --git a/errands/widgets/pending/pending_page.py b/errands/widgets/pending/pending_page.py new file mode 100644 index 00000000..5624244e --- /dev/null +++ b/errands/widgets/pending/pending_page.py @@ -0,0 +1,27 @@ +# Copyright 2024 Vlad Krupinskii +# SPDX-License-Identifier: MIT + +from gi.repository.GObject import TYPE_INT + +from errands.lib.data import TaskData, UserData +from errands.widgets.base.base_page import BasePage, TaskListView +from errands.widgets.pending.pending_page_name import PendingPageName + + +class PendingPage(PendingPageName, BasePage): + @property + def no_task_message(self) -> str: + return "No Pending Tasks" + + @property + def tasks_data(self) -> list[TaskData]: + return [ + task + for task in UserData.tasks + if not task.deleted and not task.completed and not task.trash + ] + + def sort(self, task1: TaskListView, task2: TaskListView, user_data) -> TYPE_INT: + return (task1.priority if task1.priority else 10) - ( + task2.priority if task2.priority else 10 + ) diff --git a/errands/widgets/pending/pending_page_name.py b/errands/widgets/pending/pending_page_name.py new file mode 100644 index 00000000..b449819f --- /dev/null +++ b/errands/widgets/pending/pending_page_name.py @@ -0,0 +1,8 @@ +# Copyright 2024 Vlad Krupinskii +# SPDX-License-Identifier: MIT + + +class PendingPageName: + @property + def page_name(self) -> str: + return "pending" diff --git a/errands/widgets/pending/pending_sidebar_row.py b/errands/widgets/pending/pending_sidebar_row.py new file mode 100644 index 00000000..734f6f05 --- /dev/null +++ b/errands/widgets/pending/pending_sidebar_row.py @@ -0,0 +1,12 @@ +# Copyright 2024 Vlad Krupinskii +# SPDX-License-Identifier: MIT + + +from errands.widgets.base.base_sidebar_row import BaseSidebarRow +from errands.widgets.pending.pending_page_name import PendingPageName + + +class PendingSidebarRow(PendingPageName, BaseSidebarRow): + @property + def icon_name(self) -> str: + return "errands-priority-set-symbolic" diff --git a/errands/widgets/sidebar.py b/errands/widgets/sidebar.py index 2b7c0972..9a3ae763 100644 --- a/errands/widgets/sidebar.py +++ b/errands/widgets/sidebar.py @@ -10,6 +10,7 @@ from errands.lib.sync.sync import Sync from errands.lib.utils import get_children from errands.state import State +from errands.widgets.pending.pending_sidebar_row import PendingSidebarRow from errands.widgets.shared.components.boxes import ErrandsBox, ErrandsListBox from errands.widgets.shared.components.buttons import ErrandsButton from errands.widgets.shared.components.header_bar import ErrandsHeaderBar @@ -79,6 +80,7 @@ def __build_ui(self) -> None: css_classes=["navigation-sidebar"], children=[ TodaySidebarRow(), + PendingSidebarRow(), TagsSidebarRow(), TrashSidebarRow(), ], diff --git a/errands/widgets/window.py b/errands/widgets/window.py index a8948bea..d425db59 100644 --- a/errands/widgets/window.py +++ b/errands/widgets/window.py @@ -14,6 +14,7 @@ from errands.lib.sync.sync import Sync from errands.state import State from errands.widgets.loading_page import ErrandsLoadingPage +from errands.widgets.pending.pending_page import PendingPage from errands.widgets.preferences import PreferencesWindow from errands.widgets.shared.components.boxes import ErrandsBox from errands.widgets.shared.components.buttons import ErrandsButton @@ -71,6 +72,12 @@ def __build_ui(self) -> None: name=today_page.name, title=_(today_page.title), ) + pending_page = PendingPage() + self.view_stack.add_titled( + child=pending_page, + name=pending_page.name, + title=_(pending_page.title), + ) self.view_stack.add_titled( child=Tags(), name="errands_tags_page", title=_("Tags") )