Added sorting to the recent view
authorepage <eopage@byu.net>
Tue, 19 May 2009 00:03:46 +0000 (00:03 +0000)
committerepage <eopage@byu.net>
Tue, 19 May 2009 00:03:46 +0000 (00:03 +0000)
git-svn-id: file:///svnroot/gc-dialer/trunk@289 c39d3808-3fe2-4d86-a59f-b7f623ee9f21

src/gc_views.py
src/gv_backend.py

index 4215d3a..c6ef32f 100644 (file)
@@ -602,7 +602,6 @@ class RecentCallsView(object):
                        self._recenttime = 0.0
                        recentItems = []
 
-               # @todo Sort these
                for personsName, phoneNumber, date, action in recentItems:
                        description = "%s on %s from/to %s - %s" % (action.capitalize(), date, personsName, phoneNumber)
                        item = (phoneNumber, description)
index ad9de51..f78c9b2 100644 (file)
@@ -31,6 +31,7 @@ import re
 import urllib
 import urllib2
 import time
+import datetime
 import warnings
 import traceback
 from xml.sax import saxutils
@@ -282,32 +283,16 @@ class GVDialer(object):
 
        def get_recent(self):
                """
+               @todo Sort this stuff
                @returns Iterable of (personsName, phoneNumber, date, action)
                """
-               for url in (
-                       self._receivedCallsURL,
-                       self._missedCallsURL,
-                       self._placedCallsURL,
-               ):
-                       try:
-                               flatXml = self._browser.download(url)
-                       except urllib2.URLError, e:
-                               warnings.warn(traceback.format_exc())
-                               raise RuntimeError("%s is not accesible" % self._clicktocallURL)
-
-                       allRecentData = self._grab_json(flatXml)
-                       for recentCallData in allRecentData["messages"].itervalues():
-                               number = recentCallData["displayNumber"]
-                               date = recentCallData["relativeStartTime"]
-                               action = ", ".join((
-                                       label.title()
-                                       for label in recentCallData["labels"]
-                                               if label.lower() != "all" and label.lower() != "inbox"
-                               ))
-                               number = saxutils.unescape(number)
-                               date = saxutils.unescape(date)
-                               action = saxutils.unescape(action)
-                               yield "", number, date, action
+               sortedRecent = [
+                       (exactDate, name, number, relativeDate, action)
+                       for (name, number, exactDate, relativeDate, action) in self._get_recent()
+               ]
+               sortedRecent.sort(reverse = True)
+               for exactDate, name, number, relativeDate, action in sortedRecent:
+                       yield name, number, relativeDate, action
 
        def get_addressbooks(self):
                """
@@ -426,6 +411,38 @@ class GVDialer(object):
                        callbackName = match.group(1)
                        self._callbackNumbers[callbackNumber] = callbackName
 
+       def _get_recent(self):
+               """
+               @returns Iterable of (personsName, phoneNumber, exact date, relative date, action)
+               """
+               for url in (
+                       self._receivedCallsURL,
+                       self._missedCallsURL,
+                       self._placedCallsURL,
+               ):
+                       try:
+                               flatXml = self._browser.download(url)
+                       except urllib2.URLError, e:
+                               warnings.warn(traceback.format_exc())
+                               raise RuntimeError("%s is not accesible" % self._clicktocallURL)
+
+                       allRecentData = self._grab_json(flatXml)
+                       for recentCallData in allRecentData["messages"].itervalues():
+                               number = recentCallData["displayNumber"]
+                               exactDate = recentCallData["displayStartDateTime"]
+                               relativeDate = recentCallData["relativeStartTime"]
+                               action = ", ".join((
+                                       label.title()
+                                       for label in recentCallData["labels"]
+                                               if label.lower() != "all" and label.lower() != "inbox"
+                               ))
+                               number = saxutils.unescape(number)
+                               exactDate = saxutils.unescape(exactDate)
+                               exactDate = datetime.datetime.strptime(exactDate, "%m/%d/%y %I:%M %p")
+                               relativeDate = saxutils.unescape(relativeDate)
+                               action = saxutils.unescape(action)
+                               yield "", number, exactDate, relativeDate, action
+
 
 def test_backend(username, password):
        import pprint