Playing with other sorting algorithms and filters
authorEd Page <epage@Dulcinea.(none)>
Thu, 16 Apr 2009 04:34:35 +0000 (23:34 -0500)
committerEd Page <epage@Dulcinea.(none)>
Thu, 16 Apr 2009 04:34:35 +0000 (23:34 -0500)
src/rtm_view.py

index 061588b..aec21a6 100644 (file)
@@ -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)