Skip to content

Commit

Permalink
All tasks page with filters
Browse files Browse the repository at this point in the history
Co-authored-by: Vlad Krupinskii <[email protected]>
Signed-off-by: Simó Albert i Beltran <[email protected]>
  • Loading branch information
sim6 and mrvladus committed May 25, 2024
1 parent f814423 commit 98de6ef
Show file tree
Hide file tree
Showing 17 changed files with 354 additions and 161 deletions.
4 changes: 4 additions & 0 deletions data/icons/hicolor/symbolic/apps/errands-search-symbolic.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion data/resources/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@
border-radius: 12px;
}

.transparent {
.transparent, .transparent row:hover {
background-color: transparent;
}

Expand Down
4 changes: 2 additions & 2 deletions errands/lib/sync/providers/caldav.py
Original file line number Diff line number Diff line change
Expand Up @@ -202,8 +202,8 @@ def __finish_sync(self) -> None:
if self.update_ui_args.update_trash:
State.trash_sidebar_row.update_ui()

if State.view_stack.get_visible_child_name() == "errands_today_page":
State.today_page.update_ui()
if State.view_stack.get_visible_child_name() == "errands_tasks_page":
State.tasks_page.update_ui()

def sync(self) -> None:
Log.info("Sync: Sync tasks with remote")
Expand Down
2 changes: 1 addition & 1 deletion errands/lib/sync/sync.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def sync(self) -> None:
State.view_stack.get_visible_child_name() == "errands_syncing_page"
and UserData.task_lists
):
State.view_stack.set_visible_child_name("errands_today_page")
State.view_stack.set_visible_child_name("errands_tasks_page")

# TODO: Needs to be threaded to not block UI
@classmethod
Expand Down
12 changes: 6 additions & 6 deletions errands/state.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@
from errands.widgets.tags.tags_sidebar_row import TagsSidebarRow
from errands.widgets.task import Task
from errands.widgets.task_list.task_list import TaskList
from errands.widgets.today.today import Today
from errands.widgets.today.today_sidebar_row import TodaySidebarRow
from errands.widgets.today.today_task import TodayTask
from errands.widgets.tasks.tasks_page import TasksPage
from errands.widgets.tasks.tasks_sidebar_row import TasksSidebarRow
from errands.widgets.tasks.tasks_task import TasksTask
from errands.widgets.trash.trash import Trash
from errands.widgets.trash.trash_sidebar_row import TrashSidebarRow
from errands.widgets.window import Window
Expand Down Expand Up @@ -51,13 +51,13 @@ class State:
# View Stack
loading_page: ErrandsLoadingPage | None = None
view_stack: Adw.ViewStack | None = None
today_page: Today | None = None
tasks_page: TasksPage | None = None
tags_page: Tags | None = None
trash_page: Trash | None = None

# Sidebar
sidebar: Sidebar | None = None
today_sidebar_row: TodaySidebarRow | None = None
tasks_sidebar_row: TasksSidebarRow | None = None
tags_sidebar_row: TagsSidebarRow | None = None
trash_sidebar_row: TrashSidebarRow | None = None

Expand Down Expand Up @@ -111,7 +111,7 @@ def get_task(cls, list_uid: str, uid: str) -> Task:
return task

@classmethod
def get_today_task(cls, list_uid: str, uid: str) -> TodayTask | None:
def get_today_task(cls, list_uid: str, uid: str) -> TasksTask | None:
for task in cls.today_page.tasks:
if task.list_uid == list_uid and task.uid == uid:
return task
Expand Down
6 changes: 3 additions & 3 deletions errands/widgets/shared/task_toolbar/datetime_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

if TYPE_CHECKING:
from errands.widgets.task import Task
from errands.widgets.today.today_task import TodayTask
from errands.widgets.tasks.tasks_task import TasksTask


class ErrandsDateTimeWindow(Adw.Dialog):
Expand Down Expand Up @@ -76,7 +76,7 @@ def __build_ui(self) -> None:

