2022-03-24 10:37:21 -06:00
# -*- coding: utf-8 -*-
2022-11-07 12:26:58 -06:00
import logging
import widgetUtils
import output
2022-03-24 10:37:21 -06:00
from pubsub import pub
2022-11-07 12:26:58 -06:00
from tweepy . errors import TweepyException , Forbidden
from mysc import restart
from sessions . twitter import utils , compose
from controller import userSelector
from wxUI import dialogs , commonMessageDialogs
2022-11-07 15:55:28 -06:00
from . import filters , lists , settings , userActions , trendingTopics , user
2022-11-07 12:26:58 -06:00
log = logging . getLogger ( " controller.twitter.handler " )
2022-03-24 10:37:21 -06:00
class Handler ( object ) :
def __init__ ( self ) :
super ( Handler , self ) . __init__ ( )
2022-12-20 12:21:30 -06:00
# Structure to hold names for menu bar items.
# empty names mean the item will be Disabled.
self . menus = dict (
# In application menu.
updateProfile = _ ( " &Update profile " ) ,
menuitem_search = _ ( " &Search " ) ,
lists = _ ( " &Lists manager " ) ,
manageAliases = _ ( " Manage user aliases " ) ,
# In Item Menu.
compose = _ ( " &Tweet " ) ,
reply = _ ( " Re&ply " ) ,
share = _ ( " &Retweet " ) ,
fav = _ ( " &Like " ) ,
unfav = _ ( " &Unlike " ) ,
view = _ ( " &Show tweet " ) ,
view_coordinates = _ ( " View &address " ) ,
view_conversation = _ ( " View conversa&tion " ) ,
ocr = _ ( " Read text in picture " ) ,
delete = _ ( " &Delete " ) ,
# In user menu.
follow = _ ( " &Actions... " ) ,
timeline = _ ( " &View timeline... " ) ,
dm = _ ( " Direct me&ssage " ) ,
addAlias = _ ( " Add a&lias " ) ,
addToList = _ ( " &Add to list " ) ,
removeFromList = _ ( " R&emove from list " ) ,
viewLists = _ ( " &View lists " ) ,
details = _ ( " Show user &profile " ) ,
favs = _ ( " View likes " ) ,
# In buffer menu.
trends = _ ( " New &trending topics buffer... " ) ,
filter = _ ( " Create a &filter " ) ,
manage_filters = _ ( " &Manage filters " ) ,
)
2022-12-21 10:24:44 -06:00
# Name for the "tweet" menu in the menu bar.
self . item_menu = _ ( " &Tweet " )
2022-03-24 10:37:21 -06:00
def create_buffers ( self , session , createAccounts = True , controller = None ) :
session . get_user_info ( )
2022-11-14 17:51:27 -06:00
name = session . get_name ( )
2022-12-19 08:45:05 -06:00
controller . accounts . append ( name )
2022-03-24 10:37:21 -06:00
if createAccounts == True :
2022-11-16 11:01:52 -06:00
pub . sendMessage ( " core.create_account " , name = name , session_id = session . session_id , logged = True )
2022-11-14 17:51:27 -06:00
root_position = controller . view . search ( name , name )
2022-03-24 10:37:21 -06:00
for i in session . settings [ ' general ' ] [ ' buffer_order ' ] :
if i == ' home ' :
2022-11-14 17:51:27 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " BaseBuffer " , session_type = session . type , buffer_title = _ ( " Home " ) , parent_tab = root_position , start = False , kwargs = dict ( parent = controller . view . nb , function = " home_timeline " , name = " home_timeline " , sessionObject = session , account = session . get_name ( ) , sound = " tweet_received.ogg " , include_ext_alt_text = True , tweet_mode = " extended " ) )
2022-03-24 10:37:21 -06:00
elif i == ' mentions ' :
2022-11-14 17:51:27 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " BaseBuffer " , session_type = session . type , buffer_title = _ ( " Mentions " ) , parent_tab = root_position , start = False , kwargs = dict ( parent = controller . view . nb , function = " mentions_timeline " , name = " mentions " , sessionObject = session , account = session . get_name ( ) , sound = " mention_received.ogg " , include_ext_alt_text = True , tweet_mode = " extended " ) )
2022-03-24 10:37:21 -06:00
elif i == ' dm ' :
2022-11-14 17:51:27 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " DirectMessagesBuffer " , session_type = session . type , buffer_title = _ ( " Direct messages " ) , parent_tab = root_position , start = False , kwargs = dict ( parent = controller . view . nb , function = " get_direct_messages " , name = " direct_messages " , sessionObject = session , account = session . get_name ( ) , bufferType = " dmPanel " , compose_func = " compose_direct_message " , sound = " dm_received.ogg " ) )
2022-03-24 10:37:21 -06:00
elif i == ' sent_dm ' :
2022-11-14 17:51:27 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " SentDirectMessagesBuffer " , session_type = session . type , buffer_title = _ ( " Sent direct messages " ) , parent_tab = root_position , start = False , kwargs = dict ( parent = controller . view . nb , function = None , name = " sent_direct_messages " , sessionObject = session , account = session . get_name ( ) , bufferType = " dmPanel " , compose_func = " compose_direct_message " ) )
2022-03-24 10:37:21 -06:00
elif i == ' sent_tweets ' :
2022-11-14 17:51:27 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " BaseBuffer " , session_type = session . type , buffer_title = _ ( " Sent tweets " ) , parent_tab = root_position , start = False , kwargs = dict ( parent = controller . view . nb , function = " user_timeline " , name = " sent_tweets " , sessionObject = session , account = session . get_name ( ) , screen_name = session . db [ " user_name " ] , include_ext_alt_text = True , tweet_mode = " extended " ) )
2022-03-24 10:37:21 -06:00
elif i == ' favorites ' :
2022-11-14 17:51:27 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " BaseBuffer " , session_type = session . type , buffer_title = _ ( " Likes " ) , parent_tab = root_position , start = False , kwargs = dict ( parent = controller . view . nb , function = " get_favorites " , name = " favourites " , sessionObject = session , account = session . get_name ( ) , sound = " favourite.ogg " , include_ext_alt_text = True , tweet_mode = " extended " ) )
2022-03-24 10:37:21 -06:00
elif i == ' followers ' :
2022-11-14 17:51:27 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " PeopleBuffer " , session_type = session . type , buffer_title = _ ( " Followers " ) , parent_tab = root_position , start = False , kwargs = dict ( parent = controller . view . nb , function = " get_followers " , name = " followers " , sessionObject = session , account = session . get_name ( ) , sound = " update_followers.ogg " , screen_name = session . db [ " user_name " ] ) )
2022-03-24 10:37:21 -06:00
elif i == ' friends ' :
2022-11-14 17:51:27 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " PeopleBuffer " , session_type = session . type , buffer_title = _ ( " Following " ) , parent_tab = root_position , start = False , kwargs = dict ( parent = controller . view . nb , function = " get_friends " , name = " friends " , sessionObject = session , account = session . get_name ( ) , screen_name = session . db [ " user_name " ] ) )
2022-03-24 10:37:21 -06:00
elif i == ' blocks ' :
2022-11-14 17:51:27 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " PeopleBuffer " , session_type = session . type , buffer_title = _ ( " Blocked users " ) , parent_tab = root_position , start = False , kwargs = dict ( parent = controller . view . nb , function = " get_blocks " , name = " blocked " , sessionObject = session , account = session . get_name ( ) ) )
2022-03-24 10:37:21 -06:00
elif i == ' muted ' :
2022-11-14 17:51:27 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " PeopleBuffer " , session_type = session . type , buffer_title = _ ( " Muted users " ) , parent_tab = root_position , start = False , kwargs = dict ( parent = controller . view . nb , function = " get_mutes " , name = " muted " , sessionObject = session , account = session . get_name ( ) ) )
2022-11-15 11:54:59 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " EmptyBuffer " , session_type = " base " , buffer_title = _ ( " Timelines " ) , parent_tab = root_position , start = False , kwargs = dict ( parent = controller . view . nb , name = " timelines " , account = name ) )
2022-11-14 17:51:27 -06:00
timelines_position = controller . view . search ( " timelines " , name )
2022-03-24 10:37:21 -06:00
for i in session . settings [ " other_buffers " ] [ " timelines " ] :
2022-11-14 17:51:27 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " BaseBuffer " , session_type = session . type , buffer_title = _ ( u " Timeline for {} " ) . format ( i , ) , parent_tab = timelines_position , start = False , kwargs = dict ( parent = controller . view . nb , function = " user_timeline " , name = " %s -timeline " % ( i , ) , sessionObject = session , account = session . get_name ( ) , sound = " tweet_timeline.ogg " , bufferType = None , user_id = i , include_ext_alt_text = True , tweet_mode = " extended " ) )
2022-11-15 11:54:59 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " EmptyBuffer " , session_type = " base " , buffer_title = _ ( " Likes timelines " ) , parent_tab = root_position , start = False , kwargs = dict ( parent = controller . view . nb , name = " favs_timelines " , account = name ) )
2022-11-14 17:51:27 -06:00
favs_timelines_position = controller . view . search ( " favs_timelines " , name )
2022-03-24 10:37:21 -06:00
for i in session . settings [ " other_buffers " ] [ " favourites_timelines " ] :
2022-11-15 11:54:59 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " BaseBuffer " , session_type = session . type , buffer_title = _ ( " Likes for {} " ) . format ( i , ) , parent_tab = favs_timelines_position , start = False , kwargs = dict ( parent = controller . view . nb , function = " get_favorites " , name = " %s -favorite " % ( i , ) , sessionObject = session , account = name , bufferType = None , sound = " favourites_timeline_updated.ogg " , user_id = i , include_ext_alt_text = True , tweet_mode = " extended " ) )
2022-11-14 17:51:27 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " EmptyBuffer " , session_type = " base " , buffer_title = _ ( " Followers timelines " ) , parent_tab = root_position , start = False , kwargs = dict ( parent = controller . view . nb , name = " followers_timelines " , account = session . get_name ( ) ) )
followers_timelines_position = controller . view . search ( " followers_timelines " , name )
2022-03-24 10:37:21 -06:00
for i in session . settings [ " other_buffers " ] [ " followers_timelines " ] :
2022-11-14 17:51:27 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " PeopleBuffer " , session_type = session . type , buffer_title = _ ( " Followers for {} " ) . format ( i , ) , parent_tab = followers_timelines_position , start = False , kwargs = dict ( parent = controller . view . nb , function = " get_followers " , name = " %s -followers " % ( i , ) , sessionObject = session , account = session . get_name ( ) , sound = " new_event.ogg " , user_id = i ) )
2022-11-15 11:54:59 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " EmptyBuffer " , session_type = " base " , buffer_title = _ ( " Following timelines " ) , parent_tab = root_position , start = False , kwargs = dict ( parent = controller . view . nb , name = " friends_timelines " , account = name ) )
2022-11-14 17:51:27 -06:00
friends_timelines_position = controller . view . search ( " friends_timelines " , name )
2022-03-24 10:37:21 -06:00
for i in session . settings [ " other_buffers " ] [ " friends_timelines " ] :
2022-11-14 17:51:27 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " PeopleBuffer " , session_type = session . type , buffer_title = _ ( u " Friends for {} " ) . format ( i , ) , parent_tab = friends_timelines_position , start = False , kwargs = dict ( parent = controller . view . nb , function = " get_friends " , name = " %s -friends " % ( i , ) , sessionObject = session , account = session . get_name ( ) , sound = " new_event.ogg " , user_id = i ) )
2022-11-15 11:54:59 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " EmptyBuffer " , session_type = " base " , buffer_title = _ ( " Lists " ) , parent_tab = root_position , start = False , kwargs = dict ( parent = controller . view . nb , name = " lists " , account = name ) )
2022-11-14 17:51:27 -06:00
lists_position = controller . view . search ( " lists " , name )
2022-03-24 10:37:21 -06:00
for i in session . settings [ " other_buffers " ] [ " lists " ] :
2022-11-14 17:51:27 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " ListBuffer " , session_type = session . type , buffer_title = _ ( u " List for {} " ) . format ( i ) , parent_tab = lists_position , start = False , kwargs = dict ( parent = controller . view . nb , function = " list_timeline " , name = " %s -list " % ( i , ) , sessionObject = session , account = session . get_name ( ) , bufferType = None , sound = " list_tweet.ogg " , list_id = utils . find_list ( i , session . db [ " lists " ] ) , include_ext_alt_text = True , tweet_mode = " extended " ) )
2022-11-15 11:54:59 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " EmptyBuffer " , session_type = " base " , buffer_title = _ ( " Searches " ) , parent_tab = root_position , start = False , kwargs = dict ( parent = controller . view . nb , name = " searches " , account = name ) )
2022-11-14 17:51:27 -06:00
searches_position = controller . view . search ( " searches " , name )
2022-03-24 10:37:21 -06:00
for i in session . settings [ " other_buffers " ] [ " tweet_searches " ] :
2022-11-14 17:51:27 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " SearchBuffer " , session_type = session . type , buffer_title = _ ( u " Search for {} " ) . format ( i ) , parent_tab = searches_position , start = False , kwargs = dict ( parent = controller . view . nb , function = " search_tweets " , name = " %s -searchterm " % ( i , ) , sessionObject = session , account = session . get_name ( ) , bufferType = " searchPanel " , sound = " search_updated.ogg " , q = i , include_ext_alt_text = True , tweet_mode = " extended " ) )
2022-03-24 10:37:21 -06:00
for i in session . settings [ " other_buffers " ] [ " trending_topic_buffers " ] :
2022-11-14 17:51:27 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " TrendsBuffer " , session_type = session . type , buffer_title = _ ( " Trending topics for %s " ) % ( i ) , parent_tab = root_position , start = False , kwargs = dict ( parent = controller . view . nb , name = " %s _tt " % ( i , ) , sessionObject = session , account = session . get_name ( ) , trendsFor = i , sound = " trends_updated.ogg " ) )
2022-11-07 12:26:58 -06:00
def filter ( self , buffer ) :
# Let's prevent filtering of some buffers (people buffers, direct messages, events and sent items).
if ( buffer . name == " direct_messages " or buffer . name == " sent_tweets " ) or buffer . type == " people " :
output . speak ( _ ( " Filters cannot be applied on this buffer " ) )
return
new_filter = filters . filter ( buffer )
def manage_filters ( self , session ) :
manage_filters = filters . filterManager ( session )
def view_user_lists ( self , buffer ) :
if not hasattr ( buffer , " get_right_tweet " ) :
return
tweet = buffer . get_right_tweet ( )
if buffer . type == " people " :
users = [ tweet . screen_name ]
elif buffer . type == " dm " :
users = [ buffer . session . get_user ( tweet . message_create [ " sender_id " ] ) . screen_name ]
else :
users = utils . get_all_users ( tweet , buffer . session )
selector = userSelector . userSelector ( users = users , session_id = buffer . session . session_id )
user = selector . get_user ( )
if user == None :
return
l = lists . listsController ( buffer . session , user = user )
def add_to_list ( self , controller , buffer ) :
if not hasattr ( buffer , " get_right_tweet " ) :
return
tweet = buffer . get_right_tweet ( )
if buffer . type == " people " :
users = [ tweet . screen_name ]
elif buffer . type == " dm " :
users = [ buffer . session . get_user ( tweet . message_create [ " sender_id " ] ) . screen_name ]
else :
users = utils . get_all_users ( tweet , buffer . session )
selector = userSelector . userSelector ( users = users , session_id = buffer . session . session_id )
user = selector . get_user ( )
if user == None :
return
dlg = dialogs . lists . addUserListDialog ( )
dlg . populate_list ( [ compose . compose_list ( item ) for item in buffer . session . db [ " lists " ] ] )
if dlg . get_response ( ) == widgetUtils . OK :
try :
list = buffer . session . twitter . add_list_member ( list_id = buffer . session . db [ " lists " ] [ dlg . get_item ( ) ] . id , screen_name = user )
older_list = utils . find_item ( buffer . session . db [ " lists " ] [ dlg . get_item ( ) ] . id , buffer . session . db [ " lists " ] )
2022-11-14 17:51:27 -06:00
listBuffer = controller . search_buffer ( " %s -list " % ( buffer . session . db [ " lists " ] [ dlg . get_item ( ) ] . name . lower ( ) ) , buff . session . get_name ( ) )
2022-11-07 12:26:58 -06:00
if listBuffer != None :
listBuffer . get_user_ids ( )
buffer . session . db [ " lists " ] . pop ( older_list )
buffer . session . db [ " lists " ] . append ( list )
except TweepyException as e :
log . exception ( " error %s " % ( str ( e ) ) )
output . speak ( " error %s " % ( str ( e ) ) )
def remove_from_list ( self , controller , buffer ) :
if not hasattr ( buffer , " get_right_tweet " ) :
return
tweet = buffer . get_right_tweet ( )
if buffer . type == " people " :
users = [ tweet . screen_name ]
elif buffer . type == " dm " :
users = [ buffer . session . get_user ( tweet . message_create [ " sender_id " ] ) . screen_name ]
else :
users = utils . get_all_users ( tweet , buffer . session )
selector = userSelector . userSelector ( users = users , session_id = buffer . session . session_id )
user = selector . get_user ( )
if user == None :
return
dlg = dialogs . lists . removeUserListDialog ( )
dlg . populate_list ( [ compose . compose_list ( item ) for item in buffer . session . db [ " lists " ] ] )
if dlg . get_response ( ) == widgetUtils . OK :
try :
list = buffer . session . twitter . remove_list_member ( list_id = buffer . session . db [ " lists " ] [ dlg . get_item ( ) ] . id , screen_name = user )
older_list = utils . find_item ( buffer . session . db [ " lists " ] [ dlg . get_item ( ) ] . id , buffer . session . db [ " lists " ] )
2022-11-14 17:51:27 -06:00
listBuffer = controller . search_buffer ( " %s -list " % ( buffer . session . db [ " lists " ] [ dlg . get_item ( ) ] . name . lower ( ) ) , buffer . session . get_name ( ) )
2022-11-07 12:26:58 -06:00
if listBuffer != None :
listBuffer . get_user_ids ( )
buffer . session . db [ " lists " ] . pop ( older_list )
buffer . session . db [ " lists " ] . append ( list )
except TweepyException as e :
output . speak ( " error %s " % ( str ( e ) ) )
log . exception ( " error %s " % ( str ( e ) ) )
2022-11-15 13:31:11 -06:00
def list_manager ( self , session , lists_buffer_position ) :
return lists . listsController ( session = session , lists_buffer_position = lists_buffer_position )
2022-11-07 12:26:58 -06:00
def account_settings ( self , buffer , controller ) :
d = settings . accountSettingsController ( buffer , controller )
if d . response == widgetUtils . OK :
d . save_configuration ( )
if d . needs_restart == True :
commonMessageDialogs . needs_restart ( )
buffer . session . settings . write ( )
buffer . session . save_persistent_data ( )
restart . restart_program ( )
def follow ( self , buffer ) :
if not hasattr ( buffer , " get_right_tweet " ) :
return
tweet = buffer . get_right_tweet ( )
if buffer . type == " people " :
users = [ tweet . screen_name ]
elif buffer . type == " dm " :
users = [ buffer . session . get_user ( tweet . message_create [ " sender_id " ] ) . screen_name ]
else :
users = utils . get_all_users ( tweet , buffer . session )
u = userActions . userActionsController ( buffer , users )
def add_alias ( self , buffer ) :
if not hasattr ( buffer , " get_right_tweet " ) :
return
tweet = buffer . get_right_tweet ( )
if buffer . type == " people " :
users = [ tweet . screen_name ]
elif buffer . type == " dm " :
users = [ buffer . session . get_user ( tweet . message_create [ " sender_id " ] ) . screen_name ]
else :
users = utils . get_all_users ( tweet , buffer . session )
dlg = dialogs . userAliasDialogs . addAliasDialog ( _ ( " Add an user alias " ) , users )
if dlg . get_response ( ) == widgetUtils . OK :
user , alias = dlg . get_user ( )
if user == " " or alias == " " :
return
user_id = buffer . session . get_user_by_screen_name ( user )
buffer . session . settings [ " user-aliases " ] [ str ( user_id ) ] = alias
buffer . session . settings . write ( )
output . speak ( _ ( " Alias has been set correctly for {} . " ) . format ( user ) )
2022-11-07 13:55:08 -06:00
pub . sendMessage ( " alias-added " )
# ToDo: explore how to play sound & save config differently.
# currently, TWBlue will play the sound and save the config for the timeline even if the buffer did not load or something else.
def open_timeline ( self , controller , buffer , default = " tweets " ) :
if not hasattr ( buffer , " get_right_tweet " ) :
return
tweet = buffer . get_right_tweet ( )
if buffer . type == " people " :
users = [ tweet . screen_name ]
elif buffer . type == " dm " :
users = [ buffer . session . get_user ( tweet . message_create [ " sender_id " ] ) . screen_name ]
else :
users = utils . get_all_users ( tweet , buffer . session )
dlg = dialogs . userSelection . selectUserDialog ( users = users , default = default )
if dlg . get_response ( ) == widgetUtils . OK :
usr = utils . if_user_exists ( buffer . session . twitter , dlg . get_user ( ) )
if usr != None :
if usr == dlg . get_user ( ) :
commonMessageDialogs . suspended_user ( )
return
if usr . protected == True :
if usr . following == False :
commonMessageDialogs . no_following ( )
return
tl_type = dlg . get_action ( )
if tl_type == " tweets " :
if usr . statuses_count == 0 :
commonMessageDialogs . no_tweets ( )
return
if usr . id_str in buffer . session . settings [ " other_buffers " ] [ " timelines " ] :
commonMessageDialogs . timeline_exist ( )
return
2022-11-14 17:51:27 -06:00
timelines_position = controller . view . search ( " timelines " , buffer . session . get_name ( ) )
pub . sendMessage ( " createBuffer " , buffer_type = " BaseBuffer " , session_type = buffer . session . type , buffer_title = _ ( " Timeline for {} " ) . format ( usr . screen_name , ) , parent_tab = timelines_position , start = True , kwargs = dict ( parent = controller . view . nb , function = " user_timeline " , name = " %s -timeline " % ( usr . id_str , ) , sessionObject = buffer . session , account = buffer . session . get_name ( ) , sound = " tweet_timeline.ogg " , bufferType = None , user_id = usr . id_str , include_ext_alt_text = True , tweet_mode = " extended " ) )
2022-11-07 13:55:08 -06:00
buffer . session . settings [ " other_buffers " ] [ " timelines " ] . append ( usr . id_str )
buffer . session . sound . play ( " create_timeline.ogg " )
elif tl_type == " favourites " :
if usr . favourites_count == 0 :
commonMessageDialogs . no_favs ( )
return
if usr . id_str in buffer . session . settings [ " other_buffers " ] [ " favourites_timelines " ] :
commonMessageDialogs . timeline_exist ( )
return
2022-11-14 17:51:27 -06:00
favs_timelines_position = controller . view . search ( " favs_timelines " , buffer . session . get_name ( ) )
pub . sendMessage ( " createBuffer " , buffer_type = " BaseBuffer " , session_type = buffer . session . type , buffer_title = _ ( " Likes for {} " ) . format ( usr . screen_name , ) , parent_tab = favs_timelines_position , start = True , kwargs = dict ( parent = controller . view . nb , function = " get_favorites " , name = " %s -favorite " % ( usr . id_str , ) , sessionObject = buffer . session , account = buffer . session . get_name ( ) , bufferType = None , sound = " favourites_timeline_updated.ogg " , user_id = usr . id_str , include_ext_alt_text = True , tweet_mode = " extended " ) )
2022-11-07 13:55:08 -06:00
buffer . session . settings [ " other_buffers " ] [ " favourites_timelines " ] . append ( usr . id_str )
buffer . session . sound . play ( " create_timeline.ogg " )
elif tl_type == " followers " :
if usr . followers_count == 0 :
commonMessageDialogs . no_followers ( )
return
if usr . id_str in buffer . session . settings [ " other_buffers " ] [ " followers_timelines " ] :
commonMessageDialogs . timeline_exist ( )
return
2022-11-14 17:51:27 -06:00
followers_timelines_position = controller . view . search ( " followers_timelines " , buffer . session . get_name ( ) )
pub . sendMessage ( " createBuffer " , buffer_type = " PeopleBuffer " , session_type = buffer . session . type , buffer_title = _ ( " Followers for {} " ) . format ( usr . screen_name , ) , parent_tab = followers_timelines_position , start = True , kwargs = dict ( parent = controller . view . nb , function = " get_followers " , name = " %s -followers " % ( usr . id_str , ) , sessionObject = buffer . session , account = buffer . session . get_name ( ) , sound = " new_event.ogg " , user_id = usr . id_str ) )
2022-11-07 13:55:08 -06:00
buffer . session . settings [ " other_buffers " ] [ " followers_timelines " ] . append ( usr . id_str )
buffer . session . sound . play ( " create_timeline.ogg " )
elif tl_type == " friends " :
if usr . friends_count == 0 :
commonMessageDialogs . no_friends ( )
return
if usr . id_str in buffer . session . settings [ " other_buffers " ] [ " friends_timelines " ] :
commonMessageDialogs . timeline_exist ( )
return
2022-11-14 17:51:27 -06:00
friends_timelines_position = controller . view . search ( " friends_timelines " , buffer . session . get_name ( ) )
pub . sendMessage ( " createBuffer " , buffer_type = " PeopleBuffer " , session_type = buffer . session . type , buffer_title = _ ( " Friends for {} " ) . format ( usr . screen_name , ) , parent_tab = friends_timelines_position , start = True , kwargs = dict ( parent = controller . view . nb , function = " get_friends " , name = " %s -friends " % ( usr . id_str , ) , sessionObject = buffer . session , account = buffer . session . get_name ( ) , sound = " new_event.ogg " , user_id = usr . id_str ) )
2022-11-07 13:55:08 -06:00
buffer . session . settings [ " other_buffers " ] [ " friends_timelines " ] . append ( usr . id_str )
buffer . session . sound . play ( " create_timeline.ogg " )
else :
commonMessageDialogs . user_not_exist ( )
buffer . session . settings . write ( )
def open_conversation ( self , controller , buffer ) :
tweet = buffer . get_right_tweet ( )
if hasattr ( tweet , " retweeted_status " ) and tweet . retweeted_status != None :
tweet = tweet . retweeted_status
user = buffer . session . get_user ( tweet . user ) . screen_name
2022-11-14 17:51:27 -06:00
searches_position = controller . view . search ( " searches " , buffer . session . get_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 . get_name ( ) , bufferType = " searchPanel " , sound = " search_updated.ogg " , since_id = tweet . id , q = " @ {0} " . format ( user ) ) )
2022-11-07 15:55:28 -06:00
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
2022-11-14 17:51:27 -06:00
root_position = controller . view . search ( session . get_name ( ) , session . get_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 . get_name ( ) , trendsFor = woeid , sound = " trends_updated.ogg " ) )
2022-11-17 17:27:41 -06:00
session . settings [ " other_buffers " ] [ " trending_topic_buffers " ] . append ( str ( woeid ) )
2022-11-07 15:55:28 -06:00
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 )
2022-11-07 16:06:52 -06:00
def search ( self , controller , session , value ) :
log . debug ( " Creating a new search... " )
dlg = dialogs . search . searchDialog ( value )
if dlg . get_response ( ) == widgetUtils . OK and dlg . get ( " term " ) != " " :
term = dlg . get ( " term " )
2022-11-14 17:51:27 -06:00
searches_position = controller . view . search ( " searches " , session . get_name ( ) )
2022-11-07 16:06:52 -06:00
if dlg . get ( " tweets " ) == True :
if term not in session . settings [ " other_buffers " ] [ " tweet_searches " ] :
session . settings [ " other_buffers " ] [ " tweet_searches " ] . append ( term )
session . settings . write ( )
args = { " lang " : dlg . get_language ( ) , " result_type " : dlg . get_result_type ( ) }
2022-11-14 17:51:27 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " SearchBuffer " , session_type = session . type , buffer_title = _ ( " Search for {} " ) . format ( term ) , parent_tab = searches_position , start = True , kwargs = dict ( parent = controller . view . nb , function = " search_tweets " , name = " %s -searchterm " % ( term , ) , sessionObject = session , account = session . get_name ( ) , bufferType = " searchPanel " , sound = " search_updated.ogg " , q = term , include_ext_alt_text = True , tweet_mode = " extended " ) )
2022-11-07 16:06:52 -06:00
else :
log . error ( " A buffer for the %s search term is already created. You can ' t create a duplicate buffer. " % ( term , ) )
return
elif dlg . get ( " users " ) == True :
2022-11-14 17:51:27 -06:00
pub . sendMessage ( " createBuffer " , buffer_type = " SearchPeopleBuffer " , session_type = session . type , buffer_title = _ ( " Search for {} " ) . format ( term ) , parent_tab = searches_position , start = True , kwargs = dict ( parent = controller . view . nb , function = " search_users " , name = " %s -searchUser " % ( term , ) , sessionObject = session , account = session . get_name ( ) , bufferType = None , sound = " search_updated.ogg " , q = term ) )
2022-11-07 16:06:52 -06:00
dlg . Destroy ( )