SMS Inbox statistics for Series 60 mobile phones v0.2
Update: New version
Improvements in the new version:
- Previous version hung up while calculating the statistics. The new version dispatches a thread for the dirty work and keeps the user interface responsive with a “Processing” notification.
- Contact stats are sorted in descending order by the number of messages per each contact.
- Code improvements for making it more “Pythonic”.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | # -*- coding: utf-8 -*- """Script for printing trivial statistics about inbox, such as: Number of texts Number of unique contacts who sent the texts Number of texts sent by respective contacts """ __author__ = "Kamran Riaz Khan" __email__ = "krkhan@inspirated.com" __version__ = "0.2" __copyright__ = "Copyright (c) 2009 Kamran Riaz Khan" __license__ = "Python" __status__ = "Production" import appuifw, e32, inbox, thread def exit_key_handler(): "Release app_lock." app_lock.signal() def parse_inbox_stats(stats): """Parse the inbox statistics, Updates the stats dictionary with: sms-count : Number of texts sms-contacts: List of tuples with following pairs: Name of contact, Number of corresponding (ordered according to decreasing number of texts)""" curr_inbox = inbox.Inbox() messages = curr_inbox.sms_messages() contacts = {} for i in messages: address = curr_inbox.address(i) if contacts.has_key(address): contacts[address] = contacts[address] + 1 else: contacts[address] = 1 contacts = contacts.items() contacts.sort(lambda x, y: cmp(x[1], y[1])) contacts.reverse() stats["sms-count"] = len(messages) stats["sms-contacts"] = contacts def print_inbox_stats(content, stats): """Print inbox stats in the content Text field, Remembers the cursor position of Text before the call and points at it again after updating the content.""" pos = content.get_pos() statsmap = [ (u"SMS Count", unicode(stats["sms-count"])), (u"Unique Contacts", unicode(len(stats["sms-contacts"]))), (u"", u"") ] statsmap += [(k, unicode(v)) for k, v in stats["sms-contacts"]] for i in statsmap: content.style = appuifw.STYLE_BOLD content.add(i[0] + (i[0] and u": " or u"")) content.style = 0 content.add(i[1] + u"n") content.set_pos(pos) if __name__ == "__main__": content = appuifw.Text() appuifw.app.title = u'Inbox Stats' appuifw.app.body = content appuifw.app.exit_key_handler = exit_key_handler stats = {} t = thread.start_new_thread(parse_inbox_stats, (stats,)) content.style = appuifw.STYLE_ITALIC content.add(u"Processing text messages...n") thread.ao_waittid(t) content.add(u"Done!nn") content.style = 0 print_inbox_stats(content, stats) app_lock = e32.Ao_lock() app_lock.wait() |