Prepare for py3 port.

This commit is contained in:
Bill Dengler 2017-06-15 22:11:31 +00:00
parent d0290b4d61
commit e85c9b5af0
81 changed files with 7701 additions and 7133 deletions

View File

@ -4,11 +4,11 @@ import platform
if platform.system() == "Windows": if platform.system() == "Windows":
import wx import wx
from wxUI import buffers, dialogs, commonMessageDialogs, menus from wxUI import buffers, dialogs, commonMessageDialogs, menus
import user from . import user
elif platform.system() == "Linux": elif platform.system() == "Linux":
from gi.repository import Gtk from gi.repository import Gtk
from gtkUI import buffers, dialogs, commonMessageDialogs from gtkUI import buffers, dialogs, commonMessageDialogs
import messages from . import messages
import widgetUtils import widgetUtils
import arrow import arrow
import webbrowser import webbrowser
@ -89,11 +89,11 @@ class bufferController(object):
def start_stream(self, mandatory=False): def start_stream(self, mandatory=False):
if mandatory == True: if mandatory == True:
output.speak(_(u"Unable to update this buffer.")) output.speak(_("Unable to update this buffer."))
pass pass
def get_more_items(self): def get_more_items(self):
output.speak(_(u"This action is not supported for this buffer"), True) output.speak(_("This action is not supported for this buffer"), True)
def put_items_on_list(self, items): def put_items_on_list(self, items):
pass pass
@ -134,8 +134,8 @@ class bufferController(object):
pass pass
def post_tweet(self, *args, **kwargs): def post_tweet(self, *args, **kwargs):
title = _(u"Tweet") title = _("Tweet")
caption = _(u"Write the tweet here") caption = _("Write the tweet here")
tweet = messages.tweet(self.session, title, caption, "") tweet = messages.tweet(self.session, title, caption, "")
if tweet.message.get_response() == widgetUtils.OK: if tweet.message.get_response() == widgetUtils.OK:
text = tweet.message.get_text() text = tweet.message.get_text()
@ -268,7 +268,7 @@ class baseBufferController(bufferController):
tweetsList = [] tweetsList = []
tweet_id = tweet["id"] tweet_id = tweet["id"]
message = None message = None
if tweet.has_key("message"): if "message" in tweet:
message = tweet["message"] message = tweet["message"]
try: try:
tweet = self.session.twitter.twitter.show_status(id=tweet_id, include_ext_alt_text=True, tweet_mode="extended") tweet = self.session.twitter.twitter.show_status(id=tweet_id, include_ext_alt_text=True, tweet_mode="extended")
@ -350,7 +350,7 @@ class baseBufferController(bufferController):
# self.buffer.list.select_item(selection+elements) # self.buffer.list.select_item(selection+elements)
# else: # else:
self.buffer.list.select_item(selection) self.buffer.list.select_item(selection)
output.speak(_(u"%s items retrieved") % (str(len(elements))), True) output.speak(_("%s items retrieved") % (str(len(elements))), True)
def remove_buffer(self, force=False): def remove_buffer(self, force=False):
if "-timeline" in self.name: if "-timeline" in self.name:
@ -362,7 +362,7 @@ class baseBufferController(bufferController):
if self.name[:-9] in self.session.settings["other_buffers"]["timelines"]: if self.name[:-9] in self.session.settings["other_buffers"]["timelines"]:
self.session.settings["other_buffers"]["timelines"].remove(self.name[:-9]) self.session.settings["other_buffers"]["timelines"].remove(self.name[:-9])
self.session.settings.write() self.session.settings.write()
if self.session.db.has_key(self.name): if self.name in self.session.db:
self.session.db.pop(self.name) self.session.db.pop(self.name)
return True return True
elif dlg == widgetUtils.NO: elif dlg == widgetUtils.NO:
@ -375,19 +375,19 @@ class baseBufferController(bufferController):
if dlg == widgetUtils.YES: if dlg == widgetUtils.YES:
if self.name[:-9] in self.session.settings["other_buffers"]["favourites_timelines"]: if self.name[:-9] in self.session.settings["other_buffers"]["favourites_timelines"]:
self.session.settings["other_buffers"]["favourites_timelines"].remove(self.name[:-9]) self.session.settings["other_buffers"]["favourites_timelines"].remove(self.name[:-9])
if self.session.db.has_key(self.name): if self.name in self.session.db:
self.session.db.pop(self.name) self.session.db.pop(self.name)
self.session.settings.write() self.session.settings.write()
return True return True
elif dlg == widgetUtils.NO: elif dlg == widgetUtils.NO:
return False return False
else: else:
output.speak(_(u"This buffer is not a timeline; it can't be deleted."), True) output.speak(_("This buffer is not a timeline; it can't be deleted."), True)
return False return False
def remove_tweet(self, id): def remove_tweet(self, id):
if type(self.session.db[self.name]) == dict: return if isinstance(self.session.db[self.name], dict): return
for i in xrange(0, len(self.session.db[self.name])): for i in range(0, len(self.session.db[self.name])):
if self.session.db[self.name][i]["id"] == id: if self.session.db[self.name][i]["id"] == id:
self.session.db[self.name].pop(i) self.session.db[self.name].pop(i)
self.remove_item(i) self.remove_item(i)
@ -493,7 +493,7 @@ class baseBufferController(bufferController):
self.show_menu(widgetUtils.MENU, pos=self.buffer.list.list.GetPosition()) self.show_menu(widgetUtils.MENU, pos=self.buffer.list.list.GetPosition())
def get_tweet(self): def get_tweet(self):
if self.session.db[self.name][self.buffer.list.get_selected()].has_key("retweeted_status"): if "retweeted_status" in self.session.db[self.name][self.buffer.list.get_selected()]:
tweet = self.session.db[self.name][self.buffer.list.get_selected()]["retweeted_status"] tweet = self.session.db[self.name][self.buffer.list.get_selected()]["retweeted_status"]
else: else:
tweet = self.session.db[self.name][self.buffer.list.get_selected()] tweet = self.session.db[self.name][self.buffer.list.get_selected()]
@ -508,7 +508,7 @@ class baseBufferController(bufferController):
tweet = self.get_right_tweet() tweet = self.get_right_tweet()
screen_name = tweet["user"]["screen_name"] screen_name = tweet["user"]["screen_name"]
id = tweet["id"] id = tweet["id"]
twishort_enabled = tweet.has_key("twishort") twishort_enabled = "twishort" in tweet
users = utils.get_all_mentioned(tweet, self.session.db, field="screen_name") users = utils.get_all_mentioned(tweet, self.session.db, field="screen_name")
ids = utils.get_all_mentioned(tweet, self.session.db, field="id_str") ids = utils.get_all_mentioned(tweet, self.session.db, field="id_str")
# Build the window title # Build the window title
@ -516,7 +516,7 @@ class baseBufferController(bufferController):
title=_("Reply to {arg0}").format(arg0=screen_name) title=_("Reply to {arg0}").format(arg0=screen_name)
else: else:
title=_("Reply") title=_("Reply")
message = messages.reply(self.session, title, _(u"Reply to %s") % (screen_name,), "", users=users, ids=ids) message = messages.reply(self.session, title, _("Reply to %s") % (screen_name,), "", users=users, ids=ids)
if message.message.get_response() == widgetUtils.OK: if message.message.get_response() == widgetUtils.OK:
params = {"_sound": "reply_send.ogg", "in_reply_to_status_id": id,} params = {"_sound": "reply_send.ogg", "in_reply_to_status_id": id,}
text = message.message.get_text() text = message.message.get_text()
@ -526,7 +526,7 @@ class baseBufferController(bufferController):
params["auto_populate_reply_metadata"] =True params["auto_populate_reply_metadata"] =True
else: else:
mentioned_people = message.get_people() mentioned_people = message.get_people()
text = "@"+screen_name+" "+mentioned_people+u" "+text text = "@"+screen_name+" "+mentioned_people+" "+text
if len(text) > 280 and message.message.get("long_tweet") == True: if len(text) > 280 and message.message.get("long_tweet") == True:
if message.image == None: if message.image == None:
text = twishort.create_tweet(self.session.settings["twitter"]["user_key"], self.session.settings["twitter"]["user_secret"], text) text = twishort.create_tweet(self.session.settings["twitter"]["user_key"], self.session.settings["twitter"]["user_secret"], text)
@ -554,7 +554,7 @@ class baseBufferController(bufferController):
else: else:
screen_name = tweet["user"]["screen_name"] screen_name = tweet["user"]["screen_name"]
users = utils.get_all_users(tweet, self.session.db) users = utils.get_all_users(tweet, self.session.db)
dm = messages.dm(self.session, _(u"Direct message to %s") % (screen_name,), _(u"New direct message"), users) dm = messages.dm(self.session, _("Direct message to %s") % (screen_name,), _("New direct message"), users)
if dm.message.get_response() == widgetUtils.OK: if dm.message.get_response() == widgetUtils.OK:
val = self.session.api_call(call_name="send_direct_message", text=dm.message.get_text(), screen_name=dm.message.get("cb")) val = self.session.api_call(call_name="send_direct_message", text=dm.message.get_text(), screen_name=dm.message.get("cb"))
if val != None: if val != None:
@ -581,11 +581,11 @@ class baseBufferController(bufferController):
self._retweet_with_comment(tweet, id) self._retweet_with_comment(tweet, id)
def _retweet_with_comment(self, tweet, id, comment=''): def _retweet_with_comment(self, tweet, id, comment=''):
if tweet.has_key("full_text"): if "full_text" in tweet:
comments = tweet["full_text"] comments = tweet["full_text"]
else: else:
comments = tweet["text"] comments = tweet["text"]
retweet = messages.tweet(self.session, _(u"Quote"), _(u"Add your comment to the tweet"), u"“@%s: %s" % (tweet["user"]["screen_name"], comments), max=256, messageType="retweet") retweet = messages.tweet(self.session, _("Quote"), _("Add your comment to the tweet"), "“@%s: %s" % (tweet["user"]["screen_name"], comments), max=256, messageType="retweet")
if comment != '': if comment != '':
retweet.message.set_text(comment) retweet.message.set_text(comment)
if retweet.message.get_response() == widgetUtils.OK: if retweet.message.get_response() == widgetUtils.OK:
@ -650,7 +650,7 @@ class baseBufferController(bufferController):
if hasattr(urls_list, "destroy"): urls_list.destroy() if hasattr(urls_list, "destroy"): urls_list.destroy()
if url != '': if url != '':
if announce: if announce:
output.speak(_(u"Opening URL..."), True) output.speak(_("Opening URL..."), True)
webbrowser.open_new_tab(url) webbrowser.open_new_tab(url)
def clear_list(self): def clear_list(self):
@ -685,7 +685,7 @@ class baseBufferController(bufferController):
users = [tweet["screen_name"]] users = [tweet["screen_name"]]
else: else:
users = utils.get_all_users(tweet, self.session.db) users = utils.get_all_users(tweet, self.session.db)
dlg = dialogs.utils.selectUserDialog(title=_(u"User details"), users=users) dlg = dialogs.utils.selectUserDialog(title=_("User details"), users=users)
if dlg.get_response() == widgetUtils.OK: if dlg.get_response() == widgetUtils.OK:
user.profileController(session=self.session, user=dlg.get_user()) user.profileController(session=self.session, user=dlg.get_user())
if hasattr(dlg, "destroy"): dlg.destroy() if hasattr(dlg, "destroy"): dlg.destroy()
@ -738,7 +738,7 @@ class listBufferController(baseBufferController):
if dlg == widgetUtils.YES: if dlg == widgetUtils.YES:
if self.name[:-5] in self.session.settings["other_buffers"]["lists"]: if self.name[:-5] in self.session.settings["other_buffers"]["lists"]:
self.session.settings["other_buffers"]["lists"].remove(self.name[:-5]) self.session.settings["other_buffers"]["lists"].remove(self.name[:-5])
if self.session.db.has_key(self.name): if self.name in self.session.db:
self.session.db.pop(self.name) self.session.db.pop(self.name)
self.session.settings.write() self.session.settings.write()
return True return True
@ -760,7 +760,7 @@ class eventsBufferController(bufferController):
self.get_formatted_message = self.get_message self.get_formatted_message = self.get_message
def get_message(self): def get_message(self):
if self.buffer.list.get_count() == 0: return _(u"Empty") if self.buffer.list.get_count() == 0: return _("Empty")
# fix this: # fix this:
return "%s. %s" % (self.buffer.list.list.GetItemText(self.buffer.list.get_selected()), self.buffer.list.list.GetItemText(self.buffer.list.get_selected(), 1)) return "%s. %s" % (self.buffer.list.list.GetItemText(self.buffer.list.get_selected()), self.buffer.list.list.GetItemText(self.buffer.list.get_selected(), 1))
@ -825,7 +825,7 @@ class peopleBufferController(baseBufferController):
if dlg == widgetUtils.YES: if dlg == widgetUtils.YES:
if self.name[:-10] in self.session.settings["other_buffers"]["followers_timelines"]: if self.name[:-10] in self.session.settings["other_buffers"]["followers_timelines"]:
self.session.settings["other_buffers"]["followers_timelines"].remove(self.name[:-10]) self.session.settings["other_buffers"]["followers_timelines"].remove(self.name[:-10])
if self.session.db.has_key(self.name): if self.name in self.session.db:
self.session.db.pop(self.name) self.session.db.pop(self.name)
self.session.settings.write() self.session.settings.write()
return True return True
@ -839,14 +839,14 @@ class peopleBufferController(baseBufferController):
if dlg == widgetUtils.YES: if dlg == widgetUtils.YES:
if self.name[:-8] in self.session.settings["other_buffers"]["friends_timelines"]: if self.name[:-8] in self.session.settings["other_buffers"]["friends_timelines"]:
self.session.settings["other_buffers"]["friends_timelines"].remove(self.name[:-8]) self.session.settings["other_buffers"]["friends_timelines"].remove(self.name[:-8])
if self.session.db.has_key(self.name): if self.name in self.session.db:
self.session.db.pop(self.name) self.session.db.pop(self.name)
self.session.settings.write() self.session.settings.write()
return True return True
elif dlg == widgetUtils.NO: elif dlg == widgetUtils.NO:
return False return False
else: else:
output.speak(_(u"This buffer is not a timeline; it can't be deleted."), True) output.speak(_("This buffer is not a timeline; it can't be deleted."), True)
return False return False
def onFocus(self, ev): def onFocus(self, ev):
@ -861,7 +861,7 @@ class peopleBufferController(baseBufferController):
def reply(self, *args, **kwargs): def reply(self, *args, **kwargs):
tweet = self.get_right_tweet() tweet = self.get_right_tweet()
screen_name = tweet["screen_name"] screen_name = tweet["screen_name"]
message = messages.reply(self.session, _(u"Mention"), _(u"Mention to %s") % (screen_name,), "@%s " % (screen_name,), [screen_name,]) message = messages.reply(self.session, _("Mention"), _("Mention to %s") % (screen_name,), "@%s " % (screen_name,), [screen_name,])
if message.message.get_response() == widgetUtils.OK: if message.message.get_response() == widgetUtils.OK:
if message.image == None: if message.image == None:
call_threaded(self.session.api_call, call_name="update_status", _sound="reply_send.ogg", status=message.message.get_text()) call_threaded(self.session.api_call, call_name="update_status", _sound="reply_send.ogg", status=message.message.get_text())
@ -908,7 +908,7 @@ class peopleBufferController(baseBufferController):
# self.buffer.list.select_item(selection) # self.buffer.list.select_item(selection)
# else: # else:
# self.buffer.list.select_item(selection-elements) # self.buffer.list.select_item(selection-elements)
output.speak(_(u"%s items retrieved") % (len(items)), True) output.speak(_("%s items retrieved") % (len(items)), True)
def put_items_on_list(self, number_of_items): def put_items_on_list(self, number_of_items):
log.debug("The list contains %d items" % (self.buffer.list.get_count(),)) log.debug("The list contains %d items" % (self.buffer.list.get_count(),))
@ -997,7 +997,7 @@ class searchBufferController(baseBufferController):
if self.name[:-11] in self.session.settings["other_buffers"]["tweet_searches"]: if self.name[:-11] in self.session.settings["other_buffers"]["tweet_searches"]:
self.session.settings["other_buffers"]["tweet_searches"].remove(self.name[:-11]) self.session.settings["other_buffers"]["tweet_searches"].remove(self.name[:-11])
self.session.settings.write() self.session.settings.write()
if self.session.db.has_key(self.name): if self.name in self.session.db:
self.session.db.pop(self.name) self.session.db.pop(self.name)
return True return True
elif dlg == widgetUtils.NO: elif dlg == widgetUtils.NO:
@ -1034,7 +1034,7 @@ class searchBufferController(baseBufferController):
# self.buffer.list.select_item(selection+elements) # self.buffer.list.select_item(selection+elements)
# else: # else:
self.buffer.list.select_item(selection) self.buffer.list.select_item(selection)
output.speak(_(u"%s items retrieved") % (str(len(elements))), True) output.speak(_("%s items retrieved") % (str(len(elements))), True)
class searchPeopleBufferController(peopleBufferController): class searchPeopleBufferController(peopleBufferController):
@ -1046,7 +1046,7 @@ class searchPeopleBufferController(peopleBufferController):
self.args = args self.args = args
self.kwargs = kwargs self.kwargs = kwargs
self.function = function self.function = function
if self.kwargs.has_key("page") == False: if ("page" in self.kwargs) == False:
self.kwargs["page"] = 1 self.kwargs["page"] = 1
def start_stream(self, mandatory=False): def start_stream(self, mandatory=False):
@ -1094,7 +1094,7 @@ class searchPeopleBufferController(peopleBufferController):
# self.buffer.list.select_item(selection) # self.buffer.list.select_item(selection)
# else: # else:
# self.buffer.list.select_item(selection-elements) # self.buffer.list.select_item(selection-elements)
output.speak(_(u"%s items retrieved") % (len(items)), True) output.speak(_("%s items retrieved") % (len(items)), True)
def remove_buffer(self, force=False): def remove_buffer(self, force=False):
@ -1106,7 +1106,7 @@ class searchPeopleBufferController(peopleBufferController):
if self.name[:-11] in self.session.settings["other_buffers"]["tweet_searches"]: if self.name[:-11] in self.session.settings["other_buffers"]["tweet_searches"]:
self.session.settings["other_buffers"]["tweet_searches"].remove(self.name[:-11]) self.session.settings["other_buffers"]["tweet_searches"].remove(self.name[:-11])
self.session.settings.write() self.session.settings.write()
if self.session.db.has_key(self.name): if self.name in self.session.db:
self.session.db.pop(self.name) self.session.db.pop(self.name)
return True return True
elif dlg == widgetUtils.NO: elif dlg == widgetUtils.NO:
@ -1179,7 +1179,7 @@ class trendsBufferController(bufferController):
if self.name[:-3] in self.session.settings["other_buffers"]["trending_topic_buffers"]: if self.name[:-3] in self.session.settings["other_buffers"]["trending_topic_buffers"]:
self.session.settings["other_buffers"]["trending_topic_buffers"].remove(self.name[:-3]) self.session.settings["other_buffers"]["trending_topic_buffers"].remove(self.name[:-3])
self.session.settings.write() self.session.settings.write()
if self.session.db.has_key(self.name): if self.name in self.session.db:
self.session.db.pop(self.name) self.session.db.pop(self.name)
return True return True
elif dlg == widgetUtils.NO: elif dlg == widgetUtils.NO:
@ -1211,8 +1211,8 @@ class trendsBufferController(bufferController):
def tweet_about_this_trend(self, *args, **kwargs): def tweet_about_this_trend(self, *args, **kwargs):
if self.buffer.list.get_count() == 0: return if self.buffer.list.get_count() == 0: return
title = _(u"Tweet") title = _("Tweet")
caption = _(u"Write the tweet here") caption = _("Write the tweet here")
tweet = messages.tweet(self.session, title, caption, self.get_message()+ " ") tweet = messages.tweet(self.session, title, caption, self.get_message()+ " ")
tweet.message.set_cursor_at_end() tweet.message.set_cursor_at_end()
if tweet.message.get_response() == widgetUtils.OK: if tweet.message.get_response() == widgetUtils.OK:
@ -1276,7 +1276,7 @@ class conversationBufferController(searchBufferController):
else: else:
dlg = widgetUtils.YES dlg = widgetUtils.YES
if dlg == widgetUtils.YES: if dlg == widgetUtils.YES:
if self.session.db.has_key(self.name): if self.name in self.session.db:
self.session.db.pop(self.name) self.session.db.pop(self.name)
return True return True
elif dlg == widgetUtils.NO: elif dlg == widgetUtils.NO:

View File

