2014-10-27 16:29:04 -06:00
# -*- 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/>.
#
############################################################
import wx
import gui.dialogs
2014-12-05 11:20:55 -06:00
import twitter
import config
import sound
2014-10-27 16:29:04 -06:00
import logging as original_logger
2014-12-05 11:20:55 -06:00
import output
import platform
import menus
from multiplatform_widgets import widgets
from mysc.thread_utils import call_threaded
2014-10-27 16:29:04 -06:00
log = original_logger . getLogger ( "buffers.base" )
2014-12-05 11:20:55 -06:00
class trendsPanel ( wx . Panel ):
def compose_function ( self , trend ):
return [ trend [ "name" ]]
2014-10-27 16:29:04 -06:00
2014-12-05 11:20:55 -06:00
def bind_events ( self ):
self . Bind ( wx . EVT_LIST_ITEM_RIGHT_CLICK , self . showMenu , self . list . list )
self . Bind ( wx . EVT_LIST_KEY_DOWN , self . showMenuByKey , self . list . list )
self . list . list . Bind ( wx . EVT_CHAR_HOOK , self . interact )
def get_message ( self , dialog = False ):
return self . compose_function ( self . trends [ self . list . get_selected ()])[ 0 ]
def create_list ( self ):
self . list = widgets . list ( self , _ ( u "Trending topic" ), style = wx . LC_REPORT | wx . LC_SINGLE_SEL | wx . LC_VRULES )
if self . system == "Windows" :
self . list . set_windows_size ( 0 , 30 )
self . list . set_size ()
def __init__ ( self , parent , window , name_buffer , argumento = None , sound = "" ):
self . type = "trends"
self . twitter = window . twitter
self . name_buffer = name_buffer
self . argumento = argumento
self . sound = sound
self . parent = window
self . system = platform . system ()
wx . Panel . __init__ ( self , parent )
self . trends = []
self . sizer = wx . BoxSizer ( wx . VERTICAL )
self . create_list ()
self . btn = wx . Button ( self , - 1 , _ ( u "Tweet" ))
self . btn . Bind ( wx . EVT_BUTTON , self . post_status )
self . tweetTrendBtn = wx . Button ( self , - 1 , _ ( u "Tweet about this trend" ))
self . tweetTrendBtn . Bind ( wx . EVT_BUTTON , self . onResponse )
btnSizer = wx . BoxSizer ( wx . HORIZONTAL )
btnSizer . Add ( self . btn , 0 , wx . ALL , 5 )
btnSizer . Add ( self . tweetTrendBtn , 0 , wx . ALL , 5 )
self . sizer . Add ( btnSizer , 0 , wx . ALL , 5 )
self . sizer . Add ( self . list . list , 0 , wx . ALL , 5 )
self . bind_events ()
self . SetSizer ( self . sizer )
2014-10-27 16:29:04 -06:00
def remove_buffer ( self ):
2014-12-05 11:20:55 -06:00
dlg = wx . MessageDialog ( self , _ ( u "Do you really want to delete this buffer?" ), _ ( u "Attention" ), style = wx . ICON_QUESTION | wx . YES_NO )
2014-10-27 16:29:04 -06:00
if dlg . ShowModal () == wx . ID_YES :
2014-12-05 11:20:55 -06:00
topics = config . main [ "other_buffers" ][ "trending_topic_buffers" ]
topic = self . name_buffer
log . info ( u "Deleting %s 's trending topics buffer" % topic )
if topic in topics :
topics . remove ( topic )
return 0
def start_streams ( self ):
data = self . twitter . twitter . get_place_trends ( id = self . argumento )
self . trends = data [ 0 ][ "trends" ]
sound . player . play ( self . sound )
return len ( self . trends )
def get_more_items ( self ):
output . speak ( _ ( u "This action is not supported for this buffer" ))
def put_items ( self , num ):
selected_item = self . list . get_selected ()
if self . list . get_count () == 0 :
for i in self . trends :
tweet = self . compose_function ( i )
self . list . insert_item ( False , * tweet )
self . set_list_position ()
elif self . list . get_count () > 0 :
if config . main [ "general" ][ "reverse_timelines" ] == False :
for i in self . trends :
tweet = self . compose_function ( i )
self . list . insert_item ( False , * tweet )
else :
for i in self . trends :
tweet = self . compose_function ( i )
self . list . insert_item ( True , * tweet )
self . list . select_item ( selected_item )
def post_status ( self , ev = None ):
text = gui . dialogs . message . tweet ( _ ( u "Write the tweet here" ), _ ( u "Tweet" ), "" , self )
if text . ShowModal () == wx . ID_OK :
if text . image == None :
call_threaded ( self . twitter . api_call , call_name = "update_status" , _sound = "tweet_send.ogg" , status = text . text . GetValue ())
else :
call_threaded ( self . twitter . api_call , call_name = "update_status_with_media" , _sound = "tweet_send.ogg" , status = text . text . GetValue (), media = text . file )
if ev != None : self . list . list . SetFocus ()
def onRetweet ( self , event = None ): pass
def onResponse ( self , ev ):
trend = self . trends [ self . list . get_selected ()][ "name" ]
text = gui . dialogs . message . tweet ( _ ( u "Write the tweet here" ), _ ( u "Tweet" ), trend , self )
if text . ShowModal () == wx . ID_OK :
if text . image == None :
call_threaded ( self . twitter . api_call , call_name = "update_status" , _sound = "tweet_send.ogg" , status = text . text . GetValue ())
else :
call_threaded ( self . twitter . api_call , call_name = "update_status_with_media" , _sound = "tweet_send.ogg" , status = text . text . GetValue (), media = text . file )
if ev != None : self . list . list . SetFocus ()
def interact ( self , ev ):
if type ( ev ) is str : event = ev
else :
if ev . GetKeyCode () == wx . WXK_F5 : event = "volume_down"
elif ev . GetKeyCode () == wx . WXK_F6 : event = "volume_up"
elif ev . GetKeyCode () == wx . WXK_DELETE and ev . ShiftDown (): event = "clear_list"
else :
ev . Skip ()
return
if event == "volume_down" :
if config . main [ "sound" ][ "volume" ] > 0.05 :
config . main [ "sound" ][ "volume" ] = config . main [ "sound" ][ "volume" ] - 0.05
sound . player . play ( "volume_changed.ogg" , False )
if hasattr ( self . parent , "audioStream" ):
self . parent . audioStream . stream . volume = config . main [ "sound" ][ "volume" ]
elif event == "volume_up" :
if config . main [ "sound" ][ "volume" ] < 0.95 :
config . main [ "sound" ][ "volume" ] = config . main [ "sound" ][ "volume" ] + 0.05
sound . player . play ( "volume_changed.ogg" , False )
if hasattr ( self . parent , "audioStream" ):
self . parent . audioStream . stream . volume = config . main [ "sound" ][ "volume" ]
elif event == "clear_list" and self . list . get_count () > 0 :
dlg = wx . MessageDialog ( self , _ ( u "Do you really want to empty this buffer? It's items will be removed from the list" ), _ ( u "Empty buffer" ), wx . ICON_QUESTION | wx . YES_NO )
if dlg . ShowModal () == wx . ID_YES :
self . trends = []
self . list . clear ()
try :
ev . Skip ()
except :
pass
def set_list_position ( self ):
if config . main [ "general" ][ "reverse_timelines" ] == False :
self . list . select_item ( len ( self . trends ) - 1 )
else :
self . list . select_item ( 0 )
def showMenu ( self , ev ):
if self . list . get_count () == 0 : return
self . PopupMenu ( menus . trendsPanelMenu ( self ), ev . GetPosition ())
def showMenuByKey ( self , ev ):
if self . list . get_count () == 0 : return
if ev . GetKeyCode () == wx . WXK_WINDOWS_MENU :
self . PopupMenu ( menus . trendsPanelMenu ( self ), self . list . list . GetPosition ())