Merge 884532d7aff642013b2f169619ae628c816df356 into 5467655264d84ab614451e69f4ce38977c561ec6

This commit is contained in:
Bill Dengler 2015-06-14 15:56:17 +00:00
commit e0bf77e87f
7 changed files with 74 additions and 28 deletions

View File

@ -6,6 +6,9 @@ ignored_sessions = list(default=list())
[app-settings] [app-settings]
language = string(default="system") language = string(default="system")
hide_gui = boolean(default=False) hide_gui = boolean(default=False)
use_slow_audio_algo = boolean(default=False)
use_Codeofdusk_audio_handlers = boolean(default=False)
prefer_geocodes = boolean(default=False)
voice_enabled = boolean(default=False) voice_enabled = boolean(default=False)
ask_at_exit = boolean(default=True) ask_at_exit = boolean(default=True)
use_invisible_keyboard_shorcuts = boolean(default=True) use_invisible_keyboard_shorcuts = boolean(default=True)

View File

@ -81,29 +81,6 @@ class bufferController(object):
if hasattr(sound.URLPlayer, "stream"): if hasattr(sound.URLPlayer, "stream"):
sound.URLPlayer.stream.volume = self.session.settings["sound"]["volume"] sound.URLPlayer.stream.volume = self.session.settings["sound"]["volume"]
self.session.sound.play("volume_changed.ogg") self.session.sound.play("volume_changed.ogg")
def interact(self):
if hasattr(sound.URLPlayer,'stream'):
return sound.URLPlayer.stop_audio(delete=True)
tweet = self.get_tweet()
url=None
urls = utils.find_urls(tweet)
if len(urls) == 1:
url=urls[0]
elif len(urls) > 1:
urls_list = dialogs.urlList.urlList()
urls_list.populate_list(urls)
if urls_list.get_response() == widgetUtils.OK:
url=urls_list.get_string()
if hasattr(urls_list, "destroy"): urls_list.destroy()
if url != None:
output.speak(_(u"Opening media..."), True)
if sound.URLPlayer.is_playable(url=url, play=True, volume=self.session.settings["sound"]["volume"]) == False:
return webbrowser.open_new_tab(url)
# else:
# output.speak(_(u"Not actionable."), True)
# self.session.sound.play("error.ogg")
def start_stream(self): def start_stream(self):
pass pass

View File

@ -992,11 +992,44 @@ class Controller(object):
def interact(self): def interact(self):
"Select the best action for the currently focused tweet (audio, geocode, URL, etc)." "Select the best action for the currently focused tweet (audio, geocode, URL, etc)."
buffer = self.get_current_buffer() buffer = self.get_current_buffer()
buffer.interact() if hasattr(sound.URLPlayer,'stream') and config.app['app-settings']['use_Codeofdusk_audio_handlers']:
return sound.URLPlayer.stop_audio(delete=True)
tweet = buffer.get_tweet()
if utils.is_geocoded(tweet) and config.app['app-settings']['use_Codeofdusk_audio_handlers'] and config.app['app-settings']['prefer_geocodes']:
return self.reverse_geocode()
if config.app['app-settings']['use_Codeofdusk_audio_handlers'] == False:
return buffer.url()
url=None
urls = utils.find_urls(tweet)
if len(urls) == 1:
url=urls[0]
elif len(urls) > 1:
urls_list = dialogs.urlList.urlList()
urls_list.populate_list(urls)
if urls_list.get_response() == widgetUtils.OK:
url=urls_list.get_string()
if hasattr(urls_list, "destroy"): urls_list.destroy()
if url != None:
output.speak("Opening media...",True)
if sound.URLPlayer.is_playable(url=url,play=True,volume=buffer.session.settings["sound"]["volume"]) == False:
return webbrowser.open_new_tab(url)
else:
output.speak(_(u"Not actionable."), True)
buffer.session.sound.play("error.ogg")
def secondary_interact(self):
buffer = self.get_current_buffer()
tweet=buffer.get_tweet()
if utils.is_geocoded(tweet) and config.app['app-settings']['use_Codeofdusk_audio_handlers'] and config.app['app-settings']['prefer_geocodes']:
return self.view_reverse_geocode()
elif config.app['app-settings']['use_Codeofdusk_audio_handlers']:
return buffer.url()
else:
return buffer.audio()
def url(self, *args, **kwargs): def url(self, *args, **kwargs):
buffer = self.get_current_buffer() buffer = self.get_current_buffer()
buffer.url() return buffer.url()
def audio(self, *args, **kwargs): def audio(self, *args, **kwargs):
self.get_current_buffer().audio() self.get_current_buffer().audio()

