mirror of
https://github.com/MCV-Software/TWBlue.git
synced 2025-04-05 11:22:30 -04:00
Move almost everything related to Twitter to handler
This commit is contained in:
parent
dfcd63b9b6
commit
b6b81e2b36
@ -16,6 +16,7 @@ from mysc.thread_utils import call_threaded
|
|||||||
from tweepy.errors import TweepyException
|
from tweepy.errors import TweepyException
|
||||||
from tweepy.cursor import Cursor
|
from tweepy.cursor import Cursor
|
||||||
from pubsub import pub
|
from pubsub import pub
|
||||||
|
from extra import ocr
|
||||||
from sessions.twitter.long_tweets import twishort, tweets
|
from sessions.twitter.long_tweets import twishort, tweets
|
||||||
from wxUI import buffers, dialogs, commonMessageDialogs, menus
|
from wxUI import buffers, dialogs, commonMessageDialogs, menus
|
||||||
from controller.twitter import user, messages
|
from controller.twitter import user, messages
|
||||||
@ -606,4 +607,57 @@ class BaseBuffer(base.Buffer):
|
|||||||
msg = messages.viewTweet(non_tweet, [], False, date=date)
|
msg = messages.viewTweet(non_tweet, [], False, date=date)
|
||||||
else:
|
else:
|
||||||
tweet, tweetsList = self.get_full_tweet()
|
tweet, tweetsList = self.get_full_tweet()
|
||||||
msg = messages.viewTweet(tweet, tweetsList, utc_offset=self.session.db["utc_offset"], item_url=self.get_item_url())
|
msg = messages.viewTweet(tweet, tweetsList, utc_offset=self.session.db["utc_offset"], item_url=self.get_item_url())
|
||||||
|
|
||||||
|
def reverse_geocode(self, geocoder):
|
||||||
|
try:
|
||||||
|
tweet = self.get_tweet()
|
||||||
|
if tweet.coordinates != None:
|
||||||
|
x = tweet.coordinates["coordinates"][0]
|
||||||
|
y = tweet.coordinates["coordinates"][1]
|
||||||
|
address = geocoder.reverse_geocode(y, x, language = languageHandler.curLang)
|
||||||
|
return address
|
||||||
|
else:
|
||||||
|
output.speak(_("There are no coordinates in this tweet"))
|
||||||
|
# except GeocoderError:
|
||||||
|
# output.speak(_(u"There are no results for the coordinates in this tweet"))
|
||||||
|
except ValueError:
|
||||||
|
output.speak(_(u"Error decoding coordinates. Try again later."))
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def ocr_image(self):
|
||||||
|
tweet = self.get_tweet()
|
||||||
|
media_list = []
|
||||||
|
if hasattr(tweet, "entities") and tweet.entities.get("media") != None:
|
||||||
|
[media_list.append(i) for i in tweet.entities["media"] if i not in media_list]
|
||||||
|
elif hasattr(tweet, "retweeted_status") and tweet.retweeted_status.get("media") != None:
|
||||||
|
[media_list.append(i) for i in tweet.retweeted_status.entities["media"] if i not in media_list]
|
||||||
|
elif hasattr(tweet, "quoted_status") and tweet.quoted_status.entities.get("media") != None:
|
||||||
|
[media_list.append(i) for i in tweet.quoted_status.entities["media"] if i not in media_list]
|
||||||
|
if len(media_list) > 1:
|
||||||
|
image_list = [_(u"Picture {0}").format(i,) for i in range(0, len(media_list))]
|
||||||
|
dialog = dialogs.urlList.urlList(title=_(u"Select the picture"))
|
||||||
|
if dialog.get_response() == widgetUtils.OK:
|
||||||
|
img = media_list[dialog.get_item()]
|
||||||
|
else:
|
||||||
|
return
|
||||||
|
elif len(media_list) == 1:
|
||||||
|
img = media_list[0]
|
||||||
|
else:
|
||||||
|
output.speak(_(u"Invalid buffer"))
|
||||||
|
return
|
||||||
|
if self.session.settings["mysc"]["ocr_language"] != "":
|
||||||
|
ocr_lang = self.session.settings["mysc"]["ocr_language"]
|
||||||
|
else:
|
||||||
|
ocr_lang = ocr.OCRSpace.short_langs.index(tweet.lang)
|
||||||
|
ocr_lang = ocr.OCRSpace.OcrLangs[ocr_lang]
|
||||||
|
api = ocr.OCRSpace.OCRSpaceAPI()
|
||||||
|
try:
|
||||||
|
text = api.OCR_URL(img["media_url"], lang=ocr_lang)
|
||||||
|
except ocr.OCRSpace.APIError as er:
|
||||||
|
output.speak(_(u"Unable to extract text"))
|
||||||
|
return
|
||||||
|
msg = messages.viewTweet(text["ParsedText"], [], False)
|
||||||
|
@ -18,7 +18,7 @@ from tweepy.errors import TweepyException, Forbidden
|
|||||||
from geopy.geocoders import Nominatim
|
from geopy.geocoders import Nominatim
|
||||||
from update import updater
|
from update import updater
|
||||||
from audio_services import youtube_utils
|
from audio_services import youtube_utils
|
||||||
from extra import SoundsTutorial, ocr
|
from extra import SoundsTutorial
|
||||||
from wxUI import view, dialogs, commonMessageDialogs, sysTrayIcon
|
from wxUI import view, dialogs, commonMessageDialogs, sysTrayIcon
|
||||||
from . import settings
|
from . import settings
|
||||||
from keyboard_handler.wx_handler import WXKeyboardHandler
|
from keyboard_handler.wx_handler import WXKeyboardHandler
|
||||||
@ -113,7 +113,6 @@ class Controller(object):
|
|||||||
widgetUtils.connect_event(self.view, widgetUtils.CLOSE_EVENT, self.exit_)
|
widgetUtils.connect_event(self.view, widgetUtils.CLOSE_EVENT, self.exit_)
|
||||||
pub.subscribe(self.logout_account, "logout")
|
pub.subscribe(self.logout_account, "logout")
|
||||||
pub.subscribe(self.login_account, "login")
|
pub.subscribe(self.login_account, "login")
|
||||||
pub.subscribe(self.create_new_buffer, "create-new-buffer")
|
|
||||||
pub.subscribe(self.execute_action, "execute-action")
|
pub.subscribe(self.execute_action, "execute-action")
|
||||||
pub.subscribe(self.search_topic, "search")
|
pub.subscribe(self.search_topic, "search")
|
||||||
pub.subscribe(self.update_sent_dms, "sent-dms-updated")
|
pub.subscribe(self.update_sent_dms, "sent-dms-updated")
|
||||||
@ -154,7 +153,7 @@ class Controller(object):
|
|||||||
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.add_to_favourites, self.view.fav)
|
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.add_to_favourites, self.view.fav)
|
||||||
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.remove_from_favourites, self.view.unfav)
|
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.remove_from_favourites, self.view.unfav)
|
||||||
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.view_item, self.view.view)
|
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.view_item, self.view.view)
|
||||||
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.reverse_geocode, menuitem=self.view.view_coordinates)
|
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.view_reverse_geocode, menuitem=self.view.view_coordinates)
|
||||||
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.delete, self.view.delete)
|
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.delete, self.view.delete)
|
||||||
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.follow, menuitem=self.view.follow)
|
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.follow, menuitem=self.view.follow)
|
||||||
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.send_dm, self.view.dm)
|
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.send_dm, self.view.dm)
|
||||||
@ -650,74 +649,37 @@ class Controller(object):
|
|||||||
self.showing = True
|
self.showing = True
|
||||||
|
|
||||||
def get_trending_topics(self, *args, **kwargs):
|
def get_trending_topics(self, *args, **kwargs):
|
||||||
buff = self.get_best_buffer()
|
buffer = self.get_best_buffer()
|
||||||
trends = trendingTopics.trendingTopicsController(buff.session)
|
handler = self.get_handler(type=buffer.session.type)
|
||||||
if trends.dialog.get_response() == widgetUtils.OK:
|
if handler != None and hasattr(handler, "get_trending_topics"):
|
||||||
woeid = trends.get_woeid()
|
return handler.get_trending_topics(controller=self, session=buffer.session)
|
||||||
if woeid in buff.session.settings["other_buffers"]["trending_topic_buffers"]: return
|
|
||||||
buffer = buffers.twitter.TrendsBuffer(self.view.nb, "%s_tt" % (woeid,), buff.session, buff.account, woeid, sound="trends_updated.ogg")
|
|
||||||
buffer.searchfunction = self.search
|
|
||||||
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.buffers.append(buffer)
|
|
||||||
buffer.start_stream()
|
|
||||||
buffer.session.settings["other_buffers"]["trending_topic_buffers"].append(woeid)
|
|
||||||
buffer.session.settings.write()
|
|
||||||
|
|
||||||
def reverse_geocode(self, event=None):
|
|
||||||
try:
|
|
||||||
tweet = self.get_current_buffer().get_tweet()
|
|
||||||
if tweet.coordinates != None:
|
|
||||||
x = tweet.coordinates["coordinates"][0]
|
|
||||||
y = tweet.coordinates["coordinates"][1]
|
|
||||||
address = geocoder.reverse("{}, {}".format(y, x), language = languageHandler.curLang)
|
|
||||||
if event == None: output.speak(address.address)
|
|
||||||
else: self.view.show_address(address.address)
|
|
||||||
else:
|
|
||||||
output.speak(_(u"There are no coordinates in this tweet"))
|
|
||||||
except ValueError:
|
|
||||||
output.speak(_(u"Error decoding coordinates. Try again later."))
|
|
||||||
# except KeyError:
|
|
||||||
# pass
|
|
||||||
except AttributeError:
|
|
||||||
output.speak(_("Unable to find address in OpenStreetMap."))
|
|
||||||
|
|
||||||
def view_reverse_geocode(self, event=None):
|
def view_reverse_geocode(self, event=None):
|
||||||
try:
|
buffer = self.get_current_buffer()
|
||||||
tweet = self.get_current_buffer().get_right_tweet()
|
if hasattr(buffer, "reverse_geocode"):
|
||||||
if tweet.coordinates != None:
|
address = buffer.reverse_geocode()
|
||||||
x = tweet.coordinates["coordinates"][0]
|
if address != None:
|
||||||
y = tweet.coordinates["coordinates"][1]
|
dlg = commonMessageDialogs.view_geodata(address[0].__str__())
|
||||||
address = geocoder.reverse_geocode(y, x, language = languageHandler.curLang)
|
|
||||||
dlg = commonMessageDialogs.view_geodata(address[0].__str__())
|
|
||||||
else:
|
|
||||||
output.speak(_(u"There are no coordinates in this tweet"))
|
|
||||||
except GeocoderError:
|
|
||||||
output.speak(_(u"There are no results for the coordinates in this tweet"))
|
|
||||||
except ValueError:
|
|
||||||
output.speak(_(u"Error decoding coordinates. Try again later."))
|
|
||||||
except KeyError:
|
|
||||||
pass
|
|
||||||
except AttributeError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def get_more_items(self, *args, **kwargs):
|
def get_more_items(self, *args, **kwargs):
|
||||||
self.get_current_buffer().get_more_items()
|
buffer = self.get_current_buffer()
|
||||||
|
if hasattr(buffer, "get_more_items"):
|
||||||
|
return buffer.get_more_items()
|
||||||
|
|
||||||
def clear_buffer(self, *args, **kwargs):
|
def clear_buffer(self, *args, **kwargs):
|
||||||
self.get_current_buffer().clear_list()
|
buffer = self.get_current_buffer()
|
||||||
|
if hasattr(buffer, "clear"):
|
||||||
|
return buffer.clear_list()
|
||||||
|
|
||||||
def remove_buffer(self, *args, **kwargs):
|
def remove_buffer(self, *args, **kwargs):
|
||||||
buffer = self.get_current_buffer()
|
buffer = self.get_current_buffer()
|
||||||
if not hasattr(buffer, "account"): return
|
if not hasattr(buffer, "account"):
|
||||||
|
return
|
||||||
buff = self.view.search(buffer.name, buffer.account)
|
buff = self.view.search(buffer.name, buffer.account)
|
||||||
answer = buffer.remove_buffer()
|
answer = buffer.remove_buffer()
|
||||||
if answer == False: return
|
if answer == False:
|
||||||
|
return
|
||||||
log.debug("destroying buffer...")
|
log.debug("destroying buffer...")
|
||||||
if hasattr(buffer, "timer"):
|
|
||||||
log.debug("Stopping timer...")
|
|
||||||
buffer.timer.cancel()
|
|
||||||
log.debug("Timer cancelled.")
|
|
||||||
self.right()
|
self.right()
|
||||||
self.view.delete_buffer(buff)
|
self.view.delete_buffer(buff)
|
||||||
buffer.session.sound.play("delete_timeline.ogg")
|
buffer.session.sound.play("delete_timeline.ogg")
|
||||||
@ -733,7 +695,8 @@ class Controller(object):
|
|||||||
buffer = self.get_current_buffer()
|
buffer = self.get_current_buffer()
|
||||||
if buffer.account != self.current_account:
|
if buffer.account != self.current_account:
|
||||||
self.current_account = buffer.account
|
self.current_account = buffer.account
|
||||||
if not hasattr(buffer, "session") or buffer.session == None: return
|
if not hasattr(buffer, "session") or buffer.session == None:
|
||||||
|
return
|
||||||
muted = autoread = False
|
muted = autoread = False
|
||||||
if buffer.name in buffer.session.settings["other_buffers"]["muted_buffers"]:
|
if buffer.name in buffer.session.settings["other_buffers"]["muted_buffers"]:
|
||||||
muted = True
|
muted = True
|
||||||
@ -747,7 +710,8 @@ class Controller(object):
|
|||||||
if buf == None:
|
if buf == None:
|
||||||
for i in self.accounts:
|
for i in self.accounts:
|
||||||
buffer = self.view.search("home_timeline", i)
|
buffer = self.view.search("home_timeline", i)
|
||||||
if buffer != None: break
|
if buffer != None:
|
||||||
|
break
|
||||||
else:
|
else:
|
||||||
buffer = self.view.search("home_timeline", buf.session.db["user_name"])
|
buffer = self.view.search("home_timeline", buf.session.db["user_name"])
|
||||||
if buffer!=None:
|
if buffer!=None:
|
||||||
@ -920,16 +884,23 @@ class Controller(object):
|
|||||||
|
|
||||||
def url(self, *args, **kwargs):
|
def url(self, *args, **kwargs):
|
||||||
buffer = self.get_current_buffer()
|
buffer = self.get_current_buffer()
|
||||||
buffer.url()
|
if hasattr(buffer, "url"):
|
||||||
|
buffer.url()
|
||||||
|
|
||||||
def audio(self, *args, **kwargs):
|
def audio(self, *args, **kwargs):
|
||||||
self.get_current_buffer().audio()
|
buffer = self.get_current_buffer()
|
||||||
|
if hasattr(buffer, "audio"):
|
||||||
|
return buffer.audio()
|
||||||
|
|
||||||
def volume_down(self, *args, **kwargs):
|
def volume_down(self, *args, **kwargs):
|
||||||
self.get_current_buffer().volume_down()
|
buffer = self.get_current_buffer()
|
||||||
|
if hasattr(buffer, "volume_down"):
|
||||||
|
return buffer.volume_down()
|
||||||
|
|
||||||
def volume_up(self, *args, **kwargs):
|
def volume_up(self, *args, **kwargs):
|
||||||
self.get_current_buffer().volume_up()
|
buffer = self.get_current_buffer()
|
||||||
|
if hasattr(buffer, "volume_up"):
|
||||||
|
return buffer.volume_up()
|
||||||
|
|
||||||
def create_invisible_keyboard_shorcuts(self):
|
def create_invisible_keyboard_shorcuts(self):
|
||||||
keymap = {}
|
keymap = {}
|
||||||
@ -955,7 +926,8 @@ class Controller(object):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def notify(self, session, play_sound=None, message=None, notification=False):
|
def notify(self, session, play_sound=None, message=None, notification=False):
|
||||||
if session.settings["sound"]["session_mute"] == True: return
|
if session.settings["sound"]["session_mute"] == True:
|
||||||
|
return
|
||||||
if play_sound != None:
|
if play_sound != None:
|
||||||
session.sound.play(play_sound)
|
session.sound.play(play_sound)
|
||||||
if message != None:
|
if message != None:
|
||||||
@ -1019,32 +991,10 @@ class Controller(object):
|
|||||||
|
|
||||||
def start_buffers(self, session):
|
def start_buffers(self, session):
|
||||||
log.debug("starting buffers... Session %s" % (session.session_id,))
|
log.debug("starting buffers... Session %s" % (session.session_id,))
|
||||||
|
handler = self.get_handler(type=session.type)
|
||||||
for i in self.buffers:
|
for i in self.buffers:
|
||||||
if i.session == session and i.needs_init == True:
|
if i.session == session and i.needs_init == True:
|
||||||
if hasattr(i, "finished_timeline") and i.finished_timeline == False:
|
handler.start_buffer(controller=self, buffer=i)
|
||||||
change_title = True
|
|
||||||
else:
|
|
||||||
change_title = False
|
|
||||||
try:
|
|
||||||
if "mentions" in i.name or "direct_messages" in i.name:
|
|
||||||
i.start_stream()
|
|
||||||
else:
|
|
||||||
i.start_stream(play_sound=False)
|
|
||||||
except TweepyException as err:
|
|
||||||
log.exception("Error %s starting buffer %s on account %s, with args %r and kwargs %r." % (str(err), i.name, i.account, i.args, i.kwargs))
|
|
||||||
# Determine if this error was caused by a block applied to the current user (IE permission errors).
|
|
||||||
if type(err) == Forbidden:
|
|
||||||
buff = self.view.search(i.name, i.account)
|
|
||||||
i.remove_buffer(force=True)
|
|
||||||
commonMessageDialogs.blocked_timeline()
|
|
||||||
if self.get_current_buffer() == i:
|
|
||||||
self.right()
|
|
||||||
self.view.delete_buffer(buff)
|
|
||||||
self.buffers.remove(i)
|
|
||||||
del i
|
|
||||||
continue
|
|
||||||
if change_title:
|
|
||||||
pub.sendMessage("buffer-title-changed", buffer=i)
|
|
||||||
|
|
||||||
def set_positions(self):
|
def set_positions(self):
|
||||||
for i in sessions.sessions:
|
for i in sessions.sessions:
|
||||||
@ -1055,54 +1005,12 @@ class Controller(object):
|
|||||||
return
|
return
|
||||||
for i in sessions.sessions:
|
for i in sessions.sessions:
|
||||||
try:
|
try:
|
||||||
if sessions.sessions[i].is_logged == False: continue
|
if sessions.sessions[i].is_logged == False:
|
||||||
|
continue
|
||||||
sessions.sessions[i].check_connection()
|
sessions.sessions[i].check_connection()
|
||||||
except TweepyException: # We shouldn't allow this function to die.
|
except: # We shouldn't allow this function to die.
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def create_new_buffer(self, buffer, account, create):
|
|
||||||
buff = self.search_buffer("home_timeline", account)
|
|
||||||
if create == True:
|
|
||||||
if buffer == "favourites":
|
|
||||||
favourites = buffers.twitter.BaseBuffer(self.view.nb, "get_favorites", "favourites", buff.session, buff.session.db["user_name"], include_ext_alt_text=True, tweet_mode="extended")
|
|
||||||
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"]))
|
|
||||||
favourites.start_stream(play_sound=False)
|
|
||||||
if buffer == "followers":
|
|
||||||
followers = buffers.twitter.PeopleBuffer(self.view.nb, "get_followers", "followers", buff.session, buff.session.db["user_name"], screen_name=buff.session.db["user_name"])
|
|
||||||
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"]))
|
|
||||||
followers.start_stream(play_sound=False)
|
|
||||||
elif buffer == "friends":
|
|
||||||
friends = buffers.twitter.PeopleBuffer(self.view.nb, "get_friends", "friends", buff.session, buff.session.db["user_name"], screen_name=buff.session.db["user_name"])
|
|
||||||
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"]))
|
|
||||||
friends.start_stream(play_sound=False)
|
|
||||||
elif buffer == "blocked":
|
|
||||||
blocks = buffers.twitter.PeopleBuffer(self.view.nb, "get_blocks", "blocked", buff.session, buff.session.db["user_name"])
|
|
||||||
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"]))
|
|
||||||
blocks.start_stream(play_sound=False)
|
|
||||||
elif buffer == "muted":
|
|
||||||
muted = buffers.twitter.PeopleBuffer(self.view.nb, "get_mutes", "muted", buff.session, buff.session.db["user_name"])
|
|
||||||
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"]))
|
|
||||||
muted.start_stream(play_sound=False)
|
|
||||||
elif create == False:
|
|
||||||
self.destroy_buffer(buffer, buff.session.db["user_name"])
|
|
||||||
elif buffer == "list":
|
|
||||||
if create in buff.session.settings["other_buffers"]["lists"]:
|
|
||||||
output.speak(_(u"This list is already opened"), True)
|
|
||||||
return
|
|
||||||
tl = buffers.twitter.ListBuffer(self.view.nb, "list_timeline", create+"-list", buff.session, buff.session.db["user_name"], bufferType=None, list_id=utils.find_list(create, buff.session.db["lists"]), include_ext_alt_text=True, tweet_mode="extended")
|
|
||||||
buff.session.lists.append(tl)
|
|
||||||
pos=self.view.search("lists", buff.session.db["user_name"])
|
|
||||||
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"]))
|
|
||||||
tl.start_stream(play_sound=False)
|
|
||||||
buff.session.settings["other_buffers"]["lists"].append(create)
|
|
||||||
buff.session.settings.write()
|
|
||||||
|
|
||||||
def invisible_shorcuts_changed(self, registered):
|
def invisible_shorcuts_changed(self, registered):
|
||||||
if registered == True:
|
if registered == True:
|
||||||
km = self.create_invisible_keyboard_shorcuts()
|
km = self.create_invisible_keyboard_shorcuts()
|
||||||
@ -1161,17 +1069,20 @@ class Controller(object):
|
|||||||
sessions.sessions.pop(i)
|
sessions.sessions.pop(i)
|
||||||
|
|
||||||
def update_profile(self, *args, **kwargs):
|
def update_profile(self, *args, **kwargs):
|
||||||
r = user.profileController(self.get_best_buffer().session)
|
buffer = self.get_best_buffer()
|
||||||
|
handler = self.get_handler(type=buffer.session.type)
|
||||||
|
if hasattr(handler, "update_profile"):
|
||||||
|
return handler.update_profile(session=buffer.session)
|
||||||
|
|
||||||
def user_details(self, *args, **kwargs):
|
def user_details(self, *args, **kwargs):
|
||||||
buffer = self.get_current_buffer()
|
buffer = self.get_current_buffer()
|
||||||
if not hasattr(buffer, "session") or buffer.session == None: return
|
|
||||||
if hasattr(buffer, "user_details"):
|
if hasattr(buffer, "user_details"):
|
||||||
buffer.user_details()
|
buffer.user_details()
|
||||||
|
|
||||||
def toggle_autoread(self, *args, **kwargs):
|
def toggle_autoread(self, *args, **kwargs):
|
||||||
buffer = self.get_current_buffer()
|
buffer = self.get_current_buffer()
|
||||||
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(_(u"The auto-reading of new tweets is enabled for this buffer"), True)
|
||||||
@ -1192,7 +1103,8 @@ class Controller(object):
|
|||||||
|
|
||||||
def toggle_buffer_mute(self, *args, **kwargs):
|
def toggle_buffer_mute(self, *args, **kwargs):
|
||||||
buffer = self.get_current_buffer()
|
buffer = self.get_current_buffer()
|
||||||
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(_(u"Buffer mute on"), True)
|
||||||
@ -1213,9 +1125,6 @@ class Controller(object):
|
|||||||
webbrowser.open("changelog.html")
|
webbrowser.open("changelog.html")
|
||||||
os.chdir("../../")
|
os.chdir("../../")
|
||||||
|
|
||||||
def insert_buffer(self, buffer, position):
|
|
||||||
self.buffers.insert(position, buffer)
|
|
||||||
|
|
||||||
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(_(u"Copied"))
|
||||||
@ -1232,7 +1141,7 @@ class Controller(object):
|
|||||||
if i.session != None and i.session.is_logged == True:
|
if i.session != None and i.session.is_logged == True:
|
||||||
try:
|
try:
|
||||||
i.start_stream(mandatory=True)
|
i.start_stream(mandatory=True)
|
||||||
except TweepyException as err:
|
except Exception as err:
|
||||||
log.exception("Error %s starting buffer %s on account %s, with args %r and kwargs %r." % (str(err), i.name, i.account, i.args, i.kwargs))
|
log.exception("Error %s starting buffer %s on account %s, with args %r and kwargs %r." % (str(err), i.name, i.account, i.args, i.kwargs))
|
||||||
# Determine if this error was caused by a block applied to the current user (IE permission errors).
|
# Determine if this error was caused by a block applied to the current user (IE permission errors).
|
||||||
if type(err) == Forbidden:
|
if type(err) == Forbidden:
|
||||||
@ -1250,11 +1159,10 @@ class Controller(object):
|
|||||||
if not hasattr(bf, "start_stream"):
|
if not hasattr(bf, "start_stream"):
|
||||||
output.speak(_(u"Unable to update this buffer."))
|
output.speak(_(u"Unable to update this buffer."))
|
||||||
return
|
return
|
||||||
else:
|
output.speak(_(u"Updating buffer..."))
|
||||||
output.speak(_(u"Updating buffer..."))
|
n = bf.start_stream(mandatory=True, avoid_autoreading=True)
|
||||||
n = bf.start_stream(mandatory=True, avoid_autoreading=True)
|
if n != None:
|
||||||
if n != None:
|
output.speak(_(u"{0} items retrieved").format(n,))
|
||||||
output.speak(_(u"{0} items retrieved").format(n,))
|
|
||||||
|
|
||||||
def buffer_title_changed(self, buffer):
|
def buffer_title_changed(self, buffer):
|
||||||
if buffer.name.endswith("-timeline"):
|
if buffer.name.endswith("-timeline"):
|
||||||
@ -1272,41 +1180,8 @@ class Controller(object):
|
|||||||
|
|
||||||
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, "ocr_image"):
|
||||||
output.speak(_(u"Invalid buffer"))
|
return buffer.ocr_image()
|
||||||
return
|
|
||||||
tweet = buffer.get_tweet()
|
|
||||||
media_list = []
|
|
||||||
if hasattr(tweet, "entities") and tweet.entities.get("media") != None:
|
|
||||||
[media_list.append(i) for i in tweet.entities["media"] if i not in media_list]
|
|
||||||
elif hasattr(tweet, "retweeted_status") and tweet.retweeted_status.get("media") != None:
|
|
||||||
[media_list.append(i) for i in tweet.retweeted_status.entities["media"] if i not in media_list]
|
|
||||||
elif hasattr(tweet, "quoted_status") and tweet.quoted_status.entities.get("media") != None:
|
|
||||||
[media_list.append(i) for i in tweet.quoted_status.entities["media"] if i not in media_list]
|
|
||||||
if len(media_list) > 1:
|
|
||||||
image_list = [_(u"Picture {0}").format(i,) for i in range(0, len(media_list))]
|
|
||||||
dialog = dialogs.urlList.urlList(title=_(u"Select the picture"))
|
|
||||||
if dialog.get_response() == widgetUtils.OK:
|
|
||||||
img = media_list[dialog.get_item()]
|
|
||||||
else:
|
|
||||||
return
|
|
||||||
elif len(media_list) == 1:
|
|
||||||
img = media_list[0]
|
|
||||||
else:
|
|
||||||
output.speak(_(u"Invalid buffer"))
|
|
||||||
return
|
|
||||||
if buffer.session.settings["mysc"]["ocr_language"] != "":
|
|
||||||
ocr_lang = buffer.session.settings["mysc"]["ocr_language"]
|
|
||||||
else:
|
|
||||||
ocr_lang = ocr.OCRSpace.short_langs.index(tweet.lang)
|
|
||||||
ocr_lang = ocr.OCRSpace.OcrLangs[ocr_lang]
|
|
||||||
api = ocr.OCRSpace.OCRSpaceAPI()
|
|
||||||
try:
|
|
||||||
text = api.OCR_URL(img["media_url"], lang=ocr_lang)
|
|
||||||
except ocr.OCRSpace.APIError as er:
|
|
||||||
output.speak(_(u"Unable to extract text"))
|
|
||||||
return
|
|
||||||
msg = messages.viewTweet(text["ParsedText"], [], False)
|
|
||||||
|
|
||||||
def update_sent_dms(self, total, account):
|
def update_sent_dms(self, total, account):
|
||||||
sent_dms = self.search_buffer("sent_direct_messages", account)
|
sent_dms = self.search_buffer("sent_direct_messages", account)
|
||||||
|
@ -8,7 +8,7 @@ from mysc import restart
|
|||||||
from sessions.twitter import utils, compose
|
from sessions.twitter import utils, compose
|
||||||
from controller import userSelector
|
from controller import userSelector
|
||||||
from wxUI import dialogs, commonMessageDialogs
|
from wxUI import dialogs, commonMessageDialogs
|
||||||
from . import filters, lists, settings, userActions
|
from . import filters, lists, settings, userActions, trendingTopics, user
|
||||||
|
|
||||||
log = logging.getLogger("controller.twitter.handler")
|
log = logging.getLogger("controller.twitter.handler")
|
||||||
|
|
||||||
@ -279,4 +279,42 @@ class Handler(object):
|
|||||||
user = buffer.session.get_user(tweet.user).screen_name
|
user = buffer.session.get_user(tweet.user).screen_name
|
||||||
searches_position =controller.view.search("searches", buffer.session.db["user_name"])
|
searches_position =controller.view.search("searches", buffer.session.db["user_name"])
|
||||||
pub.sendMessage("createBuffer", buffer_type="ConversationBuffer", session_type=buffer.session.type, buffer_title=_(u"Conversation with {0}").format(user), parent_tab=searches_position, start=True, kwargs=dict(tweet=tweet, parent=controller.view.nb, function="search_tweets", name="%s-searchterm" % (tweet.id,), sessionObject=buffer.session, account=buffer.session.db["user_name"], bufferType="searchPanel", sound="search_updated.ogg", since_id=tweet.id, q="@{0}".format(user)))
|
pub.sendMessage("createBuffer", buffer_type="ConversationBuffer", session_type=buffer.session.type, buffer_title=_(u"Conversation with {0}").format(user), parent_tab=searches_position, start=True, kwargs=dict(tweet=tweet, parent=controller.view.nb, function="search_tweets", name="%s-searchterm" % (tweet.id,), sessionObject=buffer.session, account=buffer.session.db["user_name"], bufferType="searchPanel", sound="search_updated.ogg", since_id=tweet.id, q="@{0}".format(user)))
|
||||||
|
|
||||||
|
def get_trending_topics(self, controller, session):
|
||||||
|
trends = trendingTopics.trendingTopicsController(session)
|
||||||
|
if trends.dialog.get_response() == widgetUtils.OK:
|
||||||
|
woeid = trends.get_woeid()
|
||||||
|
if woeid in session.settings["other_buffers"]["trending_topic_buffers"]:
|
||||||
|
return
|
||||||
|
root_position =controller.view.search(session.db["user_name"], session.db["user_name"])
|
||||||
|
pub.sendMessage("createBuffer", buffer_type="TrendsBuffer", session_type=session.type, buffer_title=_("Trending topics for %s") % (trends.get_string()), parent_tab=root_position, start=True, kwargs=dict(parent=controller.view.nb, name="%s_tt" % (woeid,), sessionObject=session, account=session.db["user_name"], trendsFor=woeid, sound="trends_updated.ogg"))
|
||||||
|
session.settings["other_buffers"]["trending_topic_buffers"].append(woeid)
|
||||||
|
session.settings.write()
|
||||||
|
|
||||||
|
def start_buffer(self, controller, buffer):
|
||||||
|
if hasattr(buffer, "finished_timeline") and buffer.finished_timeline == False:
|
||||||
|
change_title = True
|
||||||
|
else:
|
||||||
|
change_title = False
|
||||||
|
try:
|
||||||
|
if "mentions" in buffer.name or "direct_messages" in buffer.name:
|
||||||
|
buffer.start_stream()
|
||||||
|
else:
|
||||||
|
buffer.start_stream(play_sound=False)
|
||||||
|
except TweepyException as err:
|
||||||
|
log.exception("Error %s starting buffer %s on account %s, with args %r and kwargs %r." % (str(err), buffer.name, buffer.account, buffer.args, buffer.kwargs))
|
||||||
|
# Determine if this error was caused by a block applied to the current user (IE permission errors).
|
||||||
|
if type(err) == Forbidden:
|
||||||
|
buff = controller.view.search(buffer.name, buffer.account)
|
||||||
|
buffer.remove_buffer(force=True)
|
||||||
|
commonMessageDialogs.blocked_timeline()
|
||||||
|
if controller.get_current_buffer() == buffer:
|
||||||
|
controller.right()
|
||||||
|
controller.view.delete_buffer(buff)
|
||||||
|
controller.buffers.remove(buffer)
|
||||||
|
del buffer
|
||||||
|
if change_title:
|
||||||
|
pub.sendMessage("buffer-title-changed", buffer=buffer)
|
||||||
|
|
||||||
|
def update_profile(self, session):
|
||||||
|
r = user.profileController(session)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user