Compare commits

...

22 Commits

Author SHA1 Message Date
ce1f8b2cc3 New snapshot 2015-09-29 09:39:47 -05:00
5933323beb Updated translation templates 2015-09-29 09:38:39 -05:00
22b1b0a149 Added posibility for search a term in trending topics 2015-09-29 09:37:04 -05:00
e71afeb10f View other user's lists is implemented 2015-09-29 09:22:19 -05:00
98f026156d Fixed search in application menu 2015-09-29 08:42:04 -05:00
cbee57aa30 Quoted tweets support in buffers 2015-09-29 08:38:05 -05:00
fd9e4dc05d New snapshot 2015-09-23 10:01:43 -05:00
6022cecad1 Added japanese, croatian and serbian 2015-09-23 10:01:22 -05:00
89e39e2168 Double tweets should be ignored in streams 2015-09-23 10:01:00 -05:00
a69bf99c1a If there is no locale for language, use English in arrow 2015-09-23 10:00:14 -05:00
d34ef81324 Updated locales 2015-09-23 09:59:34 -05:00
a3c050195a Twishort retweets are displayed as espected 2015-09-17 09:00:30 -05:00
3623eafacd handle_longtweets is enabled by default 2015-09-17 08:59:59 -05:00
Sukil Etxenike
2bd3f0a1d1 Updated docs with contributors 2015-09-06 23:09:14 +02:00
f1f828522e Translation templates updated 2015-09-05 11:46:34 -05:00
51e4898346 Add shorcuts to the audio upload dialogue 2015-09-05 11:42:47 -05:00
c4478198b6 NEw snapshot 2015-08-31 11:18:10 -05:00
f468924b85 Merge branch 'next-gen' of https://github.com/manuelcortez/TWBlue into next-gen 2015-08-31 11:03:54 -05:00
158b48e4d5 Add and remove user to list are implemented in GUI 2015-08-31 10:08:34 -05:00
756a58e443 New timeline sound is played again 2015-08-31 08:42:28 -05:00
85ce5b0791 Trending topics now have their names at startup 2015-08-31 08:15:37 -05:00
Jose Manuel Delicado
e534d1cd20 Updated readme. 2015-08-28 11:47:54 +02:00
55 changed files with 25094 additions and 3706 deletions

View File

