X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Frtm_view.py;h=aec21a67950fe3f638a5dba43cc971eec5305ea6;hb=9496a423157b21065d644a4b370300257f3e7886;hp=061588b5abe2564f282fa2e894cacd1a233bf3c8;hpb=f2134d114d6ad0bd9025ba7267e304707add9c9f;p=doneit diff --git a/src/rtm_view.py b/src/rtm_view.py index 061588b..aec21a6 100644 --- a/src/rtm_view.py +++ b/src/rtm_view.py @@ -66,6 +66,56 @@ def get_credentials(credentialsDialog): return username, password, token +def item_sort_by_priority_then_date(items): + sortedTasks = list(items) + sortedTasks.sort( + key = lambda taskDetails: ( + taskDetails["priority"].get_nothrow(4), + taskDetails["dueDate"].get_nothrow(datetime.datetime.max), + ), + ) + return sortedTasks + + +def item_sort_by_date_then_priority(items): + sortedTasks = list(items) + sortedTasks.sort( + key = lambda taskDetails: ( + taskDetails["dueDate"].get_nothrow(datetime.datetime.max), + taskDetails["priority"].get_nothrow(4), + ), + ) + return sortedTasks + + +def item_in_agenda(item): + taskDate = item["dueDate"].get_nothrow(datetime.datetime.max) + today = datetime.datetime.now() + delta = taskDate - today + dayDelta = abs(delta.days) + + priority = item["priority"].get_nothrow(4) + weeksVisible = 5 - priority + + isVisible = not bool(dayDelta / (weeksVisible * 7)) + return isVisible + + +def item_agenda_sort_by_date_then_priority(items): + sortedTasks = list(item for item in items if item_in_agenda(item)) + + def advanced_key(taskDetails): + dueDate = taskDetails["dueDate"].get_nothrow(datetime.datetime.max) + priority = taskDetails["priority"].get_nothrow(4) + isNotSameYear = not toolbox.is_same_year(dueDate) + isNotSameMonth = not toolbox.is_same_month(dueDate) + isNotSameDay = not toolbox.is_same_day(dueDate) + return isNotSameDay, isNotSameMonth, isNotSameYear, priority, dueDate + + sortedTasks.sort(key=advanced_key) + return sortedTasks + + class ItemListView(object): ID_IDX = 0 @@ -175,12 +225,16 @@ class ItemListView(object): def _populate_items(self): projId = self._projId - sortedTasks = list(self._manager.get_tasks_with_details(projId)) - sortedTasks.sort(key = lambda taskDetails: (taskDetails["priority"].get_nothrow(1000), taskDetails["dueDate"].get_nothrow(datetime.datetime.max))) + rawTasks = self._manager.get_tasks_with_details(projId) + filteredTasks = ( + taskDetails + for taskDetails in rawTasks + if self._showCompleted and taskDetails["isCompleted"] or self._showIncomplete and not taskDetails["isCompleted"] + ) + sortedTasks = item_sort_by_priority_then_date(filteredTasks) + # sortedTasks = item_sort_by_date_then_priority(filteredTasks) + # sortedTasks = item_agenda_sort_by_date_then_priority(filteredTasks) for taskDetails in sortedTasks: - show = self._showCompleted if taskDetails["isCompleted"] else self._showIncomplete - if not show: - continue id = taskDetails["id"] isCompleted = taskDetails["isCompleted"] name = abbreviate(taskDetails["name"], 100)