@ -5,22 +5,22 @@ import application
if system == "Windows": if system == "Windows":
from update import updater from update import updater
from wxUI import (view, dialogs, commonMessageDialogs, sysTrayIcon) from wxUI import (view, dialogs, commonMessageDialogs, sysTrayIcon)
import settings from . import settings
from extra import SoundsTutorial, ocr from extra import SoundsTutorial, ocr
import keystrokeEditor import keystrokeEditor
from keyboard_handler.wx_handler import WXKeyboardHandler from keyboard_handler.wx_handler import WXKeyboardHandler
import userActionsController from . import userActionsController
import trendingTopics from . import trendingTopics
import user from . import user
import listsController from . import listsController
# from issueReporter import issueReporter # from issueReporter import issueReporter
elif system == "Linux": elif system == "Linux":
from gtkUI import (view, commonMessageDialogs) from gtkUI import (view, commonMessageDialogs)
from twitter import utils, compose from twitter import utils, compose
from sessionmanager import manager, sessionManager from sessionmanager import manager, sessionManager
import buffersController from . import buffersController
import messages from . import messages
from sessionmanager import session as session_ from sessionmanager import session as session_
from pubsub import pub from pubsub import pub
import sound import sound
@ -263,9 +263,9 @@ class Controller(object):
self.start_buffers(session_.sessions[i]) self.start_buffers(session_.sessions[i])
self.set_buffer_positions(session_.sessions[i]) self.set_buffer_positions(session_.sessions[i])
if config.app["app-settings"]["play_ready_sound"] == True: if config.app["app-settings"]["play_ready_sound"] == True:
session_.sessions[session_.sessions.keys()[0]].sound.play("ready.ogg") session_.sessions[list(session_.sessions.keys())[0]].sound.play("ready.ogg")
if config.app["app-settings"]["speak_ready_msg"] == True: if config.app["app-settings"]["speak_ready_msg"] == True:
output.speak(_(u"Ready")) output.speak(_("Ready"))
self.started = True self.started = True
def create_ignored_session_buffer(self, session): def create_ignored_session_buffer(self, session):
@ -298,97 +298,97 @@ class Controller(object):
if i == 'home': if i == 'home':
home = buffersController.baseBufferController(self.view.nb, "get_home_timeline", "home_timeline", session, session.db["user_name"], tweet_mode="extended") home = buffersController.baseBufferController(self.view.nb, "get_home_timeline", "home_timeline", session, session.db["user_name"], tweet_mode="extended")
self.buffers.append(home) self.buffers.append(home)
self.view.insert_buffer(home.buffer, name=_(u"Home"), pos=self.view.search(session.db["user_name"], session.db["user_name"])) self.view.insert_buffer(home.buffer, name=_("Home"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
elif i == 'mentions': elif i == 'mentions':
mentions = buffersController.baseBufferController(self.view.nb, "get_mentions_timeline", "mentions", session, session.db["user_name"], sound="mention_received.ogg", tweet_mode="extended") mentions = buffersController.baseBufferController(self.view.nb, "get_mentions_timeline", "mentions", session, session.db["user_name"], sound="mention_received.ogg", tweet_mode="extended")
self.buffers.append(mentions) self.buffers.append(mentions)
self.view.insert_buffer(mentions.buffer, name=_(u"Mentions"), pos=self.view.search(session.db["user_name"], session.db["user_name"])) self.view.insert_buffer(mentions.buffer, name=_("Mentions"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
elif i == 'dm': elif i == 'dm':
dm = buffersController.baseBufferController(self.view.nb, "get_direct_messages", "direct_messages", session, session.db["user_name"], bufferType="dmPanel", compose_func="compose_dm", sound="dm_received.ogg", full_text=True) dm = buffersController.baseBufferController(self.view.nb, "get_direct_messages", "direct_messages", session, session.db["user_name"], bufferType="dmPanel", compose_func="compose_dm", sound="dm_received.ogg", full_text=True)
self.buffers.append(dm) self.buffers.append(dm)
self.view.insert_buffer(dm.buffer, name=_(u"Direct messages"), pos=self.view.search(session.db["user_name"], session.db["user_name"])) self.view.insert_buffer(dm.buffer, name=_("Direct messages"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
elif i == 'sent_dm': elif i == 'sent_dm':
sent_dm = buffersController.baseBufferController(self.view.nb, "get_sent_messages", "sent_direct_messages", session, session.db["user_name"], bufferType="dmPanel", compose_func="compose_dm", full_text=True) sent_dm = buffersController.baseBufferController(self.view.nb, "get_sent_messages", "sent_direct_messages", session, session.db["user_name"], bufferType="dmPanel", compose_func="compose_dm", full_text=True)
self.buffers.append(sent_dm) self.buffers.append(sent_dm)
self.view.insert_buffer(sent_dm.buffer, name=_(u"Sent direct messages"), pos=self.view.search(session.db["user_name"], session.db["user_name"])) self.view.insert_buffer(sent_dm.buffer, name=_("Sent direct messages"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
elif i == 'sent_tweets': elif i == 'sent_tweets':
sent_tweets = buffersController.baseBufferController(self.view.nb, "get_user_timeline", "sent_tweets", session, session.db["user_name"], bufferType="dmPanel", screen_name=session.db["user_name"], tweet_mode="extended") sent_tweets = buffersController.baseBufferController(self.view.nb, "get_user_timeline", "sent_tweets", session, session.db["user_name"], bufferType="dmPanel", screen_name=session.db["user_name"], tweet_mode="extended")
self.buffers.append(sent_tweets) self.buffers.append(sent_tweets)
self.view.insert_buffer(sent_tweets.buffer, name=_(u"Sent tweets"), pos=self.view.search(session.db["user_name"], session.db["user_name"])) self.view.insert_buffer(sent_tweets.buffer, name=_("Sent tweets"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
elif i == 'favorites': elif i == 'favorites':
favourites = buffersController.baseBufferController(self.view.nb, "get_favorites", "favourites", session, session.db["user_name"], tweet_mode="extended") favourites = buffersController.baseBufferController(self.view.nb, "get_favorites", "favourites", session, session.db["user_name"], tweet_mode="extended")
self.buffers.append(favourites) self.buffers.append(favourites)
self.view.insert_buffer(favourites.buffer, name=_(u"Likes"), pos=self.view.search(session.db["user_name"], session.db["user_name"])) self.view.insert_buffer(favourites.buffer, name=_("Likes"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
elif i == 'followers': elif i == 'followers':
followers = buffersController.peopleBufferController(self.view.nb, "get_followers_list", "followers", session, session.db["user_name"], screen_name=session.db["user_name"]) followers = buffersController.peopleBufferController(self.view.nb, "get_followers_list", "followers", session, session.db["user_name"], screen_name=session.db["user_name"])
self.buffers.append(followers) self.buffers.append(followers)
self.view.insert_buffer(followers.buffer, name=_(u"Followers"), pos=self.view.search(session.db["user_name"], session.db["user_name"])) self.view.insert_buffer(followers.buffer, name=_("Followers"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
elif i == 'friends': elif i == 'friends':
friends = buffersController.peopleBufferController(self.view.nb, "get_friends_list", "friends", session, session.db["user_name"], screen_name=session.db["user_name"]) friends = buffersController.peopleBufferController(self.view.nb, "get_friends_list", "friends", session, session.db["user_name"], screen_name=session.db["user_name"])
self.buffers.append(friends) self.buffers.append(friends)
self.view.insert_buffer(friends.buffer, name=_(u"Friends"), pos=self.view.search(session.db["user_name"], session.db["user_name"])) self.view.insert_buffer(friends.buffer, name=_("Friends"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
elif i == 'blocks': elif i == 'blocks':
blocks = buffersController.peopleBufferController(self.view.nb, "list_blocks", "blocked", session, session.db["user_name"]) blocks = buffersController.peopleBufferController(self.view.nb, "list_blocks", "blocked", session, session.db["user_name"])
self.buffers.append(blocks) self.buffers.append(blocks)
self.view.insert_buffer(blocks.buffer, name=_(u"Blocked users"), pos=self.view.search(session.db["user_name"], session.db["user_name"])) self.view.insert_buffer(blocks.buffer, name=_("Blocked users"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
elif i == 'muted': elif i == 'muted':
muted = buffersController.peopleBufferController(self.view.nb, "list_mutes", "muted", session, session.db["user_name"]) muted = buffersController.peopleBufferController(self.view.nb, "list_mutes", "muted", session, session.db["user_name"])
self.buffers.append(muted) self.buffers.append(muted)
self.view.insert_buffer(muted.buffer, name=_(u"Muted users"), pos=self.view.search(session.db["user_name"], session.db["user_name"])) self.view.insert_buffer(muted.buffer, name=_("Muted users"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
elif i == 'events': elif i == 'events':
events = buffersController.eventsBufferController(self.view.nb, "events", session, session.db["user_name"], bufferType="dmPanel", screen_name=session.db["user_name"]) events = buffersController.eventsBufferController(self.view.nb, "events", session, session.db["user_name"], bufferType="dmPanel", screen_name=session.db["user_name"])
self.buffers.append(events) self.buffers.append(events)
self.view.insert_buffer(events.buffer, name=_(u"Events"), pos=self.view.search(session.db["user_name"], session.db["user_name"])) self.view.insert_buffer(events.buffer, name=_("Events"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
timelines = buffersController.emptyPanel(self.view.nb, "timelines", session.db["user_name"]) timelines = buffersController.emptyPanel(self.view.nb, "timelines", session.db["user_name"])
self.buffers.append(timelines) self.buffers.append(timelines)
self.view.insert_buffer(timelines.buffer , name=_(u"Timelines"), pos=self.view.search(session.db["user_name"], session.db["user_name"])) self.view.insert_buffer(timelines.buffer , name=_("Timelines"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
for i in session.settings["other_buffers"]["timelines"]: for i in session.settings["other_buffers"]["timelines"]:
tl = buffersController.baseBufferController(self.view.nb, "get_user_timeline", "%s-timeline" % (i,), session, session.db["user_name"], bufferType=None, user_id=i, tweet_mode="extended") tl = buffersController.baseBufferController(self.view.nb, "get_user_timeline", "%s-timeline" % (i,), session, session.db["user_name"], bufferType=None, user_id=i, tweet_mode="extended")
self.buffers.append(tl) self.buffers.append(tl)
self.view.insert_buffer(tl.buffer, name=_(u"Timeline for {}").format(i,), pos=self.view.search("timelines", session.db["user_name"])) self.view.insert_buffer(tl.buffer, name=_("Timeline for {}").format(i,), pos=self.view.search("timelines", session.db["user_name"]))
favs_timelines = buffersController.emptyPanel(self.view.nb, "favs_timelines", session.db["user_name"]) favs_timelines = buffersController.emptyPanel(self.view.nb, "favs_timelines", session.db["user_name"])
self.buffers.append(favs_timelines) self.buffers.append(favs_timelines)
self.view.insert_buffer(favs_timelines.buffer , name=_(u"Likes timelines"), pos=self.view.search(session.db["user_name"], session.db["user_name"])) self.view.insert_buffer(favs_timelines.buffer , name=_("Likes timelines"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
for i in session.settings["other_buffers"]["favourites_timelines"]: for i in session.settings["other_buffers"]["favourites_timelines"]:
tl = buffersController.baseBufferController(self.view.nb, "get_favorites", "%s-favorite" % (i,), session, session.db["user_name"], bufferType=None, user_id=i, tweet_mode="extended") tl = buffersController.baseBufferController(self.view.nb, "get_favorites", "%s-favorite" % (i,), session, session.db["user_name"], bufferType=None, user_id=i, tweet_mode="extended")
self.buffers.append(tl) self.buffers.append(tl)
self.view.insert_buffer(tl.buffer, name=_(u"Likes for {}").format(i,), pos=self.view.search("favs_timelines", session.db["user_name"])) self.view.insert_buffer(tl.buffer, name=_("Likes for {}").format(i,), pos=self.view.search("favs_timelines", session.db["user_name"]))
tl.timer = RepeatingTimer(300, tl.start_stream) tl.timer = RepeatingTimer(300, tl.start_stream)
tl.timer.start() tl.timer.start()
followers_timelines = buffersController.emptyPanel(self.view.nb, "followers_timelines", session.db["user_name"]) followers_timelines = buffersController.emptyPanel(self.view.nb, "followers_timelines", session.db["user_name"])
self.buffers.append(followers_timelines) self.buffers.append(followers_timelines)
self.view.insert_buffer(followers_timelines.buffer , name=_(u"Followers' Timelines"), pos=self.view.search(session.db["user_name"], session.db["user_name"])) self.view.insert_buffer(followers_timelines.buffer , name=_("Followers' Timelines"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
for i in session.settings["other_buffers"]["followers_timelines"]: for i in session.settings["other_buffers"]["followers_timelines"]:
tl = buffersController.peopleBufferController(self.view.nb, "get_followers_list", "%s-followers" % (i,), session, session.db["user_name"], user_id=i) tl = buffersController.peopleBufferController(self.view.nb, "get_followers_list", "%s-followers" % (i,), session, session.db["user_name"], user_id=i)
self.buffers.append(tl) self.buffers.append(tl)
self.view.insert_buffer(tl.buffer, name=_(u"Followers for {}").format(i,), pos=self.view.search("followers_timelines", session.db["user_name"])) self.view.insert_buffer(tl.buffer, name=_("Followers for {}").format(i,), pos=self.view.search("followers_timelines", session.db["user_name"]))
tl.timer = RepeatingTimer(300, tl.start_stream) tl.timer = RepeatingTimer(300, tl.start_stream)
tl.timer.start() tl.timer.start()
friends_timelines = buffersController.emptyPanel(self.view.nb, "friends_timelines", session.db["user_name"]) friends_timelines = buffersController.emptyPanel(self.view.nb, "friends_timelines", session.db["user_name"])
self.buffers.append(friends_timelines) self.buffers.append(friends_timelines)
self.view.insert_buffer(friends_timelines.buffer , name=_(u"Friends' Timelines"), pos=self.view.search(session.db["user_name"], session.db["user_name"])) self.view.insert_buffer(friends_timelines.buffer , name=_("Friends' Timelines"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
for i in session.settings["other_buffers"]["friends_timelines"]: for i in session.settings["other_buffers"]["friends_timelines"]:
tl = buffersController.peopleBufferController(self.view.nb, "get_friends_list", "%s-friends" % (i,), session, session.db["user_name"], user_id=i) tl = buffersController.peopleBufferController(self.view.nb, "get_friends_list", "%s-friends" % (i,), session, session.db["user_name"], user_id=i)
self.buffers.append(tl) self.buffers.append(tl)
self.view.insert_buffer(tl.buffer, name=_(u"Friends for {}").format(i,), pos=self.view.search("friends_timelines", session.db["user_name"])) self.view.insert_buffer(tl.buffer, name=_("Friends for {}").format(i,), pos=self.view.search("friends_timelines", session.db["user_name"]))
tl.timer = RepeatingTimer(300, tl.start_stream) tl.timer = RepeatingTimer(300, tl.start_stream)
tl.timer.start() tl.timer.start()
lists = buffersController.emptyPanel(self.view.nb, "lists", session.db["user_name"]) lists = buffersController.emptyPanel(self.view.nb, "lists", session.db["user_name"])
self.buffers.append(lists) self.buffers.append(lists)
self.view.insert_buffer(lists.buffer , name=_(u"Lists"), pos=self.view.search(session.db["user_name"], session.db["user_name"])) self.view.insert_buffer(lists.buffer , name=_("Lists"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
for i in session.settings["other_buffers"]["lists"]: for i in session.settings["other_buffers"]["lists"]:
tl = buffersController.listBufferController(self.view.nb, "get_list_statuses", "%s-list" % (i,), session, session.db["user_name"], bufferType=None, list_id=utils.find_list(i, session.db["lists"]), tweet_mode="extended") tl = buffersController.listBufferController(self.view.nb, "get_list_statuses", "%s-list" % (i,), session, session.db["user_name"], bufferType=None, list_id=utils.find_list(i, session.db["lists"]), tweet_mode="extended")
session.lists.append(tl) session.lists.append(tl)
self.buffers.append(tl) self.buffers.append(tl)
self.view.insert_buffer(tl.buffer, name=_(u"List for {}").format(i), pos=self.view.search("lists", session.db["user_name"])) self.view.insert_buffer(tl.buffer, name=_("List for {}").format(i), pos=self.view.search("lists", session.db["user_name"]))
searches = buffersController.emptyPanel(self.view.nb, "searches", session.db["user_name"]) searches = buffersController.emptyPanel(self.view.nb, "searches", session.db["user_name"])
self.buffers.append(searches) self.buffers.append(searches)
self.view.insert_buffer(searches.buffer , name=_(u"Searches"), pos=self.view.search(session.db["user_name"], session.db["user_name"])) self.view.insert_buffer(searches.buffer , name=_("Searches"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
for i in session.settings["other_buffers"]["tweet_searches"]: for i in session.settings["other_buffers"]["tweet_searches"]:
tl = buffersController.searchBufferController(self.view.nb, "search", "%s-searchterm" % (i,), session, session.db["user_name"], bufferType="searchPanel", q=i, tweet_mode="extended") tl = buffersController.searchBufferController(self.view.nb, "search", "%s-searchterm" % (i,), session, session.db["user_name"], bufferType="searchPanel", q=i, tweet_mode="extended")
self.buffers.append(tl) self.buffers.append(tl)
self.view.insert_buffer(tl.buffer, name=_(u"Search for {}").format(i), pos=self.view.search("searches", session.db["user_name"])) self.view.insert_buffer(tl.buffer, name=_("Search for {}").format(i), pos=self.view.search("searches", session.db["user_name"]))
tl.timer = RepeatingTimer(180, tl.start_stream) tl.timer = RepeatingTimer(180, tl.start_stream)
tl.timer.start() tl.timer.start()
for i in session.settings["other_buffers"]["trending_topic_buffers"]: for i in session.settings["other_buffers"]["trending_topic_buffers"]:
@ -398,12 +398,12 @@ class Controller(object):
self.buffers.append(buffer) self.buffers.append(buffer)
buffer.timer = RepeatingTimer(300, buffer.start_stream) buffer.timer = RepeatingTimer(300, buffer.start_stream)
buffer.timer.start() buffer.timer.start()
self.view.insert_buffer(buffer.buffer, name=_(u"Trending topics for %s") % (buffer.name_), pos=self.view.search(session.db["user_name"], session.db["user_name"])) self.view.insert_buffer(buffer.buffer, name=_("Trending topics for %s") % (buffer.name_), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
def set_buffer_positions(self, session): def set_buffer_positions(self, session):
"Sets positions for buffers if values exist in the database." "Sets positions for buffers if values exist in the database."
for i in self.buffers: for i in self.buffers:
if i.account == session.db["user_name"] and session.db.has_key(i.name+"_pos") and hasattr(i.buffer,'list'): if i.account == session.db["user_name"] and i.name+"_pos" in session.db and hasattr(i.buffer,'list'):
i.buffer.list.select_item(session.db[str(i.name+"_pos")]) i.buffer.list.select_item(session.db[str(i.name+"_pos")])
def logout_account(self, session_id): def logout_account(self, session_id):
@ -451,7 +451,7 @@ class Controller(object):
search.start_stream(mandatory=True) search.start_stream(mandatory=True)
pos=self.view.search("searches", buffer.session.db["user_name"]) pos=self.view.search("searches", buffer.session.db["user_name"])
self.insert_buffer(search, pos) self.insert_buffer(search, pos)
self.view.insert_buffer(search.buffer, name=_(u"Search for {}").format(term), pos=pos) self.view.insert_buffer(search.buffer, name=_("Search for {}").format(term), pos=pos)
search.timer = RepeatingTimer(180, search.start_stream) search.timer = RepeatingTimer(180, search.start_stream)
search.timer.start() search.timer.start()
dlg.Destroy() dlg.Destroy()
@ -470,18 +470,18 @@ class Controller(object):
return return
page = self.get_current_buffer() page = self.get_current_buffer()
if not hasattr(page.buffer, "list"): if not hasattr(page.buffer, "list"):
output.speak(_(u"No session is currently in focus. Focus a session with the next or previous session shortcut."), True) output.speak(_("No session is currently in focus. Focus a session with the next or previous session shortcut."), True)
return return
count = page.buffer.list.get_count() count = page.buffer.list.get_count()
if count < 1: if count < 1:
output.speak(_(u"Empty buffer."), True) output.speak(_("Empty buffer."), True)
return return
start = page.buffer.list.get_selected() start = page.buffer.list.get_selected()
for i in xrange(start, count): for i in range(start, count):
if string.lower() in page.buffer.list.get_text_column(i, 1).lower(): if string.lower() in page.buffer.list.get_text_column(i, 1).lower():
page.buffer.list.select_item(i) page.buffer.list.select_item(i)
return output.speak(page.get_message(), True) return output.speak(page.get_message(), True)
output.speak(_(u"{0} not found.").format(string,), True) output.speak(_("{0} not found.").format(string,), True)
def seekLeft(self, *args, **kwargs): def seekLeft(self, *args, **kwargs):
try: try:
@ -526,7 +526,7 @@ class Controller(object):
users = utils.get_all_users(tweet, buff.session.db) users = utils.get_all_users(tweet, buff.session.db)
else: else:
users = [tweet["screen_name"]] users = [tweet["screen_name"]]
dlg = dialogs.utils.selectUserDialog(_(u"Select the user"), users) dlg = dialogs.utils.selectUserDialog(_("Select the user"), users)
if dlg.get_response() == widgetUtils.OK: if dlg.get_response() == widgetUtils.OK:
user = dlg.get_user() user = dlg.get_user()
else: else:
@ -541,7 +541,7 @@ class Controller(object):
users = utils.get_all_users(tweet, buff.session.db) users = utils.get_all_users(tweet, buff.session.db)
else: else:
users = [tweet["screen_name"]] users = [tweet["screen_name"]]
dlg = dialogs.utils.selectUserDialog(_(u"Select the user"), users) dlg = dialogs.utils.selectUserDialog(_("Select the user"), users)
if dlg.get_response() == widgetUtils.OK: if dlg.get_response() == widgetUtils.OK:
user = dlg.get_user() user = dlg.get_user()
else: else:
@ -568,7 +568,7 @@ class Controller(object):
users = utils.get_all_users(tweet, buff.session.db) users = utils.get_all_users(tweet, buff.session.db)
else: else:
users = [tweet["screen_name"]] users = [tweet["screen_name"]]
dlg = dialogs.utils.selectUserDialog(_(u"Select the user"), users) dlg = dialogs.utils.selectUserDialog(_("Select the user"), users)
if dlg.get_response() == widgetUtils.OK: if dlg.get_response() == widgetUtils.OK:
user = dlg.get_user() user = dlg.get_user()
else: else:
@ -818,7 +818,7 @@ class Controller(object):
return return
pos=self.view.search("timelines", buff.session.db["user_name"]) pos=self.view.search("timelines", buff.session.db["user_name"])
self.insert_buffer(tl, pos+1) self.insert_buffer(tl, pos+1)
self.view.insert_buffer(tl.buffer, name=_(u"Timeline for {}").format(dlg.get_user()), pos=pos) self.view.insert_buffer(tl.buffer, name=_("Timeline for {}").format(dlg.get_user()), pos=pos)
buff.session.settings["other_buffers"]["timelines"].append(usr["id_str"]) buff.session.settings["other_buffers"]["timelines"].append(usr["id_str"])
pub.sendMessage("buffer-title-changed", buffer=tl) pub.sendMessage("buffer-title-changed", buffer=tl)
pub.sendMessage("restart-streams", streams=["timelinesStream"], session=buff.session) pub.sendMessage("restart-streams", streams=["timelinesStream"], session=buff.session)
@ -838,7 +838,7 @@ class Controller(object):
return return
pos=self.view.search("favs_timelines", buff.session.db["user_name"]) pos=self.view.search("favs_timelines", buff.session.db["user_name"])
self.insert_buffer(tl, pos+1) self.insert_buffer(tl, pos+1)
self.view.insert_buffer(buffer=tl.buffer, name=_(u"Likes for {}").format(dlg.get_user()), pos=pos) self.view.insert_buffer(buffer=tl.buffer, name=_("Likes for {}").format(dlg.get_user()), pos=pos)
tl.timer = RepeatingTimer(300, tl.start_stream) tl.timer = RepeatingTimer(300, tl.start_stream)
tl.timer.start() tl.timer.start()
buff.session.settings["other_buffers"]["favourites_timelines"].append(usr["id_str"]) buff.session.settings["other_buffers"]["favourites_timelines"].append(usr["id_str"])
@ -859,7 +859,7 @@ class Controller(object):
return return
pos=self.view.search("followers_timelines", buff.session.db["user_name"]) pos=self.view.search("followers_timelines", buff.session.db["user_name"])
self.insert_buffer(tl, pos+1) self.insert_buffer(tl, pos+1)
self.view.insert_buffer(buffer=tl.buffer, name=_(u"Followers for {}").format(dlg.get_user()), pos=pos) self.view.insert_buffer(buffer=tl.buffer, name=_("Followers for {}").format(dlg.get_user()), pos=pos)
tl.timer = RepeatingTimer(300, tl.start_stream) tl.timer = RepeatingTimer(300, tl.start_stream)
tl.timer.start() tl.timer.start()
buff.session.settings["other_buffers"]["followers_timelines"].append(usr["id_str"]) buff.session.settings["other_buffers"]["followers_timelines"].append(usr["id_str"])
@ -880,7 +880,7 @@ class Controller(object):
return return
pos=self.view.search("friends_timelines", buff.session.db["user_name"]) pos=self.view.search("friends_timelines", buff.session.db["user_name"])
self.insert_buffer(tl, pos+1) self.insert_buffer(tl, pos+1)
self.view.insert_buffer(buffer=tl.buffer, name=_(u"Friends for {}").format(dlg.get_user()), pos=pos) self.view.insert_buffer(buffer=tl.buffer, name=_("Friends for {}").format(dlg.get_user()), pos=pos)
tl.timer = RepeatingTimer(300, tl.start_stream) tl.timer = RepeatingTimer(300, tl.start_stream)
tl.timer.start() tl.timer.start()
buff.session.settings["other_buffers"]["friends_timelines"].append(usr["id_str"]) buff.session.settings["other_buffers"]["friends_timelines"].append(usr["id_str"])
@ -900,7 +900,7 @@ class Controller(object):
pos=self.view.search("searches", buffer.session.db["user_name"]) pos=self.view.search("searches", buffer.session.db["user_name"])
# self.buffers.append(search) # self.buffers.append(search)
self.insert_buffer(search, pos) self.insert_buffer(search, pos)
self.view.insert_buffer(search.buffer, name=_(u"Conversation with {0}").format(user), pos=pos) self.view.insert_buffer(search.buffer, name=_("Conversation with {0}").format(user), pos=pos)
search.timer = RepeatingTimer(300, search.start_stream) search.timer = RepeatingTimer(300, search.start_stream)
search.timer.start() search.timer.start()
@ -927,7 +927,7 @@ class Controller(object):
buffer = buffersController.trendsBufferController(self.view.nb, "%s_tt" % (woeid,), buff.session, buff.account, woeid) buffer = buffersController.trendsBufferController(self.view.nb, "%s_tt" % (woeid,), buff.session, buff.account, woeid)
buffer.searchfunction = self.search buffer.searchfunction = self.search
pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"]) pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"])
self.view.insert_buffer(buffer.buffer, name=_(u"Trending topics for %s") % (trends.get_string()), pos=pos) self.view.insert_buffer(buffer.buffer, name=_("Trending topics for %s") % (trends.get_string()), pos=pos)
self.buffers.append(buffer) self.buffers.append(buffer)
buffer.start_stream() buffer.start_stream()
buffer.timer = RepeatingTimer(300, buffer.start_stream) buffer.timer = RepeatingTimer(300, buffer.start_stream)
@ -945,11 +945,11 @@ class Controller(object):
if event == None: output.speak(address[0].__str__().decode("utf-8")) if event == None: output.speak(address[0].__str__().decode("utf-8"))
else: self.view.show_address(address[0].__str__().decode("utf-8")) else: self.view.show_address(address[0].__str__().decode("utf-8"))
else: else:
output.speak(_(u"There are no coordinates in this tweet")) output.speak(_("There are no coordinates in this tweet"))
except GeocoderError: except GeocoderError:
output.speak(_(u"There are no results for the coordinates in this tweet")) output.speak(_("There are no results for the coordinates in this tweet"))
except ValueError: except ValueError:
output.speak(_(u"Error decoding coordinates. Try again later.")) output.speak(_("Error decoding coordinates. Try again later."))
except KeyError: except KeyError:
pass pass
except AttributeError: except AttributeError:
@ -964,11 +964,11 @@ class Controller(object):
address = geocoder.reverse_geocode(y, x) address = geocoder.reverse_geocode(y, x)
dlg = commonMessageDialogs.view_geodata(address[0].__str__()) dlg = commonMessageDialogs.view_geodata(address[0].__str__())
else: else:
output.speak(_(u"There are no coordinates in this tweet")) output.speak(_("There are no coordinates in this tweet"))
except GeocoderError: except GeocoderError:
output.speak(_(u"There are no results for the coordinates in this tweet")) output.speak(_("There are no results for the coordinates in this tweet"))
except ValueError: except ValueError:
output.speak(_(u"Error decoding coordinates. Try again later.")) output.speak(_("Error decoding coordinates. Try again later."))
except KeyError: except KeyError:
pass pass
except AttributeError: except AttributeError:
@ -1029,7 +1029,7 @@ class Controller(object):
def up(self, *args, **kwargs): def up(self, *args, **kwargs):
page = self.get_current_buffer() page = self.get_current_buffer()
if not hasattr(page.buffer, "list"): if not hasattr(page.buffer, "list"):
output.speak(_(u"No session is currently in focus. Focus a session with the next or previous session shortcut."), True) output.speak(_("No session is currently in focus. Focus a session with the next or previous session shortcut."), True)
return return
position = page.buffer.list.get_selected() position = page.buffer.list.get_selected()
index = position-1 index = position-1
@ -1048,7 +1048,7 @@ class Controller(object):
def down(self, *args, **kwargs): def down(self, *args, **kwargs):
page = self.get_current_buffer() page = self.get_current_buffer()
if not hasattr(page.buffer, "list"): if not hasattr(page.buffer, "list"):
output.speak(_(u"No session is currently in focus. Focus a session with the next or previous session shortcut."), True) output.speak(_("No session is currently in focus. Focus a session with the next or previous session shortcut."), True)
return return
position = page.buffer.list.get_selected() position = page.buffer.list.get_selected()
index = position+1 index = position+1
@ -1067,7 +1067,7 @@ class Controller(object):
buff = self.view.get_current_buffer_pos() buff = self.view.get_current_buffer_pos()
buffer = self.get_current_buffer() buffer = self.get_current_buffer()
if not hasattr(buffer.buffer, "list"): if not hasattr(buffer.buffer, "list"):
output.speak(_(u"No session is currently in focus. Focus a session with the next or previous session shortcut."), True) output.speak(_("No session is currently in focus. Focus a session with the next or previous session shortcut."), True)
return return
if buff == self.get_first_buffer(buffer.account) or buff == 0: if buff == self.get_first_buffer(buffer.account) or buff == 0:
self.view.change_buffer(self.get_last_buffer(buffer.account)) self.view.change_buffer(self.get_last_buffer(buffer.account))
@ -1077,16 +1077,16 @@ class Controller(object):
buffer = self.get_current_buffer() buffer = self.get_current_buffer()
if self.showing == True: buffer.buffer.set_focus_in_list() if self.showing == True: buffer.buffer.set_focus_in_list()
try: try:
msg = _(u"%s, %s of %s") % (self.view.get_buffer_text(), buffer.buffer.list.get_selected()+1, buffer.buffer.list.get_count()) msg = _("%s, %s of %s") % (self.view.get_buffer_text(), buffer.buffer.list.get_selected()+1, buffer.buffer.list.get_count())
except: except:
msg = _(u"%s. Empty") % (self.view.get_buffer_text(),) msg = _("%s. Empty") % (self.view.get_buffer_text(),)
output.speak(msg, True) output.speak(msg, True)
def right(self, *args, **kwargs): def right(self, *args, **kwargs):
buff = self.view.get_current_buffer_pos() buff = self.view.get_current_buffer_pos()
buffer = self.get_current_buffer() buffer = self.get_current_buffer()
if not hasattr(buffer.buffer, "list"): if not hasattr(buffer.buffer, "list"):
output.speak(_(u"No session is currently in focus. Focus a session with the next or previous session shortcut."), True) output.speak(_("No session is currently in focus. Focus a session with the next or previous session shortcut."), True)
return return
if buff == self.get_last_buffer(buffer.account) or buff+1 == self.view.get_buffer_count(): if buff == self.get_last_buffer(buffer.account) or buff+1 == self.view.get_buffer_count():
self.view.change_buffer(self.get_first_buffer(buffer.account)) self.view.change_buffer(self.get_first_buffer(buffer.account))
@ -1096,9 +1096,9 @@ class Controller(object):
buffer = self.get_current_buffer() buffer = self.get_current_buffer()
if self.showing == True: buffer.buffer.set_focus_in_list() if self.showing == True: buffer.buffer.set_focus_in_list()
try: try:
msg = _(u"%s, %s of %s") % (self.view.get_buffer_text(), buffer.buffer.list.get_selected()+1, buffer.buffer.list.get_count()) msg = _("%s, %s of %s") % (self.view.get_buffer_text(), buffer.buffer.list.get_selected()+1, buffer.buffer.list.get_count())
except: except:
msg = _(u"%s. Empty") % (self.view.get_buffer_text(),) msg = _("%s. Empty") % (self.view.get_buffer_text(),)
output.speak(msg, True) output.speak(msg, True)
def next_account(self, *args, **kwargs): def next_account(self, *args, **kwargs):
@ -1111,15 +1111,15 @@ class Controller(object):
self.current_account = account self.current_account = account
buff = self.view.search("home_timeline", account) buff = self.view.search("home_timeline", account)
if buff == None: if buff == None:
output.speak(_(u"{0}: This account is not logged into Twitter.").format(account), True) output.speak(_("{0}: This account is not logged into Twitter.").format(account), True)
return return
self.view.change_buffer(buff) self.view.change_buffer(buff)
buffer = self.get_current_buffer() buffer = self.get_current_buffer()
if self.showing == True: buffer.buffer.set_focus_in_list() if self.showing == True: buffer.buffer.set_focus_in_list()
try: try:
msg = _(u"%s. %s, %s of %s") % (buffer.account, self.view.get_buffer_text(), buffer.buffer.list.get_selected()+1, buffer.buffer.list.get_count()) msg = _("%s. %s, %s of %s") % (buffer.account, self.view.get_buffer_text(), buffer.buffer.list.get_selected()+1, buffer.buffer.list.get_count())
except: except:
msg = _(u"%s. Empty") % (self.view.get_buffer_text(),) msg = _("%s. Empty") % (self.view.get_buffer_text(),)
output.speak(msg, True) output.speak(msg, True)
def previous_account(self, *args, **kwargs): def previous_account(self, *args, **kwargs):
@ -1132,15 +1132,15 @@ class Controller(object):
self.current_account = account self.current_account = account
buff = self.view.search("home_timeline", account) buff = self.view.search("home_timeline", account)
if buff == None: if buff == None:
output.speak(_(u"{0}: This account is not logged into twitter.").format(account), True) output.speak(_("{0}: This account is not logged into twitter.").format(account), True)
return return
self.view.change_buffer(buff) self.view.change_buffer(buff)
buffer = self.get_current_buffer() buffer = self.get_current_buffer()
if self.showing == True: buffer.buffer.set_focus_in_list() if self.showing == True: buffer.buffer.set_focus_in_list()
try: try:
msg = _(u"%s. %s, %s of %s") % (buffer.account, self.view.get_buffer_text(), buffer.buffer.list.get_selected()+1, buffer.buffer.list.get_count()) msg = _("%s. %s, %s of %s") % (buffer.account, self.view.get_buffer_text(), buffer.buffer.list.get_selected()+1, buffer.buffer.list.get_count())
except: except:
msg = _(u"%s. Empty") % (self.view.get_buffer_text(),) msg = _("%s. Empty") % (self.view.get_buffer_text(),)
output.speak(msg, True) output.speak(msg, True)
def go_home(self): def go_home(self):
@ -1235,7 +1235,7 @@ class Controller(object):
buffer = self.search_buffer("mentions", user) buffer = self.search_buffer("mentions", user)
if buffer == None: return if buffer == None: return
play_sound = "mention_received.ogg" play_sound = "mention_received.ogg"
message = _(u"One mention from %s ") % (data["user"]["name"]) message = _("One mention from %s ") % (data["user"]["name"])
if "mentions" not in buffer.session.settings["other_buffers"]["muted_buffers"]: if "mentions" not in buffer.session.settings["other_buffers"]["muted_buffers"]:
self.notify(buffer.session, play_sound=play_sound, message=message) self.notify(buffer.session, play_sound=play_sound, message=message)
buffer.add_new_item(data) buffer.add_new_item(data)
@ -1244,7 +1244,7 @@ class Controller(object):
buffer = self.search_buffer("direct_messages", user) buffer = self.search_buffer("direct_messages", user)
if buffer == None: return if buffer == None: return
play_sound = "dm_received.ogg" play_sound = "dm_received.ogg"
message = _(u"New direct message") message = _("New direct message")
if "direct_messages" not in buffer.session.settings["other_buffers"]["muted_buffers"]: if "direct_messages" not in buffer.session.settings["other_buffers"]["muted_buffers"]:
self.notify(buffer.session, play_sound=play_sound, message=message) self.notify(buffer.session, play_sound=play_sound, message=message)
buffer.add_new_item(data) buffer.add_new_item(data)
@ -1324,7 +1324,7 @@ class Controller(object):
play_sound = "tweet_timeline.ogg" play_sound = "tweet_timeline.ogg"
if "%s-timeline" % (who,) not in buffer.session.settings["other_buffers"]["muted_buffers"] and buffer.session.settings["sound"]["session_mute"] == False: if "%s-timeline" % (who,) not in buffer.session.settings["other_buffers"]["muted_buffers"] and buffer.session.settings["sound"]["session_mute"] == False:
self.notify(buffer.session, play_sound=play_sound) self.notify(buffer.session, play_sound=play_sound)
output.speak(_(u"One tweet from %s") % (data["user"]["name"])) output.speak(_("One tweet from %s") % (data["user"]["name"]))
buffer.add_new_item(data) buffer.add_new_item(data)
def manage_item_in_list(self, data, user, where): def manage_item_in_list(self, data, user, where):
@ -1333,7 +1333,7 @@ class Controller(object):
play_sound = "list_tweet.ogg" play_sound = "list_tweet.ogg"
if "%s" % (where,) not in buffer.session.settings["other_buffers"]["muted_buffers"] and buffer.session.settings["sound"]["session_mute"] == False: if "%s" % (where,) not in buffer.session.settings["other_buffers"]["muted_buffers"] and buffer.session.settings["sound"]["session_mute"] == False:
self.notify(buffer.session, play_sound=play_sound) self.notify(buffer.session, play_sound=play_sound)
output.speak(_(u"One tweet from %s") % (data["user"]["name"])) output.speak(_("One tweet from %s") % (data["user"]["name"]))
buffer.add_new_item(data) buffer.add_new_item(data)
def start_buffers(self, session): def start_buffers(self, session):
@ -1397,43 +1397,43 @@ class Controller(object):
if buffer == "favourites": if buffer == "favourites":
favourites = buffersController.baseBufferController(self.view.nb, "get_favorites", "favourites", buff.session, buff.session.db["user_name"]) favourites = buffersController.baseBufferController(self.view.nb, "get_favorites", "favourites", buff.session, buff.session.db["user_name"])
self.buffers.append(favourites) self.buffers.append(favourites)
self.view.insert_buffer(favourites.buffer, name=_(u"Likes"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"])) self.view.insert_buffer(favourites.buffer, name=_("Likes"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"]))
favourites.start_stream() favourites.start_stream()
if buffer == "followers": if buffer == "followers":
followers = buffersController.peopleBufferController(self.view.nb, "get_followers_list", "followers", buff.session, buff.session.db["user_name"], screen_name=buff.session.db["user_name"]) followers = buffersController.peopleBufferController(self.view.nb, "get_followers_list", "followers", buff.session, buff.session.db["user_name"], screen_name=buff.session.db["user_name"])
self.buffers.append(followers) self.buffers.append(followers)
self.view.insert_buffer(followers.buffer, name=_(u"Followers"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"])) self.view.insert_buffer(followers.buffer, name=_("Followers"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"]))
followers.start_stream() followers.start_stream()
elif buffer == "friends": elif buffer == "friends":
friends = buffersController.peopleBufferController(self.view.nb, "get_friends_list", "friends", buff.session, buff.session.db["user_name"], screen_name=buff.session.db["user_name"]) friends = buffersController.peopleBufferController(self.view.nb, "get_friends_list", "friends", buff.session, buff.session.db["user_name"], screen_name=buff.session.db["user_name"])
self.buffers.append(friends) self.buffers.append(friends)
self.view.insert_buffer(friends.buffer, name=_(u"Friends"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"])) self.view.insert_buffer(friends.buffer, name=_("Friends"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"]))
friends.start_stream() friends.start_stream()
elif buffer == "blocked": elif buffer == "blocked":
blocks = buffersController.peopleBufferController(self.view.nb, "list_blocks", "blocked", buff.session, buff.session.db["user_name"]) blocks = buffersController.peopleBufferController(self.view.nb, "list_blocks", "blocked", buff.session, buff.session.db["user_name"])
self.buffers.append(blocks) self.buffers.append(blocks)
self.view.insert_buffer(blocks.buffer, name=_(u"Blocked users"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"])) self.view.insert_buffer(blocks.buffer, name=_("Blocked users"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"]))
blocks.start_stream() blocks.start_stream()
elif buffer == "muted": elif buffer == "muted":
muted = buffersController.peopleBufferController(self.view.nb, "get_muted_users_list", "muted", buff.session, buff.session.db["user_name"]) muted = buffersController.peopleBufferController(self.view.nb, "get_muted_users_list", "muted", buff.session, buff.session.db["user_name"])
self.buffers.append(muted) self.buffers.append(muted)
self.view.insert_buffer(muted.buffer, name=_(u"Muted users"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"])) self.view.insert_buffer(muted.buffer, name=_("Muted users"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"]))
muted.start_stream() muted.start_stream()
elif buffer == "events": elif buffer == "events":
events = buffersController.eventsBufferController(self.view.nb, "events", buff.session, buff.session.db["user_name"], bufferType="dmPanel", screen_name=buff.session.db["user_name"]) events = buffersController.eventsBufferController(self.view.nb, "events", buff.session, buff.session.db["user_name"], bufferType="dmPanel", screen_name=buff.session.db["user_name"])
self.buffers.append(events) self.buffers.append(events)
self.view.insert_buffer(events.buffer, name=_(u"Events"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"])) self.view.insert_buffer(events.buffer, name=_("Events"), pos=self.view.search(buff.session.db["user_name"], buff.session.db["user_name"]))
elif create == False: elif create == False:
self.destroy_buffer(buffer, buff.session.db["user_name"]) self.destroy_buffer(buffer, buff.session.db["user_name"])
elif buffer == "list": elif buffer == "list":
if create in buff.session.settings["other_buffers"]["lists"]: if create in buff.session.settings["other_buffers"]["lists"]:
output.speak(_(u"This list is already opened"), True) output.speak(_("This list is already opened"), True)
return return
tl = buffersController.listBufferController(self.view.nb, "get_list_statuses", create+"-list", buff.session, buff.session.db["user_name"], bufferType=None, list_id=utils.find_list(create, buff.session.db["lists"])) tl = buffersController.listBufferController(self.view.nb, "get_list_statuses", create+"-list", buff.session, buff.session.db["user_name"], bufferType=None, list_id=utils.find_list(create, buff.session.db["lists"]))
buff.session.lists.append(tl) buff.session.lists.append(tl)
pos=self.view.search("lists", buff.session.db["user_name"]) pos=self.view.search("lists", buff.session.db["user_name"])
self.insert_buffer(tl, pos) self.insert_buffer(tl, pos)
self.view.insert_buffer(tl.buffer, name=_(u"List for {}").format(create), pos=self.view.search("lists", buff.session.db["user_name"])) self.view.insert_buffer(tl.buffer, name=_("List for {}").format(create), pos=self.view.search("lists", buff.session.db["user_name"]))
tl.start_stream() tl.start_stream()
buff.session.settings["other_buffers"]["lists"].append(create) buff.session.settings["other_buffers"]["lists"].append(create)
buff.session.settings.write() buff.session.settings.write()
@ -1487,20 +1487,20 @@ class Controller(object):
if hasattr(buffer, "session") and buffer.session == None: return if hasattr(buffer, "session") and buffer.session == None: return
if buffer.name not in buffer.session.settings["other_buffers"]["autoread_buffers"]: if buffer.name not in buffer.session.settings["other_buffers"]["autoread_buffers"]:
buffer.session.settings["other_buffers"]["autoread_buffers"].append(buffer.name) buffer.session.settings["other_buffers"]["autoread_buffers"].append(buffer.name)
output.speak(_(u"The auto-reading of new tweets is enabled for this buffer"), True) output.speak(_("The auto-reading of new tweets is enabled for this buffer"), True)
elif buffer.name in buffer.session.settings["other_buffers"]["autoread_buffers"]: elif buffer.name in buffer.session.settings["other_buffers"]["autoread_buffers"]:
buffer.session.settings["other_buffers"]["autoread_buffers"].remove(buffer.name) buffer.session.settings["other_buffers"]["autoread_buffers"].remove(buffer.name)
output.speak(_(u"The auto-reading of new tweets is disabled for this buffer"), True) output.speak(_("The auto-reading of new tweets is disabled for this buffer"), True)
buffer.session.settings.write() buffer.session.settings.write()
def toggle_session_mute(self, *args, **kwargs): def toggle_session_mute(self, *args, **kwargs):
buffer = self.get_best_buffer() buffer = self.get_best_buffer()
if buffer.session.settings["sound"]["session_mute"] == False: if buffer.session.settings["sound"]["session_mute"] == False:
buffer.session.settings["sound"]["session_mute"] = True buffer.session.settings["sound"]["session_mute"] = True
output.speak(_(u"Session mute on"), True) output.speak(_("Session mute on"), True)
elif buffer.session.settings["sound"]["session_mute"] == True: elif buffer.session.settings["sound"]["session_mute"] == True:
buffer.session.settings["sound"]["session_mute"] = False buffer.session.settings["sound"]["session_mute"] = False
output.speak(_(u"Session mute off"), True) output.speak(_("Session mute off"), True)
buffer.session.settings.write() buffer.session.settings.write()
def toggle_buffer_mute(self, *args, **kwargs): def toggle_buffer_mute(self, *args, **kwargs):
@ -1508,10 +1508,10 @@ class Controller(object):
if hasattr(buffer, "session") and buffer.session == None: return if hasattr(buffer, "session") and buffer.session == None: return
if buffer.name not in buffer.session.settings["other_buffers"]["muted_buffers"]: if buffer.name not in buffer.session.settings["other_buffers"]["muted_buffers"]:
buffer.session.settings["other_buffers"]["muted_buffers"].append(buffer.name) buffer.session.settings["other_buffers"]["muted_buffers"].append(buffer.name)
output.speak(_(u"Buffer mute on"), True) output.speak(_("Buffer mute on"), True)
elif buffer.name in buffer.session.settings["other_buffers"]["muted_buffers"]: elif buffer.name in buffer.session.settings["other_buffers"]["muted_buffers"]:
buffer.session.settings["other_buffers"]["muted_buffers"].remove(buffer.name) buffer.session.settings["other_buffers"]["muted_buffers"].remove(buffer.name)
output.speak(_(u"Buffer mute off"), True) output.speak(_("Buffer mute off"), True)
buffer.session.settings.write() buffer.session.settings.write()
def view_documentation(self, *args, **kwargs): def view_documentation(self, *args, **kwargs):
@ -1534,7 +1534,7 @@ class Controller(object):
def copy_to_clipboard(self, *args, **kwargs): def copy_to_clipboard(self, *args, **kwargs):
output.copy(self.get_current_buffer().get_message()) output.copy(self.get_current_buffer().get_message())
output.speak(_(u"Copied")) output.speak(_("Copied"))
def repeat_item(self, *args, **kwargs): def repeat_item(self, *args, **kwargs):
output.speak(self.get_current_buffer().get_message()) output.speak(self.get_current_buffer().get_message())
@ -1561,13 +1561,13 @@ class Controller(object):
def update_buffer(self, *args, **kwargs): def update_buffer(self, *args, **kwargs):
bf = self.get_current_buffer() bf = self.get_current_buffer()
if not hasattr(bf, "start_stream"): if not hasattr(bf, "start_stream"):
output.speak(_(u"Unable to update this buffer.")) output.speak(_("Unable to update this buffer."))
return return
else: else:
output.speak(_(u"Updating buffer...")) output.speak(_("Updating buffer..."))
n = bf.start_stream(mandatory=True) n = bf.start_stream(mandatory=True)
if n != None: if n != None:
output.speak(_(u"{0} items retrieved").format(n,)) output.speak(_("{0} items retrieved").format(n,))
def on_tweet_deleted(self, data): def on_tweet_deleted(self, data):
id = data["delete"]["status"]["id"] id = data["delete"]["status"]["id"]
@ -1577,28 +1577,28 @@ class Controller(object):
def buffer_title_changed(self, buffer): def buffer_title_changed(self, buffer):
if "-timeline" in buffer.name: if "-timeline" in buffer.name:
title = _(u"Timeline for {}").format(buffer.username,) title = _("Timeline for {}").format(buffer.username,)
elif "-favorite" in buffer.name: elif "-favorite" in buffer.name:
title = _(u"Likes for {}").format(buffer.username,) title = _("Likes for {}").format(buffer.username,)
elif "-followers" in buffer.name: elif "-followers" in buffer.name:
title = _(u"Followers for {}").format(buffer.username,) title = _("Followers for {}").format(buffer.username,)
elif "-friends" in buffer.name: elif "-friends" in buffer.name:
title = _(u"Friends for {}").format(buffer.username,) title = _("Friends for {}").format(buffer.username,)
buffer_index = self.view.search(buffer.name, buffer.account) buffer_index = self.view.search(buffer.name, buffer.account)
self.view.set_page_title(buffer_index, title) self.view.set_page_title(buffer_index, title)
def ocr_image(self, *args, **kwargs): def ocr_image(self, *args, **kwargs):
buffer = self.get_current_buffer() buffer = self.get_current_buffer()
if hasattr(buffer, "get_right_tweet") == False: if hasattr(buffer, "get_right_tweet") == False:
output.speak(_(u"Invalid buffer")) output.speak(_("Invalid buffer"))
return return
tweet = buffer.get_tweet() tweet = buffer.get_tweet()
if tweet.has_key("entities") == False or tweet["entities"].has_key("media") == False: if ("entities" in tweet) == False or ("media" in tweet["entities"]) == False:
output.speak(_(u"This tweet doesn't contain images")) output.speak(_("This tweet doesn't contain images"))
return return
if len(tweet["entities"]["media"]) > 1: if len(tweet["entities"]["media"]) > 1:
image_list = [_(u"Picture {0}").format(i,) for i in xrange(0, len(tweet["entities"]["media"]))] image_list = [_("Picture {0}").format(i,) for i in range(0, len(tweet["entities"]["media"]))]
dialog = dialogs.urlList.urlList(title=_(u"Select the picture")) dialog = dialogs.urlList.urlList(title=_("Select the picture"))
if dialog.get_response() == widgetUtils.OK: if dialog.get_response() == widgetUtils.OK:
img = tweet["entities"]["media"][dialog.get_item()] img = tweet["entities"]["media"][dialog.get_item()]
else: else:
@ -1614,7 +1614,7 @@ class Controller(object):
try: try:
text = api.OCR_URL(img["media_url"], lang=ocr_lang) text = api.OCR_URL(img["media_url"], lang=ocr_lang)
except ocr.OCRSpace.APIError as er: except ocr.OCRSpace.APIError as er:
output.speak(_(u"Unable to extract text")) output.speak(_("Unable to extract text"))
return return
msg = messages.viewTweet(text["ParsedText"], [], False) msg = messages.viewTweet(text["ParsedText"], [], False)

View File

@ -1,7 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import re import re
import platform import platform
import attach from . import attach
system = platform.system() system = platform.system()
import widgetUtils import widgetUtils
import output import output
@ -45,18 +45,18 @@ class basicTweet(object):
self.message.set_text(msg) self.message.set_text(msg)
self.text_processor() self.text_processor()
self.message.text_focus() self.message.text_focus()
output.speak(_(u"Translated")) output.speak(_("Translated"))
else: else:
return return
def shorten(self, event=None): def shorten(self, event=None):
urls = utils.find_urls_in_text(self.message.get_text()) urls = utils.find_urls_in_text(self.message.get_text())
if len(urls) == 0: if len(urls) == 0:
output.speak(_(u"There's no URL to be shortened")) output.speak(_("There's no URL to be shortened"))
self.message.text_focus() self.message.text_focus()
elif len(urls) == 1: elif len(urls) == 1:
self.message.set_text(self.message.get_text().replace(urls[0], url_shortener.shorten(urls[0]))) self.message.set_text(self.message.get_text().replace(urls[0], url_shortener.shorten(urls[0])))
output.speak(_(u"URL shortened")) output.speak(_("URL shortened"))
self.text_processor() self.text_processor()
self.message.text_focus() self.message.text_focus()
elif len(urls) > 1: elif len(urls) > 1:
@ -64,18 +64,18 @@ class basicTweet(object):
list_urls.populate_list(urls) list_urls.populate_list(urls)
if list_urls.get_response() == widgetUtils.OK: if list_urls.get_response() == widgetUtils.OK:
self.message.set_text(self.message.get_text().replace(urls[list_urls.get_item()], url_shortener.shorten(list_urls.get_string()))) self.message.set_text(self.message.get_text().replace(urls[list_urls.get_item()], url_shortener.shorten(list_urls.get_string())))
output.speak(_(u"URL shortened")) output.speak(_("URL shortened"))
self.text_processor() self.text_processor()
self.message.text_focus() self.message.text_focus()
def unshorten(self, event=None): def unshorten(self, event=None):
urls = utils.find_urls_in_text(self.message.get_text()) urls = utils.find_urls_in_text(self.message.get_text())
if len(urls) == 0: if len(urls) == 0:
output.speak(_(u"There's no URL to be expanded")) output.speak(_("There's no URL to be expanded"))
self.message.text_focus() self.message.text_focus()
elif len(urls) == 1: elif len(urls) == 1:
self.message.set_text(self.message.get_text().replace(urls[0], url_shortener.unshorten(urls[0]))) self.message.set_text(self.message.get_text().replace(urls[0], url_shortener.unshorten(urls[0])))
output.speak(_(u"URL expanded")) output.speak(_("URL expanded"))
self.text_processor() self.text_processor()
self.message.text_focus() self.message.text_focus()
elif len(urls) > 1: elif len(urls) > 1:
@ -83,7 +83,7 @@ class basicTweet(object):
list_urls.populate_list(urls) list_urls.populate_list(urls)
if list_urls.get_response() == widgetUtils.OK: if list_urls.get_response() == widgetUtils.OK:
self.message.set_text(self.message.get_text().replace(urls[list_urls.get_item()], url_shortener.unshorten(list_urls.get_string()))) self.message.set_text(self.message.get_text().replace(urls[list_urls.get_item()], url_shortener.unshorten(list_urls.get_string())))
output.speak(_(u"URL expanded")) output.speak(_("URL expanded"))
self.text_processor() self.text_processor()
self.message.text_focus() self.message.text_focus()
@ -95,11 +95,11 @@ class basicTweet(object):
self.message.disable_button("shortenButton") self.message.disable_button("shortenButton")
self.message.disable_button("unshortenButton") self.message.disable_button("unshortenButton")
if self.message.get("long_tweet") == False: if self.message.get("long_tweet") == False:
self.message.set_title(_(u"%s - %s of %d characters") % (self.title, len(self.message.get_text()), self.max)) self.message.set_title(_("%s - %s of %d characters") % (self.title, len(self.message.get_text()), self.max))
if len(self.message.get_text()) > self.max: if len(self.message.get_text()) > self.max:
self.session.sound.play("max_length.ogg") self.session.sound.play("max_length.ogg")
else: else:
self.message.set_title(_(u"%s - %s characters") % (self.title, len(self.message.get_text()))) self.message.set_title(_("%s - %s characters") % (self.title, len(self.message.get_text())))
def spellcheck(self, event=None): def spellcheck(self, event=None):
text = self.message.get_text() text = self.message.get_text()
@ -118,7 +118,7 @@ class basicTweet(object):
self.message.set_text(self.message.get_text()+url+" #audio") self.message.set_text(self.message.get_text()+url+" #audio")
self.text_processor() self.text_processor()
else: else:
output.speak(_(u"Unable to upload the audio")) output.speak(_("Unable to upload the audio"))
dlg.cleanup() dlg.cleanup()
dlg = audioUploader.audioUploader(self.session.settings, completed_callback) dlg = audioUploader.audioUploader(self.session.settings, completed_callback)
self.message.text_focus() self.message.text_focus()
@ -165,14 +165,14 @@ class reply(tweet):
def get_ids(self): def get_ids(self):
excluded_ids = "" excluded_ids = ""
for i in xrange(0, len(self.message.checkboxes)): for i in range(0, len(self.message.checkboxes)):
if self.message.checkboxes[i].GetValue() == False: if self.message.checkboxes[i].GetValue() == False:
excluded_ids = excluded_ids + "{0},".format(self.ids[i],) excluded_ids = excluded_ids + "{0},".format(self.ids[i],)
return excluded_ids return excluded_ids
def get_people(self): def get_people(self):
people = "" people = ""
for i in xrange(0, len(self.message.checkboxes)): for i in range(0, len(self.message.checkboxes)):
if self.message.checkboxes[i].GetValue() == True: if self.message.checkboxes[i].GetValue() == True:
people = people + "{0} ".format(self.message.checkboxes[i].GetLabel(),) people = people + "{0} ".format(self.message.checkboxes[i].GetLabel(),)
return people return people
@ -196,27 +196,27 @@ class viewTweet(basicTweet):
if is_tweet == True: if is_tweet == True:
image_description = [] image_description = []
text = "" text = ""
for i in xrange(0, len(tweetList)): for i in range(0, len(tweetList)):
# tweets with message keys are longer tweets, the message value is the full messaje taken from twishort. # tweets with message keys are longer tweets, the message value is the full messaje taken from twishort.
if tweetList[i].has_key("message") and tweetList[i]["is_quote_status"] == False: if "message" in tweetList[i] and tweetList[i]["is_quote_status"] == False:
value = "message" value = "message"
else: else:
value = "full_text" value = "full_text"
if tweetList[i].has_key("retweeted_status") and tweetList[i]["is_quote_status"] == False: if "retweeted_status" in tweetList[i] and tweetList[i]["is_quote_status"] == False:
if tweetList[i].has_key("message") == False: if ("message" in tweetList[i]) == False:
text = text + "rt @%s: %s\n" % (tweetList[i]["retweeted_status"]["user"]["screen_name"], tweetList[i]["retweeted_status"]["full_text"]) text = text + "rt @%s: %s\n" % (tweetList[i]["retweeted_status"]["user"]["screen_name"], tweetList[i]["retweeted_status"]["full_text"])
else: else:
text = text + "rt @%s: %s\n" % (tweetList[i]["retweeted_status"]["user"]["screen_name"], tweetList[i][value]) text = text + "rt @%s: %s\n" % (tweetList[i]["retweeted_status"]["user"]["screen_name"], tweetList[i][value])
else: else:
text = text + " @%s: %s\n" % (tweetList[i]["user"]["screen_name"], tweetList[i][value]) text = text + " @%s: %s\n" % (tweetList[i]["user"]["screen_name"], tweetList[i][value])
# tweets with extended_entities could include image descriptions. # tweets with extended_entities could include image descriptions.
if tweetList[i].has_key("extended_entities") and tweetList[i]["extended_entities"].has_key("media"): if "extended_entities" in tweetList[i] and "media" in tweetList[i]["extended_entities"]:
for z in tweetList[i]["extended_entities"]["media"]: for z in tweetList[i]["extended_entities"]["media"]:
if z.has_key("ext_alt_text") and z["ext_alt_text"] != None: if "ext_alt_text" in z and z["ext_alt_text"] != None:
image_description.append(z["ext_alt_text"]) image_description.append(z["ext_alt_text"])
if tweetList[i].has_key("retweeted_status") and tweetList[i]["retweeted_status"].has_key("extended_entities") and tweetList[i]["retweeted_status"]["extended_entities"].has_key("media"): if "retweeted_status" in tweetList[i] and "extended_entities" in tweetList[i]["retweeted_status"] and "media" in tweetList[i]["retweeted_status"]["extended_entities"]:
for z in tweetList[i]["retweeted_status"]["extended_entities"]["media"]: for z in tweetList[i]["retweeted_status"]["extended_entities"]["media"]:
if z.has_key("ext_alt_text") and z["ext_alt_text"] != None: if "ext_alt_text" in z and z["ext_alt_text"] != None:
image_description.append(z["ext_alt_text"]) image_description.append(z["ext_alt_text"])
# set rt and likes counters. # set rt and likes counters.
rt_count = str(tweet["retweet_count"]) rt_count = str(tweet["retweet_count"])
@ -224,25 +224,25 @@ class viewTweet(basicTweet):
# Gets the client from where this tweet was made. # Gets the client from where this tweet was made.
source = str(re.sub(r"(?s)<.*?>", "", tweet["source"].encode("utf-8"))) source = str(re.sub(r"(?s)<.*?>", "", tweet["source"].encode("utf-8")))
if text == "": if text == "":
if tweet.has_key("message"): if "message" in tweet:
value = "message" value = "message"
else: else:
value = "full_text" value = "full_text"
if tweet.has_key("retweeted_status"): if "retweeted_status" in tweet:
if tweet.has_key("message") == False: if ("message" in tweet) == False:
text = "rt @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], tweet["retweeted_status"]["full_text"]) text = "rt @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], tweet["retweeted_status"]["full_text"])
else: else:
text = "rt @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], tweet[value]) text = "rt @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], tweet[value])
else: else:
text = tweet[value] text = tweet[value]
text = self.clear_text(text) text = self.clear_text(text)
if tweet.has_key("extended_entities") and tweet["extended_entities"].has_key("media"): if "extended_entities" in tweet and "media" in tweet["extended_entities"]:
for z in tweet["extended_entities"]["media"]: for z in tweet["extended_entities"]["media"]:
if z.has_key("ext_alt_text") and z["ext_alt_text"] != None: if "ext_alt_text" in z and z["ext_alt_text"] != None:
image_description.append(z["ext_alt_text"]) image_description.append(z["ext_alt_text"])
if tweet.has_key("retweeted_status") and tweet["retweeted_status"].has_key("extended_entities") and tweet["retweeted_status"]["extended_entities"].has_key("media"): if "retweeted_status" in tweet and "extended_entities" in tweet["retweeted_status"] and "media" in tweet["retweeted_status"]["extended_entities"]:
for z in tweet["retweeted_status"]["extended_entities"]["media"]: for z in tweet["retweeted_status"]["extended_entities"]["media"]:
if z.has_key("ext_alt_text") and z["ext_alt_text"] != None: if "ext_alt_text" in z and z["ext_alt_text"] != None:
image_description.append(z["ext_alt_text"]) image_description.append(z["ext_alt_text"])
self.message = message.viewTweet(text, rt_count, favs_count, source.decode("utf-8")) self.message = message.viewTweet(text, rt_count, favs_count, source.decode("utf-8"))
self.message.set_title(len(text)) self.message.set_title(len(text))

View File

@ -25,15 +25,15 @@ class profileController(object):
self.get_data(screen_name=self.user) self.get_data(screen_name=self.user)
except TwythonError as err: except TwythonError as err:
if err.error_code == 404: if err.error_code == 404:
wx.MessageDialog(None, _(u"That user does not exist"), _(u"Error"), wx.ICON_ERROR).ShowModal() wx.MessageDialog(None, _("That user does not exist"), _("Error"), wx.ICON_ERROR).ShowModal()
if err.error_code == 403: if err.error_code == 403:
wx.MessageDialog(None, _(u"User has been suspended"), _(u"Error"), wx.ICON_ERROR).ShowModal() wx.MessageDialog(None, _("User has been suspended"), _("Error"), wx.ICON_ERROR).ShowModal()
log.error("error %d: %s" % (err.error_code, err.msg)) log.error("error %d: %s" % (err.error_code, err.msg))
return return
self.dialog = show_user.showUserProfile() self.dialog = show_user.showUserProfile()
string = self.get_user_info() string = self.get_user_info()
self.dialog.set("text", string) self.dialog.set("text", string)
self.dialog.set_title(_(u"Information for %s") % (self.data["screen_name"])) self.dialog.set_title(_("Information for %s") % (self.data["screen_name"]))
if self.data["url"] != None: if self.data["url"] != None:
self.dialog.enable_url() self.dialog.enable_url()
widgetUtils.connect_event(self.dialog.url, widgetUtils.BUTTON_PRESSED, self.visit_url) widgetUtils.connect_event(self.dialog.url, widgetUtils.BUTTON_PRESSED, self.visit_url)
@ -63,7 +63,7 @@ class profileController(object):
def discard_image(self): def discard_image(self):
self.file = None self.file = None
output.speak(_(u"Discarded")) output.speak(_("Discarded"))
self.uploaded = False self.uploaded = False
self.dialog.change_upload_button(self.uploaded) self.dialog.change_upload_button(self.uploaded)
@ -83,43 +83,43 @@ class profileController(object):
try: try:
self.session.twitter.twitter.update_profile_image(image=self.file) self.session.twitter.twitter.update_profile_image(image=self.file)
except TwythonError as e: except TwythonError as e:
output.speak(u"Error %s. %s" % (e.error_code, e.msg)) output.speak("Error %s. %s" % (e.error_code, e.msg))
try: try:
self.session.twitter.twitter.update_profile(name=name, description=description, location=location, url=url) self.session.twitter.twitter.update_profile(name=name, description=description, location=location, url=url)
except TwythonError as e: except TwythonError as e:
output.speak(u"Error %s. %s" % (e.error_code, e.msg)) output.speak("Error %s. %s" % (e.error_code, e.msg))
def get_user_info(self): def get_user_info(self):
string = u"" string = ""
string = string + _(u"Username: @%s\n") % (self.data["screen_name"]) string = string + _("Username: @%s\n") % (self.data["screen_name"])
string = string + _(u"Name: %s\n") % (self.data["name"]) string = string + _("Name: %s\n") % (self.data["name"])
if self.data["location"] != "": if self.data["location"] != "":
string = string + _(u"Location: %s\n") % (self.data["location"]) string = string + _("Location: %s\n") % (self.data["location"])
if self.data["url"] != None: if self.data["url"] != None:
string = string+ _(u"URL: %s\n") % (self.data["url"]) string = string+ _("URL: %s\n") % (self.data["url"])
if self.data["description"] != "": if self.data["description"] != "":
string = string+ _(u"Bio: %s\n") % (self.data["description"]) string = string+ _("Bio: %s\n") % (self.data["description"])
if self.data["protected"] == True: protected = _(u"Yes") if self.data["protected"] == True: protected = _("Yes")
else: protected = _(u"No") else: protected = _("No")
string = string+ _(u"Protected: %s\n") % (protected) string = string+ _("Protected: %s\n") % (protected)
if hasattr(self, "friendship_status"): if hasattr(self, "friendship_status"):
relation = False relation = False
friendship = "Relationship: " friendship = "Relationship: "
if self.friendship_status["relationship"]["target"]["followed_by"]: if self.friendship_status["relationship"]["target"]["followed_by"]:
friendship += _(u"You follow {0}. ").format(self.data["name"],) friendship += _("You follow {0}. ").format(self.data["name"],)
relation = True relation = True
if self.friendship_status["relationship"]["target"]["following"]: if self.friendship_status["relationship"]["target"]["following"]:
friendship += _(u"{0} is following you.").format(self.data["name"],) friendship += _("{0} is following you.").format(self.data["name"],)
relation = True relation = True
if relation == True: if relation == True:
string = string+friendship+"\n" string = string+friendship+"\n"
string = string+_(u"Followers: %s\n Friends: %s\n") % (self.data["followers_count"], self.data["friends_count"]) string = string+_("Followers: %s\n Friends: %s\n") % (self.data["followers_count"], self.data["friends_count"])
if self.data["verified"] == True: verified = _(u"Yes") if self.data["verified"] == True: verified = _("Yes")
else: verified = _(u"No") else: verified = _("No")
string = string+ _(u"Verified: %s\n") % (verified) string = string+ _("Verified: %s\n") % (verified)
string = string+ _(u"Tweets: %s\n") % (self.data["statuses_count"]) string = string+ _("Tweets: %s\n") % (self.data["statuses_count"])
string = string+ _(u"Likes: %s") % (self.data["favourites_count"]) string = string+ _("Likes: %s") % (self.data["favourites_count"])
return string return string
def visit_url(self, *args, **kwargs): def visit_url(self, *args, **kwargs):

View File

@ -71,8 +71,8 @@ class userActionsController(object):
def ignore_client(self, user): def ignore_client(self, user):
tweet = self.buffer.get_right_tweet() tweet = self.buffer.get_right_tweet()
if tweet.has_key("sender"): if "sender" in tweet:
output.speak(_(u"You can't ignore direct messages")) output.speak(_("You can't ignore direct messages"))
return return
client = re.sub(r"(?s)<.*?>", "", tweet["source"]) client = re.sub(r"(?s)<.*?>", "", tweet["source"])
if client not in self.session.settings["twitter"]["ignored_clients"]: if client not in self.session.settings["twitter"]["ignored_clients"]:

View File

@ -16,10 +16,11 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
############################################################ ############################################################
from __future__ import absolute_import
import widgetUtils import widgetUtils
import wx_ui from . import wx_ui
import wx_transfer_dialogs from . import wx_transfer_dialogs
import transfer from . import transfer
import output import output
import tempfile import tempfile
import sound import sound

View File

@ -1,9 +1,10 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import sys import sys
import threading import threading
import time import time
import logging import logging
from utils import convert_bytes from .utils import convert_bytes
from pubsub import pub from pubsub import pub
log = logging.getLogger("extra.AudioUploader.transfer") log = logging.getLogger("extra.AudioUploader.transfer")
from requests_toolbelt.multipart.encoder import MultipartEncoder, MultipartEncoderMonitor from requests_toolbelt.multipart.encoder import MultipartEncoder, MultipartEncoderMonitor

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import wx import wx
from utils import * from .utils import *
import widgetUtils import widgetUtils
class UploadDialog(widgetUtils.BaseDialog): class UploadDialog(widgetUtils.BaseDialog):

View File

@ -1 +1,2 @@
from soundsTutorial import soundsTutorial from __future__ import absolute_import
from .soundsTutorial import soundsTutorial

View File

@ -1,15 +1,16 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import platform import platform
import widgetUtils import widgetUtils
import os import os
import paths import paths
import logging import logging
log = logging.getLogger("extra.SoundsTutorial.soundsTutorial") log = logging.getLogger("extra.SoundsTutorial.soundsTutorial")
import soundsTutorial_constants from . import soundsTutorial_constants
if platform.system() == "Windows": if platform.system() == "Windows":
import wx_ui as UI from . import wx_ui as UI
elif platform.system() == "Linux": elif platform.system() == "Linux":
import gtk_ui as UI from . import gtk_ui as UI
class soundsTutorial(object): class soundsTutorial(object):
def __init__(self, sessionObject): def __init__(self, sessionObject):

View File

@ -1,5 +1,7 @@
#-*- coding: utf-8 -*- #-*- coding: utf-8 -*-
import reverse_sort from __future__ import absolute_import
#-*- coding: utf-8 -*-
from . import reverse_sort
import application import application
actions = reverse_sort.reverse_sort([ ("audio", _(u"Audio tweet.")), actions = reverse_sort.reverse_sort([ ("audio", _(u"Audio tweet.")),
("create_timeline", _(u"User timeline buffer created.")), ("create_timeline", _(u"User timeline buffer created.")),

View File

@ -1,4 +1,5 @@
import spellchecker from __future__ import absolute_import
from . import spellchecker
import platform import platform
if platform.system() == "Windows": if platform.system() == "Windows":
from wx_ui import * from .wx_ui import *

View File

@ -1,7 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import logging import logging
log = logging.getLogger("extra.SpellChecker.spellChecker") log = logging.getLogger("extra.SpellChecker.spellChecker")
import wx_ui from . import wx_ui
import widgetUtils import widgetUtils
import output import output
import config import config
@ -9,7 +10,7 @@ import languageHandler
from enchant.checker import SpellChecker from enchant.checker import SpellChecker
from enchant.errors import DictNotFoundError from enchant.errors import DictNotFoundError
from enchant import tokenize from enchant import tokenize
import twitterFilter from . import twitterFilter
class spellChecker(object): class spellChecker(object):
def __init__(self, text, dictionary): def __init__(self, text, dictionary):
@ -41,7 +42,7 @@ class spellChecker(object):
def check(self): def check(self):
try: try:
self.checker.next() next(self.checker)
textToSay = _(u"Misspelled word: %s") % (self.checker.word,) textToSay = _(u"Misspelled word: %s") % (self.checker.word,)
context = u"... %s %s %s" % (self.checker.leading_context(10), self.checker.word, self.checker.trailing_context(10)) context = u"... %s %s %s" % (self.checker.leading_context(10), self.checker.word, self.checker.trailing_context(10))
self.dialog.set_title(textToSay) self.dialog.set_title(textToSay)

View File

@ -1,2 +1,4 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import completion, settings from __future__ import absolute_import
# -*- coding: utf-8 -*-
from . import completion, settings

View File

@ -1,7 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import output import output
import storage from . import storage
import wx_menu from . import wx_menu
class autocompletionUsers(object): class autocompletionUsers(object):
def __init__(self, window, session_id): def __init__(self, window, session_id):

View File

@ -1,7 +1,9 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import storage from __future__ import absolute_import
# -*- coding: utf-8 -*-
from . import storage
import widgetUtils import widgetUtils
import wx_manage from . import wx_manage
from wxUI import commonMessageDialogs from wxUI import commonMessageDialogs
class autocompletionManage(object): class autocompletionManage(object):

View File

@ -1,8 +1,10 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import storage from __future__ import absolute_import
# -*- coding: utf-8 -*-
from . import storage
import widgetUtils import widgetUtils
import wx_settings from . import wx_settings
import manage from . import manage
import output import output
from mysc.thread_utils import call_threaded from mysc.thread_utils import call_threaded

View File

@ -1,2 +1,4 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import OCRSpace from __future__ import absolute_import
# -*- coding: utf-8 -*-
from . import OCRSpace

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import translator from __future__ import absolute_import
from . import translator
import platform import platform
if platform.system() == "Windows": if platform.system() == "Windows":
import wx_ui as gui from . import wx_ui as gui

View File

@ -9,97 +9,97 @@ def translate(text="", target="en"):
supported_langs = None supported_langs = None
d = None d = None
languages = { languages = {
"af": _(u"Afrikaans"), "af": _("Afrikaans"),
"sq": _(u"Albanian"), "sq": _("Albanian"),
"am": _(u"Amharic"), "am": _("Amharic"),
"ar": _(u"Arabic"), "ar": _("Arabic"),
"hy": _(u"Armenian"), "hy": _("Armenian"),
"az": _(u"Azerbaijani"), "az": _("Azerbaijani"),
"eu": _(u"Basque"), "eu": _("Basque"),
"be": _(u"Belarusian"), "be": _("Belarusian"),
"bn": _(u"Bengali"), "bn": _("Bengali"),
"bh": _(u"Bihari"), "bh": _("Bihari"),
"bg": _(u"Bulgarian"), "bg": _("Bulgarian"),
"my": _(u"Burmese"), "my": _("Burmese"),
"ca": _(u"Catalan"), "ca": _("Catalan"),
"chr": _(u"Cherokee"), "chr": _("Cherokee"),
"zh": _(u"Chinese"), "zh": _("Chinese"),
"zh-CN": _(u"Chinese_simplified"), "zh-CN": _("Chinese_simplified"),
"zh-TW": _(u"Chinese_traditional"), "zh-TW": _("Chinese_traditional"),
"hr": _(u"Croatian"), "hr": _("Croatian"),
"cs": _(u"Czech"), "cs": _("Czech"),
"da": _(u"Danish"), "da": _("Danish"),
"dv": _(u"Dhivehi"), "dv": _("Dhivehi"),
"nl": _(u"Dutch"), "nl": _("Dutch"),
"en": _(u"English"), "en": _("English"),
"eo": _(u"Esperanto"), "eo": _("Esperanto"),
"et": _(u"Estonian"), "et": _("Estonian"),
"tl": _(u"Filipino"), "tl": _("Filipino"),
"fi": _(u"Finnish"), "fi": _("Finnish"),
"fr": _(u"French"), "fr": _("French"),
"gl": _(u"Galician"), "gl": _("Galician"),
"ka": _(u"Georgian"), "ka": _("Georgian"),
"de": _(u"German"), "de": _("German"),
"el": _(u"Greek"), "el": _("Greek"),
"gn": _(u"Guarani"), "gn": _("Guarani"),
"gu": _(u"Gujarati"), "gu": _("Gujarati"),
"iw": _(u"Hebrew"), "iw": _("Hebrew"),
"hi": _(u"Hindi"), "hi": _("Hindi"),
"hu": _(u"Hungarian"), "hu": _("Hungarian"),
"is": _(u"Icelandic"), "is": _("Icelandic"),
"id": _(u"Indonesian"), "id": _("Indonesian"),
"iu": _(u"Inuktitut"), "iu": _("Inuktitut"),
"ga": _(u"Irish"), "ga": _("Irish"),
"it": _(u"Italian"), "it": _("Italian"),
"ja": _(u"Japanese"), "ja": _("Japanese"),
"kn": _(u"Kannada"), "kn": _("Kannada"),
"kk": _(u"Kazakh"), "kk": _("Kazakh"),
"km": _(u"Khmer"), "km": _("Khmer"),
"ko": _(u"Korean"), "ko": _("Korean"),
"ku": _(u"Kurdish"), "ku": _("Kurdish"),
"ky": _(u"Kyrgyz"), "ky": _("Kyrgyz"),
"lo": _(u"Laothian"), "lo": _("Laothian"),
"lv": _(u"Latvian"), "lv": _("Latvian"),
"lt": _(u"Lithuanian"), "lt": _("Lithuanian"),
"mk": _(u"Macedonian"), "mk": _("Macedonian"),
"ms": _(u"Malay"), "ms": _("Malay"),
"ml": _(u"Malayalam"), "ml": _("Malayalam"),
"mt": _(u"Maltese"), "mt": _("Maltese"),
"mr": _(u"Marathi"), "mr": _("Marathi"),
"mn": _(u"Mongolian"), "mn": _("Mongolian"),
"ne": _(u"Nepali"), "ne": _("Nepali"),
"no": _(u"Norwegian"), "no": _("Norwegian"),
"or": _(u"Oriya"), "or": _("Oriya"),
"ps": _(u"Pashto"), "ps": _("Pashto"),
"fa": _(u"Persian"), "fa": _("Persian"),
"pl": _(u"Polish"), "pl": _("Polish"),
"pt": _(u"Portuguese"), "pt": _("Portuguese"),
"pa": _(u"Punjabi"), "pa": _("Punjabi"),
"ro": _(u"Romanian"), "ro": _("Romanian"),
"ru": _(u"Russian"), "ru": _("Russian"),
"sa": _(u"Sanskrit"), "sa": _("Sanskrit"),
"sr": _(u"Serbian"), "sr": _("Serbian"),
"sd": _(u"Sindhi"), "sd": _("Sindhi"),
"si": _(u"Sinhalese"), "si": _("Sinhalese"),
"sk": _(u"Slovak"), "sk": _("Slovak"),
"sl": _(u"Slovenian"), "sl": _("Slovenian"),
"es": _(u"Spanish"), "es": _("Spanish"),
"sw": _(u"Swahili"), "sw": _("Swahili"),
"sv": _(u"Swedish"), "sv": _("Swedish"),
"tg": _(u"Tajik"), "tg": _("Tajik"),
"ta": _(u"Tamil"), "ta": _("Tamil"),
"tl": _(u"Tagalog"), "tl": _("Tagalog"),
"te": _(u"Telugu"), "te": _("Telugu"),
"th": _(u"Thai"), "th": _("Thai"),
"bo": _(u"Tibetan"), "bo": _("Tibetan"),
"tr": _(u"Turkish"), "tr": _("Turkish"),
"uk": _(u"Ukrainian"), "uk": _("Ukrainian"),
"ur": _(u"Urdu"), "ur": _("Urdu"),
"uz": _(u"Uzbek"), "uz": _("Uzbek"),
"ug": _(u"Uighur"), "ug": _("Uighur"),
"vi": _(u"Vietnamese"), "vi": _("Vietnamese"),
"cy": _(u"Welsh"), "cy": _("Welsh"),
"yi": _(u"Yiddish") "yi": _("Yiddish")
} }
def available_languages(): def available_languages():

View File

@ -16,20 +16,43 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
############################################################ ############################################################
import translator
# -*- coding: utf-8 -*-
############################################################
# Copyright (c) 2013, 2014 Manuel Eduardo Cortéz Vallejo <manuel@manuelcortez.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
############################################################
from . import translator
import wx import wx
from wxUI.dialogs import baseDialog from wxUI.dialogs import baseDialog
class translateDialog(baseDialog.BaseWXDialog): class translateDialog(baseDialog.BaseWXDialog):
def __init__(self): def __init__(self):
super(translateDialog, self).__init__(None, -1, title=_(u"Translate message")) super(translateDialog, self).__init__(None, -1, title=_("Translate message"))
panel = wx.Panel(self) panel = wx.Panel(self)
sizer = wx.BoxSizer(wx.VERTICAL) sizer = wx.BoxSizer(wx.VERTICAL)
staticDest = wx.StaticText(panel, -1, _(u"Target language")) staticSource = wx.StaticText(panel, -1, _("Source language"))
self.source_lang = wx.ComboBox(panel, -1, choices=[x[1] for x in translator.available_languages()], style = wx.CB_READONLY)
self.source_lang.SetFocus()
staticDest = wx.StaticText(panel, -1, _("Target language"))
self.source_lang.SetSelection(0)
self.dest_lang = wx.ComboBox(panel, -1, choices=[x[1] for x in translator.available_languages()], style = wx.CB_READONLY) self.dest_lang = wx.ComboBox(panel, -1, choices=[x[1] for x in translator.available_languages()], style = wx.CB_READONLY)
self.dest_lang.SetFocus()
self.dest_lang.SetSelection(0)
listSizer = wx.BoxSizer(wx.HORIZONTAL) listSizer = wx.BoxSizer(wx.HORIZONTAL)
listSizer.Add(staticSource)
listSizer.Add(self.source_lang)
listSizer.Add(staticDest) listSizer.Add(staticDest)
listSizer.Add(self.dest_lang) listSizer.Add(self.dest_lang)
ok = wx.Button(panel, wx.ID_OK) ok = wx.Button(panel, wx.ID_OK)

View File

@ -1,10 +1,11 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" This module contains some bugfixes for packages used in TWBlue.""" """ This module contains some bugfixes for packages used in TWBlue."""
from __future__ import absolute_import
import sys import sys
import fix_arrow # A few new locales for Three languages in arrow. from . import fix_arrow # A few new locales for Three languages in arrow.
import fix_urllib3_warnings # Avoiding some SSL warnings related to Twython. from . import fix_urllib3_warnings # Avoiding some SSL warnings related to Twython.
import fix_win32com from . import fix_win32com
import fix_requests #fix cacert.pem location for TWBlue binary copies from . import fix_requests #fix cacert.pem location for TWBlue binary copies
def setup(): def setup():
fix_arrow.fix() fix_arrow.fix()
if hasattr(sys, "frozen"): if hasattr(sys, "frozen"):

View File

@ -16,13 +16,14 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
############################################################ ############################################################
from __future__ import absolute_import
import keys import keys
import wx import wx
import wx_ui from . import wx_ui
import widgetUtils import widgetUtils
import application import application
from suds.client import Client from suds.client import Client
import constants from . import constants
class reportBug(object): class reportBug(object):
def __init__(self, user_name): def __init__(self, user_name):

View File

@ -1,3 +1,4 @@
from main import KeyboardHandler, KeyboardHandlerError from __future__ import absolute_import
from .main import KeyboardHandler, KeyboardHandlerError
#from wx_handler import WXKeyboardHandler #from wx_handler import WXKeyboardHandler
__all__ = ["KeyboardHandler", "KeyboardHandlerError", "WXKeyboardHandler", "WXPanelKeyboardHandler"] __all__ = ["KeyboardHandler", "KeyboardHandlerError", "WXKeyboardHandler", "WXPanelKeyboardHandler"]

View File

@ -1,7 +1,8 @@
from __future__ import absolute_import
import platform import platform
if platform.system() == 'Linux': if platform.system() == 'Linux':
from linux import LinuxKeyboardHandler as GlobalKeyboardHandler from .linux import LinuxKeyboardHandler as GlobalKeyboardHandler
elif platform.system() == 'Windows': elif platform.system() == 'Windows':
from wx_handler import WXKeyboardHandler as GlobalKeyboardHandler from .wx_handler import WXKeyboardHandler as GlobalKeyboardHandler
elif platform.system() == 'Darwin': elif platform.system() == 'Darwin':
from osx import OSXKeyboardHandler as GlobalKeyboardHandler from .osx import OSXKeyboardHandler as GlobalKeyboardHandler

View File

@ -1,4 +1,5 @@
from main import KeyboardHandler from __future__ import absolute_import
from .main import KeyboardHandler
import threading import threading
import thread import thread
import pyatspi import pyatspi
@ -21,7 +22,7 @@ Unknown modifiers will return ValueError."""
lst.remove(item) lst.remove(item)
#end if #end if
if len(lst) > 1: #more than one key, parse error if len(lst) > 1: #more than one key, parse error
raise ValueError, 'unknown modifier %s' % lst[0] raise ValueError('unknown modifier %s' % lst[0])
return (m, lst[0].lower()) return (m, lst[0].lower())
class AtspiThread(threading.Thread): class AtspiThread(threading.Thread):
def run(self): def run(self):

View File

@ -18,17 +18,17 @@ class KeyboardHandler(object):
def register_key (self, key, function): def register_key (self, key, function):
if key in self.active_keys: if key in self.active_keys:
raise KeyboardHandlerError, "Key %s is already registered to a function" % key raise KeyboardHandlerError("Key %s is already registered to a function" % key)
if not callable(function): if not callable(function):
raise TypeError, "Must provide a callable to be invoked upon keypress" raise TypeError("Must provide a callable to be invoked upon keypress")
self.active_keys[key] = function self.active_keys[key] = function
def unregister_key (self, key, function): def unregister_key (self, key, function):
try: try:
if self.active_keys[key] != function: if self.active_keys[key] != function:
raise KeyboardHandlerError, "key %s is not registered to that function" % key raise KeyboardHandlerError("key %s is not registered to that function" % key)
except KeyError: except KeyError:
raise KeyboardHandlerError, "Key %s not currently registered" raise KeyboardHandlerError("Key %s not currently registered")
del(self.active_keys[key]) del(self.active_keys[key])
def unregister_all_keys(self): def unregister_all_keys(self):

View File

@ -1,3 +1,4 @@
from __future__ import absolute_import
from AppKit import * from AppKit import *
from PyObjCTools import AppHelper from PyObjCTools import AppHelper
from Carbon.CarbonEvt import RegisterEventHotKey, GetApplicationEventTarget from Carbon.CarbonEvt import RegisterEventHotKey, GetApplicationEventTarget
@ -5,7 +6,7 @@ from Carbon.Events import cmdKey, controlKey
import struct import struct
from threading import Thread from threading import Thread
from main import KeyboardHandler from .main import KeyboardHandler
kEventHotKeyPressedSubtype = 6 kEventHotKeyPressedSubtype = 6
kEventHotKeyReleasedSubtype = 9 kEventHotKeyReleasedSubtype = 9
@ -35,9 +36,9 @@ class OSXKeyboardHandler(KeyboardHandler):
#replacements #replacements
#Modifier keys: #Modifier keys:
for index, item in enumerate(key[0:-1]): for index, item in enumerate(key[0:-1]):
if self.replacement_mods.has_key(item): if item in self.replacement_mods:
key[index] = self.replacement_mods[item] key[index] = self.replacement_mods[item]
if self.replacement_keys.has_key(key[-1]): if key[-1] in self.replacement_keys:
key[-1] = self.replacement_keys[key[-1]] key[-1] = self.replacement_keys[key[-1]]
elif len(key[-1])==1: elif len(key[-1])==1:
key[-1] = ord(str(key[-1]))-36 key[-1] = ord(str(key[-1]))-36

View File

@ -1,7 +1,8 @@
from __future__ import absolute_import
import win32api import win32api
import win32con import win32con
from main import KeyboardHandler from .main import KeyboardHandler
class WindowsKeyboardHandler(KeyboardHandler): class WindowsKeyboardHandler(KeyboardHandler):

View File

@ -1,7 +1,9 @@
from __future__ import print_function
from __future__ import absolute_import
import functools import functools
import wx import wx
import platform import platform
from main import KeyboardHandler from .main import KeyboardHandler
__all__ = ['WXKeyboardHandler', 'WXControlKeyboardHandler'] __all__ = ['WXKeyboardHandler', 'WXControlKeyboardHandler']
@ -42,18 +44,18 @@ class BaseWXKeyboardHandler(KeyboardHandler):
result -= 277 result -= 277
elif len(key) == 1: elif len(key) == 1:
result = ord(key.upper()) result = ord(key.upper())
print "result: ", result print("result: ", result)
return result return result
#try: #try:
if platform.system() == "Windows": if platform.system() == "Windows":
from windows import WindowsKeyboardHandler as keyboard_handler from .windows import WindowsKeyboardHandler as keyboard_handler
elif platform.system() == "Linux": elif platform.system() == "Linux":
from linux import LinuxKeyboardHandler as keyboard_handler from .linux import LinuxKeyboardHandler as keyboard_handler
elif platform.system() == "Darwin": elif platform.system() == "Darwin":
from osx import OSXKeyboardHandler as keyboard_handler from .osx import OSXKeyboardHandler as keyboard_handler
class WXKeyboardHandler(keyboard_handler): class WXKeyboardHandler(keyboard_handler):
def __init__ (self, parent, *args, **kwargs): def __init__ (self, parent, *args, **kwargs):

View File

@ -1 +1,2 @@
from keystrokeEditor import KeystrokeEditor from __future__ import absolute_import
from .keystrokeEditor import KeystrokeEditor

View File

@ -1,8 +1,9 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import widgetUtils import widgetUtils
import config import config
import wx_ui from . import wx_ui
import constants from . import constants
from pubsub import pub from pubsub import pub
class KeystrokeEditor(object): class KeystrokeEditor(object):

View File

@ -32,7 +32,7 @@ class keystrokeEditorDialog(baseDialog.BaseWXDialog):
selection = self.keys.get_selected() selection = self.keys.get_selected()
self.keys.clear() self.keys.clear()
for i in keystrokes: for i in keystrokes:
if actions.has_key(i) == False: if (i in actions) == False:
continue continue
action = actions[i] action = actions[i]
self.actions.append(i) self.actions.append(i)

View File

@ -19,12 +19,12 @@
from twitter import utils from twitter import utils
def is_long(tweet): def is_long(tweet):
if tweet.has_key("quoted_status_id") and tweet["quoted_status_id"] != None: if "is_quote_status" in tweet and tweet["is_quote_status"] == True and "quoted_status" in tweet:
return tweet["quoted_status_id"] return tweet["quoted_status_id"]
return False return False
def clear_url(tweet): def clear_url(tweet):
if tweet.has_key("full_text"): if "full_text" in tweet:
value = "full_text" value = "full_text"
else: else:
value = "text" value = "text"

View File

@ -16,6 +16,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
############################################################ ############################################################
from __future__ import print_function
import requests import requests
import keys import keys
import logging import logging
@ -41,7 +42,7 @@ def is_long(tweet):
# see https://github.com/manuelcortez/TWBlue/issues/103 # see https://github.com/manuelcortez/TWBlue/issues/103
except TypeError: except TypeError:
pass pass
if long == False and tweet.has_key("retweeted_status"): if long == False and "retweeted_status" in tweet:
for url in range(0, len(tweet["retweeted_status"]["entities"]["urls"])): for url in range(0, len(tweet["retweeted_status"]["entities"]["urls"])):
try: try:
if tweet["retweeted_status"]["entities"]["urls"][url] != None and "twishort.com" in tweet["retweeted_status"]["entities"]["urls"][url]["expanded_url"]: if tweet["retweeted_status"]["entities"]["urls"][url] != None and "twishort.com" in tweet["retweeted_status"]["entities"]["urls"][url]["expanded_url"]:
@ -83,5 +84,5 @@ def create_tweet(user_token, user_secret, text, media=0):
try: try:
return response.json()["text_to_tweet"] return response.json()["text_to_tweet"]
except: except:
print "There was a problem creating a long tweet" print("There was a problem creating a long tweet")
return 0 return 0

View File

@ -1 +1,2 @@
import widgets from __future__ import absolute_import
from . import widgets

View File

@ -37,9 +37,9 @@ class list(object):
if self.system == "Windows": if self.system == "Windows":
if reversed == False: items = self.list.GetItemCount() if reversed == False: items = self.list.GetItemCount()
else: items = 0 else: items = 0
self.list.InsertStringItem(items, item[0]) self.list.InsertItem(items, unicode(item[0]))
for i in xrange(1, len(self.columns)): for i in xrange(1, len(self.columns)):
self.list.SetStringItem(items, i, item[i]) self.list.SetItem(items, i, unicode(item[i]))
else: else:
self.list.Append(" ".join(item)) self.list.Append(" ".join(item))
@ -85,5 +85,5 @@ class list(object):
return item.GetText() return item.GetText()
def set_text_column(self, indexId, column, text): def set_text_column(self, indexId, column, text):
item = self.list.SetStringItem(indexId, column, text) item = self.list.SetItem(indexId, column, unicode(text))
return item return item

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" A cross platform notification system. """ A cross platform notification system.
Under Linux, the wx.NotificationMessage does not show a notification on the taskbar, so we decided to use dbus for showing notifications for linux and wx for Windows.""" Under Linux, the wx.NotificationMessage does not show a notification on the taskbar, so we decided to use dbus for showing notifications for linux and wx for Windows."""
from __future__ import absolute_import
import platform import platform
notify = None notify = None
@ -8,10 +9,10 @@ notify = None
def setup(): def setup():
global notify global notify
if platform.system() == "Windows": if platform.system() == "Windows":
import windows from . import windows
notify = windows.notification() notify = windows.notification()
elif platform.system() == "Linux": elif platform.system() == "Linux":
import linux from . import linux
notify = linux.notification() notify = linux.notification()
def send(title, text): def send(title, text):

View File

@ -1,3 +1,4 @@
from __future__ import print_function
import _winreg import _winreg
import os import os
import sys import sys
@ -31,7 +32,7 @@ def getAutoStart(app_name):
def setAutoStart(app_name, enable=True): def setAutoStart(app_name, enable=True):
"""Configures automatic startup for the application, if the enable argument is set to True. If set to False, deletes the application AutoStart value.""" """Configures automatic startup for the application, if the enable argument is set to True. If set to False, deletes the application AutoStart value."""
print paths.get_executable() print(paths.get_executable())
if getAutoStart(app_name) == enable: if getAutoStart(app_name) == enable:
return return
key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, RUN_REGKEY, 0, _winreg.KEY_WRITE) key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, RUN_REGKEY, 0, _winreg.KEY_WRITE)

View File

@ -1,11 +1,12 @@
# -*- coding: cp1252 -*- # -*- coding: cp1252 -*-
#from config_utils import Configuration, ConfigurationResetException #from config_utils import Configuration, ConfigurationResetException
from __future__ import absolute_import
import config import config
import paths import paths
import os import os
import logging import logging
log = logging.getLogger("sessionmanager.manager") log = logging.getLogger("sessionmanager.manager")
import session_exceptions from . import session_exceptions
manager = None manager = None
def setup(): def setup():

View File

@ -1,3 +1,4 @@
<<<<<<< HEAD
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" The main session object. Here are the twitter functions to interact with the "model" of TWBlue.""" """ The main session object. Here are the twitter functions to interact with the "model" of TWBlue."""
import wx import wx
@ -494,4 +495,488 @@ class Session(object):
if tweet.has_key("retweeted_status") and tweet["retweeted_status"]["user"]["screen_name"] == i["screen_name"]: if tweet.has_key("retweeted_status") and tweet["retweeted_status"]["user"]["screen_name"] == i["screen_name"]:
continue continue
tweet["message"] = u"@%s %s" % (i["screen_name"], tweet["message"]) tweet["message"] = u"@%s %s" % (i["screen_name"], tweet["message"])
=======
# -*- coding: utf-8 -*-
""" The main session object. Here are the twitter functions to interact with the "model" of TWBlue."""
from __future__ import absolute_import
import urllib2
import config
import twitter
from keys import keyring
from . import session_exceptions as Exceptions
import paths
import output
import time
import sound
import logging
from twitter import utils, compose
from twython import TwythonError, TwythonRateLimitError, TwythonAuthError
import config_utils
import shelve
import application
import os
from mysc.thread_utils import stream_threaded
from pubsub import pub
log = logging.getLogger("sessionmanager.session")
from long_tweets import tweets, twishort
sessions = {}
class Session(object):
""" A session object where we will save configuration, the twitter object and a local storage for saving the items retrieved through the Twitter API methods"""
# Decorators.
def _require_login(fn):
""" Decorator for checking if the user is logged in(a twitter object has credentials) on twitter.
Some functions may need this to avoid making unneeded twitter API calls."""
def f(self, *args, **kwargs):
if self.logged == True:
fn(self, *args, **kwargs)
else:
raise Exceptions.NotLoggedSessionError("You are not logged in yet.")
return f
def _require_configuration(fn):
""" Check if the user has a configured session."""
def f(self, *args, **kwargs):
if self.settings != None:
fn(self, *args, **kwargs)
else:
raise Exceptions.NotConfiguredSessionError("Not configured.")
return f
def order_buffer(self, name, data, ignore_older=True):
""" Put the new items in the local database.
name str: The name for the buffer stored in the dictionary.
data list: A list with tweets.
returns the number of items that have been added in this execution"""
num = 0
last_id = None
if (name in self.db) == False:
self.db[name] = []
if ignore_older and len(self.db[name]) > 0:
if self.settings["general"]["reverse_timelines"] == False:
last_id = self.db[name][0]["id"]
else:
last_id = self.db[name][-1]["id"]
for i in data:
if ignore_older and last_id != None:
if i["id"] < last_id:
log.error("Ignoring an older tweet... Last id: {0}, tweet id: {1}".format(last_id, i["id"]))
continue
if utils.find_item(i["id"], self.db[name]) == None and utils.is_allowed(i, self.settings["twitter"]["ignored_clients"]) == True:
try: i = self.check_quoted_status(i)
except: pass
i = self.check_long_tweet(i)
if i == False: continue
if self.settings["general"]["reverse_timelines"] == False: self.db[name].append(i)
else: self.db[name].insert(0, i)
num = num+1
return num
def order_cursored_buffer(self, name, data):
""" Put the new items on the local database. Useful for cursored buffers (followers, friends, users of a list and searches)
name str: The name for the buffer stored in the dictionary.
data list: A list with items and some information about cursors.
returns the number of items that have been added in this execution"""
num = 0
if (name in self.db) == False:
self.db[name] = {}
self.db[name]["items"] = []
# if len(self.db[name]["items"]) > 0:
for i in data:
if utils.find_item(i["id"], self.db[name]["items"]) == None:
if self.settings["general"]["reverse_timelines"] == False: self.db[name]["items"].append(i)
else: self.db[name]["items"].insert(0, i)
num = num+1
return num
def __init__(self, session_id):
""" session_id (str): The name of the folder inside the config directory where the session is located."""
super(Session, self).__init__()
self.session_id = session_id
self.logged = False
self.settings = None
self.twitter = twitter.twitter.twitter()
self.db={}
self.reconnection_function_active = False
self.counter = 0
self.lists = []
pub.subscribe(self.add_friends, "friends-receibed")
@property
def is_logged(self):
return self.logged
def get_configuration(self):
""" Gets settings for a session."""
file_ = "%s/session.conf" % (self.session_id,)
# try:
log.debug("Creating config file %s" % (file_,))
self.settings = config_utils.load_config(paths.config_path(file_), paths.app_path("Conf.defaults"))
self.init_sound()
self.deshelve()
# except:
# log.exception("The session configuration has failed.")
# self.settings = None
def init_sound(self):
try: self.sound = sound.soundSystem(self.settings["sound"])
except: log.exception("Exception thrown during sound system initialization")
@_require_configuration
def login(self, verify_credentials=True):
""" Log into twitter using credentials from settings.
if the user account isn't authorised, it needs to call self.authorise() before login."""
if self.settings["twitter"]["user_key"] != None and self.settings["twitter"]["user_secret"] != None:
try:
log.debug("Logging in to twitter...")
self.twitter.login(self.settings["twitter"]["user_key"], self.settings["twitter"]["user_secret"], verify_credentials)
self.logged = True
log.debug("Logged.")
self.counter = 0
except:
log.error("The login attempt failed.")
self.logged = False
else:
self.logged = False
raise Exceptions.RequireCredentialsSessionError
@_require_configuration
def authorise(self):
""" Authorises a Twitter account. This function needs to be called for each new session, after self.get_configuration() and before self.login()"""
if self.logged == True:
raise Exceptions.AlreadyAuthorisedError("The authorisation process is not needed at this time.")
else:
self.twitter.authorise(self.settings)
def get_more_items(self, update_function, users=False, name=None, *args, **kwargs):
results = []
data = getattr(self.twitter.twitter, update_function)(*args, **kwargs)
if users == True:
if type(data) == dict and "cursor" in data:
self.db[name]["cursor"] = data["next_cursor"]
for i in data["users"]: results.append(i)
elif type(data) == list:
results.extend(data[1:])
else:
results.extend(data[1:])
return results
def api_call(self, call_name, action="", _sound=None, report_success=False, report_failure=True, preexec_message="", *args, **kwargs):
""" Make a call to the Twitter API. If there is a connectionError or another exception not related to Twitter, It will call the method again at least 25 times, waiting a while between calls. Useful for post methods.
If twitter returns an error, it will not call the method anymore.
call_name str: The method to call
action str: What you are doing on twitter, it will be reported to the user if report_success is set to True.
for example "following @tw_blue2" will be reported as "following @tw_blue2 succeeded".
_sound str: a sound to play if the call is executed properly.
report_success and report_failure bool: These are self explanatory. True or False.
preexec_message str: A message to speak to the user while the method is running, example: "trying to follow x user"."""
finished = False
tries = 0
if preexec_message:
output.speak(preexec_message, True)
while finished==False and tries < 25:
try:
val = getattr(self.twitter.twitter, call_name)(*args, **kwargs)
finished = True
except TwythonError as e:
output.speak(e.message)
if e.error_code != 403 and e.error_code != 404:
tries = tries+1
time.sleep(5)
elif report_failure and hasattr(e, 'message'):
output.speak(_("%s failed. Reason: %s") % (action, e.message))
finished = True
# except:
# tries = tries + 1
# time.sleep(5)
if report_success:
output.speak(_("%s succeeded.") % action)
if _sound != None: self.sound.play(_sound)
return val
def search(self, name, *args, **kwargs):
tl = self.twitter.twitter.search(*args, **kwargs)
tl["statuses"].reverse()
return tl["statuses"]
@_require_login
def get_favourites_timeline(self, name, *args, **kwargs):
""" Gets favourites for the authenticated user or a friend or follower.
name str: Name for storage in the database."""
tl = self.call_paged(self.twitter.twitter.get_favorites, *args, **kwargs)
return self.order_buffer(name, tl)
def call_paged(self, update_function, *args, **kwargs):
""" Makes a call to the Twitter API methods several times. Useful for get methods.
this function is needed for retrieving more than 200 items.
update_function str: The function to call. This function must be child of self.twitter.twitter
returns a list with all items retrieved."""
max = int(self.settings["general"]["max_api_calls"])-1
results = []
data = getattr(self.twitter.twitter, update_function)(count=self.settings["general"]["max_tweets_per_call"], *args, **kwargs)
results.extend(data)
for i in range(0, max):
if i == 0: max_id = results[-1]["id"]
else: max_id = results[0]["id"]
data = getattr(self.twitter.twitter, update_function)(max_id=max_id, count=self.settings["general"]["max_tweets_per_call"], *args, **kwargs)
results.extend(data)
results.reverse()
return results
@_require_login
def get_user_info(self):
""" Retrieves some information required by TWBlue for setup."""
f = self.twitter.twitter.get_account_settings()
sn = f["screen_name"]
self.settings["twitter"]["user_name"] = sn
self.db["user_name"] = sn
self.db["user_id"] = self.twitter.twitter.show_user(screen_name=sn)["id_str"]
try:
self.db["utc_offset"] = f["time_zone"]["utc_offset"]
except KeyError:
self.db["utc_offset"] = -time.timezone
self.get_lists()
self.get_muted_users()
self.settings.write()
@_require_login
def get_lists(self):
""" Gets the lists that the user is subscribed to and stores them in the database. Returns None."""
self.db["lists"] = self.twitter.twitter.show_lists(reverse=True)
@_require_login
def get_muted_users(self):
""" Gets muted users (oh really?)."""
self.db["muted_users"] = self.twitter.twitter.list_mute_ids()["ids"]
@_require_login
def get_stream(self, name, function, *args, **kwargs):
""" Retrieves the items for a regular stream.
name str: Name to save items to the database.
function str: A function to get the items."""
last_id = -1
if name in self.db:
try:
if self.db[name][0]["id"] > self.db[name][-1]["id"]:
last_id = self.db[name][0]["id"]
else:
last_id = self.db[name][-1]["id"]
except IndexError:
pass
tl = self.call_paged(function, sinze_id=last_id, *args, **kwargs)
self.order_buffer(name, tl)
def get_cursored_stream(self, name, function, items="users", get_previous=False, *args, **kwargs):
""" Gets items for API calls that require using cursors to paginate the results.
name str: Name to save it in the database.
function str: Function that provides the items.
items: When the function returns the list with results, items will tell how the order function should be look.
for example get_followers_list returns a list and users are under list["users"], here the items should point to "users"."""
items_ = []
try:
if "cursor" in self.db[name] and get_previous:
cursor = self.db[name]["cursor"]
else:
cursor = -1
except KeyError:
cursor = -1
tl = getattr(self.twitter.twitter, function)(cursor=cursor, count=self.settings["general"]["max_tweets_per_call"], *args, **kwargs)
tl[items].reverse()
num = self.order_cursored_buffer(name, tl[items])
self.db[name]["cursor"] = tl["next_cursor"]
return num
def start_streaming(self):
""" Start the streaming for sending tweets in realtime."""
if not hasattr(self, "main_stream"):
self.get_timelines()
if not hasattr(self, "timelinesStream"):
self.get_main_stream()
def get_main_stream(self):
log.debug("Starting the main stream...")
self.main_stream = twitter.buffers.stream.streamer(keyring.get("api_key"), keyring.get("api_secret"), self.settings["twitter"]["user_key"], self.settings["twitter"]["user_secret"], self)
stream_threaded(self.main_stream.user, self.session_id)
def get_timelines(self):
log.debug("Starting the timelines stream...")
self.timelinesStream = twitter.buffers.indibidual.timelinesStreamer(keyring.get("api_key"), keyring.get("api_secret"), self.settings["twitter"]["user_key"], self.settings["twitter"]["user_secret"], session=self)
ids = ""
for i in self.settings["other_buffers"]["timelines"]:
ids = ids + "%s, " % (self.db[i+"-timeline"][0]["user"]["id_str"])
for i in self.lists:
for z in i.users:
ids += str(z) + ", "
if ids != "":
# print ids
stream_threaded(self.timelinesStream.statuses.filter, self.session_id, follow=ids)
def add_friends(self):
try:
# print "setting friends"
self.timelinesStream.set_friends(self.main_stream.friends)
except AttributeError:
pass
def listen_stream_error(self):
if hasattr(self, "main_stream"):
log.debug("Disconnecting the main stream...")
self.main_stream.disconnect()
del self.main_stream
if hasattr(self, "timelinesStream"):
log.debug("disconnecting the timelines stream...")
self.timelinesStream.disconnect()
del self.timelinesStream
def check_connection(self):
instan = 0
self.counter += 1
if self.counter >= 4:
del self.twitter
self.logged = False
self.twitter = twitter.twitter.twitter()
self.login(False)
pub.sendMessage("restart_streams", session=self.session_id)
if self.reconnection_function_active == True: return
self.reconnection_function_active = True
if not hasattr(self, "main_stream"):
self.get_main_stream()
if not hasattr(self, "timelinesStream"):
self.get_timelines()
self.reconnection_function_active = False
if hasattr(self, "timelinesStream") and not hasattr(self.timelinesStream, "friends"):
self.add_friends()
# try:
# urllib2.urlopen("http://74.125.228.231", timeout=5)
# except urllib2.URLError:
# pub.sendMessage("stream-error", session=self.session_id)
def remove_stream(self, stream):
if stream == "timelinesStream":
if hasattr(self, "timelinesStream"):
self.timelinesStream.disconnect()
del self.timelinesStream
else:
self.main_stream.disconnect()
del self.main_stream
def shelve(self):
"Shelve the database to allow for persistance."
shelfname=paths.config_path(str(self.session_id)+"/cache.db")
if self.settings["general"]["persist_size"] == 0:
if os.path.exists(shelfname):
os.remove(shelfname)
return
try:
if not os.path.exists(shelfname):
output.speak("Generating database, this might take a while.",True)
shelf=shelve.open(paths.config_path(shelfname),'c')
for key,value in self.db.items():
if type(key) != str and type(key) != unicode:
output.speak("Uh oh, while shelving the database, a key of type " + str(type(key)) + " has been found. It will be converted to type str, but this will cause all sorts of problems on deshelve. Please bring this to the attention of the " + application.name + " developers immediately. More information about the error will be written to the error log.",True)
log.error("Uh oh, " + str(key) + " is of type " + str(type(key)) + "!")
# Convert unicode objects to UTF-8 strings before shelve these objects.
if type(value) == list and self.settings["general"]["persist_size"] != -1 and len(value) > self.settings["general"]["persist_size"]:
shelf[str(key.encode("utf-8"))]=value[self.settings["general"]["persist_size"]:]
else:
shelf[str(key.encode("utf-8"))]=value
shelf.close()
except:
output.speak("An exception occurred while shelving the " + application.name + " database. It will be deleted and rebuilt automatically. If this error persists, send the error log to the " + application.name + " developers.",True)
log.exception("Exception while shelving" + shelfname)
os.remove(shelfname)
def deshelve(self):
"Import a shelved database."
shelfname=paths.config_path(str(self.session_id)+"/cache.db")
if self.settings["general"]["persist_size"] == 0:
if os.path.exists(shelfname):
os.remove(shelfname)
return
try:
shelf=shelve.open(paths.config_path(shelfname),'c')
for key,value in shelf.items():
self.db[key]=value
shelf.close()
except:
output.speak("An exception occurred while deshelving the " + application.name + " database. It will be deleted and rebuilt automatically. If this error persists, send the error log to the " + application.name + " developers.",True)
log.exception("Exception while deshelving" + shelfname)
try:
os.remove(shelfname)
except:
pass
def check_quoted_status(self, tweet):
status = tweets.is_long(tweet)
if status != False and config.app["app-settings"]["handle_longtweets"]:
tweet = self.get_quoted_tweet(tweet)
return tweet
def get_quoted_tweet(self, tweet):
quoted_tweet = tweet
if "full_text" in tweet:
value = "full_text"
else:
value = "text"
urls = utils.find_urls_in_text(quoted_tweet[value])
for url in range(0, len(urls)):
try: quoted_tweet[value] = quoted_tweet[value].replace(urls[url], quoted_tweet["entities"]["urls"][url]["expanded_url"])
except IndexError: pass
id = tweets.is_long(quoted_tweet)
try: original_tweet = self.twitter.twitter.show_status(id=id, tweet_mode="extended")
except: return quoted_tweet
original_tweet = self.check_long_tweet(original_tweet)
urls = utils.find_urls_in_text(original_tweet["full_text"])
for url in range(0, len(urls)):
try: original_tweet["full_text"] = original_tweet["full_text"].replace(urls[url], original_tweet["entities"]["urls"][url]["expanded_url"])
except IndexError: pass
return compose.compose_quoted_tweet(quoted_tweet, original_tweet)
def check_long_tweet(self, tweet):
long = twishort.is_long(tweet)
if long != False and config.app["app-settings"]["handle_longtweets"]:
tweet["message"] = twishort.get_full_text(long)
if tweet["message"] == False: return False
tweet["twishort"] = True
for i in tweet["entities"]["user_mentions"]:
if "@%s" % (i["screen_name"]) not in tweet["message"] and i["screen_name"] != tweet["user"]["screen_name"]:
if "retweeted_status" in tweet and tweet["retweeted_status"]["user"]["screen_name"] == i["screen_name"]:
continue
tweet["message"] = u"@%s %s" % (i["screen_name"], tweet["message"])
>>>>>>> Prepare for py3 port.
return tweet return tweet

View File

@ -1,19 +1,20 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import shutil import shutil
import widgetUtils import widgetUtils
import platform import platform
import output import output
if platform.system() == "Windows": if platform.system() == "Windows":
import wxUI as view from . import wxUI as view
from controller import settings from controller import settings
elif platform.system() == "Linux": elif platform.system() == "Linux":
import gtkUI as view from . import gtkUI as view
import paths import paths
import time import time
import os import os
import logging import logging
import session from . import session
import manager from . import manager
import config_utils import config_utils
import config import config
@ -75,7 +76,7 @@ class sessionManagerController(object):
def do_ok(self): def do_ok(self):
log.debug("Starting sessions...") log.debug("Starting sessions...")
for i in self.sessions: for i in self.sessions:
if session.sessions.has_key(i) == True: continue if (i in session.sessions) == True: continue
s = session.Session(i) s = session.Session(i)
s.get_configuration() s.get_configuration()
if i not in config.app["sessions"]["ignored_sessions"]: if i not in config.app["sessions"]["ignored_sessions"]:

View File

@ -1 +1,2 @@
import buffers, utils, compose, twitter from __future__ import absolute_import
from . import buffers, utils, compose, twitter

View File

@ -1 +1,2 @@
import stream, indibidual from __future__ import absolute_import
from . import stream, indibidual

View File

@ -41,7 +41,7 @@ class timelinesStreamer(TwythonStreamer):
try: try:
i.users.index(data["user"]["id"]) i.users.index(data["user"]["id"])
usr = data["in_reply_to_user_id"] usr = data["in_reply_to_user_id"]
if (usr != None and usr in self.friends) or data.has_key("retweeted_status"): if (usr != None and usr in self.friends) or "retweeted_status" in data:
data = self.session.check_quoted_status(data) data = self.session.check_quoted_status(data)
data = self.session.check_long_tweet(data) data = self.session.check_long_tweet(data)
if self.session.settings["general"]["reverse_timelines"] == False: self.session.db["%s" % (i.name,)].append(data) if self.session.settings["general"]["reverse_timelines"] == False: self.session.db["%s" % (i.name,)].append(data)
@ -61,10 +61,10 @@ class timelinesStreamer(TwythonStreamer):
def on_success(self, data): def on_success(self, data):
if "text" in data and utils.is_allowed(data, self.session.settings["twitter"]["ignored_clients"]) == True: if "text" in data and utils.is_allowed(data, self.session.settings["twitter"]["ignored_clients"]) == True:
if data.has_key("extended_tweet"): if "extended_tweet" in data:
data["full_text"] = data["extended_tweet"]["full_text"] data["full_text"] = data["extended_tweet"]["full_text"]
if data.has_key("retweeted_status"): if "retweeted_status" in data:
if data["retweeted_status"].has_key("extended_tweet"): if "extended_tweet" in data["retweeted_status"]:
data["retweeted_status"]["full_text"] = data["retweeted_status"]["extended_tweet"]["full_text"] data["retweeted_status"]["full_text"] = data["retweeted_status"]["extended_tweet"]["full_text"]
data["full_text"] = data["text"] data["full_text"] = data["text"]
data["retweeted_status"]["entities"] = data["retweeted_status"]["extended_tweet"]["entities"] data["retweeted_status"]["entities"] = data["retweeted_status"]["extended_tweet"]["entities"]

View File

@ -26,7 +26,7 @@ class streamer(TwythonStreamer):
return self.session.db["user_name"] return self.session.db["user_name"]
def put_data(self, place, data): def put_data(self, place, data):
if self.session.db.has_key(place): if place in self.session.db:
if utils.find_item(data["id"], self.session.db[place]) != None: if utils.find_item(data["id"], self.session.db[place]) != None:
log.error("duplicated tweet. Ignoring it...") log.error("duplicated tweet. Ignoring it...")
return False return False
@ -129,11 +129,11 @@ class streamer(TwythonStreamer):
self.friends = data["friends"] self.friends = data["friends"]
pub.sendMessage("friends-receibed") pub.sendMessage("friends-receibed")
elif "text" in data and utils.is_allowed(data, self.session.settings["twitter"]["ignored_clients"]) == True: elif "text" in data and utils.is_allowed(data, self.session.settings["twitter"]["ignored_clients"]) == True:
if data.has_key("extended_tweet"): if "extended_tweet" in data:
data["full_text"] = data["extended_tweet"]["full_text"] data["full_text"] = data["extended_tweet"]["full_text"]
data["entities"] = data["extended_tweet"]["entities"] data["entities"] = data["extended_tweet"]["entities"]
if data.has_key("retweeted_status"): if "retweeted_status" in data:
if data["retweeted_status"].has_key("extended_tweet"): if "extended_tweet" in data["retweeted_status"]:
data["retweeted_status"]["full_text"] = data["retweeted_status"]["extended_tweet"]["full_text"] data["retweeted_status"]["full_text"] = data["retweeted_status"]["extended_tweet"]["full_text"]
data["full_text"] = data["text"] data["full_text"] = data["text"]
data["retweeted_status"]["entities"] = data["retweeted_status"]["extended_tweet"]["entities"] data["retweeted_status"]["entities"] = data["retweeted_status"]["extended_tweet"]["entities"]
@ -144,7 +144,7 @@ class streamer(TwythonStreamer):
d = self.put_data("home_timeline", data) d = self.put_data("home_timeline", data)
if d != False: if d != False:
pub.sendMessage("item-in-home", data=data, user=self.get_user()) pub.sendMessage("item-in-home", data=data, user=self.get_user())
elif data.has_key("event"): elif "event" in data:
if "favorite" == data["event"] and "favorites" in self.session.settings["general"]["buffer_order"]: if "favorite" == data["event"] and "favorites" in self.session.settings["general"]["buffer_order"]:
self.check_favs(data) self.check_favs(data)
elif "unfavorite" == data["event"] and "favorites" in self.session.settings["general"]["buffer_order"]: elif "unfavorite" == data["event"] and "favorites" in self.session.settings["general"]["buffer_order"]:

View File

@ -1,9 +1,9 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import platform import platform
system = platform.system() system = platform.system()
import utils from . import utils
import re import re
import htmlentitydefs import html.entities
import time import time
import output import output
import languageHandler import languageHandler
@ -21,10 +21,10 @@ def StripChars(s):
If we match &blah; and it's not found, &blah; will be returned. If we match &blah; and it's not found, &blah; will be returned.
if we match #\d+, unichr(digits) will be returned. if we match #\d+, unichr(digits) will be returned.
Else, a unicode string will be returned.""" Else, a unicode string will be returned."""
if match.group(1).startswith('#'): return unichr(int(match.group(1)[1:])) if match.group(1).startswith('#'): return chr(int(match.group(1)[1:]))
replacement = htmlentitydefs.entitydefs.get(match.group(1), "&%s;" % match.group(1)) replacement = html.entities.entitydefs.get(match.group(1), "&%s;" % match.group(1))
return replacement.decode('iso-8859-1') return replacement.decode('iso-8859-1')
return unicode(entity_re.sub(matchFunc, s)) return str(entity_re.sub(matchFunc, s))
chars = "abcdefghijklmnopqrstuvwxyz" chars = "abcdefghijklmnopqrstuvwxyz"
@ -35,16 +35,16 @@ def compose_tweet(tweet, db, relative_times, show_screen_names=False):
if relative_times == True: if relative_times == True:
ts = original_date.humanize(locale=languageHandler.getLanguage()) ts = original_date.humanize(locale=languageHandler.getLanguage())
else: else:
ts = original_date.replace(seconds=db["utc_offset"]).format(_(u"dddd, MMMM D, YYYY H:m:s"), locale=languageHandler.getLanguage()) ts = original_date.replace(seconds=db["utc_offset"]).format(_("dddd, MMMM D, YYYY H:m:s"), locale=languageHandler.getLanguage())
else: else:
ts = tweet["created_at"] ts = tweet["created_at"]
if tweet.has_key("message"): if "message" in tweet:
value = "message" value = "message"
elif tweet.has_key("full_text"): elif "full_text" in tweet:
value = "full_text" value = "full_text"
else: else:
value = "text" value = "text"
if tweet.has_key("retweeted_status") and value != "message": if "retweeted_status" in tweet and value != "message":
text = StripChars(tweet["retweeted_status"][value]) text = StripChars(tweet["retweeted_status"][value])
else: else:
text = StripChars(tweet[value]) text = StripChars(tweet[value])
@ -53,14 +53,14 @@ def compose_tweet(tweet, db, relative_times, show_screen_names=False):
else: else:
user = tweet["user"]["name"] user = tweet["user"]["name"]
source = re.sub(r"(?s)<.*?>", "", tweet["source"]) source = re.sub(r"(?s)<.*?>", "", tweet["source"])
if tweet.has_key("retweeted_status"): if "retweeted_status" in tweet:
if tweet.has_key("message") == False and tweet["retweeted_status"]["is_quote_status"] == False: if ("message" in tweet) == False and tweet["retweeted_status"]["is_quote_status"] == False:
text = "RT @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], text) text = "RT @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], text)
elif tweet["retweeted_status"]["is_quote_status"]: elif tweet["retweeted_status"]["is_quote_status"]:
text = "%s" % (text) text = "%s" % (text)
else: else:
text = "RT @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], text) text = "RT @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], text)
if tweet.has_key("message") == False: if ("message" in tweet) == False:
urls = utils.find_urls_in_text(text) urls = utils.find_urls_in_text(text)
for url in range(0, len(urls)): for url in range(0, len(urls)):
try: try:
@ -77,16 +77,16 @@ def compose_dm(tweet, db, relative_times, show_screen_names=False):
if relative_times == True: if relative_times == True:
ts = original_date.humanize(locale=languageHandler.getLanguage()) ts = original_date.humanize(locale=languageHandler.getLanguage())
else: else:
ts = original_date.replace(seconds=db["utc_offset"]).format(_(u"dddd, MMMM D, YYYY H:m:s"), locale=languageHandler.getLanguage()) ts = original_date.replace(seconds=db["utc_offset"]).format(_("dddd, MMMM D, YYYY H:m:s"), locale=languageHandler.getLanguage())
else: else:
ts = tweet["created_at"] ts = tweet["created_at"]
text = StripChars(tweet["text"]) text = StripChars(tweet["text"])
source = "DM" source = "DM"
if db["user_name"] == tweet["sender"]["screen_name"]: if db["user_name"] == tweet["sender"]["screen_name"]:
if show_screen_names: if show_screen_names:
user = _(u"Dm to %s ") % (tweet["recipient"]["screen_name"],) user = _("Dm to %s ") % (tweet["recipient"]["screen_name"],)
else: else:
user = _(u"Dm to %s ") % (tweet["recipient"]["name"],) user = _("Dm to %s ") % (tweet["recipient"]["name"],)
else: else:
if show_screen_names: if show_screen_names:
user = tweet["sender"]["screen_name"] user = tweet["sender"]["screen_name"]
@ -101,7 +101,7 @@ def compose_dm(tweet, db, relative_times, show_screen_names=False):
def compose_quoted_tweet(quoted_tweet, original_tweet, show_screen_names=False): def compose_quoted_tweet(quoted_tweet, original_tweet, show_screen_names=False):
""" It receives a tweet and returns a list with the user, text for the tweet or message, date and the client where user is.""" """ It receives a tweet and returns a list with the user, text for the tweet or message, date and the client where user is."""
if quoted_tweet.has_key("full_text"): if "full_text" in quoted_tweet:
value = "full_text" value = "full_text"
else: else:
value = "text" value = "text"
@ -115,13 +115,13 @@ def compose_quoted_tweet(quoted_tweet, original_tweet, show_screen_names=False):
except KeyError: text = "%s" % (StripChars(quoted_tweet[value])) except KeyError: text = "%s" % (StripChars(quoted_tweet[value]))
if text[-1] in chars: text=text+"." if text[-1] in chars: text=text+"."
original_user = original_tweet["user"]["screen_name"] original_user = original_tweet["user"]["screen_name"]
if original_tweet.has_key("message"): if "message" in original_tweet:
original_text = StripChars(original_tweet["message"]) original_text = StripChars(original_tweet["message"])
elif original_tweet.has_key("full_text"): elif "full_text" in original_tweet:
original_text = StripChars(original_tweet["full_text"]) original_text = StripChars(original_tweet["full_text"])
else: else:
original_text = StripChars(original_tweet["text"]) original_text = StripChars(original_tweet["text"])
quoted_tweet["message"] = _(u"{0}. Quoted tweet from @{1}: {2}").format( quoted_tweet[value], original_user, original_text) quoted_tweet["message"] = _("{0}. Quoted tweet from @{1}: {2}").format( quoted_tweet[value], original_user, original_text)
quoted_tweet = tweets.clear_url(quoted_tweet) quoted_tweet = tweets.clear_url(quoted_tweet)
return quoted_tweet return quoted_tweet
@ -131,21 +131,21 @@ def compose_followers_list(tweet, db, relative_times=True, show_screen_names=Fal
if relative_times == True: if relative_times == True:
ts = original_date.humanize(locale=languageHandler.getLanguage()) ts = original_date.humanize(locale=languageHandler.getLanguage())
else: else:
ts = original_date.replace(seconds=db["utc_offset"]).format(_(u"dddd, MMMM D, YYYY H:m:s"), locale=languageHandler.getLanguage()) ts = original_date.replace(seconds=db["utc_offset"]).format(_("dddd, MMMM D, YYYY H:m:s"), locale=languageHandler.getLanguage())
else: else:
ts = tweet["created_at"] ts = tweet["created_at"]
if tweet.has_key("status"): if "status" in tweet:
if len(tweet["status"]) > 4 and system == "Windows": if len(tweet["status"]) > 4 and system == "Windows":
original_date2 = arrow.get(tweet["status"]["created_at"], "ddd MMM D H:m:s Z YYYY", locale="en") original_date2 = arrow.get(tweet["status"]["created_at"], "ddd MMM D H:m:s Z YYYY", locale="en")
if relative_times: if relative_times:
ts2 = original_date2.humanize(locale=languageHandler.getLanguage()) ts2 = original_date2.humanize(locale=languageHandler.getLanguage())
else: else:
ts2 = original_date2.replace(seconds=db["utc_offset"]).format(_(u"dddd, MMMM D, YYYY H:m:s"), locale=languageHandler.getLanguage()) ts2 = original_date2.replace(seconds=db["utc_offset"]).format(_("dddd, MMMM D, YYYY H:m:s"), locale=languageHandler.getLanguage())
else: else:
ts2 = _("Unavailable") ts2 = _("Unavailable")
else: else:
ts2 = _("Unavailable") ts2 = _("Unavailable")
return [_(u"%s (@%s). %s followers, %s friends, %s tweets. Last tweeted %s. Joined Twitter %s") % (tweet["name"], tweet["screen_name"], tweet["followers_count"], tweet["friends_count"], tweet["statuses_count"], ts2, ts)] return [_("%s (@%s). %s followers, %s friends, %s tweets. Last tweeted %s. Joined Twitter %s") % (tweet["name"], tweet["screen_name"], tweet["followers_count"], tweet["friends_count"], tweet["statuses_count"], ts2, ts)]
def compose_event(data, username, show_screen_names=False): def compose_event(data, username, show_screen_names=False):
if show_screen_names: if show_screen_names:
@ -155,45 +155,45 @@ def compose_event(data, username, show_screen_names=False):
if data["event"] == "block": if data["event"] == "block":
event = _("You've blocked %s") % (data["target"][value]) event = _("You've blocked %s") % (data["target"][value])
elif data["event"] == "unblock": elif data["event"] == "unblock":
event = _(u"You've unblocked %s") % (data["target"][value]) event = _("You've unblocked %s") % (data["target"][value])
elif data["event"] == "follow": elif data["event"] == "follow":
if data["target"]["screen_name"] == username: if data["target"]["screen_name"] == username:
event = _(u"%s(@%s) has followed you") % (data["source"]["name"], data["source"]["screen_name"]) event = _("%s(@%s) has followed you") % (data["source"]["name"], data["source"]["screen_name"])
elif data["source"]["screen_name"] == username: elif data["source"]["screen_name"] == username:
event = _(u"You've followed %s(@%s)") % (data["target"]["name"], data["target"]["screen_name"]) event = _("You've followed %s(@%s)") % (data["target"]["name"], data["target"]["screen_name"])
elif data["event"] == "unfollow": elif data["event"] == "unfollow":
event = _(u"You've unfollowed %s (@%s)") % (data["target"]["name"], data["target"]["screen_name"]) event = _("You've unfollowed %s (@%s)") % (data["target"]["name"], data["target"]["screen_name"])
elif data["event"] == "favorite": elif data["event"] == "favorite":
if data["source"]["screen_name"] == username: if data["source"]["screen_name"] == username:
event = _(u"You've liked: %s, %s") % (data["target"][value], data["target_object"]["text"]) event = _("You've liked: %s, %s") % (data["target"][value], data["target_object"]["text"])
else: else:
event = _(u"%s(@%s) has liked: %s") % (data["source"]["name"], data["source"]["screen_name"], data["target_object"]["text"]) event = _("%s(@%s) has liked: %s") % (data["source"]["name"], data["source"]["screen_name"], data["target_object"]["text"])
elif data["event"] == "unfavorite": elif data["event"] == "unfavorite":
if data["source"]["screen_name"] == username: event = _(u"You've unliked: %s, %s") % (data["target"][value], data["target_object"]["text"]) if data["source"]["screen_name"] == username: event = _("You've unliked: %s, %s") % (data["target"][value], data["target_object"]["text"])
else: event = _(u"%s(@%s) has unliked: %s") % (data["source"]["name"], data["source"]["screen_name"], data["target_object"]["text"]) else: event = _("%s(@%s) has unliked: %s") % (data["source"]["name"], data["source"]["screen_name"], data["target_object"]["text"])
elif data["event"] == "list_created": elif data["event"] == "list_created":
event = _(u"You've created the list %s") % (data["target_object"]["name"]) event = _("You've created the list %s") % (data["target_object"]["name"])
elif data["event"] == "list_destroyed": elif data["event"] == "list_destroyed":
event = _("You've deleted the list %s") % (data["target_object"]["name"]) event = _("You've deleted the list %s") % (data["target_object"]["name"])
elif data["event"] == "list_updated": elif data["event"] == "list_updated":
event = _("You've updated the list %s") % (data["target_object"]["name"]) event = _("You've updated the list %s") % (data["target_object"]["name"])
elif data["event"] == "list_member_added": elif data["event"] == "list_member_added":
if data["source"]["screen_name"] == username: event = _(u"You've added %s(@%s) to the list %s") % (data["target"]["name"], data["target"]["screen_name"], data["target_object"]["name"]) if data["source"]["screen_name"] == username: event = _("You've added %s(@%s) to the list %s") % (data["target"]["name"], data["target"]["screen_name"], data["target_object"]["name"])
else: event = _(u"%s(@%s) has added you to the list %s") % (data["source"]["name"], data["source"]["screen_name"], data["target_object"]["name"]) else: event = _("%s(@%s) has added you to the list %s") % (data["source"]["name"], data["source"]["screen_name"], data["target_object"]["name"])
elif data["event"] == "list_member_removed": elif data["event"] == "list_member_removed":
if data["source"]["screen_name"] == username: event = _(u"You'be removed %s(@%s) from the list %s") % (data["target"]["name"], data["target"]["screen_name"], data["target_object"]["name"]) if data["source"]["screen_name"] == username: event = _("You'be removed %s(@%s) from the list %s") % (data["target"]["name"], data["target"]["screen_name"], data["target_object"]["name"])
else: event = _(u"%s(@%s) has removed you from the list %s") % (data["source"]["name"], data["source"]["screen_name"], data["target_object"]["name"]) else: event = _("%s(@%s) has removed you from the list %s") % (data["source"]["name"], data["source"]["screen_name"], data["target_object"]["name"])
elif data["event"] == "list_user_subscribed": elif data["event"] == "list_user_subscribed":
if data["source"]["screen_name"] == username: event = _(u"You've subscribed to the list %s, which is owned by %s(@%s)") % (data["target_object"]["name"], data["target"]["name"], data["target"]["screen_name"]) if data["source"]["screen_name"] == username: event = _("You've subscribed to the list %s, which is owned by %s(@%s)") % (data["target_object"]["name"], data["target"]["name"], data["target"]["screen_name"])
else: event = _(u"%s(@%s) has subscribed you to the list %s") % (data["source"]["name"], data["source"]["screen_name"], data["target_object"]["name"]) else: event = _("%s(@%s) has subscribed you to the list %s") % (data["source"]["name"], data["source"]["screen_name"], data["target_object"]["name"])
elif data["event"] == "list_user_unsubscribed": elif data["event"] == "list_user_unsubscribed":
if data["source"]["screen_name"] == username: event = _(u"You've unsubscribed from the list %s, which is owned by %s(@%s)") % (data["target_object"]["name"], data["target"]["name"], data["target"]["screen_name"]) if data["source"]["screen_name"] == username: event = _("You've unsubscribed from the list %s, which is owned by %s(@%s)") % (data["target_object"]["name"], data["target"]["name"], data["target"]["screen_name"])
else: event = _("You've been unsubscribed from the list %s, which is owned by %s(@%s)") % (data["target_object"]["name"], data["source"]["name"], data["source"]["screen_name"]) else: event = _("You've been unsubscribed from the list %s, which is owned by %s(@%s)") % (data["target_object"]["name"], data["source"]["name"], data["source"]["screen_name"])
elif data["event"] == "retweeted_retweet": elif data["event"] == "retweeted_retweet":
if data["source"]["screen_name"] == username: event = _(u"You have retweeted a retweet from %s(@%s): %s") % (data["target"]["name"], data["target"]["screen_name"], data["target_object"]["retweeted_status"]["text"]) if data["source"]["screen_name"] == username: event = _("You have retweeted a retweet from %s(@%s): %s") % (data["target"]["name"], data["target"]["screen_name"], data["target_object"]["retweeted_status"]["text"])
else: event = _(u"%s(@%s) has retweeted your retweet: %s") % (data["source"]["name"], data["source"]["screen_name"], data["target_object"]["retweeted_status"]["text"]) else: event = _("%s(@%s) has retweeted your retweet: %s") % (data["source"]["name"], data["source"]["screen_name"], data["target_object"]["retweeted_status"]["text"])
elif data["event"] == "quoted_tweet": elif data["event"] == "quoted_tweet":
event = _(u"@{0} quoted your tweet: {1}").format(data["source"]["screen_name"], data["target_object"]["text"]) event = _("@{0} quoted your tweet: {1}").format(data["source"]["screen_name"], data["target_object"]["text"])
else: else:
event = _("Unknown") event = _("Unknown")
log.error("event: %s\n target: %s\n source: %s\n target_object: %s" % (data["event"], data["target"], data["source"], data["target_object"])) log.error("event: %s\n target: %s\n source: %s\n target_object: %s" % (data["event"], data["target"], data["source"], data["target_object"]))
@ -201,10 +201,10 @@ def compose_event(data, username, show_screen_names=False):
def compose_list(list): def compose_list(list):
name = list["name"] name = list["name"]
if list["description"] == None: description = _(u"No description available") if list["description"] == None: description = _("No description available")
else: description = list["description"] else: description = list["description"]
user = list["user"]["name"] user = list["user"]["name"]
members = str(list["member_count"]) members = str(list["member_count"])
if list["mode"] == "private": status = _(u"private") if list["mode"] == "private": status = _("private")
else: status = _(u"public") else: status = _("public")
return [name, description, user, members, status] return [name, description, user, members, status]

View File

@ -1,11 +1,12 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import config import config
import random import random
import BaseHTTPServer import BaseHTTPServer
import webbrowser import webbrowser
from twython import Twython, TwythonError from twython import Twython, TwythonError
from keys import keyring from keys import keyring
import authorisationHandler from . import authorisationHandler
from requests import certs from requests import certs
import logging import logging
log = logging.getLogger("sessionTwitter") log = logging.getLogger("sessionTwitter")

View File

@ -23,9 +23,9 @@ def find_urls_in_text(text):
def find_urls (tweet): def find_urls (tweet):
urls = [] urls = []
if tweet.has_key("message"): if "message" in tweet:
i = "message" i = "message"
elif tweet.has_key("full_text"): elif "full_text" in tweet:
i = "full_text" i = "full_text"
else: else:
i = "text" i = "text"
@ -64,18 +64,18 @@ def is_audio(tweet):
if i["text"] == "audio": if i["text"] == "audio":
return True return True
except: except:
print tweet["entities"]["hashtags"] print(tweet["entities"]["hashtags"])
log.exception("Exception while executing is_audio hashtag algorithm") log.exception("Exception while executing is_audio hashtag algorithm")
def is_geocoded(tweet): def is_geocoded(tweet):
if tweet.has_key("coordinates") and tweet["coordinates"] != None: if "coordinates" in tweet and tweet["coordinates"] != None:
return True return True
def is_media(tweet): def is_media(tweet):
if tweet["entities"].has_key("media") == False: if ("media" in tweet["entities"]) == False:
return False return False
for i in tweet["entities"]["media"]: for i in tweet["entities"]["media"]:
if i.has_key("type") and i["type"] == "photo": if "type" in i and i["type"] == "photo":
return True return True
return False return False
@ -90,10 +90,10 @@ def get_all_mentioned(tweet, conf, field="screen_name"):
def get_all_users(tweet, conf): def get_all_users(tweet, conf):
string = [] string = []
if tweet.has_key("retweeted_status"): if "retweeted_status" in tweet:
string.append(tweet["user"]["screen_name"]) string.append(tweet["user"]["screen_name"])
tweet = tweet["retweeted_status"] tweet = tweet["retweeted_status"]
if tweet.has_key("sender"): if "sender" in tweet:
string.append(tweet["sender"]["screen_name"]) string.append(tweet["sender"]["screen_name"])
else: else:
if tweet["user"]["screen_name"] != conf["user_name"]: if tweet["user"]["screen_name"] != conf["user_name"]:
@ -129,9 +129,9 @@ def api_call(parent=None, call_name=None, preexec_message="", success="", succes
return val return val
def is_allowed(tweet, clients): def is_allowed(tweet, clients):
if tweet.has_key("sender"): return True if "sender" in tweet: return True
allowed = True allowed = True
if tweet.has_key("retweeted_status"): tweet = tweet["retweeted_status"] if "retweeted_status" in tweet: tweet = tweet["retweeted_status"]
source = re.sub(r"(?s)<.*?>", "", tweet["source"]) source = re.sub(r"(?s)<.*?>", "", tweet["source"])
for i in clients: for i in clients:
if i.lower() == source.lower(): if i.lower() == source.lower():
@ -141,9 +141,9 @@ def is_allowed(tweet, clients):
def twitter_error(error): def twitter_error(error):
if error.error_code == 403: if error.error_code == 403:
msg = _(u"Sorry, you are not authorised to see this status.") msg = _("Sorry, you are not authorised to see this status.")
elif error.error_code == 404: elif error.error_code == 404:
msg = _(u"No status found with that ID") msg = _("No status found with that ID")
else: else:
msg = _(u"Error code {0}").format(error.error_code,) msg = _("Error code {0}").format(error.error_code,)
output.speak(msg) output.speak(msg)

View File

@ -1,11 +1,11 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import application import application
import update from . import update
import platform import platform
import logging import logging
import output import output
from requests.exceptions import ConnectionError from requests.exceptions import ConnectionError
from wxUpdater import * from .wxUpdater import *
logger = logging.getLogger("updater") logger = logging.getLogger("updater")
def do_update(endpoint=application.update_url): def do_update(endpoint=application.update_url):

View File

@ -1,7 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import wx import wx
import application import application
import utils from . import utils
progress_dialog = None progress_dialog = None

View File

@ -1,2 +1,3 @@
import shorteners from __future__ import absolute_import
from __main__ import * from . import shorteners
from .__main__ import *

View File

@ -1,5 +1,6 @@
from __future__ import absolute_import
from functools import wraps from functools import wraps
import shorteners from . import shorteners
def service_selecter (func): def service_selecter (func):
@ -27,6 +28,7 @@ def unshorten (url, service=None, **kwargs):
def default_service (): def default_service ():
return shorteners.AcortameShortener return shorteners.AcortameShortener
def find_service (service, **kwargs): def find_service (service, **kwargs):
for i in shorteners.__all__: for i in shorteners.__all__:
obj = getattr(shorteners, i)(**kwargs) obj = getattr(shorteners, i)(**kwargs)

View File

@ -1,10 +1,10 @@
from url_shortener import URLShortener from .url_shortener import URLShortener
from hkcim import HKCShortener from .hkcim import HKCShortener
from isgd import IsgdShortener from .isgd import IsgdShortener
from onjme import OnjmeShortener from .onjme import OnjmeShortener
from tinyarrows import TinyArrowsShortener from .tinyarrows import TinyArrowsShortener
from tinyurl import TinyurlShortener from .tinyurl import TinyurlShortener
from xedcc import XedccShortener from .xedcc import XedccShortener
from clckru import ClckruShortener from .clckru import ClckruShortener
from acortame import AcortameShortener from .acortame import AcortameShortener
__all__ = ["HKCShortener", "IsgdShortener", "OnjmeShortener", "TinyArrowsShortener", "TinyurlShortener", "XedccShortener", "ClckruShortener", "AcortameShortener"] __all__ = ["HKCShortener", "IsgdShortener", "OnjmeShortener", "TinyArrowsShortener", "TinyurlShortener", "XedccShortener", "ClckruShortener", "AcortameShortener"]

View File

@ -1,6 +1,6 @@
import urllib import urllib.request, urllib.parse, urllib.error
import requests import requests
from url_shortener import URLShortener from .url_shortener import URLShortener
class ClckruShortener (URLShortener): class ClckruShortener (URLShortener):
@ -10,7 +10,7 @@ class ClckruShortener (URLShortener):
def _shorten (self, url): def _shorten (self, url):
answer = url answer = url
api = requests.get ("http://clck.ru/--?url=" + urllib.quote(url)) api = requests.get ("http://clck.ru/--?url=" + urllib.parse.quote(url))
if api.status_code == 200: if api.status_code == 200:
answer = api.text answer = api.text
return answer return answer

View File

@ -1,6 +1,6 @@
import urllib import urllib.request, urllib.parse, urllib.error
import requests import requests
from url_shortener import URLShortener from .url_shortener import URLShortener
class HKCShortener (URLShortener): class HKCShortener (URLShortener):
def __init__ (self, *args, **kwargs): def __init__ (self, *args, **kwargs):
@ -9,7 +9,7 @@ class HKCShortener (URLShortener):
def _shorten (self, url): def _shorten (self, url):
answer = url answer = url
api = requests.get ("http://hkc.im/yourls-api.php?action=shorturl&format=simple&url=" + urllib.quote(url)) api = requests.get ("http://hkc.im/yourls-api.php?action=shorturl&format=simple&url=" + urllib.parse.quote(url))
if api.status_code == 200: if api.status_code == 200:
answer = api.text answer = api.text
return answer return answer

View File

@ -1,6 +1,6 @@
import urllib import urllib.request, urllib.parse, urllib.error
import requests import requests
from url_shortener import URLShortener from .url_shortener import URLShortener
class IsgdShortener (URLShortener): class IsgdShortener (URLShortener):
@ -10,7 +10,7 @@ class IsgdShortener (URLShortener):
def _shorten (self, url): def _shorten (self, url):
answer = url answer = url
api = requests.get ("http://is.gd/api.php?longurl=" + urllib.quote(url)) api = requests.get ("http://is.gd/api.php?longurl=" + urllib.parse.quote(url))
if api.status_code == 200: if api.status_code == 200:
answer = api.text answer = api.text
return answer return answer

View File

@ -1,6 +1,6 @@
import urllib import urllib.request, urllib.parse, urllib.error
import requests import requests
from url_shortener import URLShortener from .url_shortener import URLShortener
class OnjmeShortener (URLShortener): class OnjmeShortener (URLShortener):
def __init__ (self, *args, **kwargs): def __init__ (self, *args, **kwargs):
@ -9,7 +9,7 @@ class OnjmeShortener (URLShortener):
def _shorten (self, url): def _shorten (self, url):
answer = url answer = url
api = requests.get ("http://onj.me/yourls-api.php?action=shorturl&format=simple&url=" + urllib.quote(url)) api = requests.get ("http://onj.me/yourls-api.php?action=shorturl&format=simple&url=" + urllib.parse.quote(url))
if api.status_code == 200: if api.status_code == 200:
answer = api.text answer = api.text
return answer return answer

View File

@ -1,6 +1,6 @@
import urllib import urllib.request, urllib.parse, urllib.error
import requests import requests
from url_shortener import URLShortener from .url_shortener import URLShortener
class TinyArrowsShortener (URLShortener): class TinyArrowsShortener (URLShortener):
def __init__ (self, *args, **kwargs): def __init__ (self, *args, **kwargs):
@ -9,7 +9,7 @@ class TinyArrowsShortener (URLShortener):
def _shorten (self, url): def _shorten (self, url):
answer = url answer = url
api = requests.get("http://tinyarro.ws/api-create.php?utfpure=1&url=%s" % urllib.quote(url)) api = requests.get("http://tinyarro.ws/api-create.php?utfpure=1&url=%s" % urllib.parse.quote(url))
if api.status_code == 200: if api.status_code == 200:
answer = api.text answer = api.text
return answer.decode('UTF-8') return answer.decode('UTF-8')

View File

@ -1,6 +1,6 @@
from url_shortener import URLShortener from .url_shortener import URLShortener
import requests import requests
import urllib import urllib.request, urllib.parse, urllib.error
class TinyurlShortener (URLShortener): class TinyurlShortener (URLShortener):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.name = "TinyURL.com" self.name = "TinyURL.com"
@ -8,7 +8,7 @@ class TinyurlShortener (URLShortener):
def _shorten (self, url): def _shorten (self, url):
answer = url answer = url
api = requests.get ("http://tinyurl.com/api-create.php?url=" + urllib.quote(url)) api = requests.get ("http://tinyurl.com/api-create.php?url=" + urllib.parse.quote(url))
if api.status_code == 200: if api.status_code == 200:
answer = api.text answer = api.text
return answer return answer

View File

@ -1,6 +1,6 @@
import urllib import urllib.request, urllib.parse, urllib.error
import requests import requests
from url_shortener import URLShortener from .url_shortener import URLShortener
class XedccShortener (URLShortener): class XedccShortener (URLShortener):
def __init__ (self, *args, **kwargs): def __init__ (self, *args, **kwargs):
@ -9,7 +9,7 @@ class XedccShortener (URLShortener):
def _shorten (self, url): def _shorten (self, url):
answer = url answer = url
api = requests.get ("http://xed.cc/yourls-api.php?action=shorturl&format=simple&url=" + urllib.quote(url)) api = requests.get ("http://xed.cc/yourls-api.php?action=shorturl&format=simple&url=" + urllib.parse.quote(url))
if api.status_code == 200: if api.status_code == 200:
answer = api.text answer = api.text
return answer return answer

View File

@ -1,5 +1,6 @@
from __future__ import absolute_import
import platform import platform
if platform.system() == "Windows": if platform.system() == "Windows":
from wxUtils import * from .wxUtils import *
#elif platform.system() == "Linux": #elif platform.system() == "Linux":
# from gtkUtils import * # from gtkUtils import *

View File

@ -1,4 +1,5 @@
import wx import wx
from wx import adv
import paths import paths
import languageHandler import languageHandler
import sys import sys
@ -52,8 +53,8 @@ NOTEBOOK_PAGE_CHANGED = wx.EVT_TREEBOOK_PAGE_CHANGED
RADIOBUTTON = wx.EVT_RADIOBUTTON RADIOBUTTON = wx.EVT_RADIOBUTTON
# Taskbar mouse clicks. # Taskbar mouse clicks.
TASKBAR_RIGHT_CLICK = wx.EVT_TASKBAR_RIGHT_DOWN TASKBAR_RIGHT_CLICK = adv.EVT_TASKBAR_RIGHT_DOWN
TASKBAR_LEFT_CLICK = wx.EVT_TASKBAR_LEFT_DOWN TASKBAR_LEFT_CLICK = adv.EVT_TASKBAR_LEFT_DOWN
def exit_application(): def exit_application():
""" Closes the current window cleanly. """ """ Closes the current window cleanly. """

View File

@ -1,11 +1,12 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from base import basePanel from __future__ import absolute_import
from dm import dmPanel from .base import basePanel
from events import eventsPanel from .dm import dmPanel
from favourites import favsPanel from .events import eventsPanel
from lists import listPanel from .favourites import favsPanel
from panels import accountPanel, emptyPanel from .lists import listPanel
from people import peoplePanel from .panels import accountPanel, emptyPanel
from trends import trendsPanel from .people import peoplePanel
from tweet_searches import searchPanel from .trends import trendsPanel
from user_searches import searchUsersPanel from .tweet_searches import searchPanel
from .user_searches import searchUsersPanel

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import wx import wx
from base import basePanel from .base import basePanel
class dmPanel(basePanel): class dmPanel(basePanel):
def __init__(self, parent, name): def __init__(self, parent, name):

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import wx import wx
from base import basePanel from .base import basePanel
class favsPanel(basePanel): class favsPanel(basePanel):
def __init__(self, parent, name): def __init__(self, parent, name):

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import wx import wx
from base import basePanel from .base import basePanel
class listPanel(basePanel): class listPanel(basePanel):
def __init__(self, parent, name): def __init__(self, parent, name):

View File

@ -1,7 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import wx import wx
from multiplatform_widgets import widgets from multiplatform_widgets import widgets
from base import basePanel from .base import basePanel
class peoplePanel(basePanel): class peoplePanel(basePanel):
""" Buffer used to show people.""" """ Buffer used to show people."""

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import wx import wx
from base import basePanel from .base import basePanel
class searchPanel(basePanel): class searchPanel(basePanel):
def __init__(self, parent, name): def __init__(self, parent, name):

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import wx import wx
from tweet_searches import searchPanel from .tweet_searches import searchPanel
from multiplatform_widgets import widgets from multiplatform_widgets import widgets
class searchUsersPanel(searchPanel): class searchUsersPanel(searchPanel):

View File

@ -1 +1,2 @@
import baseDialog, trends, configuration, lists, message, search, find, show_user, update_profile, urlList, userSelection, utils from __future__ import absolute_import
from . import baseDialog, trends, configuration, lists, message, search, find, show_user, update_profile, urlList, userSelection, utils

View File

@ -1,5 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import baseDialog from __future__ import absolute_import
# -*- coding: utf-8 -*-
from . import baseDialog
import wx import wx
import logging as original_logger import logging as original_logger
import application import application

View File

@ -1,5 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import baseDialog from __future__ import absolute_import
# -*- coding: utf-8 -*-
from . import baseDialog
import wx import wx
class findDialog(baseDialog.BaseWXDialog): class findDialog(baseDialog.BaseWXDialog):

View File

@ -70,19 +70,19 @@ class tweet(textLimited):
self.mainBox = wx.BoxSizer(wx.VERTICAL) self.mainBox = wx.BoxSizer(wx.VERTICAL)
self.createTextArea(message, text) self.createTextArea(message, text)
self.mainBox.Add(self.textBox, 0, wx.ALL, 5) self.mainBox.Add(self.textBox, 0, wx.ALL, 5)
self.long_tweet = wx.CheckBox(self.panel, -1, _(u"&Long tweet")) self.long_tweet = wx.CheckBox(self.panel, -1, _("&Long tweet"))
self.upload_image = wx.Button(self.panel, -1, _(u"&Upload image..."), size=wx.DefaultSize) self.upload_image = wx.Button(self.panel, -1, _("&Upload image..."), size=wx.DefaultSize)
self.spellcheck = wx.Button(self.panel, -1, _("Check &spelling..."), size=wx.DefaultSize) self.spellcheck = wx.Button(self.panel, -1, _("Check &spelling..."), size=wx.DefaultSize)
self.attach = wx.Button(self.panel, -1, _(u"&Attach audio..."), size=wx.DefaultSize) self.attach = wx.Button(self.panel, -1, _("&Attach audio..."), size=wx.DefaultSize)
self.shortenButton = wx.Button(self.panel, -1, _(u"Sh&orten URL"), size=wx.DefaultSize) self.shortenButton = wx.Button(self.panel, -1, _("Sh&orten URL"), size=wx.DefaultSize)
self.unshortenButton = wx.Button(self.panel, -1, _(u"&Expand URL"), size=wx.DefaultSize) self.unshortenButton = wx.Button(self.panel, -1, _("&Expand URL"), size=wx.DefaultSize)
self.shortenButton.Disable() self.shortenButton.Disable()
self.unshortenButton.Disable() self.unshortenButton.Disable()
self.translateButton = wx.Button(self.panel, -1, _(u"&Translate..."), size=wx.DefaultSize) self.translateButton = wx.Button(self.panel, -1, _("&Translate..."), size=wx.DefaultSize)
self.autocompletionButton = wx.Button(self.panel, -1, _(u"Auto&complete users")) self.autocompletionButton = wx.Button(self.panel, -1, _("Auto&complete users"))
self.okButton = wx.Button(self.panel, wx.ID_OK, _(u"Sen&d"), size=wx.DefaultSize) self.okButton = wx.Button(self.panel, wx.ID_OK, _("Sen&d"), size=wx.DefaultSize)
self.okButton.SetDefault() self.okButton.SetDefault()
cancelButton = wx.Button(self.panel, wx.ID_CANCEL, _(u"C&lose"), size=wx.DefaultSize) cancelButton = wx.Button(self.panel, wx.ID_CANCEL, _("C&lose"), size=wx.DefaultSize)
self.buttonsBox1 = wx.BoxSizer(wx.HORIZONTAL) self.buttonsBox1 = wx.BoxSizer(wx.HORIZONTAL)
self.buttonsBox1.Add(self.upload_image, 0, wx.ALL, 10) self.buttonsBox1.Add(self.upload_image, 0, wx.ALL, 10)
self.buttonsBox1.Add(self.spellcheck, 0, wx.ALL, 10) self.buttonsBox1.Add(self.spellcheck, 0, wx.ALL, 10)
@ -113,7 +113,7 @@ class tweet(textLimited):
self.SetClientSize(self.mainBox.CalcMin()) self.SetClientSize(self.mainBox.CalcMin())
def get_image(self): def get_image(self):
openFileDialog = wx.FileDialog(self, _(u"Select the picture to be uploaded"), "", "", _("Image files (*.png, *.jpg, *.gif)|*.png; *.jpg; *.gif"), wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) openFileDialog = wx.FileDialog(self, _("Select the picture to be uploaded"), "", "", _("Image files (*.png, *.jpg, *.gif)|*.png; *.jpg; *.gif"), wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
if openFileDialog.ShowModal() == wx.ID_CANCEL: if openFileDialog.ShowModal() == wx.ID_CANCEL:
return None return None
return open(openFileDialog.GetPath(), "rb") return open(openFileDialog.GetPath(), "rb")
@ -123,25 +123,25 @@ class retweet(tweet):
def createControls(self, title, message, text): def createControls(self, title, message, text):
self.mainBox = wx.BoxSizer(wx.VERTICAL) self.mainBox = wx.BoxSizer(wx.VERTICAL)
self.createTextArea(message, "") self.createTextArea(message, "")
label = wx.StaticText(self.panel, -1, _(u"Retweet")) label = wx.StaticText(self.panel, -1, _("Retweet"))
self.text2 = wx.TextCtrl(self.panel, -1, text, size=(439, -1), style=wx.TE_MULTILINE|wx.TE_READONLY) self.text2 = wx.TextCtrl(self.panel, -1, text, size=(439, -1), style=wx.TE_MULTILINE|wx.TE_READONLY)
self.retweetBox = wx.BoxSizer(wx.HORIZONTAL) self.retweetBox = wx.BoxSizer(wx.HORIZONTAL)
self.retweetBox.Add(label, 0, wx.ALL, 5) self.retweetBox.Add(label, 0, wx.ALL, 5)
self.retweetBox.Add(self.text2, 0, wx.ALL, 5) self.retweetBox.Add(self.text2, 0, wx.ALL, 5)
self.mainBox.Add(self.textBox, 0, wx.ALL, 5) self.mainBox.Add(self.textBox, 0, wx.ALL, 5)
self.mainBox.Add(self.retweetBox, 0, wx.ALL, 5) self.mainBox.Add(self.retweetBox, 0, wx.ALL, 5)
self.upload_image = wx.Button(self.panel, -1, _(u"&Upload image..."), size=wx.DefaultSize) self.upload_image = wx.Button(self.panel, -1, _("&Upload image..."), size=wx.DefaultSize)
self.spellcheck = wx.Button(self.panel, -1, _("Check &spelling..."), size=wx.DefaultSize) self.spellcheck = wx.Button(self.panel, -1, _("Check &spelling..."), size=wx.DefaultSize)
self.attach = wx.Button(self.panel, -1, _(u"&Attach audio..."), size=wx.DefaultSize) self.attach = wx.Button(self.panel, -1, _("&Attach audio..."), size=wx.DefaultSize)
self.shortenButton = wx.Button(self.panel, -1, _(u"Sh&orten URL"), size=wx.DefaultSize) self.shortenButton = wx.Button(self.panel, -1, _("Sh&orten URL"), size=wx.DefaultSize)
self.unshortenButton = wx.Button(self.panel, -1, _(u"&Expand URL"), size=wx.DefaultSize) self.unshortenButton = wx.Button(self.panel, -1, _("&Expand URL"), size=wx.DefaultSize)
self.shortenButton.Disable() self.shortenButton.Disable()
self.unshortenButton.Disable() self.unshortenButton.Disable()
self.translateButton = wx.Button(self.panel, -1, _(u"&Translate..."), size=wx.DefaultSize) self.translateButton = wx.Button(self.panel, -1, _("&Translate..."), size=wx.DefaultSize)
self.autocompletionButton = wx.Button(self.panel, -1, _(u"Auto&complete users")) self.autocompletionButton = wx.Button(self.panel, -1, _("Auto&complete users"))
self.okButton = wx.Button(self.panel, wx.ID_OK, _(u"Sen&d"), size=wx.DefaultSize) self.okButton = wx.Button(self.panel, wx.ID_OK, _("Sen&d"), size=wx.DefaultSize)
self.okButton.SetDefault() self.okButton.SetDefault()
cancelButton = wx.Button(self.panel, wx.ID_CANCEL, _(u"C&lose"), size=wx.DefaultSize) cancelButton = wx.Button(self.panel, wx.ID_CANCEL, _("C&lose"), size=wx.DefaultSize)
self.buttonsBox1 = wx.BoxSizer(wx.HORIZONTAL) self.buttonsBox1 = wx.BoxSizer(wx.HORIZONTAL)
self.buttonsBox1.Add(self.upload_image, 0, wx.ALL, 10) self.buttonsBox1.Add(self.upload_image, 0, wx.ALL, 10)
self.buttonsBox1.Add(self.spellcheck, 0, wx.ALL, 10) self.buttonsBox1.Add(self.spellcheck, 0, wx.ALL, 10)
@ -172,7 +172,7 @@ class retweet(tweet):
self.SetClientSize(self.mainBox.CalcMin()) self.SetClientSize(self.mainBox.CalcMin())
def get_image(self): def get_image(self):
openFileDialog = wx.FileDialog(self, _(u"Select the picture to be uploaded"), "", "", _("Image files (*.png, *.jpg, *.gif)|*.png; *.jpg; *.gif"), wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) openFileDialog = wx.FileDialog(self, _("Select the picture to be uploaded"), "", "", _("Image files (*.png, *.jpg, *.gif)|*.png; *.jpg; *.gif"), wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
if openFileDialog.ShowModal() == wx.ID_CANCEL: if openFileDialog.ShowModal() == wx.ID_CANCEL:
return None return None
return open(openFileDialog.GetPath(), "rb") return open(openFileDialog.GetPath(), "rb")
@ -181,9 +181,9 @@ class dm(textLimited):
def createControls(self, title, message, users): def createControls(self, title, message, users):
self.panel = wx.Panel(self) self.panel = wx.Panel(self)
self.mainBox = wx.BoxSizer(wx.VERTICAL) self.mainBox = wx.BoxSizer(wx.VERTICAL)
label = wx.StaticText(self.panel, -1, _(u"&Recipient")) label = wx.StaticText(self.panel, -1, _("&Recipient"))
self.cb = wx.ComboBox(self.panel, -1, choices=users, value=users[0], size=wx.DefaultSize) self.cb = wx.ComboBox(self.panel, -1, choices=users, value=users[0], size=wx.DefaultSize)
self.autocompletionButton = wx.Button(self.panel, -1, _(u"Auto&complete users")) self.autocompletionButton = wx.Button(self.panel, -1, _("Auto&complete users"))
self.createTextArea(message, text="") self.createTextArea(message, text="")
userBox = wx.BoxSizer(wx.HORIZONTAL) userBox = wx.BoxSizer(wx.HORIZONTAL)
userBox.Add(label, 0, wx.ALL, 5) userBox.Add(label, 0, wx.ALL, 5)
@ -192,15 +192,15 @@ class dm(textLimited):
self.mainBox.Add(userBox, 0, wx.ALL, 5) self.mainBox.Add(userBox, 0, wx.ALL, 5)
self.mainBox.Add(self.textBox, 0, wx.ALL, 5) self.mainBox.Add(self.textBox, 0, wx.ALL, 5)
self.spellcheck = wx.Button(self.panel, -1, _("Check &spelling..."), size=wx.DefaultSize) self.spellcheck = wx.Button(self.panel, -1, _("Check &spelling..."), size=wx.DefaultSize)
self.attach = wx.Button(self.panel, -1, _(u"&Attach audio..."), size=wx.DefaultSize) self.attach = wx.Button(self.panel, -1, _("&Attach audio..."), size=wx.DefaultSize)
self.shortenButton = wx.Button(self.panel, -1, _(u"Sh&orten URL"), size=wx.DefaultSize) self.shortenButton = wx.Button(self.panel, -1, _("Sh&orten URL"), size=wx.DefaultSize)
self.unshortenButton = wx.Button(self.panel, -1, _(u"&Expand URL"), size=wx.DefaultSize) self.unshortenButton = wx.Button(self.panel, -1, _("&Expand URL"), size=wx.DefaultSize)
self.shortenButton.Disable() self.shortenButton.Disable()
self.unshortenButton.Disable() self.unshortenButton.Disable()
self.translateButton = wx.Button(self.panel, -1, _(u"&Translate..."), size=wx.DefaultSize) self.translateButton = wx.Button(self.panel, -1, _("&Translate..."), size=wx.DefaultSize)
self.okButton = wx.Button(self.panel, wx.ID_OK, _(u"Sen&d"), size=wx.DefaultSize) self.okButton = wx.Button(self.panel, wx.ID_OK, _("Sen&d"), size=wx.DefaultSize)
self.okButton.SetDefault() self.okButton.SetDefault()
cancelButton = wx.Button(self.panel, wx.ID_CANCEL, _(u"C&lose"), size=wx.DefaultSize) cancelButton = wx.Button(self.panel, wx.ID_CANCEL, _("C&lose"), size=wx.DefaultSize)
self.buttonsBox = wx.BoxSizer(wx.HORIZONTAL) self.buttonsBox = wx.BoxSizer(wx.HORIZONTAL)
self.buttonsBox.Add(self.spellcheck, 0, wx.ALL, 5) self.buttonsBox.Add(self.spellcheck, 0, wx.ALL, 5)
self.buttonsBox.Add(self.attach, 0, wx.ALL, 5) self.buttonsBox.Add(self.attach, 0, wx.ALL, 5)
@ -232,7 +232,7 @@ class dm(textLimited):
class reply(textLimited): class reply(textLimited):
def get_image(self): def get_image(self):
openFileDialog = wx.FileDialog(self, _(u"Select the picture to be uploaded"), "", "", _("Image files (*.png, *.jpg, *.gif)|*.png; *.jpg; *.gif"), wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) openFileDialog = wx.FileDialog(self, _("Select the picture to be uploaded"), "", "", _("Image files (*.png, *.jpg, *.gif)|*.png; *.jpg; *.gif"), wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
if openFileDialog.ShowModal() == wx.ID_CANCEL: if openFileDialog.ShowModal() == wx.ID_CANCEL:
return None return None
return open(openFileDialog.GetPath(), "rb") return open(openFileDialog.GetPath(), "rb")
@ -242,7 +242,7 @@ class reply(textLimited):
self.createTextArea(message, text) self.createTextArea(message, text)
self.mainBox.Add(self.textBox, 0, wx.ALL, 5) self.mainBox.Add(self.textBox, 0, wx.ALL, 5)
self.usersbox = wx.BoxSizer(wx.VERTICAL) self.usersbox = wx.BoxSizer(wx.VERTICAL)
self.mentionAll = wx.CheckBox(self.panel, -1, _(u"&Mention to all"), size=wx.DefaultSize) self.mentionAll = wx.CheckBox(self.panel, -1, _("&Mention to all"), size=wx.DefaultSize)
self.mentionAll.Disable() self.mentionAll.Disable()
self.usersbox.Add(self.mentionAll, 0, wx.ALL, 5) self.usersbox.Add(self.mentionAll, 0, wx.ALL, 5)
self.checkboxes = [] self.checkboxes = []
@ -251,19 +251,19 @@ class reply(textLimited):
self.checkboxes.append(user_checkbox) self.checkboxes.append(user_checkbox)
self.usersbox.Add(self.checkboxes[-1], 0, wx.ALL, 5) self.usersbox.Add(self.checkboxes[-1], 0, wx.ALL, 5)
self.mainBox.Add(self.usersbox, 0, wx.ALL, 10) self.mainBox.Add(self.usersbox, 0, wx.ALL, 10)
self.long_tweet = wx.CheckBox(self.panel, -1, _(u"&Long tweet")) self.long_tweet = wx.CheckBox(self.panel, -1, _("&Long tweet"))
self.upload_image = wx.Button(self.panel, -1, _(u"&Upload image..."), size=wx.DefaultSize) self.upload_image = wx.Button(self.panel, -1, _("&Upload image..."), size=wx.DefaultSize)
self.spellcheck = wx.Button(self.panel, -1, _("Check &spelling..."), size=wx.DefaultSize) self.spellcheck = wx.Button(self.panel, -1, _("Check &spelling..."), size=wx.DefaultSize)
self.attach = wx.Button(self.panel, -1, _(u"&Attach audio..."), size=wx.DefaultSize) self.attach = wx.Button(self.panel, -1, _("&Attach audio..."), size=wx.DefaultSize)
self.shortenButton = wx.Button(self.panel, -1, _(u"Sh&orten URL"), size=wx.DefaultSize) self.shortenButton = wx.Button(self.panel, -1, _("Sh&orten URL"), size=wx.DefaultSize)
self.unshortenButton = wx.Button(self.panel, -1, _(u"&Expand URL"), size=wx.DefaultSize) self.unshortenButton = wx.Button(self.panel, -1, _("&Expand URL"), size=wx.DefaultSize)
self.shortenButton.Disable() self.shortenButton.Disable()
self.unshortenButton.Disable() self.unshortenButton.Disable()
self.translateButton = wx.Button(self.panel, -1, _(u"&Translate..."), size=wx.DefaultSize) self.translateButton = wx.Button(self.panel, -1, _("&Translate..."), size=wx.DefaultSize)
self.autocompletionButton = wx.Button(self.panel, -1, _(u"Auto&complete users")) self.autocompletionButton = wx.Button(self.panel, -1, _("Auto&complete users"))
self.okButton = wx.Button(self.panel, wx.ID_OK, _(u"Sen&d"), size=wx.DefaultSize) self.okButton = wx.Button(self.panel, wx.ID_OK, _("Sen&d"), size=wx.DefaultSize)
self.okButton.SetDefault() self.okButton.SetDefault()
cancelButton = wx.Button(self.panel, wx.ID_CANCEL, _(u"C&lose"), size=wx.DefaultSize) cancelButton = wx.Button(self.panel, wx.ID_CANCEL, _("C&lose"), size=wx.DefaultSize)
self.buttonsBox1 = wx.BoxSizer(wx.HORIZONTAL) self.buttonsBox1 = wx.BoxSizer(wx.HORIZONTAL)
self.buttonsBox1.Add(self.upload_image, 0, wx.ALL, 10) self.buttonsBox1.Add(self.upload_image, 0, wx.ALL, 10)
self.buttonsBox1.Add(self.spellcheck, 0, wx.ALL, 10) self.buttonsBox1.Add(self.spellcheck, 0, wx.ALL, 10)
@ -296,16 +296,16 @@ class reply(textLimited):
class viewTweet(widgetUtils.BaseDialog): class viewTweet(widgetUtils.BaseDialog):
def set_title(self, lenght): def set_title(self, lenght):
self.SetTitle(_(u"Tweet - %i characters ") % (lenght,)) self.SetTitle(_("Tweet - %i characters ") % (lenght,))
def __init__(self, text, rt_count, favs_count,source, *args, **kwargs): def __init__(self, text, rt_count, favs_count,source, *args, **kwargs):
super(viewTweet, self).__init__(None, size=(850,850)) super(viewTweet, self).__init__(None, size=(850,850))
panel = wx.Panel(self) panel = wx.Panel(self)
label = wx.StaticText(panel, -1, _(u"Tweet")) label = wx.StaticText(panel, -1, _("Tweet"))
self.text = wx.TextCtrl(panel, -1, text, style=wx.TE_READONLY|wx.TE_MULTILINE, size=(250, 180)) self.text = wx.TextCtrl(panel, -1, text, style=wx.TE_READONLY|wx.TE_MULTILINE, size=(250, 180))
dc = wx.WindowDC(self.text) dc = wx.WindowDC(self.text)
dc.SetFont(self.text.GetFont()) dc.SetFont(self.text.GetFont())
(x, y, z) = dc.GetMultiLineTextExtent("0"*140) (x, y) = dc.GetMultiLineTextExtent("0"*140)
self.text.SetSize((x, y)) self.text.SetSize((x, y))
self.text.SetFocus() self.text.SetFocus()
textBox = wx.BoxSizer(wx.HORIZONTAL) textBox = wx.BoxSizer(wx.HORIZONTAL)
@ -313,28 +313,28 @@ class viewTweet(widgetUtils.BaseDialog):
textBox.Add(self.text, 1, wx.EXPAND, 5) textBox.Add(self.text, 1, wx.EXPAND, 5)
mainBox = wx.BoxSizer(wx.VERTICAL) mainBox = wx.BoxSizer(wx.VERTICAL)
mainBox.Add(textBox, 0, wx.ALL, 5) mainBox.Add(textBox, 0, wx.ALL, 5)
label2 = wx.StaticText(panel, -1, _(u"Image description")) label2 = wx.StaticText(panel, -1, _("Image description"))
self.image_description = wx.TextCtrl(panel, -1, style=wx.TE_READONLY|wx.TE_MULTILINE, size=(250, 180)) self.image_description = wx.TextCtrl(panel, -1, style=wx.TE_READONLY|wx.TE_MULTILINE, size=(250, 180))
dc = wx.WindowDC(self.image_description) dc = wx.WindowDC(self.image_description)
dc.SetFont(self.image_description.GetFont()) dc.SetFont(self.image_description.GetFont())
(x, y, z) = dc.GetMultiLineTextExtent("0"*450) (x, y) = dc.GetMultiLineTextExtent("0"*450)
self.image_description.SetSize((x, y)) self.image_description.SetSize((x, y))
self.image_description.Enable(False) self.image_description.Enable(False)
iBox = wx.BoxSizer(wx.HORIZONTAL) iBox = wx.BoxSizer(wx.HORIZONTAL)
iBox.Add(label2, 0, wx.ALL, 5) iBox.Add(label2, 0, wx.ALL, 5)
iBox.Add(self.image_description, 1, wx.EXPAND, 5) iBox.Add(self.image_description, 1, wx.EXPAND, 5)
mainBox.Add(iBox, 0, wx.ALL, 5) mainBox.Add(iBox, 0, wx.ALL, 5)
rtCountLabel = wx.StaticText(panel, -1, _(u"Retweets: ")) rtCountLabel = wx.StaticText(panel, -1, _("Retweets: "))
rtCount = wx.TextCtrl(panel, -1, rt_count, size=wx.DefaultSize, style=wx.TE_READONLY|wx.TE_MULTILINE) rtCount = wx.TextCtrl(panel, -1, rt_count, size=wx.DefaultSize, style=wx.TE_READONLY|wx.TE_MULTILINE)
rtBox = wx.BoxSizer(wx.HORIZONTAL) rtBox = wx.BoxSizer(wx.HORIZONTAL)
rtBox.Add(rtCountLabel, 0, wx.ALL, 5) rtBox.Add(rtCountLabel, 0, wx.ALL, 5)
rtBox.Add(rtCount, 0, wx.ALL, 5) rtBox.Add(rtCount, 0, wx.ALL, 5)
favsCountLabel = wx.StaticText(panel, -1, _(u"Likes: ")) favsCountLabel = wx.StaticText(panel, -1, _("Likes: "))
favsCount = wx.TextCtrl(panel, -1, favs_count, size=wx.DefaultSize, style=wx.TE_READONLY|wx.TE_MULTILINE) favsCount = wx.TextCtrl(panel, -1, favs_count, size=wx.DefaultSize, style=wx.TE_READONLY|wx.TE_MULTILINE)
favsBox = wx.BoxSizer(wx.HORIZONTAL) favsBox = wx.BoxSizer(wx.HORIZONTAL)
favsBox.Add(favsCountLabel, 0, wx.ALL, 5) favsBox.Add(favsCountLabel, 0, wx.ALL, 5)
favsBox.Add(favsCount, 0, wx.ALL, 5) favsBox.Add(favsCount, 0, wx.ALL, 5)
sourceLabel = wx.StaticText(panel, -1, _(u"Source: ")) sourceLabel = wx.StaticText(panel, -1, _("Source: "))
sourceTweet = wx.TextCtrl(panel, -1, source, size=wx.DefaultSize, style=wx.TE_READONLY|wx.TE_MULTILINE) sourceTweet = wx.TextCtrl(panel, -1, source, size=wx.DefaultSize, style=wx.TE_READONLY|wx.TE_MULTILINE)
sourceBox = wx.BoxSizer(wx.HORIZONTAL) sourceBox = wx.BoxSizer(wx.HORIZONTAL)
sourceBox.Add(sourceLabel, 0, wx.ALL, 5) sourceBox.Add(sourceLabel, 0, wx.ALL, 5)
@ -345,10 +345,10 @@ class viewTweet(widgetUtils.BaseDialog):
infoBox.Add(sourceBox, 0, wx.ALL, 5) infoBox.Add(sourceBox, 0, wx.ALL, 5)
mainBox.Add(infoBox, 0, wx.ALL, 5) mainBox.Add(infoBox, 0, wx.ALL, 5)
self.spellcheck = wx.Button(panel, -1, _("Check &spelling..."), size=wx.DefaultSize) self.spellcheck = wx.Button(panel, -1, _("Check &spelling..."), size=wx.DefaultSize)
self.unshortenButton = wx.Button(panel, -1, _(u"&Expand URL"), size=wx.DefaultSize) self.unshortenButton = wx.Button(panel, -1, _("&Expand URL"), size=wx.DefaultSize)
self.unshortenButton.Disable() self.unshortenButton.Disable()
self.translateButton = wx.Button(panel, -1, _(u"&Translate..."), size=wx.DefaultSize) self.translateButton = wx.Button(panel, -1, _("&Translate..."), size=wx.DefaultSize)
cancelButton = wx.Button(panel, wx.ID_CANCEL, _(u"C&lose"), size=wx.DefaultSize) cancelButton = wx.Button(panel, wx.ID_CANCEL, _("C&lose"), size=wx.DefaultSize)
cancelButton.SetDefault() cancelButton.SetDefault()
buttonsBox = wx.BoxSizer(wx.HORIZONTAL) buttonsBox = wx.BoxSizer(wx.HORIZONTAL)
buttonsBox.Add(self.spellcheck, 0, wx.ALL, 5) buttonsBox.Add(self.spellcheck, 0, wx.ALL, 5)
@ -392,13 +392,13 @@ class viewNonTweet(widgetUtils.BaseDialog):
def __init__(self, text, *args, **kwargs): def __init__(self, text, *args, **kwargs):
super(viewNonTweet, self).__init__(None, size=(850,850)) super(viewNonTweet, self).__init__(None, size=(850,850))
self.SetTitle(_(u"View")) self.SetTitle(_("View"))
panel = wx.Panel(self) panel = wx.Panel(self)
label = wx.StaticText(panel, -1, _(u"Item")) label = wx.StaticText(panel, -1, _("Item"))
self.text = wx.TextCtrl(parent=panel, id=-1, value=text, style=wx.TE_READONLY|wx.TE_MULTILINE, size=(250, 180)) self.text = wx.TextCtrl(parent=panel, id=-1, value=text, style=wx.TE_READONLY|wx.TE_MULTILINE, size=(250, 180))
dc = wx.WindowDC(self.text) dc = wx.WindowDC(self.text)
dc.SetFont(self.text.GetFont()) dc.SetFont(self.text.GetFont())
(x, y, z) = dc.GetMultiLineTextExtent("0"*140) (x, y) = dc.GetMultiLineTextExtent("0"*140)
self.text.SetSize((x, y)) self.text.SetSize((x, y))
self.text.SetFocus() self.text.SetFocus()
textBox = wx.BoxSizer(wx.HORIZONTAL) textBox = wx.BoxSizer(wx.HORIZONTAL)
@ -407,10 +407,10 @@ class viewNonTweet(widgetUtils.BaseDialog):
mainBox = wx.BoxSizer(wx.VERTICAL) mainBox = wx.BoxSizer(wx.VERTICAL)
mainBox.Add(textBox, 0, wx.ALL, 5) mainBox.Add(textBox, 0, wx.ALL, 5)
self.spellcheck = wx.Button(panel, -1, _("Check &spelling..."), size=wx.DefaultSize) self.spellcheck = wx.Button(panel, -1, _("Check &spelling..."), size=wx.DefaultSize)
self.unshortenButton = wx.Button(panel, -1, _(u"&Expand URL"), size=wx.DefaultSize) self.unshortenButton = wx.Button(panel, -1, _("&Expand URL"), size=wx.DefaultSize)
self.unshortenButton.Disable() self.unshortenButton.Disable()
self.translateButton = wx.Button(panel, -1, _(u"&Translate..."), size=wx.DefaultSize) self.translateButton = wx.Button(panel, -1, _("&Translate..."), size=wx.DefaultSize)
cancelButton = wx.Button(panel, wx.ID_CANCEL, _(u"C&lose"), size=wx.DefaultSize) cancelButton = wx.Button(panel, wx.ID_CANCEL, _("C&lose"), size=wx.DefaultSize)
cancelButton.SetDefault() cancelButton.SetDefault()
buttonsBox = wx.BoxSizer(wx.HORIZONTAL) buttonsBox = wx.BoxSizer(wx.HORIZONTAL)
buttonsBox.Add(self.spellcheck, 0, wx.ALL, 5) buttonsBox.Add(self.spellcheck, 0, wx.ALL, 5)

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import widgetUtils import widgetUtils
import baseDialog from . import baseDialog
import wx import wx
from extra import translator from extra import translator
@ -9,39 +10,40 @@ class searchDialog(baseDialog.BaseWXDialog):
super(searchDialog, self).__init__(None, -1) super(searchDialog, self).__init__(None, -1)
panel = wx.Panel(self) panel = wx.Panel(self)
sizer = wx.BoxSizer(wx.VERTICAL) sizer = wx.BoxSizer(wx.VERTICAL)
self.SetTitle(_(u"Search on Twitter")) self.SetTitle(_("Search on Twitter"))
label = wx.StaticText(panel, -1, _(u"&Search")) label = wx.StaticText(panel, -1, _("&Search"))
self.term = wx.TextCtrl(panel, -1, value) self.term = wx.TextCtrl(panel, -1, value)
dc = wx.WindowDC(self.term) dc = wx.WindowDC(self.term)
dc.SetFont(self.term.GetFont()) dc.SetFont(self.term.GetFont())
self.term.SetSize(dc.GetTextExtent("0"*40)) self.term.SetSize(dc.GetTextExtent("0"*40))
sizer.Add(label, 0, wx.ALL, 5) sizer.Add(label, 0, wx.ALL, 5)
sizer.Add(self.term, 0, wx.ALL, 5) sizer.Add(self.term, 0, wx.ALL, 5)
self.tweets = wx.RadioButton(panel, -1, _(u"Tweets"), style=wx.RB_GROUP) self.tweets = wx.RadioButton(panel, -1, _("Tweets"), style=wx.RB_GROUP)
self.users = wx.RadioButton(panel, -1, _(u"Users")) self.users = wx.RadioButton(panel, -1, _("Users"))
widgetUtils.connect_event(self.tweets, widgetUtils.RADIOBUTTON, self.show_advanced_search) widgetUtils.connect_event(self.tweets, widgetUtils.RADIOBUTTON, self.show_advanced_search)
widgetUtils.connect_event(self.users, widgetUtils.RADIOBUTTON, self.hide_advanced_search) widgetUtils.connect_event(self.users, widgetUtils.RADIOBUTTON, self.hide_advanced_search)
radioSizer = wx.BoxSizer(wx.HORIZONTAL) radioSizer = wx.BoxSizer(wx.HORIZONTAL)
radioSizer.Add(self.tweets, 0, wx.ALL, 5) radioSizer.Add(self.tweets, 0, wx.ALL, 5)
radioSizer.Add(self.users, 0, wx.ALL, 5) radioSizer.Add(self.users, 0, wx.ALL, 5)
sizer.Add(radioSizer, 0, wx.ALL, 5) sizer.Add(radioSizer, 0, wx.ALL, 5)
lang = wx.StaticText(panel, -1, _(u"&Language for results: ")) lang = wx.StaticText(panel, -1, _("&Language for results: "))
langs = [x for x in translator.translator.languages.values()] langs = [x[1] for x in translator.translator.available_languages()]
langs.insert(0, _(u"any")) langs[:] = langs[1:]
langs.insert(0, _("any"))
self.lang = wx.ComboBox(panel, -1, choices=langs, value=langs[0], style = wx.CB_READONLY) self.lang = wx.ComboBox(panel, -1, choices=langs, value=langs[0], style = wx.CB_READONLY)
langBox = wx.BoxSizer(wx.HORIZONTAL) langBox = wx.BoxSizer(wx.HORIZONTAL)
langBox.Add(lang, 0, wx.ALL, 5) langBox.Add(lang, 0, wx.ALL, 5)
langBox.Add(self.lang, 0, wx.ALL, 5) langBox.Add(self.lang, 0, wx.ALL, 5)
sizer.Add(langBox, 0, wx.ALL, 5) sizer.Add(langBox, 0, wx.ALL, 5)
resulttype = wx.StaticText(panel, -1, _(U"Results &type: ")) resulttype = wx.StaticText(panel, -1, _("Results &type: "))
self.resultstype = wx.ComboBox(panel, -1, choices=[_(u"Mixed"), _(u"Recent"), _(u"Popular")], value=_(u"Mixed"), style=wx.CB_READONLY) self.resultstype = wx.ComboBox(panel, -1, choices=[_("Mixed"), _("Recent"), _("Popular")], value=_("Mixed"), style=wx.CB_READONLY)
rBox = wx.BoxSizer(wx.HORIZONTAL) rBox = wx.BoxSizer(wx.HORIZONTAL)
rBox.Add(resulttype, 0, wx.ALL, 5) rBox.Add(resulttype, 0, wx.ALL, 5)
rBox.Add(self.resultstype, 0, wx.ALL, 5) rBox.Add(self.resultstype, 0, wx.ALL, 5)
sizer.Add(rBox, 0, wx.ALL, 5) sizer.Add(rBox, 0, wx.ALL, 5)
ok = wx.Button(panel, wx.ID_OK, _(u"&OK")) ok = wx.Button(panel, wx.ID_OK, _("&OK"))
ok.SetDefault() ok.SetDefault()
cancel = wx.Button(panel, wx.ID_CANCEL, _(u"&Close")) cancel = wx.Button(panel, wx.ID_CANCEL, _("&Close"))
btnsizer = wx.BoxSizer() btnsizer = wx.BoxSizer()
btnsizer.Add(ok, 0, wx.ALL, 5) btnsizer.Add(ok, 0, wx.ALL, 5)
btnsizer.Add(cancel, 0, wx.ALL, 5) btnsizer.Add(cancel, 0, wx.ALL, 5)
@ -50,18 +52,13 @@ class searchDialog(baseDialog.BaseWXDialog):
self.SetClientSize(sizer.CalcMin()) self.SetClientSize(sizer.CalcMin())
def get_language(self): def get_language(self):
l = self.lang.GetStringSelection() return [x[0] for x in translator.translator.available_languages()][self.lang.GetSelection()]
if l == _(u"any"):
return ""
for langcode, langname in translator.translator.languages.iteritems():
if langname == l:
return langcode
def get_result_type(self): def get_result_type(self):
r = self.resultstype.GetValue() r = self.resultstype.GetValue()
if r == _(u"Mixed"): return "mixed" if r == _("Mixed"): return "mixed"
elif r == _(u"Recent"): return "recent" elif r == _("Recent"): return "recent"
elif r == _(u"Popular"): return "popular" elif r == _("Popular"): return "popular"
def hide_advanced_search(self, *args, **kwargs): def hide_advanced_search(self, *args, **kwargs):
self.lang.Hide() self.lang.Hide()

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import wx import wx
import baseDialog from . import baseDialog
class showUserProfile(baseDialog.BaseWXDialog): class showUserProfile(baseDialog.BaseWXDialog):
def __init__(self): def __init__(self):

View File

@ -1,5 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import baseDialog from __future__ import absolute_import
# -*- coding: utf-8 -*-
from . import baseDialog
import wx import wx
class trendingTopicsDialog(baseDialog.BaseWXDialog): class trendingTopicsDialog(baseDialog.BaseWXDialog):

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import wx import wx
import baseDialog from . import baseDialog
class updateProfileDialog(baseDialog.BaseWXDialog): class updateProfileDialog(baseDialog.BaseWXDialog):
def __init__(self): def __init__(self):

View File

@ -16,8 +16,9 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
############################################################ ############################################################
from __future__ import absolute_import
import wx import wx
import baseDialog from . import baseDialog
class selectUserDialog(baseDialog.BaseWXDialog): class selectUserDialog(baseDialog.BaseWXDialog):
def __init__(self, title, users): def __init__(self, title, users):

View File

@ -5,93 +5,93 @@ class basePanelMenu(wx.Menu):
def __init__(self): def __init__(self):
super(basePanelMenu, self).__init__() super(basePanelMenu, self).__init__()
self.retweet = wx.MenuItem(self, wx.NewId(), _(u"&Retweet")) self.retweet = wx.MenuItem(self, wx.NewId(), _(u"&Retweet"))
self.AppendItem(self.retweet) self.Append(self.retweet)
self.reply = wx.MenuItem(self, wx.NewId(), _(u"Re&ply")) self.reply = wx.MenuItem(self, wx.NewId(), _(u"Re&ply"))
self.AppendItem(self.reply) self.Append(self.reply)
self.fav = wx.MenuItem(self, wx.NewId(), _(u"&Like")) self.fav = wx.MenuItem(self, wx.NewId(), _(u"&Like"))
self.AppendItem(self.fav) self.Append(self.fav)
self.unfav = wx.MenuItem(self, wx.NewId(), _(u"&Unlike")) self.unfav = wx.MenuItem(self, wx.NewId(), _(u"&Unlike"))
self.AppendItem(self.unfav) self.Append(self.unfav)
self.openUrl = wx.MenuItem(self, wx.NewId(), _(u"&Open URL")) self.openUrl = wx.MenuItem(self, wx.NewId(), _(u"&Open URL"))
self.AppendItem(self.openUrl) self.Append(self.openUrl)
self.play = wx.MenuItem(self, wx.NewId(), _(u"&Play audio")) self.play = wx.MenuItem(self, wx.NewId(), _(u"&Play audio"))
self.AppendItem(self.play) self.Append(self.play)
self.view = wx.MenuItem(self, wx.NewId(), _(u"&Show tweet")) self.view = wx.MenuItem(self, wx.NewId(), _(u"&Show tweet"))
self.AppendItem(self.view) self.Append(self.view)
self.copy = wx.MenuItem(self, wx.NewId(), _(u"&Copy to clipboard")) self.copy = wx.MenuItem(self, wx.NewId(), _(u"&Copy to clipboard"))
self.AppendItem(self.copy) self.Append(self.copy)
self.remove = wx.MenuItem(self, wx.NewId(), _(u"&Delete")) self.remove = wx.MenuItem(self, wx.NewId(), _(u"&Delete"))
self.AppendItem(self.remove) self.Append(self.remove)
self.userActions = wx.MenuItem(self, wx.NewId(), _(u"&User actions...")) self.userActions = wx.MenuItem(self, wx.NewId(), _(u"&User actions..."))
self.AppendItem(self.userActions) self.Append(self.userActions)
class dmPanelMenu(wx.Menu): class dmPanelMenu(wx.Menu):
def __init__(self): def __init__(self):
super(dmPanelMenu, self).__init__() super(dmPanelMenu, self).__init__()
self.reply = wx.MenuItem(self, wx.NewId(), _(u"Re&ply")) self.reply = wx.MenuItem(self, wx.NewId(), _(u"Re&ply"))
self.AppendItem(self.reply) self.append(self.reply)
self.openUrl = wx.MenuItem(self, wx.NewId(), _(u"&Open URL")) self.openUrl = wx.MenuItem(self, wx.NewId(), _(u"&Open URL"))
self.AppendItem(self.openUrl) self.append(self.openUrl)
self.play = wx.MenuItem(self, wx.NewId(), _(u"&Play audio")) self.play = wx.MenuItem(self, wx.NewId(), _(u"&Play audio"))
self.AppendItem(self.play) self.append(self.play)
self.view = wx.MenuItem(self, wx.NewId(), _(u"&Show direct message")) self.view = wx.MenuItem(self, wx.NewId(), _(u"&Show direct message"))
self.AppendItem(self.view) self.append(self.view)
self.copy = wx.MenuItem(self, wx.NewId(), _(u"&Copy to clipboard")) self.copy = wx.MenuItem(self, wx.NewId(), _(u"&Copy to clipboard"))
self.AppendItem(self.copy) self.append(self.copy)
self.remove = wx.MenuItem(self, wx.NewId(), _(u"&Delete")) self.remove = wx.MenuItem(self, wx.NewId(), _(u"&Delete"))
self.AppendItem(self.remove) self.append(self.remove)
self.userActions = wx.MenuItem(self, wx.NewId(), _(u"&User actions...")) self.userActions = wx.MenuItem(self, wx.NewId(), _(u"&User actions..."))
self.AppendItem(self.userActions) self.append(self.userActions)
class sentPanelMenu(wx.Menu): class sentPanelMenu(wx.Menu):
def __init__(self): def __init__(self):
super(sentPanelMenu, self).__init__() super(sentPanelMenu, self).__init__()
self.openUrl = wx.MenuItem(self, wx.NewId(), _(u"&Open URL")) self.openUrl = wx.MenuItem(self, wx.NewId(), _(u"&Open URL"))
self.AppendItem(self.openUrl) self.append(self.openUrl)
self.play = wx.MenuItem(self, wx.NewId(), _(u"&Play audio")) self.play = wx.MenuItem(self, wx.NewId(), _(u"&Play audio"))
self.AppendItem(self.play) self.append(self.play)
self.view = wx.MenuItem(self, wx.NewId(), _(u"&Show tweet")) self.view = wx.MenuItem(self, wx.NewId(), _(u"&Show tweet"))
self.AppendItem(self.view) self.append(self.view)
self.copy = wx.MenuItem(self, wx.NewId(), _(u"&Copy to clipboard")) self.copy = wx.MenuItem(self, wx.NewId(), _(u"&Copy to clipboard"))
self.AppendItem(self.copy) self.append(self.copy)
self.remove = wx.MenuItem(self, wx.NewId(), _(u"&Delete")) self.remove = wx.MenuItem(self, wx.NewId(), _(u"&Delete"))
self.AppendItem(self.remove) self.append(self.remove)
class eventsPanelMenu(wx.Menu): class eventsPanelMenu(wx.Menu):
def __init__(self): def __init__(self):
super(eventsPanelMenu, self).__init__() super(eventsPanelMenu, self).__init__()
self.view = wx.MenuItem(self, wx.NewId(), _(u"&Show event")) self.view = wx.MenuItem(self, wx.NewId(), _(u"&Show event"))
self.AppendItem(self.view) self.append(self.view)
self.copy = wx.MenuItem(self, wx.NewId(), _(u"&Copy to clipboard")) self.copy = wx.MenuItem(self, wx.NewId(), _(u"&Copy to clipboard"))
self.AppendItem(self.copy) self.append(self.copy)
self.remove = wx.MenuItem(self, wx.NewId(), _(u"&Delete")) self.remove = wx.MenuItem(self, wx.NewId(), _(u"&Delete"))
self.AppendItem(self.remove) self.append(self.remove)
class peoplePanelMenu(wx.Menu): class peoplePanelMenu(wx.Menu):
def __init__(self): def __init__(self):
super(peoplePanelMenu, self).__init__() super(peoplePanelMenu, self).__init__()
self.reply = wx.MenuItem(self, wx.NewId(), _(u"Direct &message")) self.reply = wx.MenuItem(self, wx.NewId(), _(u"Direct &message"))
self.AppendItem(self.reply) self.append(self.reply)
self.lists = wx.MenuItem(self, wx.NewId(), _(u"&View lists")) self.lists = wx.MenuItem(self, wx.NewId(), _(u"&View lists"))
self.AppendItem(self.lists) self.append(self.lists)
self.lists.Enable(False) self.lists.Enable(False)
self.details = wx.MenuItem(self, wx.NewId(), _(u"Show user &profile")) self.details = wx.MenuItem(self, wx.NewId(), _(u"Show user &profile"))
self.AppendItem(self.details) self.append(self.details)
self.view = wx.MenuItem(self, wx.NewId(), _(u"&Show user")) self.view = wx.MenuItem(self, wx.NewId(), _(u"&Show user"))
self.AppendItem(self.view) self.append(self.view)
self.copy = wx.MenuItem(self, wx.NewId(), _(u"&Copy to clipboard")) self.copy = wx.MenuItem(self, wx.NewId(), _(u"&Copy to clipboard"))
self.AppendItem(self.copy) self.append(self.copy)
self.userActions = wx.MenuItem(self, wx.NewId(), _(u"&User actions...")) self.userActions = wx.MenuItem(self, wx.NewId(), _(u"&User actions..."))
self.AppendItem(self.userActions) self.append(self.userActions)
class trendsPanelMenu(wx.Menu): class trendsPanelMenu(wx.Menu):
def __init__(self): def __init__(self):
super(trendsPanelMenu, self).__init__() super(trendsPanelMenu, self).__init__()
self.search_topic = wx.MenuItem(self, wx.NewId(), _(u"Search topic")) self.search_topic = wx.MenuItem(self, wx.NewId(), _(u"Search topic"))
self.AppendItem(self.search_topic) self.append(self.search_topic)
self.tweetThisTrend = wx.MenuItem(self, wx.NewId(), _(u"&Tweet about this trend")) self.tweetThisTrend = wx.MenuItem(self, wx.NewId(), _(u"&Tweet about this trend"))
self.AppendItem(self.tweetThisTrend) self.append(self.tweetThisTrend)
self.view = wx.MenuItem(self, wx.NewId(), _(u"&Show item")) self.view = wx.MenuItem(self, wx.NewId(), _(u"&Show item"))
self.AppendItem(self.view) self.append(self.view)
self.copy = wx.MenuItem(self, wx.NewId(), _(u"&Copy to clipboard")) self.copy = wx.MenuItem(self, wx.NewId(), _(u"&Copy to clipboard"))
self.AppendItem(self.copy) self.append(self.copy)

View File

@ -19,11 +19,12 @@
############################################################ ############################################################
import wx import wx
from wx import adv
import application import application
import paths import paths
import os import os
class SysTrayIcon(wx.TaskBarIcon): class SysTrayIcon(adv.TaskBarIcon):
def __init__(self): def __init__(self):
super(SysTrayIcon, self).__init__() super(SysTrayIcon, self).__init__()