@@ -39,7 +39,7 @@ If you want to build both x86 and x64 binaries, you can install python x86 to C:
* [Pycurl](http://pycurl.sourceforge.net) 7.19.5.1 for Python 2.7: [32-bit downloads,](https://pypi.python.org/pypi/pycurl/7.19.5.1) [64-bit downloads](http://www.lfd.uci.edu/~gohlke/pythonlibs/)
Note: the x64 version is in wheel format instead of executable installer, so you have to install it using pip. For example: C:\python27x64\scripts\pip install pycurl-7.19.5.1-cp27-none-win_amd64.whl
* [PyEnchant,](http://pythonhosted.org/pyenchant/) version 1.6.6.
x64 version has been built by TW Blue developers, so you only will find it in windows-dependencies folder
x64 version has been built by TWBlue developers, so you only will find it in windows-dependencies folder
The windows installers are available only in the windows-dependencies folder
@@ -71,8 +71,11 @@ setuptools install a script, called easy_install. You can find it in the python
* arrow
* goslate
* markdown
* pocket
easy_install will automatically get the additional libraries that these packages need to work properly.
Run the following command to quickly install and upgrade all packages and their dependencies:
easy_install -Z --upgrade six configobj goslate markdown future pocket suds requests oauthlib requests-oauthlib pypubsub pygeocoder arrow
#### Other dependencies
@@ -95,9 +98,16 @@ Now that you have installed all these packages, you can run TW Blue from source
If necessary, change the first part of the command to reflect the location of your python executable. You can run TW Blue using python x86 and x64
### Generating the documentation
To generate the documentation in html format, navigate to the doc folder inside this repo. After that, run this command:
python generator.py
The documentation will be generated, placing each language in a separate folder in the doc directory. Move these folders (for example de, en, es, fr, it, ...) to src/documentation, creating the directory if necesary.
Also, copy the license.txt located in the root of the repo to the documentation folder.
### Building a binary version
A binary version doesn't need python and the other dependencies to run, it's the same version that you will find on the TW Blue website if you download the zip files.
A binary version doesn't need python and the other dependencies to run, it's the same version that you will find on the TW Blue website if you download the zip files or the snapshot versions.
To build it, run the following command from the src folder:
@@ -105,6 +115,17 @@ To build it, run the following command from the src folder:
You will find the binaries in the dist directory.
### Building an installer
If you want to install TWBlue in your computer, you must create the installer first. Follow these steps:
* Navigate to the src directory, and create a binary version for x86: C:\python27\python setup.py py2exe
* Move the dist directory to the scripts folder in this repo, and rename it to twblue
* Repeat these steps with Python for x64: C:\python27x64\python setup.py py2exe
* Move the new dist directory to the scripts folder, and rename it to twblue64
* Go to the scripts folder, right click on the twblue.nsi file, and choose compyle unicode NSIS script
* This may take a while. After the process, you will find the installer in the scripts folder
### How to generate a translation template
Run the gen_pot.bat file, located in the tools directory. Your python installation must be in your path environment variable. The pot file will appear in the tools directory.

View File

@@ -405,19 +405,21 @@ documentation.append(_(u"""We would also like to thank the translators of TWBlue
documentation.append(_(u"""
"""))
documentation.append(_(u"""* English: [Bryner Villalobos](https://twitter.com/Bry_StarkCR) and [Bill Dengler](https://twitter.com/codeofdusk)."""))
documentation.append(_(u"""* Arabic: Mohammed Al Shara."""))
documentation.append(_(u"""* Arabic: [Mohammed Al Shara](https://twitter.com/mohammed0204)."""))
documentation.append(_(u"""* Catalan: [Joan Rabat](https://twitter.com/joanrabat) and Juan Carlos Rivilla."""))
documentation.append(_(u"""* Spanish: [Manuel Cortéz](https://twitter.com/manuelcortez00)."""))
documentation.append(_(u"""* Basque: [Sukil Etxenike](https://twitter.com/sukil2011)."""))
documentation.append(_(u"""* Finnish: Jani Kinnunen."""))
documentation.append(_(u"""* French: Rémi Ruiz."""))
documentation.append(_(u"""* Finnish: [Jani Kinnunen](https://twitter.com/jani_kinnunen)."""))
documentation.append(_(u"""* French: [Rémi Ruiz](https://twitter.com/blindhelp38)."""))
documentation.append(_(u"""* Galician: [Alba Kinteiro](https://twitter.com/albasmileforeve)."""))
documentation.append(_(u"""* German: Steffen Schultz."""))
documentation.append(_(u"""* German: [Steffen Schultz](https://twitter.com/schulle4u)."""))
documentation.append(_(u"""* Croatian: [Zvonimir Stanečić](https://twitter.com/zvonimirek222)."""))
documentation.append(_(u"""* Hungarian: Robert Osztolykan."""))
documentation.append(_(u"""* Italian: [Christian Leo Mameli](https://twitter.com/llajta2012)."""))
documentation.append(_(u"""* Polish: Pawel Masarczyk."""))
documentation.append(_(u"""* Portuguese: Odenilton Júnior Santos."""))
documentation.append(_(u"""* Russian: Alexander Jaszyn."""))
documentation.append(_(u"""* Turkish: Burak."""))
documentation.append(_(u"""* Russian: [Александр Яшин](https://twitter.com/radovest)."""))
documentation.append(_(u"""* Turkish: [Burak Yüksek](https://twitter.com/burakyuksek)."""))
documentation.append(_(u"""
"""))
documentation.append(_(u"""Many thanks also to the people who worked on the documentation. Initially, [Manuel Cortez](https://twitter.com/manuelcortez00) did the documentation in Spanish, and translated to English by [Bryner Villalobos](https://twitter.com/Bry_StarkCR), [Robert Spangler](https://twitter.com/glasscity1837), [Sussan Rey](https://twitter.com/sussanrey17), [Anibal Hernandez](https://twitter.com/anibalmetal), and [Holly Scott-Gardner](https://twitter.com/holly1994). It was updated by [Sukil Etxenike](https://twitter.com/sukil2011), with some valuable corrections by [Brian Hartgen](https://twitter.com/brianhartgen) and [Bill Dengler](https://twitter.com/codeofdusk)."""))

View File

@@ -8,7 +8,7 @@ language = string(default="system")
hide_gui = boolean(default=False)
voice_enabled = boolean(default=False)
ask_at_exit = boolean(default=True)
handle_longtweets = boolean(default=False)
handle_longtweets = boolean(default=True)
use_invisible_keyboard_shorcuts = boolean(default=True)
play_ready_sound = boolean(default=True)
speak_ready_msg = boolean(default=True)

View File

@@ -5,7 +5,7 @@ if snapshot == False:
version = "0.80"
update_url = 'http://twblue.es/updates/twblue_ngen.json'
else:
version = "10.5"
version = "10.8"
update_url = 'http://twblue.es/updates/snapshots_ngen.json'
author = u"Manuel Cortéz, Bill Dengler"
authorEmail = "manuel@manuelcortez.net"

View File

@@ -231,7 +231,8 @@ class baseBufferController(bufferController):
return self.get_message()
def get_message(self):
return " ".join(self.compose_function(self.get_right_tweet(), self.session.db, self.session.settings["general"]["relative_times"]))
tweet = self.get_right_tweet()
return " ".join(self.compose_function(tweet, self.session.db, self.session.settings["general"]["relative_times"]))
def get_full_tweet(self):
tweet = self.get_right_tweet()
@@ -604,6 +605,26 @@ class baseBufferController(bufferController):
user.profileController(session=self.session, user=dlg.get_user())
if hasattr(dlg, "destroy"): dlg.destroy()
def get_quoted_tweet(self, tweet):
# try:
quoted_tweet = self.session.twitter.twitter.show_status(id=tweet["id"])
urls = utils.find_urls_in_text(quoted_tweet["text"])
for url in range(0, len(urls)):
try: quoted_tweet["text"] = quoted_tweet["text"].replace(urls[url], quoted_tweet["entities"]["urls"][url]["expanded_url"])
except IndexError: pass
# except TwythonError as e:
# utils.twitter_error(e)
# return
l = tweets.is_long(quoted_tweet)
id = tweets.get_id(l)
# try:
original_tweet = self.session.twitter.twitter.show_status(id=id)
urls = utils.find_urls_in_text(original_tweet["text"])
for url in range(0, len(urls)):
try: original_tweet["text"] = original_tweet["text"].replace(urls[url], original_tweet["entities"]["urls"][url]["expanded_url"])
except IndexError: pass
return compose.compose_quoted_tweet(quoted_tweet, original_tweet, self.session.db, self.session.settings["general"]["relative_times"])
class listBufferController(baseBufferController):
def __init__(self, parent, function, name, sessionObject, account, sound=None, bufferType=None, list_id=None, *args, **kwargs):
super(listBufferController, self).__init__(parent, function, name, sessionObject, account, sound=None, bufferType=None, *args, **kwargs)
@@ -887,6 +908,7 @@ class trendsBufferController(bufferController):
self.buffer.name = name
self.compose_function = self.compose_function_
self.get_formatted_message = self.get_message
self.reply = self.search_topic
def start_stream(self):
try:
@@ -913,10 +935,12 @@ class trendsBufferController(bufferController):
def bind_events(self):
log.debug("Binding events...")
self.buffer.list.list.Bind(wx.EVT_CHAR_HOOK, self.get_event)
# widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.post_tweet, self.buffer.tweet)
widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.post_tweet, self.buffer.tweet)
widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.tweet_about_this_trend, self.buffer.tweetTrendBtn)
# widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.retweet, self.buffer.retweet)
# widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.direct_message, self.buffer.dm)
# widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.reply, self.buffer.reply)
widgetUtils.connect_event(self.buffer, widgetUtils.BUTTON_PRESSED, self.search_topic, self.buffer.search_topic)
widgetUtils.connect_event(self.buffer.list.list, wx.EVT_LIST_ITEM_RIGHT_CLICK, self.show_menu)
widgetUtils.connect_event(self.buffer.list.list, wx.EVT_LIST_KEY_DOWN, self.show_menu_by_key)
@@ -933,11 +957,13 @@ class trendsBufferController(bufferController):
elif dlg == widgetUtils.NO:
return False
def interact(self, *args, **kwargs):
self.searchfunction(value=self.get_message())
def search_topic(self, *args, **kwargs):
topic = self.trends[self.buffer.list.get_selected()]["name"]
pub.sendMessage("search", term=topic)
def show_menu(self, ev, pos=0, *args, **kwargs):
menu = menus.trendsPanelMenu()
widgetUtils.connect_event(menu, widgetUtils.MENU, self.search_topic, menuitem=menu.search_topic)
widgetUtils.connect_event(menu, widgetUtils.MENU, self.tweet_about_this_trend, menuitem=menu.tweetThisTrend)
widgetUtils.connect_event(menu, widgetUtils.MENU, self.view, menuitem=menu.view)
widgetUtils.connect_event(menu, widgetUtils.MENU, self.copy, menuitem=menu.copy)

View File

@@ -15,12 +15,22 @@ class listsController(object):
self.dialog.populate_list(self.get_all_lists())
widgetUtils.connect_event(self.dialog.createBtn, widgetUtils.BUTTON_PRESSED, self.create_list)
widgetUtils.connect_event(self.dialog.editBtn, widgetUtils.BUTTON_PRESSED, self.edit_list)
widgetUtils.connect_event(self.dialog.deleteBtn, widgetUtils.BUTTON_PRESSED, self.remove_list)
widgetUtils.connect_event(self.dialog.view, widgetUtils.BUTTON_PRESSED, self.open_list_as_buffer)
else:
self.dialog = lists.userListViewer(user)
self.dialog.populate_list(self.get_user_lists(user))
widgetUtils.connect_event(self.dialog.createBtn, widgetUtils.BUTTON_PRESSED, self.subscribe)
widgetUtils.connect_event(self.dialog.deleteBtn, widgetUtils.BUTTON_PRESSED, self.unsubscribe)
self.dialog.get_response()
def get_all_lists(self):
return [compose.compose_list(item) for item in self.session.db["lists"]]
def get_user_lists(self, user):
self.lists = self.session.twitter.twitter.show_lists(reverse=True, screen_name=user)
return [compose.compose_list(item) for item in self.lists]
def create_list(self, *args, **kwargs):
dialog = lists.createListDialog()
if dialog.get_response() == widgetUtils.OK:
@@ -74,3 +84,22 @@ class listsController(object):
if self.dialog.lista.get_count() == 0: return
list = self.session.db["lists"][self.dialog.get_item()]
pub.sendMessage("create-new-buffer", buffer="list", account=self.session.db["user_name"], create=list["name"])
def subscribe(self, *args, **kwargs):
if self.dialog.lista.get_count() == 0: return
list_id = self.lists[self.dialog.get_item()]["id"]
try:
list = self.session.twitter.twitter.subscribe_to_list(list_id=list_id)
item = utils.find_item(list["id"], self.session.db["lists"])
self.session.db.settings["lists"].append(list)
except TwythonError as e:
output.speak("error %s: %s" % (e.status_code, e.msg))
def unsubscribe(self, *args, **kwargs):
if self.dialog.lista.get_count() == 0: return
list_id = self.lists[self.dialog.get_item()]["id"]
try:
list = self.session.twitter.twitter.unsubscribe_from_list(list_id=list_id)
self.session.db.settings["lists"].remove(list)
except TwythonError as e:
output.speak("error %s: %s" % (e.status_code, e.msg))

View File

@@ -129,6 +129,7 @@ class Controller(object):
pub.subscribe(self.create_new_buffer, "create-new-buffer")
pub.subscribe(self.restart_streams, "restart-streams")
pub.subscribe(self.execute_action, "execute-action")
pub.subscribe(self.search_topic, "search")
if system == "Windows":
pub.subscribe(self.invisible_shorcuts_changed, "invisible-shorcuts-changed")
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.show_hide, menuitem=self.view.show_hide)
@@ -156,6 +157,7 @@ class Controller(object):
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.delete, self.view.delete)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.follow, menuitem=self.view.follow)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.send_dm, self.view.dm)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.view_user_lists, menuitem=self.view.viewLists)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.get_more_items, menuitem=self.view.load_previous_items)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.clear_buffer, menuitem=self.view.clear)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.remove_buffer, self.view.deleteTl)
@@ -174,6 +176,8 @@ class Controller(object):
widgetUtils.connect_event(self.view.nb, widgetUtils.NOTEBOOK_PAGE_CHANGED, self.buffer_changed)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.report_error, self.view.reportError)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.view_documentation, self.view.doc)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.add_to_list, self.view.addToList)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.remove_from_list, self.view.removeFromList)
def set_systray_icon(self):
self.systrayIcon = sysTrayIcon.SysTrayIcon()
@@ -361,9 +365,9 @@ class Controller(object):
buffer.start_stream()
buffer.searchfunction = self.search
self.buffers.append(buffer)
self.view.insert_buffer(buffer.buffer, name=_(u"Trending topics for %s") % (buffer.name), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
buffer.timer = RepeatingTimer(300, buffer.start_stream)
buffer.timer.start()
self.view.insert_buffer(buffer.buffer, name=_(u"Trending topics for %s") % (buffer.name_), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
def set_buffer_positions(self,session):
"Sets positions for buffers if values exist in the database."
@@ -392,7 +396,11 @@ class Controller(object):
self.buffers.remove(buffer)
del buffer
def search(self, value="", *args, **kwargs):
def search_topic(self, term):
self.search(value=term)
def search(self, event=None, value="", *args, **kwargs):
""" Searches words or users in twitter. This creates a new buffer containing the search results."""
log.debug("Creating a new search...")
dlg = dialogs.search.searchDialog(value)
@@ -466,8 +474,20 @@ class Controller(object):
buffer = self.get_best_buffer()
SoundsTutorial.soundsTutorial(buffer.session)
def view_user_lists(self, users):
pass
def view_user_lists(self, *args, **kwargs):
buff = self.get_best_buffer()
if not hasattr(buff, "get_right_tweet"): return
tweet = buff.get_right_tweet()
if buff.type != "people":
users = utils.get_all_users(tweet, buff.session.db)
else:
users = [tweet["screen_name"]]
dlg = dialogs.utils.selectUserDialog(_(u"Select the user"), users)
if dlg.get_response() == widgetUtils.OK:
user = dlg.get_user()
else:
return
l = listsController.listsController(buff.session, user=user)
def add_to_list(self, *args, **kwargs):
buff = self.get_best_buffer()
@@ -496,8 +516,32 @@ class Controller(object):
except TwythonError as e:
output.speak("error %s: %s" % (e.error_code, e.msg))
def remove_from_list(self, user):
pass
def remove_from_list(self, *args, **kwargs):
buff = self.get_best_buffer()
if not hasattr(buff, "get_right_tweet"): return
tweet = buff.get_right_tweet()
if buff.type != "people":
users = utils.get_all_users(tweet, buff.session.db)
else:
users = [tweet["screen_name"]]
dlg = dialogs.utils.selectUserDialog(_(u"Select the user"), users)
if dlg.get_response() == widgetUtils.OK:
user = dlg.get_user()
else:
return
dlg = dialogs.lists.removeUserListDialog()
dlg.populate_list([compose.compose_list(item) for item in buff.session.db["lists"]])
if dlg.get_response() == widgetUtils.OK:
try:
list = buff.session.twitter.twitter.delete_list_member(list_id=buff.session.db["lists"][dlg.get_item()]["id"], screen_name=user)
older_list = utils.find_item(buff.session.db["lists"][dlg.get_item()]["id"], buff.session.db["lists"])
listBuffer = self.search_buffer("%s-list" % (buff.session.db["lists"][dlg.get_item()]["name"].lower()), buff.session.db["user_name"])
if listBuffer != None: listBuffer.get_user_ids()
buff.session.db["lists"].pop(older_list)
buff.session.db["lists"].append(list)
if listBuffer != None: pub.sendMessage("restart-streams", streams=["timelinesStream"], session=buff.session)
except TwythonError as e:
output.speak("error %s: %s" % (e.error_code, e.msg))
def list_manager(self, *args, **kwargs):
s = self.get_best_buffer().session
@@ -730,7 +774,7 @@ class Controller(object):
self.view.insert_buffer(tl.buffer, name=_(u"Timeline for {}").format(dlg.get_user()), pos=pos)
buff.session.settings["other_buffers"]["timelines"].append(dlg.get_user())
pub.sendMessage("restart-streams", streams=["timelinesStream"], session=buff.session)
buffer.session.sound.play("create_timeline.ogg")
buff.session.sound.play("create_timeline.ogg")
else:
if usr["favourites_count"] == 0:
commonMessageDialogs.no_favs()

View File

@@ -74,10 +74,10 @@ class audioUploader(object):
def on_pause(self, *args, **kwargs):
if self.dialog.get("pause") == _(u"Pause"):
self.recording.pause()
self.dialog.set("pause", _(u"Resume"))
self.dialog.set("pause", _(u"&Resume"))
elif self.dialog.get("pause") == _(u"Resume"):
self.recording.play()
self.dialog.set("pause", _(U"Pause"))
self.dialog.set("pause", _(U"&Pause"))
def on_record(self, *args, **kwargs):
if self.recording != None:
@@ -92,7 +92,7 @@ class audioUploader(object):
self.file = tempfile.mktemp(suffix='.wav')
self.recording = sound.recording(self.file)
self.recording.play()
self.dialog.set("record", _(u"Stop"))
self.dialog.set("record", _(u"&Stop"))
output.speak(_(u"Recording"))
def stop_recording(self):
@@ -100,11 +100,11 @@ class audioUploader(object):
self.recording.free()
output.speak(_(u"Stopped"))
self.recorded = True
self.dialog.set("record", _(u"Record"))
self.dialog.set("record", _(u"&Record"))
self.file_attached()
def file_attached(self):
self.dialog.set("pause", _(u"Pause"))
self.dialog.set("pause", _(u"&Pause"))
self.dialog.disable_control("record")
self.dialog.enable_control("play")
self.dialog.enable_control("discard")
@@ -137,11 +137,11 @@ class audioUploader(object):
# try:
self.playing = sound_lib.stream.FileStream(file=unicode(self.file), flags=sound_lib.stream.BASS_UNICODE)
self.playing.play()
self.dialog.set("play", _(u"Stop"))
self.dialog.set("play", _(u"&Stop"))
try:
while self.playing.is_playing:
pass
self.dialog.set("play", _(u"Play"))
self.dialog.set("play", _(u"&Play"))
self.playing.free()
self.playing = None
except:
@@ -151,7 +151,7 @@ class audioUploader(object):
output.speak(_(u"Stopped"))
self.playing.stop()
self.playing.free()
self.dialog.set("play", _(u"Play"))
self.dialog.set("play", _(u"&Play"))
self.playing = None
def postprocess(self):

View File

@@ -31,14 +31,14 @@ class audioDialog(widgetUtils.BaseDialog):
btnSizer = wx.BoxSizer(wx.HORIZONTAL)
btnSizer2 = wx.BoxSizer(wx.HORIZONTAL)
self.play = wx.Button(panel, -1, _(u"Play"))
self.play = wx.Button(panel, -1, _(u"&Play"))
self.play.Disable()
self.pause = wx.Button(panel, -1, _(u"Pause"))
self.pause = wx.Button(panel, -1, _(u"&Pause"))
self.pause.Disable()
self.record = wx.Button(panel, -1, _(u"Record"))
self.record = wx.Button(panel, -1, _(u"&Record"))
self.record.SetFocus()
self.attach_exists = wx.Button(panel, -1, _(u"Add an existing file"))
self.discard = wx.Button(panel, -1, _(u"Discard"))
self.attach_exists = wx.Button(panel, -1, _(u"&Add an existing file"))
self.discard = wx.Button(panel, -1, _(u"&Discard"))
self.discard.Disable()
label = wx.StaticText(panel, -1, _(u"Upload to"))
self.services = wx.ComboBox(panel, -1, choices=services, value=services[0], style=wx.CB_READONLY)
@@ -47,7 +47,7 @@ class audioDialog(widgetUtils.BaseDialog):
servicesBox.Add(self.services, 0, wx.ALL, 5)
self.attach = wx.Button(panel, wx.ID_OK, _(u"Attach"))
self.attach.Disable()
cancel = wx.Button(panel, wx.ID_CANCEL, _(u"Cancel"))
cancel = wx.Button(panel, wx.ID_CANCEL, _(u"&Cancel"))
btnSizer.Add(self.play, 0, wx.ALL, 5)
btnSizer.Add(self.pause, 0, wx.ALL, 5)
btnSizer.Add(self.record, 0, wx.ALL, 5)

View File

@@ -11,9 +11,17 @@ def fix():
locales.BasqueLocale = BasqueLocale
locales.TurkishLocale.names[-1] = "tr_tr"
locales.ArabicLocale.names[-1] = "ar_eg"
# insert a modified function so if there is no language available in arrow, returns English locale.
locales.get_locale = get_locale
# We need to reassign the locales list for updating the list with our new contents.
locales._locales = locales._map_locales()
def get_locale(name):
locale_cls = locales._locales.get(name.lower())
if locale_cls is None:
return locales.EnglishLocale()
return locale_cls()
class CatalaLocale(Locale):
names = ['ca', 'ca_ca']
past = 'Fa {0}'

View File

@@ -1,6 +1,5 @@
import win32com.client
def fix():
if win32com.client.gencache.is_readonly == True:
win32com.client.gencache.is_readonly = False

View File

@@ -69,6 +69,7 @@ def getLanguageDescription(language):
"ar":pgettext("languageName","Arabic"),
"ne":pgettext("languageName","Nepali"),
"sr":pgettext("languageName","Serbian (Latin)"),
"ja":pgettext("languageName","Japanese"),
}.get(language,None)
return desc
@@ -195,10 +196,13 @@ def langToWindowsLocale(lang):
"gl": "glc",
"eu": "euq",
"hu": "hun",
"hr": "hrv",
"it": "ita",
"ja": "jpn",
"pl": "plk",
"pt": "ptb",
"ru": "rus",
"tr": "trk"
"tr": "trk",
"sr": "eng",
}
return languages[lang]

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: TW Blue 0.51\n"
"POT-Creation-Date: 2015-08-04 13:37+Hora de verano central (Mxico)\n"
"PO-Revision-Date: 2015-08-04 23:07+0200\n"
"POT-Creation-Date: 2015-09-04 08:51+Hora de verano central (Mxico)\n"
"PO-Revision-Date: 2015-09-04 16:45+0200\n"
"Last-Translator: Steffen Schultz <schulle3o@yahoo.de>\n"
"Language-Team: Steffen Schultz <schulle3o@yahoo.de>\n"
"Language: de\n"
@@ -19,174 +19,176 @@ msgstr ""
msgid "This action is not supported for this buffer"
msgstr "Diese Aktion ist in dieser Ansicht nicht verfügbar."
#: ../src\controller\buffersController.py:128 ../src\wxUI\buffers\base.py:24
#: ../src\controller\buffersController.py:128
#: ../src\controller\buffersController.py:957 ../src\wxUI\buffers\base.py:24
#: ../src\wxUI\buffers\events.py:14 ../src\wxUI\buffers\trends.py:17
#: ../src\wxUI\dialogs\message.py:250 ../src\wxUI\sysTrayIcon.py:33
#: ../src\wxUI\dialogs\message.py:251 ../src\wxUI\sysTrayIcon.py:33
msgid "Tweet"
msgstr "Tweet"
#: ../src\controller\buffersController.py:129
#: ../src\controller\buffersController.py:958
msgid "Write the tweet here"
msgstr "Gib deinen Tweet hier ein"
#: ../src\controller\buffersController.py:297
#: ../src\controller\buffersController.py:667
#: ../src\controller\buffersController.py:312
#: ../src\controller\buffersController.py:753
msgid "%s items retrieved"
msgstr "%s Einträge abgerufen"
#: ../src\controller\buffersController.py:317
#: ../src\controller\buffersController.py:332
msgid "This buffer is not a timeline; it can't be deleted."
msgstr "Diese Ansicht ist keine Zeitleiste und kann nicht gelöscht werden."
#: ../src\controller\buffersController.py:378
#: ../src\controller\buffersController.py:448
msgid "Reply to %s"
msgstr "Antwort an %s"
#: ../src\controller\buffersController.py:378
#: ../src\controller\buffersController.py:448
#: ../src\keystrokeEditor\constants.py:11 ../src\wxUI\buffers\base.py:26
msgid "Reply"
msgstr "Antwort"
#: ../src\controller\buffersController.py:405
#: ../src\controller\buffersController.py:475
msgid "Direct message to %s"
msgstr "Direktnachricht an %s"
#: ../src\controller\buffersController.py:405
#: ../src\controller\mainController.py:1105
#: ../src\controller\buffersController.py:475
#: ../src\controller\mainController.py:1125
msgid "New direct message"
msgstr "Neue Direktnachricht"
#: ../src\controller\buffersController.py:426
#: ../src\controller\buffersController.py:496
msgid "Add your comment to the tweet"
msgstr "Gib deinen Kommentar ein."
#: ../src\controller\buffersController.py:426
#: ../src\controller\buffersController.py:496
#: ../src\keystrokeEditor\constants.py:12 ../src\wxUI\buffers\base.py:25
#: ../src\wxUI\commonMessageDialogs.py:9 ../src\wxUI\dialogs\message.py:126
msgid "Retweet"
msgstr "Retweet"
#: ../src\controller\buffersController.py:498
#: ../src\controller\buffersController.py:567
msgid "Opening URL..."
msgstr "URL wird geöffnet..."
#: ../src\controller\buffersController.py:533
#: ../src\controller\buffersController.py:602
msgid "User details"
msgstr "Benutzerdetails"
#: ../src\controller\buffersController.py:582
#: ../src\controller\buffersController.py:651
msgid "Empty"
msgstr "Leer"
#: ../src\controller\buffersController.py:626
#: ../src\controller\buffersController.py:712
msgid "Mention to %s"
msgstr "Erwähnung an %s"
#: ../src\controller\buffersController.py:626 ../src\wxUI\buffers\people.py:15
#: ../src\controller\buffersController.py:712 ../src\wxUI\buffers\people.py:15
msgid "Mention"
msgstr "Erwähnung"
#: ../src\controller\mainController.py:250
#: ../src\controller\mainController.py:254
msgid "Ready"
msgstr "Bereit"
#: ../src\controller\mainController.py:281
#: ../src\controller\mainController.py:286
msgid "Home"
msgstr "Start"
#: ../src\controller\mainController.py:285
#: ../src\controller\mainController.py:290
msgid "Mentions"
msgstr "Erwähnungen"
#: ../src\controller\mainController.py:289
#: ../src\controller\mainController.py:294
msgid "Direct messages"
msgstr "Direktnachrichten"
#: ../src\controller\mainController.py:293
#: ../src\controller\mainController.py:298
msgid "Sent direct messages"
msgstr "Gesendete Direktnachrichten"
#: ../src\controller\mainController.py:297
#: ../src\controller\mainController.py:302
msgid "Sent tweets"
msgstr "Gesendete Tweets"
#: ../src\controller\mainController.py:302
#: ../src\controller\mainController.py:1221
#: ../src\wxUI\dialogs\userSelection.py:18
#: ../src\controller\mainController.py:307
#: ../src\controller\mainController.py:1248
#: ../src\wxUI\dialogs\userSelection.py:20
msgid "Favourites"
msgstr "Favoriten"
#: ../src\controller\mainController.py:306
#: ../src\controller\mainController.py:1226
#: ../src\controller\mainController.py:311
#: ../src\controller\mainController.py:1253
msgid "Followers"
msgstr "Folger"
#: ../src\controller\mainController.py:310
#: ../src\controller\mainController.py:1231
#: ../src\controller\mainController.py:315
#: ../src\controller\mainController.py:1258
msgid "Friends"
msgstr "Freunde"
#: ../src\controller\mainController.py:314
#: ../src\controller\mainController.py:1236
#: ../src\controller\mainController.py:319
#: ../src\controller\mainController.py:1263
msgid "Blocked users"
msgstr "Blockierte Benutzer"
#: ../src\controller\mainController.py:318
#: ../src\controller\mainController.py:1241
#: ../src\controller\mainController.py:323
#: ../src\controller\mainController.py:1268
msgid "Muted users"
msgstr "Stummgeschaltete Benutzer"
#: ../src\controller\mainController.py:322
#: ../src\controller\mainController.py:1246
#: ../src\controller\mainController.py:327
#: ../src\controller\mainController.py:1273
msgid "Events"
msgstr "Ereignisse"
#: ../src\controller\mainController.py:325
#: ../src\controller\mainController.py:330
msgid "Timelines"
msgstr "Zeitleisten"
#: ../src\controller\mainController.py:329
#: ../src\controller\mainController.py:737
#: ../src\controller\mainController.py:334
#: ../src\controller\mainController.py:756
msgid "Timeline for {}"
msgstr "Zeitleiste für {}"
#: ../src\controller\mainController.py:332
#: ../src\controller\mainController.py:337
msgid "Favourites timelines"
msgstr "Favoritenzeitleisten"
#: ../src\controller\mainController.py:336
#: ../src\controller\mainController.py:749
#: ../src\controller\mainController.py:341
#: ../src\controller\mainController.py:771
msgid "Favourites timeline for {}"
msgstr "Favoritenzeitleiste für {}"
#: ../src\controller\mainController.py:341 ../src\wxUI\dialogs\lists.py:12
#: ../src\controller\mainController.py:346 ../src\wxUI\dialogs\lists.py:12
msgid "Lists"
msgstr "Listen"
#: ../src\controller\mainController.py:346
#: ../src\controller\mainController.py:1256
#: ../src\controller\mainController.py:351
#: ../src\controller\mainController.py:1284
msgid "List for {}"
msgstr "Liste für {}"
#: ../src\controller\mainController.py:349
#: ../src\controller\mainController.py:354
msgid "Searches"
msgstr "Suchen"
#: ../src\controller\mainController.py:353
#: ../src\controller\mainController.py:424
#: ../src\controller\mainController.py:358
#: ../src\controller\mainController.py:416
msgid "Search for {}"
msgstr "Suche nach {}"
#: ../src\controller\mainController.py:361
#: ../src\controller\mainController.py:795
#: ../src\controller\mainController.py:368
#: ../src\controller\mainController.py:817
msgid "Trending topics for %s"
msgstr "Trends für %s"
#: ../src\controller\mainController.py:443
#: ../src\controller\mainController.py:890
#: ../src\controller\mainController.py:909
#: ../src\controller\mainController.py:929
#: ../src\controller\mainController.py:949
#: ../src\controller\mainController.py:435
#: ../src\controller\mainController.py:912
#: ../src\controller\mainController.py:931
#: ../src\controller\mainController.py:950
#: ../src\controller\mainController.py:969
msgid ""
"No session is currently in focus. Focus a session with the next or previous "
"session shortcut."
@@ -194,98 +196,99 @@ msgstr ""
"Derzeit ist keine Sitzung im Fokus. Bitte benutze die Tastenkombinationen "
"vorherige und nächste Sitzung, um eine Sitzung zu fokussieren."
#: ../src\controller\mainController.py:447
#: ../src\controller\mainController.py:439
msgid "Empty buffer."
msgstr "Leere Ansicht."
#: ../src\controller\mainController.py:454
#: ../src\controller\mainController.py:446
msgid "{0} not found."
msgstr "{0} nicht gefunden."
#: ../src\controller\mainController.py:490
#: ../src\controller\mainController.py:482
#: ../src\controller\mainController.py:509
msgid "Select the user"
msgstr "Wähle den Benutzer"
#: ../src\controller\mainController.py:768
#: ../src\controller\mainController.py:790
msgid "Conversation with {0}"
msgstr "Unterhaltung mit {0}"
#: ../src\controller\mainController.py:812
#: ../src\controller\mainController.py:831
#: ../src\controller\mainController.py:834
#: ../src\controller\mainController.py:853
msgid "There are no coordinates in this tweet"
msgstr "Dieser Tweet hat keine Koordinaten."
#: ../src\controller\mainController.py:814
#: ../src\controller\mainController.py:833
#: ../src\controller\mainController.py:836
#: ../src\controller\mainController.py:855
msgid "There are no results for the coordinates in this tweet"
msgstr "Keine Ergebnisse für die Koordinaten in diesem Tweet."
#: ../src\controller\mainController.py:816
#: ../src\controller\mainController.py:835
#: ../src\controller\mainController.py:838
#: ../src\controller\mainController.py:857
msgid "Error decoding coordinates. Try again later."
msgstr ""
"Fehler beim Umwandeln der Koordinaten. Bitte versuche es später erneut."
#: ../src\controller\mainController.py:940
#: ../src\controller\mainController.py:959
#: ../src\controller\mainController.py:960
#: ../src\controller\mainController.py:979
msgid "%s, %s of %s"
msgstr "%s, %s von %s"
#: ../src\controller\mainController.py:942
#: ../src\controller\mainController.py:961
#: ../src\controller\mainController.py:982
#: ../src\controller\mainController.py:1003
#: ../src\controller\mainController.py:962
#: ../src\controller\mainController.py:981
#: ../src\controller\mainController.py:1002
#: ../src\controller\mainController.py:1023
msgid "%s. Empty"
msgstr "%s. Leer"
#: ../src\controller\mainController.py:974
#: ../src\controller\mainController.py:994
msgid "{0}: This account is not logged into Twitter."
msgstr "{0}: Dieser Account ist nicht bei Twitter eingeloggt."
#: ../src\controller\mainController.py:980
#: ../src\controller\mainController.py:1001
#: ../src\controller\mainController.py:1000
#: ../src\controller\mainController.py:1021
msgid "%s. %s, %s of %s"
msgstr "%s. %s, %s von %s"
#: ../src\controller\mainController.py:995
#: ../src\controller\mainController.py:1015
msgid "{0}: This account is not logged into twitter."
msgstr "{0}: Dieser Account ist nicht bei Twitter eingeloggt."
#: ../src\controller\mainController.py:1096
#: ../src\controller\mainController.py:1116
msgid "One mention from %s "
msgstr "Eine Erwähnung von %s"
#: ../src\controller\mainController.py:1185
#: ../src\controller\mainController.py:1194
#: ../src\controller\mainController.py:1205
#: ../src\controller\mainController.py:1214
msgid "One tweet from %s"
msgstr "Ein Tweet von %s"
#: ../src\controller\mainController.py:1251
#: ../src\controller\mainController.py:1278
msgid "This list is already opened"
msgstr "Diese Liste ist bereits geöffnet."
#: ../src\controller\mainController.py:1309
#: ../src\controller\mainController.py:1337
msgid "The auto-reading of new tweets is enabled for this buffer"
msgstr "Das automatische Vorlesen von Tweets ist für diese Ansicht aktiv."
#: ../src\controller\mainController.py:1312
#: ../src\controller\mainController.py:1340
msgid "The auto-reading of new tweets is disabled for this buffer"
msgstr ""
"Das automatische Vorlesen von Tweets ist für diese Ansicht deaktiviert."
#: ../src\controller\mainController.py:1318
#: ../src\controller\mainController.py:1346
msgid "Session mute on"
msgstr "Sitzung stummgeschaltet"
#: ../src\controller\mainController.py:1321
#: ../src\controller\mainController.py:1349
msgid "Session mute off"
msgstr "Sitzung nicht stummgeschaltet"
#: ../src\controller\mainController.py:1328
#: ../src\controller\mainController.py:1356
msgid "Buffer mute on"
msgstr "Stummschaltung ein"
#: ../src\controller\mainController.py:1331
#: ../src\controller\mainController.py:1359
msgid "Buffer mute off"
msgstr "Stummschaltung aus"
@@ -293,73 +296,73 @@ msgstr "Stummschaltung aus"
msgid "Copied"
msgstr "Kopiert"
#: ../src\controller\messages.py:43
#: ../src\controller\messages.py:44
msgid "Translated"
msgstr "Übersetzt"
#: ../src\controller\messages.py:50
#: ../src\controller\messages.py:51
msgid "There's no URL to be shortened"
msgstr "Es gibt keine URL zum Kürzen."
#: ../src\controller\messages.py:54 ../src\controller\messages.py:61
#: ../src\controller\messages.py:55 ../src\controller\messages.py:62
msgid "URL shortened"
msgstr "URL gekürzt"
#: ../src\controller\messages.py:67
#: ../src\controller\messages.py:68
msgid "There's no URL to be expanded"
msgstr "Es gibt keine URL zum Expandieren."
#: ../src\controller\messages.py:71 ../src\controller\messages.py:78
#: ../src\controller\messages.py:72 ../src\controller\messages.py:79
msgid "URL expanded"
msgstr "URL expandiert"
#: ../src\controller\messages.py:89
#: ../src\controller\messages.py:90
msgid "%s - %s of %d characters"
msgstr "%s - %s von %d Zeichen"
#: ../src\controller\messages.py:93
#: ../src\controller\messages.py:94
msgid "%s - %s characters"
msgstr "%s - %s Zeichen"
#: ../src\controller\messages.py:109
#: ../src\controller\messages.py:111
msgid "Unable to upload the audio"
msgstr "Audio kann nicht hochgeladen werden."
#: ../src\controller\messages.py:124 ../src\controller\messages.py:132
#: ../src\controller\messages.py:127 ../src\controller\messages.py:135
#: ../src\wxUI\dialogs\update_profile.py:77
msgid "Discard image"
msgstr "Bild verwerfen"
#: ../src\controller\messages.py:127 ../src\controller\user.py:53
#: ../src\controller\messages.py:130 ../src\controller\user.py:53
#: ../src\extra\AudioUploader\audioUploader.py:127
msgid "Discarded"
msgstr "Verworfen"
#: ../src\controller\messages.py:128 ../src\wxUI\dialogs\message.py:133
#: ../src\controller\messages.py:131 ../src\wxUI\dialogs\message.py:133
#: ../src\wxUI\dialogs\update_profile.py:32
#: ../src\wxUI\dialogs\update_profile.py:75
msgid "Upload a picture"
msgstr "Ein Bild hochladen"
#: ../src\controller\settings.py:119 ../src\controller\settings.py:178
#: ../src\controller\settings.py:121 ../src\controller\settings.py:180
#: ../src\wxUI\dialogs\configuration.py:100
msgid "Ask"
msgstr "Fragen"
#: ../src\controller\settings.py:121 ../src\controller\settings.py:180
#: ../src\controller\settings.py:123 ../src\controller\settings.py:182
#: ../src\wxUI\dialogs\configuration.py:100
msgid "Retweet without comments"
msgstr "Retweet ohne Kommentar"
#: ../src\controller\settings.py:123 ../src\wxUI\dialogs\configuration.py:100
#: ../src\controller\settings.py:125 ../src\wxUI\dialogs\configuration.py:100
msgid "Retweet with comments"
msgstr "Retweet mit Kommentar"
#: ../src\controller\settings.py:155
#: ../src\controller\settings.py:157
msgid "Account settings for %s"
msgstr "Account-Einstellungen für %s"
#: ../src\controller\settings.py:263 ../src\wxUI\dialogs\configuration.py:291
#: ../src\controller\settings.py:265 ../src\wxUI\dialogs\configuration.py:291
msgid "Connect your Pocket account"
msgstr "Pocket-Account verbinden"
@@ -419,7 +422,7 @@ msgstr "Tweets: %s\n"
msgid "Favourites: %s"
msgstr "Favoriten: %s"
#: ../src\controller\userActionsController.py:69
#: ../src\controller\userActionsController.py:75
msgid "You can't ignore direct messages"
msgstr "Du kannst keine Direktnachrichten ignorieren."
@@ -705,6 +708,8 @@ msgstr ""
#: ../src\extra\SpellChecker\wx_ui.py:76 ../src\issueReporter\wx_ui.py:83
#: ../src\issueReporter\wx_ui.py:86 ../src\wxUI\commonMessageDialogs.py:38
#: ../src\wxUI\commonMessageDialogs.py:50
#: ../src\wxUI\commonMessageDialogs.py:57
#: ../src\wxUI\commonMessageDialogs.py:60
msgid "Error"
msgstr "Fehler"
@@ -1169,8 +1174,8 @@ msgid "autodetect"
msgstr "Automatisch"
#: ../src\extra\translator\wx_ui.py:25 ../src\wxUI\dialogs\message.py:140
#: ../src\wxUI\dialogs\message.py:201 ../src\wxUI\dialogs\message.py:279
#: ../src\wxUI\dialogs\message.py:334
#: ../src\wxUI\dialogs\message.py:201 ../src\wxUI\dialogs\message.py:280
#: ../src\wxUI\dialogs\message.py:335
msgid "Translate message"
msgstr "Nachricht übersetzen"
@@ -1506,7 +1511,7 @@ msgid "Keystroke"
msgstr "Tastenkombination"
#: ../src\keystrokeEditor\wx_ui.py:13 ../src\wxUI\dialogs\userActions.py:9
#: ../src\wxUI\dialogs\userActions.py:16
#: ../src\wxUI\dialogs\userActions.py:18
msgid "Action"
msgstr "Aktion"
@@ -1514,57 +1519,61 @@ msgstr "Aktion"
msgid "Edit"
msgstr "Bearbeiten"
#: ../src\keystrokeEditor\wx_ui.py:20
msgid "Execute action"
msgstr "Aktion ausführen"
#: ../src\keystrokeEditor\wx_ui.py:21 ../src\wxUI\dialogs\configuration.py:349
#: ../src\wxUI\dialogs\message.py:84 ../src\wxUI\dialogs\message.py:144
#: ../src\wxUI\dialogs\message.py:204 ../src\wxUI\dialogs\message.py:280
#: ../src\wxUI\dialogs\message.py:335 ../src\wxUI\dialogs\search.py:26
#: ../src\wxUI\dialogs\message.py:204 ../src\wxUI\dialogs\message.py:281
#: ../src\wxUI\dialogs\message.py:336 ../src\wxUI\dialogs\search.py:26
#: ../src\wxUI\dialogs\show_user.py:17 ../src\wxUI\dialogs\trends.py:28
#: ../src\wxUI\dialogs\update_profile.py:35
#: ../src\wxUI\dialogs\userActions.py:40
#: ../src\wxUI\dialogs\userSelection.py:28 ../src\wxUI\dialogs\utils.py:35
#: ../src\wxUI\dialogs\userActions.py:42
#: ../src\wxUI\dialogs\userSelection.py:30 ../src\wxUI\dialogs\utils.py:37
msgid "Close"
msgstr "Schließen"
#: ../src\keystrokeEditor\wx_ui.py:43
#: ../src\keystrokeEditor\wx_ui.py:45
msgid "Editing keystroke"
msgstr "Bearbeite Tastenkombination"
#: ../src\keystrokeEditor\wx_ui.py:46
#: ../src\keystrokeEditor\wx_ui.py:48
msgid "Control"
msgstr "STRG"
#: ../src\keystrokeEditor\wx_ui.py:47
#: ../src\keystrokeEditor\wx_ui.py:49
msgid "Alt"
msgstr "Alt"
#: ../src\keystrokeEditor\wx_ui.py:48
#: ../src\keystrokeEditor\wx_ui.py:50
msgid "Shift"
msgstr "Umschalt"
#: ../src\keystrokeEditor\wx_ui.py:49
#: ../src\keystrokeEditor\wx_ui.py:51
msgid "Windows"
msgstr "Windows"
#: ../src\keystrokeEditor\wx_ui.py:55
#: ../src\keystrokeEditor\wx_ui.py:57
msgid "Key"
msgstr "Taste"
#: ../src\keystrokeEditor\wx_ui.py:60 ../src\wxUI\dialogs\find.py:18
#: ../src\keystrokeEditor\wx_ui.py:62 ../src\wxUI\dialogs\find.py:18
#: ../src\wxUI\dialogs\search.py:24 ../src\wxUI\dialogs\trends.py:26
#: ../src\wxUI\dialogs\userActions.py:38
#: ../src\wxUI\dialogs\userSelection.py:26 ../src\wxUI\dialogs\utils.py:32
#: ../src\wxUI\dialogs\userActions.py:40
#: ../src\wxUI\dialogs\userSelection.py:28 ../src\wxUI\dialogs\utils.py:34
msgid "OK"
msgstr "OK"
#: ../src\keystrokeEditor\wx_ui.py:73
#: ../src\keystrokeEditor\wx_ui.py:75
msgid "You need to use the Windows key"
msgstr "Du musst die Windows-Taste verwenden."
#: ../src\keystrokeEditor\wx_ui.py:73 ../src\keystrokeEditor\wx_ui.py:76
#: ../src\keystrokeEditor\wx_ui.py:75 ../src\keystrokeEditor\wx_ui.py:78
msgid "Invalid keystroke"
msgstr "Ungültige Tastenkombination"
#: ../src\keystrokeEditor\wx_ui.py:76
#: ../src\keystrokeEditor\wx_ui.py:78
msgid "You must provide a character for the keystroke"
msgstr "Du musst ein Zeichen für die Tastenkombination angeben."
@@ -1572,11 +1581,11 @@ msgstr "Du musst ein Zeichen für die Tastenkombination angeben."
msgid "User default"
msgstr "Benutzerstandard"
#: ../src\sessionmanager\session.py:185
#: ../src\sessionmanager\session.py:186
msgid "%s failed. Reason: %s"
msgstr "%s fehlgeschlagen. Grund: %s"
#: ../src\sessionmanager\session.py:191
#: ../src\sessionmanager\session.py:192
msgid "%s succeeded."
msgstr "%s erfolgreich."
@@ -1844,7 +1853,7 @@ msgstr "Datum"
#: ../src\wxUI\buffers\base.py:11 ../src\wxUI\buffers\people.py:10
#: ../src\wxUI\buffers\user_searches.py:9
#: ../src\wxUI\dialogs\userActions.py:10
#: ../src\wxUI\dialogs\userSelection.py:10 ../src\wxUI\dialogs\utils.py:29
#: ../src\wxUI\dialogs\userSelection.py:10 ../src\wxUI\dialogs\utils.py:30
msgid "User"
msgstr "Benutzer"
@@ -1900,7 +1909,7 @@ msgid ""
msgstr ""
"Möchtest du diesen Tweet wirklich löschen? Er wird auch auf Twitter gelöscht."
#: ../src\wxUI\commonMessageDialogs.py:12 ../src\wxUI\dialogs\lists.py:133
#: ../src\wxUI\commonMessageDialogs.py:12 ../src\wxUI\dialogs\lists.py:134
msgid "Delete"
msgstr "Löschen"
@@ -2020,6 +2029,17 @@ msgstr ""
msgid "We need your help"
msgstr "Wir brauchen deine Hilfe"
#: ../src\wxUI\commonMessageDialogs.py:57
msgid "This user has no tweets. {0} can't create a timeline."
msgstr ""
"Dieser Benutzer hat keine Tweets, {0} kann daher keine Zeitleiste erstellen."
#: ../src\wxUI\commonMessageDialogs.py:60
msgid "This user has no favorited tweets. {0} can't create a timeline."
msgstr ""
"Dieser Benutzer hat keine Favoriten. {0} kann daher keine Zeitleiste "
"erstellen."
#: ../src\wxUI\dialogs\configuration.py:14
msgid "Language"
msgstr "Sprache"
@@ -2333,7 +2353,7 @@ msgstr "Hinzufügen"
msgid "Select a list to remove the user"
msgstr "Wähle eine Liste zum Entfernen des Benutzers."
#: ../src\wxUI\dialogs\lists.py:133
#: ../src\wxUI\dialogs\lists.py:134
msgid "Do you really want to delete this list?"
msgstr "Möchtest du diese Liste wirklich löschen?"
@@ -2359,8 +2379,8 @@ msgid "Shorten URL"
msgstr "URL kürzen"
#: ../src\wxUI\dialogs\message.py:77 ../src\wxUI\dialogs\message.py:137
#: ../src\wxUI\dialogs\message.py:198 ../src\wxUI\dialogs\message.py:277
#: ../src\wxUI\dialogs\message.py:332
#: ../src\wxUI\dialogs\message.py:198 ../src\wxUI\dialogs\message.py:278
#: ../src\wxUI\dialogs\message.py:333
msgid "Expand URL"
msgstr "URL expandieren"
@@ -2369,7 +2389,8 @@ msgid "Translate..."
msgstr "Übersetzen..."
#: ../src\wxUI\dialogs\message.py:81 ../src\wxUI\dialogs\message.py:141
#: ../src\wxUI\dialogs\message.py:186
#: ../src\wxUI\dialogs\message.py:186 ../src\wxUI\dialogs\userActions.py:13
#: ../src\wxUI\dialogs\userSelection.py:13 ../src\wxUI\dialogs\utils.py:29
msgid "&Autocomplete users"
msgstr "&Auto-Vervollständigung der Benutzer"
@@ -2389,7 +2410,7 @@ msgid "Select the picture to be uploaded"
msgstr "Wähle das hochzuladende Bild aus."
#: ../src\wxUI\dialogs\message.py:134 ../src\wxUI\dialogs\message.py:195
#: ../src\wxUI\dialogs\message.py:276 ../src\wxUI\dialogs\message.py:331
#: ../src\wxUI\dialogs\message.py:277 ../src\wxUI\dialogs\message.py:332
msgid "Spelling correction"
msgstr "Rechtschreibprüfung"
@@ -2397,27 +2418,27 @@ msgstr "Rechtschreibprüfung"
msgid "Recipient"
msgstr "Empfänger"
#: ../src\wxUI\dialogs\message.py:236
#: ../src\wxUI\dialogs\message.py:237
msgid "Men&tion to all"
msgstr "Alle er&wähnen"
#: ../src\wxUI\dialogs\message.py:245
#: ../src\wxUI\dialogs\message.py:246
msgid "Tweet - %i characters "
msgstr "Tweet - %i Zeichen "
#: ../src\wxUI\dialogs\message.py:262
#: ../src\wxUI\dialogs\message.py:263
msgid "Retweets: "
msgstr "Retweets: "
#: ../src\wxUI\dialogs\message.py:267
#: ../src\wxUI\dialogs\message.py:268
msgid "Favourites: "
msgstr "Favoriten: "
#: ../src\wxUI\dialogs\message.py:317
#: ../src\wxUI\dialogs\message.py:318
msgid "View"
msgstr "Ansehen"
#: ../src\wxUI\dialogs\message.py:319
#: ../src\wxUI\dialogs\message.py:320
msgid "Item"
msgstr "Eintrag"
@@ -2429,7 +2450,7 @@ msgstr "Auf Twitter suchen"
msgid "Search"
msgstr "Suchen"
#: ../src\wxUI\dialogs\search.py:18 ../src\wxUI\dialogs\userSelection.py:17
#: ../src\wxUI\dialogs\search.py:18 ../src\wxUI\dialogs\userSelection.py:19
msgid "Tweets"
msgstr "Tweets"
@@ -2489,35 +2510,35 @@ msgstr "Profil aktualisieren"
msgid "Select URL"
msgstr "Wähle eine URL"
#: ../src\wxUI\dialogs\userActions.py:17
#: ../src\wxUI\dialogs\userActions.py:19
msgid "Follow"
msgstr "Folgen"
#: ../src\wxUI\dialogs\userActions.py:18
#: ../src\wxUI\dialogs\userActions.py:20
msgid "Unfollow"
msgstr "Entfolgen"
#: ../src\wxUI\dialogs\userActions.py:19
#: ../src\wxUI\dialogs\userActions.py:21
msgid "Mute"
msgstr "Stummschalten"
#: ../src\wxUI\dialogs\userActions.py:20
#: ../src\wxUI\dialogs\userActions.py:22
msgid "Unmute"
msgstr "Stummschaltung aufheben"
#: ../src\wxUI\dialogs\userActions.py:21
#: ../src\wxUI\dialogs\userActions.py:23
msgid "Block"
msgstr "Blockieren"
#: ../src\wxUI\dialogs\userActions.py:22
#: ../src\wxUI\dialogs\userActions.py:24
msgid "Unblock"
msgstr "Blockierung aufheben"
#: ../src\wxUI\dialogs\userActions.py:23
#: ../src\wxUI\dialogs\userActions.py:25
msgid "Report as spam"
msgstr "Als Spam melden"
#: ../src\wxUI\dialogs\userActions.py:24
#: ../src\wxUI\dialogs\userActions.py:26
msgid "Ignore tweets from this client"
msgstr "Tweets dieses Clients ignorieren"
@@ -2525,10 +2546,84 @@ msgstr "Tweets dieses Clients ignorieren"
msgid "Timeline for %s"
msgstr "Zeitleiste von %s"
#: ../src\wxUI\dialogs\userSelection.py:16
#: ../src\wxUI\dialogs\userSelection.py:18
msgid "Buffer type"
msgstr "Ansichts-Typ"
#: ../src\wxUI\menus.py:7 ../src\wxUI\view.py:29
msgid "&Retweet"
msgstr "&Retweet"
#: ../src\wxUI\menus.py:9 ../src\wxUI\menus.py:31 ../src\wxUI\view.py:28
msgid "Re&ply"
msgstr "Ant&worten"
#: ../src\wxUI\menus.py:11 ../src\wxUI\view.py:30
msgid "Add to &favourites"
msgstr "Zu &Favoriten hinzufügen"
#: ../src\wxUI\menus.py:13 ../src\wxUI\view.py:31
msgid "Remove from favo&urites"
msgstr "Aus Fav&oriten entfernen"
#: ../src\wxUI\menus.py:15 ../src\wxUI\menus.py:33 ../src\wxUI\menus.py:49
msgid "&Open URL"
msgstr "URL &öffnen"
#: ../src\wxUI\menus.py:17 ../src\wxUI\menus.py:35 ../src\wxUI\menus.py:51
msgid "&Play audio"
msgstr "Audio abs&pielen"
#: ../src\wxUI\menus.py:19 ../src\wxUI\menus.py:53 ../src\wxUI\view.py:32
msgid "&Show tweet"
msgstr "Tweet an&sehen"
#: ../src\wxUI\menus.py:21 ../src\wxUI\menus.py:39 ../src\wxUI\menus.py:55
#: ../src\wxUI\menus.py:65 ../src\wxUI\menus.py:82 ../src\wxUI\menus.py:94
msgid "&Copy to clipboard"
msgstr "in Zwischenablage &kopieren"
#: ../src\wxUI\menus.py:23 ../src\wxUI\menus.py:41 ../src\wxUI\menus.py:57
#: ../src\wxUI\menus.py:67 ../src\wxUI\view.py:35
msgid "&Delete"
msgstr "Löschen"
#: ../src\wxUI\menus.py:25 ../src\wxUI\menus.py:43 ../src\wxUI\menus.py:84
msgid "&User actions..."
msgstr "Ben&utzeraktionen"
#: ../src\wxUI\menus.py:37
msgid "&Show direct message"
msgstr "Direktnachricht an&sehen"
#: ../src\wxUI\menus.py:63
msgid "&Show event"
msgstr "Ereignis an&sehen"
#: ../src\wxUI\menus.py:73
msgid "Direct &message"
msgstr "Direkt&nachricht"
#: ../src\wxUI\menus.py:75 ../src\wxUI\view.py:44
msgid "&View lists"
msgstr "Listen &ansehen"
#: ../src\wxUI\menus.py:78 ../src\wxUI\view.py:46
msgid "Show user &profile"
msgstr "Benutzer&profil ansehen"
#: ../src\wxUI\menus.py:80
msgid "&Show user"
msgstr "Benutzer an&sehen"
#: ../src\wxUI\menus.py:90
msgid "&Tweet about this trend"
msgstr "Über diesen &Trend twittern"
#: ../src\wxUI\menus.py:92
msgid "&Show item"
msgstr "Eintrag an&sehen"
#: ../src\wxUI\sysTrayIcon.py:34 ../src\wxUI\view.py:22
msgid "&Global settings"
msgstr "&Globale Einstellungen"
@@ -2545,7 +2640,7 @@ msgstr "&Profil aktualisieren"
msgid "&Show / hide"
msgstr "&Zeigen / verbergen"
#: ../src\wxUI\sysTrayIcon.py:38 ../src\wxUI\view.py:63
#: ../src\wxUI\sysTrayIcon.py:38 ../src\wxUI\view.py:62
msgid "&Documentation"
msgstr "Dokumentation^"
@@ -2585,30 +2680,10 @@ msgstr "Tasten&kombinationen bearbeiten"
msgid "E&xit"
msgstr "&Beenden"
#: ../src\wxUI\view.py:27 ../src\wxUI\view.py:74
#: ../src\wxUI\view.py:27 ../src\wxUI\view.py:73
msgid "&Tweet"
msgstr "&Tweet"
#: ../src\wxUI\view.py:28
msgid "Re&ply"
msgstr "Ant&worten"
#: ../src\wxUI\view.py:29
msgid "&Retweet"
msgstr "&Retweet"
#: ../src\wxUI\view.py:30
msgid "Add to &favourites"
msgstr "Zu &Favoriten hinzufügen"
#: ../src\wxUI\view.py:31
msgid "Remove from favo&urites"
msgstr "Aus Fav&oriten entfernen"
#: ../src\wxUI\view.py:32
msgid "&Show tweet"
msgstr "Tweet an&sehen"
#: ../src\wxUI\view.py:33
msgid "View &address"
msgstr "&Adresse abrufen"
@@ -2617,10 +2692,6 @@ msgstr "&Adresse abrufen"
msgid "View conversa&tion"
msgstr "Konversa&tion anzeigen"
#: ../src\wxUI\view.py:35
msgid "&Delete"
msgstr "Löschen"
#: ../src\wxUI\view.py:39
msgid "&Actions..."
msgstr "&Aktionen..."
@@ -2641,95 +2712,87 @@ msgstr "Zur L&iste hinzufügen"
msgid "R&emove from list"
msgstr "Aus Liste &entfernen"
#: ../src\wxUI\view.py:45
msgid "&View lists"
msgstr "Listen &ansehen"
#: ../src\wxUI\view.py:47
msgid "Show user &profile"
msgstr "Benutzer&profil ansehen"
#: ../src\wxUI\view.py:48
msgid "V&iew favourites"
msgstr "Favor&iten ansehen"
#: ../src\wxUI\view.py:52
#: ../src\wxUI\view.py:51
msgid "New &trending topics buffer..."
msgstr "Neue &Trends-Ansicht"
#: ../src\wxUI\view.py:53
#: ../src\wxUI\view.py:52
msgid "Find a string in the currently focused buffer..."
msgstr "Eine Zeichenkette im der momentan fokussierten Ansicht suchen..."
#: ../src\wxUI\view.py:54
#: ../src\wxUI\view.py:53
msgid "&Load previous items"
msgstr "Vorhergehende Einträge &laden"
#: ../src\wxUI\view.py:56
#: ../src\wxUI\view.py:55
msgid "&Mute"
msgstr "Stu&mmschalten"
#: ../src\wxUI\view.py:57
#: ../src\wxUI\view.py:56
msgid "&Autoread"
msgstr "&Automatisch vorlesen"
#: ../src\wxUI\view.py:58
#: ../src\wxUI\view.py:57
msgid "&Clear buffer"
msgstr "Ansicht l&eeren"
#: ../src\wxUI\view.py:59
#: ../src\wxUI\view.py:58
msgid "&Destroy"
msgstr "&Löschen"
#: ../src\wxUI\view.py:64
#: ../src\wxUI\view.py:63
msgid "Sounds &tutorial"
msgstr "Sounds &erlernen"
#: ../src\wxUI\view.py:65
#: ../src\wxUI\view.py:64
msgid "&What's new in this version?"
msgstr "&Was ist neu in dieser Version?"
#: ../src\wxUI\view.py:67
#: ../src\wxUI\view.py:66
msgid "&Check for updates"
msgstr "Nach &Updates suchen"
#: ../src\wxUI\view.py:68
#: ../src\wxUI\view.py:67
msgid "&Report an error"
msgstr "Fehle&r melden"
#: ../src\wxUI\view.py:69
#: ../src\wxUI\view.py:68
msgid "{0}'s &website"
msgstr "{0}-&Webseite"
#: ../src\wxUI\view.py:70
#: ../src\wxUI\view.py:69
msgid "About &{0}"
msgstr "Über &{0}"
#: ../src\wxUI\view.py:73
#: ../src\wxUI\view.py:72
msgid "&Application"
msgstr "&Anwendung"
#: ../src\wxUI\view.py:75
#: ../src\wxUI\view.py:74
msgid "&User"
msgstr "Ben&utzer"
#: ../src\wxUI\view.py:76
#: ../src\wxUI\view.py:75
msgid "&Buffer"
msgstr "A&nsicht"
#: ../src\wxUI\view.py:77
#: ../src\wxUI\view.py:76
msgid "&Help"
msgstr "&Hilfe"
#: ../src\wxUI\view.py:158
#: ../src\wxUI\view.py:159
msgid "Address"
msgstr "Adresse"
#: ../src\wxUI\view.py:181
#: ../src\wxUI\view.py:182
msgid "Update"
msgstr "Update"
#: ../src\wxUI\view.py:181
#: ../src\wxUI\view.py:182
msgid "Your {0} version is up to date"
msgstr "Deine {0}-Version ist aktuell"

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -16,6 +16,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
############################################################
from twitter import utils
def get_id(url):
return url.split("/")[-1]
@@ -26,3 +27,8 @@ def is_long(tweet):
if "twitter.com" in tweet["entities"]["urls"][url]["expanded_url"]:
long = get_id(tweet["entities"]["urls"][url]["expanded_url"])
return long
def clear_url(tweet):
urls = utils.find_urls_in_text(tweet["text"])
tweet["message"] = tweet["message"].replace(urls[-1]+".", "")
return tweet