# ------ PUBLIC METHODS ------ #

def show(self, task: Task | TodayTask):
def show(self, task: Task | TasksTask):
self.task = task
self.start_date_time.datetime = self.task.task_data.start_date
self.due_date_time.datetime = self.task.task_data.due_date
Expand All @@ -98,6 +98,6 @@ def do_closed(self):
)
changed = True

State.today_page.update_ui()
State.tasks_page.update_ui()
if changed:
Sync.sync()
6 changes: 3 additions & 3 deletions errands/widgets/sidebar.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
from errands.widgets.tags.tags_sidebar_row import TagsSidebarRow
from errands.widgets.task_list.task_list import TaskList
from errands.widgets.task_list.task_list_sidebar_row import TaskListSidebarRow
from errands.widgets.today.today_sidebar_row import TodaySidebarRow
from errands.widgets.tasks.tasks_sidebar_row import TasksSidebarRow
from errands.widgets.trash.trash_sidebar_row import TrashSidebarRow


Expand Down Expand Up @@ -78,7 +78,7 @@ def __build_ui(self) -> None:
selection_mode=Gtk.SelectionMode.SINGLE,
css_classes=["navigation-sidebar"],
children=[
TodaySidebarRow(),
TasksSidebarRow(),
TagsSidebarRow(),
TrashSidebarRow(),
],
Expand Down Expand Up @@ -170,7 +170,7 @@ def remove_task_list(self, row: TaskListSidebarRow) -> None:
State.view_stack.remove(row.task_list)
self.list_box.remove(row)
State.trash_sidebar_row.update_ui()
State.today_page.update_ui()
State.tasks_page.update_ui()
self.update_status()

def __select_last_opened_item(self) -> None:
Expand Down
4 changes: 2 additions & 2 deletions errands/widgets/task.py
Original file line number Diff line number Diff line change
Expand Up @@ -483,7 +483,7 @@ def delete(self, *_) -> None:
self.toggle_visibility(False)
self.update_props(["trash"], [True])
self.complete_btn.set_active(True)
State.today_page.update_ui()
State.tasks_page.update_ui()
State.trash_sidebar_row.update_ui()
State.tags_page.update_ui()
self.task_list.update_title()
Expand Down Expand Up @@ -718,7 +718,7 @@ def _on_complete_btn_toggled(self, btn: Gtk.CheckButton) -> None:

self.update_title()
self.update_progress_bar()
State.today_page.update_status()
State.tasks_page.update_status()
if self.can_sync:
Sync.sync()

Expand Down
2 changes: 1 addition & 1 deletion errands/widgets/task_list/task_list_sidebar_row.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ def _confirm(_, res, entry: Gtk.Entry):
UserData.update_list_props(self.uid, ["name", "synced"], [text, False])
self.update_ui()
State.trash_sidebar_row.update_ui()
State.today_sidebar_row.update_ui()
State.tasks_sidebar_row.update_ui()
Sync.sync()

entry: Gtk.Entry = Gtk.Entry(placeholder_text=_("New Name"))
Expand Down
31 changes: 31 additions & 0 deletions errands/widgets/tasks/task_data_list_view.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Copyright 2024 Vlad Krupinskii <[email protected]>
# SPDX-License-Identifier: MIT


from gi.repository import Adw, Gio, GObject, Gtk


class SingletonMeta(type(GObject.GObject)):
_instances = {}

def __call__(cls, task_data, *args, **kwargs):
if task_data.uid not in cls._instances:
cls._instances[task_data.uid] = super(SingletonMeta, cls).__call__(
task_data, *args, **kwargs
)
return cls._instances[task_data.uid]


class TaskDataListView(GObject.GObject, metaclass=SingletonMeta):
def __init__(self, source):
super().__init__()
self._source = source

def __getattr__(self, name):
return getattr(self._source, name)

def __setattr__(self, name, value):
if name == "_source":
self.__dict__[name] = value
else:
setattr(self._source, name, value)
Loading

0 comments on commit 98de6ef

Please sign in to comment.