From 9496a423157b21065d644a4b370300257f3e7886 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Wed, 15 Apr 2009 23:34:35 -0500 Subject: [PATCH] Playing with other sorting algorithms and filters --- src/rtm_view.py | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 59 insertions(+), 5 deletions(-) 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) -- 1.7.9.5