View File

@@ -9,7 +9,7 @@ import output
import time
import sound
import logging
from twitter import utils
from twitter import utils, compose
from twython import TwythonError, TwythonRateLimitError, TwythonAuthError
import config_utils
import shelve
@@ -18,6 +18,7 @@ import os
from mysc.thread_utils import stream_threaded
from pubsub import pub
log = logging.getLogger("sessionmanager.session")
from long_tweets import tweets
sessions = {}
@@ -61,6 +62,7 @@ class Session(object):
self.db[name] = []
for i in data:
if utils.find_item(i["id"], self.db[name]) == None and utils.is_allowed(i, self.settings["twitter"]["ignored_clients"]) == True:
i = self.check_quoted_status(i)
if self.settings["general"]["reverse_timelines"] == False: self.db[name].append(i)
else: self.db[name].insert(0, i)
num = num+1
@@ -413,3 +415,27 @@ class Session(object):
os.remove(shelfname)
except:
pass
def check_quoted_status(self, tweet):
status = tweets.is_long(tweet)
if status != False:
tweet["quoted"] = 1
tweet = self.get_quoted_tweet(tweet)
return tweet
def get_quoted_tweet(self, tweet):
quoted_tweet = self.twitter.twitter.show_status(id=tweet["id"])
urls = utils.find_urls_in_text(quoted_tweet["text"])
for url in range(0, len(urls)):
try: quoted_tweet["text"] = quoted_tweet["text"].replace(urls[url], quoted_tweet["entities"]["urls"][url]["expanded_url"])
except IndexError: pass
l = tweets.is_long(quoted_tweet)
id = tweets.get_id(l)
original_tweet = self.twitter.twitter.show_status(id=id)
urls = utils.find_urls_in_text(original_tweet["text"])
for url in range(0, len(urls)):
try: original_tweet["text"] = original_tweet["text"].replace(urls[url], original_tweet["entities"]["urls"][url]["expanded_url"])
except IndexError: pass
return compose.compose_quoted_tweet(quoted_tweet, original_tweet)