View File

@ -60,6 +60,9 @@ class globalSettingsController(object):
self.dialog.set_value("general", "use_invisible_shorcuts", config.app["app-settings"]["use_invisible_keyboard_shorcuts"]) self.dialog.set_value("general", "use_invisible_shorcuts", config.app["app-settings"]["use_invisible_keyboard_shorcuts"])
self.dialog.set_value("general", "disable_sapi5", config.app["app-settings"]["voice_enabled"]) self.dialog.set_value("general", "disable_sapi5", config.app["app-settings"]["voice_enabled"])
self.dialog.set_value("general", "hide_gui", config.app["app-settings"]["hide_gui"]) self.dialog.set_value("general", "hide_gui", config.app["app-settings"]["hide_gui"])
self.dialog.set_value("general", "use_slow_audio_algo", config.app["app-settings"]["use_slow_audio_algo"])
self.dialog.set_value("general", "use_Codeofdusk_audio_handlers", config.app["app-settings"]["use_Codeofdusk_audio_handlers"])
self.dialog.set_value("general", "prefer_geocodes", config.app["app-settings"]["prefer_geocodes"])
self.dialog.create_proxy() self.dialog.create_proxy()
self.dialog.set_value("proxy", "server", config.app["proxy"]["server"]) self.dialog.set_value("proxy", "server", config.app["proxy"]["server"])
self.dialog.set_value("proxy", "port", config.app["proxy"]["port"]) self.dialog.set_value("proxy", "port", config.app["proxy"]["port"])
@ -84,7 +87,12 @@ class globalSettingsController(object):
config.app["app-settings"]["hide_gui"] = self.dialog.get_value("general", "hide_gui") config.app["app-settings"]["hide_gui"] = self.dialog.get_value("general", "hide_gui")
config.app["app-settings"]["ask_at_exit"] = self.dialog.get_value("general", "ask_at_exit") config.app["app-settings"]["ask_at_exit"] = self.dialog.get_value("general", "ask_at_exit")
config.app["app-settings"]["play_ready_sound"] = self.dialog.get_value("general", "play_ready_sound") config.app["app-settings"]["play_ready_sound"] = self.dialog.get_value("general", "play_ready_sound")
config.app["app-settings"]["use_Codeofdusk_audio_handlers"] = self.dialog.get_value("general", "use_Codeofdusk_audio_handlers")
config.app["app-settings"]["prefer_geocodes"] = self.dialog.get_value("general", "prefer_geocodes")
config.app["app-settings"]["speak_ready_msg"] = self.dialog.get_value("general", "speak_ready_msg") config.app["app-settings"]["speak_ready_msg"] = self.dialog.get_value("general", "speak_ready_msg")
if config.app["app-settings"]["use_slow_audio_algo"] != self.dialog.get_value("general", "use_invisible_shorcuts"):
config.app["app-settings"]["use_slow_audio_algo"] = self.dialog.get_value("general", "use_invisible_shorcuts")
self.needs_restart=True
if config.app["proxy"]["server"] != self.dialog.get_value("proxy", "server") or config.app["proxy"]["port"] != self.dialog.get_value("proxy", "port") or config.app["proxy"]["user"] != self.dialog.get_value("proxy", "user") or config.app["proxy"]["password"] != self.dialog.get_value("proxy", "password"): if config.app["proxy"]["server"] != self.dialog.get_value("proxy", "server") or config.app["proxy"]["port"] != self.dialog.get_value("proxy", "port") or config.app["proxy"]["user"] != self.dialog.get_value("proxy", "user") or config.app["proxy"]["password"] != self.dialog.get_value("proxy", "password"):
if self.is_started == True: if self.is_started == True:
self.needs_restart = True self.needs_restart = True

