mirror of
				https://github.com/MCV-Software/TWBlue.git
				synced 2025-11-04 05:47:05 +00:00 
			
		
		
		
	Merge 884532d7af into 5467655264
				
					
				
			This commit is contained in:
		@@ -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)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user