View File

@@ -30,6 +30,10 @@ class timelinesStreamer(TwythonStreamer):
def check_tls(self, data):
for i in self.session.settings["other_buffers"]["timelines"]:
if data["user"]["screen_name"] == i:
if utils.find_item(data["id"], self.session.db["%s-timeline" % (i,)]) != None:
log.error("duplicated tweet. Ignoring it...")
return
data = self.session.check_quoted_status(data)
if self.session.settings["general"]["reverse_timelines"] == False: self.session.db["%s-timeline" % (i,)].append(data)
else: self.session.db["%s-timeline" % (i,)].insert(0, data)
pub.sendMessage("item-in-timeline", data= data, user= self.session.db["user_name"], who= i)
@@ -38,6 +42,7 @@ class timelinesStreamer(TwythonStreamer):
i.users.index(data["user"]["id"])
usr = data["in_reply_to_user_id"]
if (usr != None and usr in self.friends) or data.has_key("retweeted_status"):
data = self.session.check_quoted_status(data)
if self.session.settings["general"]["reverse_timelines"] == False: self.session.db["%s" % (i.name,)].append(data)
else: self.session.db["%s" % (i,)].insert(0, data)
pub.sendMessage("item-in-list", data= data, user= self.session.db["user_name"], where= i.name)

