Sms+

Апрель 13, 2009

Как  я уже писал вот здесь, писать под Symbian на питоне не чуть не сложнее, чем под любую другую ось. Я решил немного копнуть и написать маленькое тестовое приложение. Подумано — сделано. Сначала закралась мысль написать простой поиск по смскам, потом подумал, а почему только по смскам — надо писать поиск так  поиск — по всему телефону, — этакий серч центр, поприкидывал и нашел MobilеSearch, а что программист больше всего не любит делать? — правильно, изобретать велосипед, посему идея была отвергнута. Решил ограничиться простым сортировщиком смскок, того, чего не нашел в мобайл серче, и чего мне очень не хватает…

Как только приходит в голову очередная «гениальная» идея я люблю ее подержать в себе, поносить немного, сделать какие-нибудь действия, связанные с ней косвенно. Например, когда я решил, что мне нужен свой блог, то сначала я решил, что он мне нужен как отдельный домен, потом я долго подбирал имена, и вся эта околопроектная возня мне, обычно, доставляет массу положительных эмоций. Так и тут: решив написать небольшое приложение для своей нокии, я подумал, что оно непременно должно быть опен сорсовым, следовательно, крайне желательно его хранить на какой-нибудь мощной площадке, какой является sourceforge.net, тем более что СФ предоставляет SVN, с которым так дружит EasyEclipse. Регистрация на СФ прошла быстро и в тот же день практически проект был утвержден, было пора садиться писать.

Итак, что должно делать приложение: иметь сортировки по отправителям (в виде Автор:Сообщения), по времени (в виде Сегодня:Сообщения, Вчера:Сообщения и т.д.) и простой поиск по содержанию смскок. Для работы с смсками в питоне для симбиана реализован объект inbox, так как мне нужен доступ к входящим смскам — вызываю функцию inbox.Inbox(). В принципе, все ядро крутится вокруг этого объекта, работа с сообщениями ведется по их иденфтификатору. Вот «ядро» программы для работы с сообщениями:

#получить inbox
def getInbox():
	import inbox
	return inbox.Inbox()

#получить все идшники
def getMessages():
	return getInbox().sms_messages()

#получить автора сообщения
def getAuthor(msg_id):
	return getInbox().address(msg_id)

#получить само сообщение
def getContent(msg_id):
	return getInbox().content(msg_id)

#удалить сообщения
def deleteMesssage(id):
	return getInbox().delete(id)

def deleteMessages(ids):
	for id in ids:
		deleteMesssage(id)

#получить всех авторов и количество сообщений от каждого
def getAuthors():
	dic = {}
	for id in getMessages():
		author = getAuthor(id)
		if dic.has_key(author):
			dic[author] += 1
		else: dic[author] = 1

	return [(author, count) for author, count in dic.iteritems()]

#получить список сообщений для автора
def getMessagesByAuthors(authorCriteria):
	res = []
	for id in getMessages():
		author = getAuthor(id)
		if authorCriteria == author:
			res.append(id)
	return res

#удалить все сообщения от автора
def deleteAuthorMesssage(author):
	deleteMessages(getMessagesByAuthors(author))

#получить сообщения в заданном временном интервале
def getMessagesByDates(start, stop=None):
	res = []

	import time
	messages = getMessages()
	for msg_id in messages:
		msg_time = getInbox().time(msg_id)
		if msg_time >= start and not stop:
			res.append(msg_id)
		elif stop and msg_time>= start and msg_time <= stop:
			res.append(msg_id)

	return res

#поиск по строке
def search(text):
	res = []
	for id in getMessages():
		if getContent(id).lower().find(text.lower()) != -1:
			res.append(id)
	return res

Осталось все это оформить в UI, но это тема, которая нуждается в отдельном посте.
Кстати, проект доступен для подключения по SVN на СФ, страница самого проекта.

tags: ,
posted in Python, Sms+, Symbian by dmitko

8 Comments to "Sms+"

  1. Виктория wrote:

    Старая темка, я у себя надевно запостила, но потом бросила. лето, не хочется за компьютером сидеть.

  2. GarykPatton wrote:

    How soon will you update your blog? I’m interested in reading some more information on this issue.

  3. dmitko wrote:

    Really? Currently I’m into another project for Symbian — what are you interested in exacly?

  4. Жека wrote:

    ЕПТИ СПС ОГРОМНОЕ.

  5. Скворецкий wrote:

    Теперь мне стало всё ясно, благодарю за нужную информацию.

  6. Митя wrote:

    Здесь не может быть ошибки?

  7. dmitko wrote:

    в каком месте?

  8. чaтЪлaн4ик wrote:

    Да уж… :) Вы бы знали что про Вас пишут в других блогах :)

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org