From 6232ec3b7cddb7f3d4bba17e7409d5a84095cc01 Mon Sep 17 00:00:00 2001 From: Bill Dengler <codeofdusk@gmail.com> Date: Wed, 10 Jun 2015 17:29:26 -0400 Subject: [PATCH 1/5] Fix utils. --- src/twitter/utils.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/twitter/utils.py b/src/twitter/utils.py index 8bd7f2b7..1c5ddc6c 100644 --- a/src/twitter/utils.py +++ b/src/twitter/utils.py @@ -44,16 +44,34 @@ def find_next_reply(id, listItem): if listItem[i]["in_reply_to_status_id_str"] == str(id): return i 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: if len(find_urls(tweet)) < 1: + tweet['is_audio']=False return False + if len(tweet["entities"]["hashtags"]) > 0: for i in tweet["entities"]["hashtags"]: if i["text"] == "audio": + tweet['is_audio']=True return True except: 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): if tweet.has_key("coordinates") and tweet["coordinates"] != None: From 28e0edf2a568418967a4fb1d504c455228e8cf6a Mon Sep 17 00:00:00 2001 From: Bill Dengler <codeofdusk@gmail.com> Date: Wed, 10 Jun 2015 17:53:28 -0400 Subject: [PATCH 2/5] Fixed controler. --- src/controller/buffersController.py | 22 ------------------ src/controller/mainController.py | 36 +++++++++++++++++++++++++++-- src/controller/settings.py | 8 +++++++ 3 files changed, 42 insertions(+), 24 deletions(-) diff --git a/src/controller/buffersController.py b/src/controller/buffersController.py index 4415f0f1..90bc2c1a 100644 --- a/src/controller/buffersController.py +++ b/src/controller/buffersController.py @@ -82,28 +82,6 @@ class bufferController(object): sound.URLPlayer.stream.volume = self.session.settings["sound"]["volume"] 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): pass diff --git a/src/controller/mainController.py b/src/controller/mainController.py index 7e008d78..7651c89f 100644 --- a/src/controller/mainController.py +++ b/src/controller/mainController.py @@ -992,11 +992,43 @@ class Controller(object): def interact(self): "Select the best action for the currently focused tweet (audio, geocode, URL, etc)." 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() + 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 config.app['app-settings']['use_Codeofdusk_audio_handlers']: + 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): buffer = self.get_current_buffer() - buffer.url() + return buffer.url() def audio(self, *args, **kwargs): self.get_current_buffer().audio() diff --git a/src/controller/settings.py b/src/controller/settings.py index dfb61059..f9b02202 100644 --- a/src/controller/settings.py +++ b/src/controller/settings.py @@ -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", "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", "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.set_value("proxy", "server", config.app["proxy"]["server"]) 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"]["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"]["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") + 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 self.is_started == True: self.needs_restart = True From 3d748e5c1e3bbd4a26afa438ec242a1aa826c4a4 Mon Sep 17 00:00:00 2001 From: Bill Dengler <codeofdusk@gmail.com> Date: Wed, 10 Jun 2015 18:12:39 -0400 Subject: [PATCH 3/5] Fix WX view. --- src/wxUI/dialogs/configuration.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/wxUI/dialogs/configuration.py b/src/wxUI/dialogs/configuration.py index 085809e1..ececb701 100644 --- a/src/wxUI/dialogs/configuration.py +++ b/src/wxUI/dialogs/configuration.py @@ -29,6 +29,12 @@ class general(wx.Panel, baseDialog.BaseWXDialog): sizer.Add(self.disable_sapi5, 0, wx.ALL, 5) self.hide_gui = wx.CheckBox(self, -1, _(u"Hide GUI on launch")) 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) km_label = wx.StaticText(self, -1, _(u"Keymap")) self.km = wx.ComboBox(self, -1, choices=keymaps, style=wx.CB_READONLY) From 63615e41b8ee13d50b6158cb271fa09c2459de1f Mon Sep 17 00:00:00 2001 From: Bill Dengler <codeofdusk@gmail.com> Date: Wed, 10 Jun 2015 18:20:00 -0400 Subject: [PATCH 4/5] Fix default keymap. --- src/keymaps/default.keymap | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/keymaps/default.keymap b/src/keymaps/default.keymap index 61f9ebf1..bab3716e 100644 --- a/src/keymaps/default.keymap +++ b/src/keymaps/default.keymap @@ -24,8 +24,9 @@ view_item = control+win+v exit = control+win+f4 open_timeline = control+win+i remove_buffer = control+win+shift+i -interact = control+alt+win+return -url = control+win+return +interact = control+win+return +secondary_interact = control+alt+win+return + volume_up = control+win+alt+up volume_down = control+win+alt+down go_home = control+win+home From 90e067572db2f120f8fec215816b29cae541fbd5 Mon Sep 17 00:00:00 2001 From: Bill Dengler <codeofdusk@gmail.com> Date: Wed, 10 Jun 2015 18:34:06 -0400 Subject: [PATCH 5/5] Fixes. --- src/app-configuration.defaults | 3 +++ src/controller/mainController.py | 7 ++++--- src/controller/settings.py | 4 ++-- src/wxUI/dialogs/configuration.py | 4 ++-- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/app-configuration.defaults b/src/app-configuration.defaults index 4939c87e..9952ef2d 100644 --- a/src/app-configuration.defaults +++ b/src/app-configuration.defaults @@ -6,6 +6,9 @@ ignored_sessions = list(default=list()) [app-settings] language = string(default="system") 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) ask_at_exit = boolean(default=True) use_invisible_keyboard_shorcuts = boolean(default=True) diff --git a/src/controller/mainController.py b/src/controller/mainController.py index 7651c89f..bd25279b 100644 --- a/src/controller/mainController.py +++ b/src/controller/mainController.py @@ -997,6 +997,8 @@ class Controller(object): 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: @@ -1009,9 +1011,8 @@ class Controller(object): if hasattr(urls_list, "destroy"): urls_list.destroy() if url != None: output.speak("Opening media...",True) - if config.app['app-settings']['use_Codeofdusk_audio_handlers']: - if sound.URLPlayer.is_playable(url=url,play=True,volume=buffer.session.settings["sound"]["volume"]) == False: - return webbrowser.open_new_tab(url) + 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") diff --git a/src/controller/settings.py b/src/controller/settings.py index f9b02202..2eedff7a 100644 --- a/src/controller/settings.py +++ b/src/controller/settings.py @@ -61,7 +61,7 @@ class globalSettingsController(object): 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", "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", "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.set_value("proxy", "server", config.app["proxy"]["server"]) @@ -87,7 +87,7 @@ class globalSettingsController(object): 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"]["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"]["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") if config.app["app-settings"]["use_slow_audio_algo"] != self.dialog.get_value("general", "use_invisible_shorcuts"): diff --git a/src/wxUI/dialogs/configuration.py b/src/wxUI/dialogs/configuration.py index ececb701..1b5040a3 100644 --- a/src/wxUI/dialogs/configuration.py +++ b/src/wxUI/dialogs/configuration.py @@ -31,8 +31,8 @@ class general(wx.Panel, baseDialog.BaseWXDialog): 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.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)