View File

@@ -33,6 +33,10 @@ class streamer(TwythonStreamer):
def put_data(self, place, data):
if self.session.db.has_key(place):
if utils.find_item(data["id"], self.session.db[place]) != None:
log.error("duplicated tweet. Ignoring it...")
return
data = self.session.check_quoted_status(data)
if self.session.settings["general"]["reverse_timelines"] == False:
self.session.db[place].append(data)
else:

View File

@@ -10,7 +10,7 @@ import languageHandler
import arrow
import logging
import config
from long_tweets import twishort
from long_tweets import twishort, tweets
log = logging.getLogger("compose")
def StripChars(s):
@@ -60,11 +60,33 @@ def compose_tweet(tweet, db, relative_times):
try:
oldtext=text
text=twishort.get_full_text(tweet['long_uri'])
try: text = "rt @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], StripChars(text))
except KeyError: pass
except:
text=oldtext
if tweet.has_key("message"):
text = tweet["message"]
return [user+", ", text, ts+", ", source]
tweet["text"] = text
return [user+", ", tweet["text"], ts+", ", source]
def compose_quoted_tweet(quoted_tweet, original_tweet):
""" It receives a tweet and returns a list with the user, text for the tweet or message, date and the client where user is."""
text = StripChars(quoted_tweet["text"])
quoting_user = quoted_tweet["user"]["name"]
source = re.sub(r"(?s)<.*?>", "", quoted_tweet["source"])
try: text = "rt @%s: %s" % (quoted_tweet["retweeted_status"]["user"]["screen_name"], StripChars(quoted_tweet["retweeted_status"]["text"]))
except KeyError: text = "%s" % (StripChars(quoted_tweet["text"]))
if text[-1] in chars: text=text+"."
original_user = original_tweet["user"]["screen_name"]
original_text = StripChars(original_tweet["text"])
try: original_text = "rt @%s: %s" % (original_tweet["retweeted_status"]["user"]["screen_name"], StripChars(original_tweet["retweeted_status"]["text"]))
except KeyError: original_text = "%s" % (StripChars(original_tweet["text"]))
quoted_tweet["message"] = _(u"{0}. Quoted tweet from @{1}: {2}").format( quoted_tweet["text"], original_user, original_text)
quoted_tweet = tweets.clear_url(quoted_tweet)
return quoted_tweet
def compose_followers_list(tweet, db, relative_times=True):
if system == "Windows":
original_date = arrow.get(tweet["created_at"], "ddd MMM D H:m:s Z YYYY", locale="en")

