2021-07-02 17:22:24 -05:00
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
import time
|
|
|
|
|
import platform
|
|
|
|
|
if platform.system() == "Windows":
|
|
|
|
|
import wx
|
|
|
|
|
from wxUI import buffers, commonMessageDialogs, menus
|
|
|
|
|
from controller import user
|
|
|
|
|
elif platform.system() == "Linux":
|
|
|
|
|
from gi.repository import Gtk
|
|
|
|
|
from gtkUI import buffers, commonMessageDialogs
|
|
|
|
|
from controller import messages
|
|
|
|
|
import widgetUtils
|
|
|
|
|
import output
|
|
|
|
|
import logging
|
|
|
|
|
from mysc.thread_utils import call_threaded
|
2021-09-26 03:58:25 -05:00
|
|
|
|
from tweepy.errors import TweepyException
|
2021-07-02 17:22:24 -05:00
|
|
|
|
from pubsub import pub
|
|
|
|
|
from controller.buffers import base
|
|
|
|
|
|
|
|
|
|
log = logging.getLogger("controller.buffers.twitter.trends")
|
|
|
|
|
|
|
|
|
|
class TrendsBuffer(base.Buffer):
|
2021-09-26 03:58:25 -05:00
|
|
|
|
def __init__(self, parent, name, sessionObject, account, trendsFor, *args, **kwargs):
|
|
|
|
|
super(TrendsBuffer, self).__init__(parent=parent, sessionObject=sessionObject)
|
2021-07-02 17:22:24 -05:00
|
|
|
|
self.trendsFor = trendsFor
|
2021-09-26 03:58:25 -05:00
|
|
|
|
self.session = sessionObject
|
2021-07-02 17:22:24 -05:00
|
|
|
|
self.account = account
|
|
|
|
|
self.invisible = True
|
|
|
|
|
self.buffer = buffers.trendsPanel(parent, name)
|
|
|
|
|
self.buffer.account = account
|
|
|
|
|
self.type = self.buffer.type
|
|
|
|
|
self.bind_events()
|
|
|
|
|
self.sound = "trends_updated.ogg"
|
|
|
|
|
self.trends = []
|
|
|
|
|
self.name = name
|
|
|
|
|
self.buffer.name = name
|
|
|
|
|
self.compose_function = self.compose_function_
|
|
|
|
|
self.get_formatted_message = self.get_message
|
|
|
|
|
self.reply = self.search_topic
|
|
|
|
|
|
|
|
|
|
def start_stream(self, mandatory=False, play_sound=True, avoid_autoreading=False):
|
|
|
|
|
# starts stream every 3 minutes.
|
|
|
|
|
current_time = time.time()
|
|
|
|
|
if self.execution_time == 0 or current_time-self.execution_time >= 180 or mandatory == True:
|
|
|
|
|
self.execution_time = current_time
|
|
|
|
|
try:
|
2021-09-26 03:58:25 -05:00
|
|
|
|
data = self.session.twitter.get_place_trends(id=self.trendsFor)
|
|
|
|
|
except TweepyException as err:
|
2021-10-07 09:20:06 -05:00
|
|
|
|
log.exception("Error %s" % (str(err)))
|
2021-07-02 17:22:24 -05:00
|
|
|
|
if not hasattr(self, "name_"):
|
|
|
|
|
self.name_ = data[0]["locations"][0]["name"]
|
2021-11-01 05:18:46 -06:00
|
|
|
|
pub.sendMessage("buffer-title-changed", buffer=self)
|
2021-07-02 17:22:24 -05:00
|
|
|
|
self.trends = data[0]["trends"]
|
|
|
|
|
self.put_items_on_the_list()
|
|
|
|
|
if self.sound != None and self.session.settings["sound"]["session_mute"] == False and self.name not in self.session.settings["other_buffers"]["muted_buffers"] and play_sound == True:
|
|
|
|
|
self.session.sound.play(self.sound)
|
|
|
|
|
|
|
|
|
|
def put_items_on_the_list(self):
|
|
|
|
|
selected_item = self.buffer.list.get_selected()
|
|
|
|
|
self.buffer.list.clear()
|
|
|
|
|
for i in self.trends:
|
|
|
|
|
tweet = self.compose_function(i)
|
|
|
|
|
self.buffer.list.insert_item(False, *tweet)
|
|
|
|
|
self.buffer.set_position(self.session.settings["general"]["reverse_timelines"])
|
|
|
|
|
|
|
|
|
|
def compose_function_(self, trend):
|
|
|
|
|
return [trend["name"]]
|
|
|
|
|
|
|
|
|
|
def bind_events(self):
|
|
|
|
|
log.debug("Binding events...")
|
|
|
|
|
self.buffer.list.list.Bind(wx.EVT_CHAR_HOOK, self.get_event)
|
|
|
|
|
widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.tweet_about_this_trend, self.buffer.tweetTrendBtn)
|
|
|
|
|
widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.post_status, self.buffer.tweet)
|
|
|
|
|
widgetUtils.connect_event(self.buffer.list.list, wx.EVT_LIST_ITEM_RIGHT_CLICK, self.show_menu)
|
|
|
|
|
widgetUtils.connect_event(self.buffer.list.list, wx.EVT_LIST_KEY_DOWN, self.show_menu_by_key)
|
|
|
|
|
widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.search_topic, self.buffer.search_topic)
|
|
|
|
|
|
|
|
|
|
def get_message(self):
|
|
|
|
|
return self.compose_function(self.trends[self.buffer.list.get_selected()])[0]
|
|
|
|
|
|
|
|
|
|
def remove_buffer(self, force=False):
|
|
|
|
|
if force == False:
|
|
|
|
|
dlg = commonMessageDialogs.remove_buffer()
|
|
|
|
|
else:
|
|
|
|
|
dlg = widgetUtils.YES
|
|
|
|
|
if dlg == widgetUtils.YES:
|
|
|
|
|
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.write()
|
|
|
|
|
if self.name in self.session.db:
|
|
|
|
|
self.session.db.pop(self.name)
|
|
|
|
|
return True
|
|
|
|
|
elif dlg == widgetUtils.NO:
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
def url(self, *args, **kwargs):
|
|
|
|
|
self.tweet_about_this_trend()
|
|
|
|
|
|
|
|
|
|
def search_topic(self, *args, **kwargs):
|
|
|
|
|
topic = self.trends[self.buffer.list.get_selected()]["name"]
|
|
|
|
|
pub.sendMessage("search", term=topic)
|
|
|
|
|
|
|
|
|
|
def show_menu(self, ev, pos=0, *args, **kwargs):
|
|
|
|
|
menu = menus.trendsPanelMenu()
|
|
|
|
|
widgetUtils.connect_event(menu, widgetUtils.MENU, self.search_topic, menuitem=menu.search_topic)
|
|
|
|
|
widgetUtils.connect_event(menu, widgetUtils.MENU, self.tweet_about_this_trend, menuitem=menu.tweetThisTrend)
|
|
|
|
|
widgetUtils.connect_event(menu, widgetUtils.MENU, self.view, menuitem=menu.view)
|
|
|
|
|
widgetUtils.connect_event(menu, widgetUtils.MENU, self.copy, menuitem=menu.copy)
|
|
|
|
|
if pos != 0:
|
|
|
|
|
self.buffer.PopupMenu(menu, pos)
|
|
|
|
|
else:
|
|
|
|
|
self.buffer.PopupMenu(menu, ev.GetPosition())
|
|
|
|
|
|
|
|
|
|
def view(self, *args, **kwargs):
|
|
|
|
|
pub.sendMessage("execute-action", action="view_item")
|
|
|
|
|
|
|
|
|
|
def copy(self, *args, **kwargs):
|
|
|
|
|
pub.sendMessage("execute-action", action="copy_to_clipboard")
|
|
|
|
|
|
|
|
|
|
def tweet_about_this_trend(self, *args, **kwargs):
|
|
|
|
|
if self.buffer.list.get_count() == 0: return
|
|
|
|
|
title = _(u"Tweet")
|
|
|
|
|
caption = _(u"Write the tweet here")
|
|
|
|
|
tweet = messages.tweet(self.session, title, caption, self.get_message()+ " ")
|
|
|
|
|
tweet.message.set_cursor_at_end()
|
|
|
|
|
if tweet.message.get_response() == widgetUtils.OK:
|
|
|
|
|
text = tweet.message.get_text()
|
|
|
|
|
if len(text) > 280 and tweet.message.get("long_tweet") == True:
|
|
|
|
|
if tweet.image == None:
|
|
|
|
|
text = twishort.create_tweet(self.session.settings["twitter"]["user_key"], self.session.settings["twitter"]["user_secret"], text)
|
|
|
|
|
else:
|
|
|
|
|
text = twishort.create_tweet(self.session.settings["twitter"]["user_key"], self.session.settings["twitter"]["user_secret"], text, 1)
|
|
|
|
|
if tweet.image == None:
|
|
|
|
|
call_threaded(self.session.api_call, call_name="update_status", status=text)
|
|
|
|
|
else:
|
|
|
|
|
call_threaded(self.session.api_call, call_name="update_status_with_media", status=text, media=tweet.image)
|
|
|
|
|
if hasattr(tweet.message, "destroy"): tweet.message.destroy()
|
|
|
|
|
|
|
|
|
|
def show_menu_by_key(self, ev):
|
|
|
|
|
if self.buffer.list.get_count() == 0:
|
|
|
|
|
return
|
|
|
|
|
if ev.GetKeyCode() == wx.WXK_WINDOWS_MENU:
|
|
|
|
|
self.show_menu(widgetUtils.MENU, pos=self.buffer.list.list.GetPosition())
|
|
|
|
|
|
|
|
|
|
def open_in_browser(self, *args, **kwargs):
|
|
|
|
|
output.speak(_(u"This action is not supported in the buffer, yet."))
|