View File

@ -24,8 +24,9 @@ view_item = control+win+v
exit = control+win+f4 exit = control+win+f4
open_timeline = control+win+i open_timeline = control+win+i
remove_buffer = control+win+shift+i remove_buffer = control+win+shift+i
interact = control+alt+win+return interact = control+win+return
url = control+win+return secondary_interact = control+alt+win+return
volume_up = control+win+alt+up volume_up = control+win+alt+up
volume_down = control+win+alt+down volume_down = control+win+alt+down
go_home = control+win+home go_home = control+win+home

View File

@ -44,16 +44,34 @@ def find_next_reply(id, listItem):
if listItem[i]["in_reply_to_status_id_str"] == str(id): return i if listItem[i]["in_reply_to_status_id_str"] == str(id): return i
return None return None
def is_audio(tweet): def is_audio(tweet,force=False):
if force == False and 'is_audio' in tweet:
return tweet['is_audio']
try: try:
if len(find_urls(tweet)) < 1: if len(find_urls(tweet)) < 1:
tweet['is_audio']=False
return False return False
if len(tweet["entities"]["hashtags"]) > 0: if len(tweet["entities"]["hashtags"]) > 0:
for i in tweet["entities"]["hashtags"]: for i in tweet["entities"]["hashtags"]:
if i["text"] == "audio": if i["text"] == "audio":
tweet['is_audio']=True
return True return True
except: except:
log.exception("Exception while executing is_audio hashtag algorithm") log.exception("Exception while executing is_audio hashtag algorithm")
try:
if config.app["app-settings"]["use_slow_audio_algo"]:
for u in find_urls(tweet):
if url_is_audio(u):
tweet['is_audio']=True
return True
except:
log.exception("Exception while executing is_audio Codeofdusk algorithm.")
tweet['is_audio']=False
return False
def url_is_audio(u):
return sound.URLPlayer.is_playable(u)
def is_geocoded(tweet): def is_geocoded(tweet):
if tweet.has_key("coordinates") and tweet["coordinates"] != None: if tweet.has_key("coordinates") and tweet["coordinates"] != None:

View File

@ -30,6 +30,12 @@ class general(wx.Panel, baseDialog.BaseWXDialog):
sizer.Add(self.disable_sapi5, 0, wx.ALL, 5) sizer.Add(self.disable_sapi5, 0, wx.ALL, 5)
self.hide_gui = wx.CheckBox(self, -1, _(u"Hide GUI on launch")) self.hide_gui = wx.CheckBox(self, -1, _(u"Hide GUI on launch"))
sizer.Add(self.hide_gui, 0, wx.ALL, 5) sizer.Add(self.hide_gui, 0, wx.ALL, 5)
self.use_slow_audio_algo = wx.CheckBox(self, -1, _(u"Use slow audio tweet detection algorithm (increases audio tweet detection accuracy at the cost of significantly reduced client performance)"))
sizer.Add(self.use_slow_audio_algo, 0, wx.ALL, 5)
self.use_Codeofdusk_audio_handlers = wx.CheckBox(self, -1, _(u"Use Codeofdusk's tweet interaction handlers (intelegently handle audio and geotweets, but may impact client performance on very slow connections)"))
sizer.Add(self.use_Codeofdusk_audio_handlers, 0, wx.ALL, 5)
self.prefer_geocodes = wx.CheckBox(self, -1, _(u"Codeofdusk's tweet interaction handlers: always display geocode on interact, even if the tweet contains URLs"))
sizer.Add(self.prefer_geocodes, 0, wx.ALL, 5)
kmbox = wx.BoxSizer(wx.VERTICAL) kmbox = wx.BoxSizer(wx.VERTICAL)
km_label = wx.StaticText(self, -1, _(u"Keymap")) km_label = wx.StaticText(self, -1, _(u"Keymap"))
self.km = wx.ComboBox(self, -1, choices=keymaps, style=wx.CB_READONLY) self.km = wx.ComboBox(self, -1, choices=keymaps, style=wx.CB_READONLY)