View File

@@ -16,9 +16,11 @@ class trendsPanel(wx.Panel):
self.create_list()
self.tweet = wx.Button(self, -1, _(u"Tweet"))
self.tweetTrendBtn = wx.Button(self, -1, _(u"Tweet about this trend"))
self.search_topic = wx.Button(self, -1, _(u"Search topic"))
btnSizer = wx.BoxSizer(wx.HORIZONTAL)
btnSizer.Add(self.tweet, 0, wx.ALL, 5)
btnSizer.Add(self.tweetTrendBtn, 0, wx.ALL, 5)
btnSizer.Add(self.search_topic, 0, wx.ALL, 5)
self.sizer.Add(btnSizer, 0, wx.ALL, 5)
self.sizer.Add(self.list.list, 0, wx.ALL, 5)
self.SetSizer(self.sizer)

View File

@@ -123,6 +123,7 @@ class removeUserListDialog(listViewer):
self.SetTitle(_(u"Select a list to remove the user"))
self.createBtn.SetLabel(_(u"Remove"))
self.createBtn.SetDefault()
self.createBtn.SetId(wx.ID_OK)
self.editBtn.Disable()
self.view.Disable()
# self.subscriptors.Disable()

View File

@@ -87,6 +87,8 @@ class peoplePanelMenu(wx.Menu):
class trendsPanelMenu(wx.Menu):
def __init__(self):
super(trendsPanelMenu, self).__init__()
self.search_topic = wx.MenuItem(self, wx.NewId(), _(u"Search topic"))
self.AppendItem(self.search_topic)
self.tweetThisTrend = wx.MenuItem(self, wx.NewId(), _(u"&Tweet about this trend"))
self.AppendItem(self.tweetThisTrend)
self.view = wx.MenuItem(self, wx.NewId(), _(u"&Show item"))

View File

@@ -41,9 +41,7 @@ class mainFrame(wx.Frame):
self.dm = user.Append(wx.NewId(), _(u"Direct me&ssage"))
self.addToList = user.Append(wx.NewId(), _(u"&Add to list"))
self.removeFromList = user.Append(wx.NewId(), _(u"R&emove from list"))
self.removeFromList.Enable(False)
self.viewLists = user.Append(wx.NewId(), _(u"&View lists"))
self.viewLists.Enable(False)
self.details = user.Append(wx.NewId(), _(u"Show user &profile"))
self.favs = user.Append(wx.NewId(), _(u"V&iew favourites"))

View File

@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2015-08-04 13:37+Hora de verano central (M<>xico)\n"
"POT-Creation-Date: 2015-09-29 09:37+Hora de verano central (M<>xico)\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -51,7 +51,7 @@ msgstr ""
#: ../doc\strings.py:378 ../doc\strings.py:381 ../doc\strings.py:384
#: ../doc\strings.py:387 ../doc\strings.py:390 ../doc\strings.py:393
#: ../doc\strings.py:396 ../doc\strings.py:399 ../doc\strings.py:402
#: ../doc\strings.py:405 ../doc\strings.py:421 ../doc\strings.py:424
#: ../doc\strings.py:405 ../doc\strings.py:423 ../doc\strings.py:426
msgid ""
"\n"
msgstr ""
@@ -361,7 +361,7 @@ msgid "* Global settings: Opens a dialogue which lets you configure settings for
msgstr ""
#: ../doc\strings.py:166
msgid "* Quit: asks whether you want to exit the program. If the answer is yes, it closes the application. If you do not want to be asked for confirmation before exiting, uncheck the checkbox from the global settings dialogue box."
msgid "* Exit: asks whether you want to exit the program. If the answer is yes, it closes the application. If you do not want to be asked for confirmation before exiting, uncheck the checkbox from the global settings dialogue box."
msgstr ""
#: ../doc\strings.py:169
@@ -973,7 +973,7 @@ msgid "* English: [Bryner Villalobos](https://twitter.com/Bry_StarkCR) and [Bill
msgstr ""
#: ../doc\strings.py:408
msgid "* Arabic: Mohammed Al Shara."
msgid "* Arabic: [Mohammed Al Shara](https://twitter.com/mohammed0204)."
msgstr ""
#: ../doc\strings.py:409
@@ -989,11 +989,11 @@ msgid "* Basque: [Sukil Etxenike](https://twitter.com/sukil2011)."
msgstr ""
#: ../doc\strings.py:412
msgid "* Finnish: Jani Kinnunen."
msgid "* Finnish: [Jani Kinnunen](https://twitter.com/jani_kinnunen)."
msgstr ""
#: ../doc\strings.py:413
msgid "* French: R\303\251mi Ruiz."
msgid "* French: [R\303\251mi Ruiz](https://twitter.com/blindhelp38)."
msgstr ""
#: ../doc\strings.py:414
@@ -1001,38 +1001,46 @@ msgid "* Galician: [Alba Kinteiro](https://twitter.com/albasmileforeve)."
msgstr ""
#: ../doc\strings.py:415
msgid "* German: Steffen Schultz."
msgid "* German: [Steffen Schultz](https://twitter.com/schulle4u)."
msgstr ""
#: ../doc\strings.py:416
msgid "* Hungarian: Robert Osztolykan."
msgid "* Croatian: [Zvonimir Stane\304\215i\304\207](https://twitter.com/zvonimirek222)."
msgstr ""
#: ../doc\strings.py:417
msgid "* Polish: Pawel Masarczyk."
msgid "* Hungarian: Robert Osztolykan."
msgstr ""
#: ../doc\strings.py:418
msgid "* Portuguese: Odenilton J\303\272nior Santos."
msgid "* Italian: [Christian Leo Mameli](https://twitter.com/llajta2012)."
msgstr ""
#: ../doc\strings.py:419
msgid "* Russian: Alexander Jaszyn."
msgid "* Polish: Pawel Masarczyk."
msgstr ""
#: ../doc\strings.py:420
msgid "* Turkish: Burak."
msgid "* Portuguese: Odenilton J\303\272nior Santos."
msgstr ""
#: ../doc\strings.py:423
#: ../doc\strings.py:421
msgid "* Russian: [\320\220\320\273\320\265\320\272\321\201\320\260\320\275\320\264\321\200 \320\257\321\210\320\270\320\275](https://twitter.com/radovest)."
msgstr ""
#: ../doc\strings.py:422
msgid "* Turkish: [Burak Y\303\274ksek](https://twitter.com/burakyuksek)."
msgstr ""
#: ../doc\strings.py:425
msgid "Many thanks also to the people who worked on the documentation. Initially, [Manuel Cortez](https://twitter.com/manuelcortez00) did the documentation in Spanish, and translated to English by [Bryner Villalobos](https://twitter.com/Bry_StarkCR), [Robert Spangler](https://twitter.com/glasscity1837), [Sussan Rey](https://twitter.com/sussanrey17), [Anibal Hernandez](https://twitter.com/anibalmetal), and [Holly Scott-Gardner](https://twitter.com/holly1994). It was updated by [Sukil Etxenike](https://twitter.com/sukil2011), with some valuable corrections by [Brian Hartgen](https://twitter.com/brianhartgen) and [Bill Dengler](https://twitter.com/codeofdusk)."
msgstr ""
#: ../doc\strings.py:426
#: ../doc\strings.py:428
msgid "---"
msgstr ""
#: ../doc\strings.py:427
#: ../doc\strings.py:429
msgid "Copyright \302\251 2013-2015. Manuel Cort\303\251z"
msgstr ""

File diff suppressed because it is too large Load Diff