Compare commits

...

24 Commits
v0.85 ... v0.87

Author SHA1 Message Date
Jose Manuel Delicado
12f47b85af Updated version to 0.87 2016-10-04 22:06:24 +02:00
30c0a8249e Removed an unneeded file in the romanian translation 2016-10-04 14:52:32 -05:00
62e51ad14b Updated translations 2016-10-04 14:49:55 -05:00
d076ed1f56 Fixed an exception where mention to all checkbox was not being shown 2016-10-04 09:35:18 -05:00
9bbe325517 Mention all status (enabled/disabled) will be saved in config 2016-10-04 03:55:36 -05:00
6f5ef6d3f1 Fixed reply to single user in tweets with multiple users 2016-10-04 03:37:12 -05:00
378d277a98 Fixed some bugs related to extended tweets 2016-10-03 22:54:54 -05:00
Jose Manuel Delicado
2fdbcbc152 Updated translation templates 2016-10-02 21:17:14 +02:00
Jose Manuel Delicado
ef7ba0fe40 Updated Windows 10 keymap. The authorization message returned by the webbrowser when authorizing a new account now is translatable 2016-10-02 20:46:27 +02:00
Jose Manuel Delicado
3c5de10fe6 pa.c/appinfo.ini: updated format version to 3.4 2016-10-02 17:04:37 +02:00
Jose Manuel Delicado
230e0fa951 Removed unnecesary txt file from arabic translation folder 2016-10-02 16:47:54 +02:00
31192a5801 Updated locales 2016-10-02 09:40:45 -05:00
f1c974b4cf Reply to tweets will always be quotes 2016-10-02 09:11:02 -05:00
Jose Manuel Delicado
a9f9cb7969 Updated Windows dependencies. Updated readme 2016-10-02 15:20:14 +02:00
Jose Manuel Delicado
3a3393e03a Increased version number to 0.86 2016-10-02 15:14:32 +02:00
3a7c0c8f12 Added a fix for composing tweets in the new way twitter provides them 2016-10-02 07:54:23 -05:00
bd2460e42b Return false in twishort module if a long tweet has been deleted 2016-10-02 07:52:02 -05:00
Jose Manuel Delicado
2dd262cc83 TWBlue can now send long tweets directly to twishort. TWBlue server is nolonger used for this purpose 2016-10-02 14:35:54 +02:00
Jose Manuel Delicado
a2cf1ac8d0 Merge branch 'next-gen' of github.com:manuelcortez/twblue into next-gen 2016-10-02 10:38:40 +02:00
df345b5eec Initial support for extended tweets 2016-09-28 17:25:03 -05:00
Jose Manuel Delicado
b535c996d6 Merge branch 'next-gen' of github.com:manuelcortez/twblue into next-gen 2016-08-13 12:37:06 +02:00
b131f50d42 Updated windows 10 keymap 2016-08-12 23:40:56 -05:00
d729f86898 Merge pull request #87 from masonasons/next-gen
Adds functions to seek the playing audio forward or back 5 seconds.
2016-08-11 03:00:31 -05:00
Mason Armstrong
51ef047fb6 Adds functions to seek the playing audio forward or back 5 seconds. Adds function in audio_player to play/pause the audio but wouldn't work right when bound to the UI so not implemented. 2016-08-10 21:59:19 -05:00
61 changed files with 23375 additions and 36266 deletions

View File

@@ -73,7 +73,7 @@ setuptools installs a script, called easy_install. You can find it in the python
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 suds requests oauthlib requests-oauthlib requests-toolbelt pypubsub pygeocoder arrow==0.6 python-dateutil futures markdown microsofttranslator winpaths
easy_install -Z --upgrade six configobj goslate markdown future suds requests oauthlib requests-oauthlib requests-toolbelt pypubsub pygeocoder arrow==0.6 python-dateutil futures microsofttranslator winpaths
#### Other dependencies
@@ -92,7 +92,7 @@ This dependency has been built using pure basic 4.61. Its source can be found at
* [NSIS Unicode Portable,](http://portableapps.com/apps/development/nsis_portable) version 2.46.5 rev 3
* [PortableApps.com Launcher,](http://portableapps.com/apps/development/portableapps.com_launcher) version 2.2
* [PortableApps.com Installer,](http://portableapps.com/apps/development/portableapps.com_installer) version 3.3.2
* [PortableApps.com Installer,](http://portableapps.com/apps/development/portableapps.com_installer) version 3.4.2
Important! Install these 3 apps into the same folder, otherwise you won't be able to build the pa.c version. For example: D:\portableApps\NSISPortable, D:\PortableApps\PortableApps.com installer, ...

View File

@@ -2,7 +2,7 @@
name = 'TWBlue'
snapshot = False
if snapshot == False:
version = "0.85"
version = "0.87"
update_url = 'http://twblue.es/updates/twblue_ngen.json'
mirror_update_url = 'https://raw.githubusercontent.com/manuelcortez/TWBlue/next-gen/updates/stable.json'
else:

View File

@@ -5,16 +5,16 @@
msgid ""
msgstr ""
"Project-Id-Version: TW Blue documentation 0.46\n"
"POT-Creation-Date: 2016-08-05 08:33+Hora de verano central (México)\n"
"PO-Revision-Date: 2016-08-06 14:20-0600\n"
"Last-Translator: Наталья Хедлунд <natalia.hedlund@gmail.com>\n"
"POT-Creation-Date: 2016-10-02 21:05+Hora de verano romance\n"
"PO-Revision-Date: 2016-10-03 11:52+0400\n"
"Last-Translator: Valeria <luciana.lu3a@gmail.com>\n"
"Language-Team: \n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
"X-Generator: Poedit 1.6.11\n"
"X-Generator: Poedit 1.5.7\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Poedit-SourceCharset: UTF-8\n"
@@ -29,7 +29,7 @@ msgstr "Документация для TWBlue - 0.84"
#: ../doc\strings.py:4
msgid "## Table of contents"
msgstr "Содержание"
msgstr "## Содержание"
#: ../doc\strings.py:5
msgid "[TOC]"
@@ -60,9 +60,8 @@ msgid ""
"If you want to see what has changed from the previous version, [read the "
"list of updates here.](changes.html)"
msgstr ""
"Если вы хоти\n"
"те посмотреть какие изменения произошли с предыдущей версии, [читайте список "
"обновлений здесь.](changes.html) "
"Если вы хотите посмотреть какие изменения произошли с предыдущей версии, "
"[читайте список обновлений здесь.](changes.html) "
#: ../doc\strings.py:9
msgid "## Introduction"
@@ -364,14 +363,15 @@ msgstr ""
#: ../doc\strings.py:43
msgid "* Favourites: here you will see all the tweets you have favourited."
msgstr ""
"* Избранное: здесь вы увидите все твиты, которые вы добавили в Избранное."
"* Понравившиеся: здесь вы увидите все твиты, которые вы отметили как "
"понравившиеся."
#: ../doc\strings.py:44
msgid ""
"* Followers: when users follow you, you'll be able to see them on this "
"buffer, with some of their account details."
msgstr ""
"* Читающие: когда пользовательначнет вас читать, вы сможете увидеть его в "
"* Читающие: когда пользователь начнет вас читать, вы сможете увидеть его в "
"этом буфере, где также будет частично отображена информация о его учетной "
"записи."
@@ -426,8 +426,8 @@ msgid ""
"* User favourites: You can have the program create a buffer containing "
"tweets favourited by a particular user."
msgstr ""
"* Избранное пользователя: вы можете создать буфер, в котором будут "
"содержаться твиты, добавленные в Избранное определенным пользователем."
"* Понравившиеся ленты: вы можете создать буфер, в котором будут содержаться "
"твиты, отмеченные определённым пользователем как понравившиеся."
#: ../doc\strings.py:51
msgid ""
@@ -436,7 +436,7 @@ msgid ""
"updated every five minutes."
msgstr ""
"* Трендовые (популярные) темы: в трендовом буфере отображаются десять "
"терминов, наиболее часто используемых в определенном регионе. Регионо может "
"терминов, наиболее часто используемых в определенном регионе. Регионом может "
"быть как страна, так и город. Тренды обновляются каждые пять минут."
#: ../doc\strings.py:52
@@ -450,8 +450,8 @@ msgid ""
"Windows + G in the invisible interface to retrieve it."
msgstr ""
"Если в твите содержится ссылка, ее можно открыть, нажав клавишу Ввод в окне "
"программы, либо нажав сочетание клавиш КОнтрол + Виндовс + Ввод в невидимом "
"интерфейсе. Если присутстсвует аудио, его можно прослушать, нажав Контрол + "
"программы, либо нажав сочетание клавиш Контрол + Виндовс + Ввод в невидимом "
"интерфейсе. Если присутствует аудио, его можно прослушать, нажав Контрол + "
"Ввод или Контрол + Виндовс, + Альт, + Ввод соответственно. Если в твите "
"присутствует хэштег (метка) #audio, TWBlue проиграет звук, но аудио может "
"содержаться и в твитах, не имеющих этой метки. Наконец, если в твите "
@@ -478,7 +478,7 @@ msgid ""
msgstr ""
"В эти поля можно вводить имя пользователя Твиттера без знака Собачка (эт). "
"Их можно увидеть в диалоговых окнах отправки личных сообщений и меню "
"действий с пользователем.Об этих диалоговых окнах мы поговорим позже. "
"действий с пользователем. Об этих диалоговых окнах мы поговорим позже. "
"Первоначальное значение этих полей зависит от того, где они были открыты. "
"Такое поле ввода заполняется именем пользователя, написавшего твит, "
"находящийся в фокусе (если он открыт из главной ленты, ленты отправленных "
@@ -601,9 +601,9 @@ msgstr ""
"пользователю, нажав эту кнопку. Откроется диалог, подобный окну создания "
"твита, но с уже заполненным именем пользователя (например, @user), и вам "
"останется только написать свое сообщение. Если твит относится к нескольким "
"пользователям, можно нажать Шифт-Таб и активировать кнопку Упомянуть всех. "
"Если вы находитесь в списке друзей или читателей, эта кнопка будет "
"называться Упомянуть."
"пользователям, можно нажать Шифт-Таб и отметить флажок Упомянуть всех. Если "
"вы находитесь в списке друзей или читателей, этот флажок будет называться "
"Упомянуть."
#: ../doc\strings.py:68
msgid ""
@@ -615,10 +615,10 @@ msgid ""
msgstr ""
"* Личное сообщение: тоже, что и отправка твита, но это приватное сообщение, "
"которое может быть просмотрено только тем пользователем, которому вы его "
"отправляете. Чтобы посмотреть получателя, нажмите Шифт-таб. Если в твите, "
"который вы читаете, упомянуто несколько пользователей,стрелками вверх и вниз "
"можно выбрать получателя сообщения, или ввести имя вручную, без знака "
"собаки."
"отправляете. Чтобы посмотреть получателя, нажмите Шифт-таб. Если в "
"сообщении, которое вы читаете, упомянуто несколько пользователей, стрелками "
"вверх и вниз можно выбрать получателя сообщения, или ввести имя вручную, без "
"знака собаки."
#: ../doc\strings.py:69
msgid ""
@@ -631,10 +631,10 @@ msgid ""
msgstr ""
"Учтите, что кнопки будут отображаться в зависимости от того, какие действия "
"доступны в просматриваемом списке. Например, в главной ленте, в упоминаниях, "
"Отправленных, избраном и лентах пользователей вы увидите четыре кнопки, в то "
"время как в списке личных сообщений будут отображаться только кнопки Личное "
"сообщение и Твит, а в списках друзей и читающих будут доступны кнопки Личное "
"сообщение,Твит и Упомянуть."
"Отправленных, избранном и лентах пользователей вы увидите четыре кнопки, в "
"то время как в списке личных сообщений будут отображаться только кнопки "
"Личное сообщение и Твит, а в списках друзей и читающих будут доступны кнопки "
"Личное сообщение,Твит и Упомянуть."
#: ../doc\strings.py:70
msgid "#### Menus"
@@ -756,14 +756,15 @@ msgstr ""
#: ../doc\strings.py:84
msgid "* Add to favourites: marks the tweet you're viewing as a favourite."
msgstr "* Добавить в Избранное:добавляет просматриваемый твит в Избранное."
msgstr "* Нравится: отмечает просматриваемый вами твит как понравившийся."
#: ../doc\strings.py:85
msgid ""
"* Remove from favourites: removes the tweet from your favourites, but not "
"from Twitter."
msgstr ""
"* Удалить из Избранного: удаляет твит из Избранного, но не из Твиттера."
"* Не нравится: удаляет твит из списка понравившихся вам твитов, но не из "
"твиттера."
#: ../doc\strings.py:86
msgid ""
@@ -779,7 +780,7 @@ msgstr ""
"личное сообщение, имя друга или читателя, находящееся в фокусе. Текст можно "
"читать клавишами стрелок. Этот диалог похож на окно отправки твита, но без "
"возможности отправки, прикрепления вложений и автозаполнения. Однако, здесь "
"указано число ретвитов и добавлений в Избранное. Если вы находитесь в списке "
"указано число ретвитов и отметок Нравится. Если вы находитесь в списке "
"читателей или друзей, будут доступны только поле для чтения информации, "
"находящейся в фокусе, и кнопка Закрыть."
@@ -861,7 +862,7 @@ msgid ""
"both will be able to exchange direct messages. The muted user is not "
"informed of this action."
msgstr ""
" * Выключить: TWBlue не будет отображать в вашей главной ленте твиты "
" * Отключить: TWBlue не будет отображать в вашей главной ленте твиты "
"пользователя; вы также не будете видеть упоминаний этого человека. Но вы "
"сможете обмениваться личными сообщениями. О том, что пользователь отключен, "
"он уведомлен не будет."
@@ -946,7 +947,7 @@ msgstr ""
msgid ""
"* Show user profile: opens a dialogue with the profile of the specified user."
msgstr ""
"* Показать профиль пользователя: открываетдиалоговое окно с профилем "
"* Показать профиль пользователя: открывает диалоговое окно с профилем "
"указанного пользователя."
#: ../doc\strings.py:106
@@ -954,8 +955,8 @@ msgid ""
"* View favourites: Opens a buffer where you can see the tweets which have "
"been favourited by a particular user."
msgstr ""
"* Просмотреть избранное: открывает буфер, в котором можно увидеть твиты, "
"добавленные указанным пользователем в избранное."
"* Просмотреть Понравившиеся: открывает буфер, в котором можно увидеть твиты, "
"отмеченные указанным пользователем как понравившиеся."
#: ../doc\strings.py:107
msgid "##### Buffer menu"
@@ -971,7 +972,7 @@ msgid ""
"the \"OK\" button has been activated within the dialogue box. Remember this "
"kind of buffer will be updated every five minutes."
msgstr ""
"* Новый буфер для трендов: открывает буфер ля самых популярных тем в мире, "
"* Новый буфер для трендов: открывает буфер для самых популярных тем в мире, "
"стране или городе. Вы сможете выбрать из списка показывать ли популярные "
"темы по стране, городу или со всего мира (эта опция находится в списке "
"Город), а затем выбрать нужный элемент. Буфер для трендов будет создан как "
@@ -983,7 +984,7 @@ msgid ""
"* Load previous items: This allows more items to be loaded for the specified "
"buffer."
msgstr ""
"* Загрузить предыдущие твиты: позволяет загрузить больше элементов в "
"* Загрузить предыдущие элементы: позволяет загрузить больше элементов в "
"указанный буфер."
#: ../doc\strings.py:110
@@ -991,7 +992,7 @@ msgid ""
"* Mute: Mutes notifications of a particular buffer so you will not hear when "
"new tweets arrive."
msgstr ""
"* Выключить звук: отключает уведомления для конкретного буфера, так что вы "
"* Отключить: отключает звук и уведомления для конкретного буфера, так что вы "
"не будете слышать, когда приходят новые твиты."
#: ../doc\strings.py:111
@@ -1001,8 +1002,8 @@ msgid ""
"could get rather chatty if there are a lot of incoming tweets."
msgstr ""
"* Авточтение: когда включено, программа экранного доступа или голос SAPI 5 "
"(если активен) будет читать текст входящих твитов. Обратите внимание, что "
"что, если приходит много твитов, программа может слишком много болтать."
"(если активен) будет читать текст входящих твитов. Обратите внимание, что, "
"если приходит много твитов, программа может слишком много болтать."
#: ../doc\strings.py:112
msgid "* Clear buffer: Deletes all items from the buffer."
@@ -1070,7 +1071,7 @@ msgid ""
"find all relevant information and downloads for TWBlue and become a part of "
"the community."
msgstr ""
"* Сайт TWBlue: посетить нашу [домашнюю страницу] (http://twblue.es), где "
"* Сайт TWBlue: посетить нашу [домашнюю страницу](http://twblue.es) , где "
"можно найти всю информацию о программе и загрузить TWBlue, а также стать "
"членом сообщества."
@@ -1097,12 +1098,12 @@ msgstr ""
"Невидимый интерфейс, как следует из названия, не имеет графического окна и "
"работает напрямую с программами экранного доступа, такими как JAWS для "
"Windows, NVDA и System Access. По умолчанию этот интерфейс отключен, но его "
"можно включить нажав Контрл + M. Ор работает подобно TheQube и Chicken "
"Nugget. Горячие клаиши также похожи на те, что используются в этих клиентах. "
"Кроме того, в программе имеется возможность редактирования клавиатурных "
"команд, которую можно выбрать в Основных настройках. По умолчанию, с "
"горячими клавишами этого интерфейса невозможно работать в графическом окне, "
"но этот параметр можно изменить в Основных настройках."
"можно включить нажав Контрол + M. Он работает подобно TheQube и Chicken "
"Nugget. Горячие клавиши также похожи на те, что используются в этих "
"клиентах. Кроме того, в программе имеется возможность редактирования "
лавиатурных команд, которую можно выбрать в Основных настройках. По "
"умолчанию, с горячими клавишами этого интерфейса невозможно работать в "
"графическом окне, но этот параметр можно изменить в Основных настройках."
#: ../doc\strings.py:124
msgid ""
@@ -1127,55 +1128,55 @@ msgstr "* Ввод: открыть ссылку."
#: ../doc\strings.py:128
msgid "* Control + Enter: Play audio."
msgstr "* КОнтрл + Ввод: воспроизвести аудио."
msgstr "* Контрол + Ввод: воспроизвести аудио."
#: ../doc\strings.py:129
msgid "* Control + M: Hide the GUI."
msgstr "* Контрл + M: скрыть графический интерфейс."
msgstr "* Контрол + M: скрыть графический интерфейс."
#: ../doc\strings.py:130
msgid "* Control + N: Compose a new tweet."
msgstr "* Контрл + N: создать новый твит."
msgstr "* Контрол + N: создать новый твит."
#: ../doc\strings.py:131
msgid "* Control + R: Reply / mention."
msgstr "* Контрл + R: ответить / упомянуть."
msgstr "* Контрол + R: ответить / упомянуть."
#: ../doc\strings.py:132
msgid "* Control + Shift + R: Retweet."
msgstr "* Контрл + Шифт + R: ретвитнуть."
msgstr "* Контрол + Шифт + R: ретвитнуть."
#: ../doc\strings.py:133
msgid "* Control + D: Send a direct message."
msgstr "* КОнтрл + D: отправить личное сообщение."
msgstr "* Контрол + D: отправить личное сообщение."
#: ../doc\strings.py:134
msgid "* control + F: Add tweet to favourites."
msgstr "* КОнтрл + F: добавить твит в Избранное."
msgstr "* Контрол + F: отметить твит как понравившийся."
#: ../doc\strings.py:135
msgid "* Control + Shift + F: Remove a tweet from favourites."
msgstr "* Контрл + Шифт + F: удалить твит из Избранного."
msgstr "* Контрол + Шифт + F: удалить твит из списка понравившихся."
#: ../doc\strings.py:136
msgid "* Control + S: Open the user actions dialogue."
msgstr "* Контрл + S: открыть диалог действий с пользователем."
msgstr "* Контрол + S: открыть диалог действий с пользователем."
#: ../doc\strings.py:137
msgid "* Control + Shift + V: Show tweet."
msgstr "* Контрл + Шифт + V: показать твит."
msgstr "* Контрол + Шифт + V: показать твит."
#: ../doc\strings.py:138
msgid "* Control + Q: Quit this program."
msgstr "Контрл + Q: закрыть программу."
msgstr "* Контрол + Q: закрыть программу."
#: ../doc\strings.py:139
msgid "* Control + I: Open user timeline."
msgstr "Контрл + I: открыть ленту пользователя."
msgstr "* Контрол + I: открыть ленту пользователя."
#: ../doc\strings.py:140
msgid "* Control + Shift + i: Destroy buffer."
msgstr "* КОнтрл + Шифт I: закрыть и удалить буфер."
msgstr "* Контрол + Шифт+ I: закрыть и удалить буфер."
#: ../doc\strings.py:141
msgid "* F5: Increase volume by 5%."
@@ -1187,15 +1188,15 @@ msgstr "* F6: уменьшить громкость на 5%."
#: ../doc\strings.py:143
msgid "* Control + P: Edit your profile."
msgstr "* Контрл + P: редактировать свой профиль."
msgstr "* Контрол + P: редактировать свой профиль."
#: ../doc\strings.py:144
msgid "* Control + Delete: Delete a tweet or direct message."
msgstr "* Контрл + Делит: удалить твит или личное сообщение."
msgstr "* Контрол + Дэлит: удалить твит или личное сообщение."
#: ../doc\strings.py:145
msgid "* Control + Shift + Delete: Empty the current buffer."
msgstr "* КОнтрл + Шифт + Делит: очистить текущий буфер."
msgstr "* Контрол + Шифт + Дэлит: очистить текущий буфер."
#: ../doc\strings.py:146
msgid "### Shortcuts of the invisible interface (default keymap)"
@@ -1205,125 +1206,127 @@ msgstr "### Горячие клавиши для невидимого интер
msgid ""
"* Control + Windows + Up Arrow: moves to the previous item in the buffer."
msgstr ""
"* Контрл + Windows + Стрелка вверх: перемещает к предыдущему элементу в "
"* Контрол + Windows + Стрелка вверх: перемещает к предыдущему элементу в "
"буфере."
#: ../doc\strings.py:148
msgid "* Control + Windows + Down Arrow: moves to the next item in the buffer."
msgstr ""
"* Контрл + Windows + Стрелка вниз: перемещает к следующему элементу в буфере."
"* Контрол + Windows + Стрелка вниз: перемещает к следующему элементу в "
"буфере."
#: ../doc\strings.py:149
msgid "* Control + Windows + Left Arrow: Move to the previous buffer."
msgstr "* Контрл + Windows + Стрелка влево: перейти к предыдущему буферу."
msgstr "* Контрол + Windows + Стрелка влево: перейти к предыдущему буферу."
#: ../doc\strings.py:150
msgid "* Control + Windows + Right Arrow: Move to the next buffer."
msgstr "* Контрл + Windows + Стрелка вправо: перейти к следующему буферу."
msgstr "* Контрол + Windows + Стрелка вправо: перейти к следующему буферу."
#: ../doc\strings.py:151
msgid "* Control + Windows + Shift + Left: Focus the previous session."
msgstr "* Контрл + Windows + Шифт + Влево: перейти к предыдущей сессии."
msgstr "* Контрол + Windows + Шифт + Влево: перейти к предыдущей сессии."
#: ../doc\strings.py:152
msgid "* Control + Windows + Shift + Right: Focus the next session."
msgstr "* Контрл + Windows + Шифт + Вправо: перейти к следующей сессии."
msgstr "* Контрол + Windows + Шифт + Вправо: перейти к следующей сессии."
#: ../doc\strings.py:153
msgid "* Control + Windows + C: View conversation."
msgstr "* Контрл + Windows + C: просмотреть беседу."
msgstr "* Контрол + Windows + C: просмотреть беседу."
#: ../doc\strings.py:154
msgid "* Control + Windows + Enter: Open URL."
msgstr "КОнтрл + Windows + Ввод: Открыть ссылку."
msgstr "* Контрол + Windows + Ввод: Открыть ссылку."
#: ../doc\strings.py:155
msgid "* Control + Windows + ALT + Enter: Play audio."
msgstr "* Контрл + Windows + Альт + Ввод: воспроизвести аудио."
msgstr "* Контрол + Windows + Альт + Ввод: воспроизвести аудио."
#: ../doc\strings.py:156
msgid "* Control + Windows + M: Show or hide the GUI."
msgstr "* КОнтрл + Windows + M: показать или скрыть графический интерфейс."
msgstr "* Контрол + Windows + M: показать или скрыть графический интерфейс."
#: ../doc\strings.py:157
msgid "* Control + Windows + N: New tweet."
msgstr "* КОнтрл + Windows + N: новый твит."
msgstr "* Контрол + Windows + N: новый твит."
#: ../doc\strings.py:158
msgid "* Control + Windows + R: Reply / Mention."
msgstr "* Контрл + Windows + R: ответить / упомянуть."
msgstr "* Контрол + Windows + R: ответить / упомянуть."
#: ../doc\strings.py:159
msgid "* Control + Windows + Shift + R: Retweet."
msgstr "* КОнтрл + Windows + Шифт + R: ретвитнуть."
msgstr "* Контрол + Windows + Шифт + R: ретвитнуть."
#: ../doc\strings.py:160
msgid "* Control + Windows + D: Send direct message."
msgstr "* КОнтрл + Windows + D: отправить личное сообщение."
msgstr "* Контрол + Windows + D: отправить личное сообщение."
#: ../doc\strings.py:161
msgid "* Windows+ Alt + F: Like a tweet."
msgstr "* Windows+ Альт + F: поставить твиту отметку Нравится."
msgstr "* Windows+ Альт + F: отметить твит как понравившийся."
#: ../doc\strings.py:162
msgid "* Alt + Windows + Shift + F: Remove from likes."
msgstr "* Альт + Windows + Шифт + F: удалить из понравившихся."
msgstr "* Альт + Windows + Шифт + F: удалить из списка понравившихся."
#: ../doc\strings.py:163
msgid "* Control + Windows + S: Open the user actions dialogue."
msgstr "* Контрл + Windows + S: открыть диалог действий с пользователем."
msgstr "* Контрол + Windows + S: открыть диалог действий с пользователем."
#: ../doc\strings.py:164
msgid "* Control + Windows + Alt + N: See user details."
msgstr "* КОнтрл + Windows + Альт + N: посмотреть информацию о пользователе."
msgstr "* Контрол + Windows + Альт + N: посмотреть информацию о пользователе."
#: ../doc\strings.py:165
msgid "* Control + Windows + V: Show tweet."
msgstr "* КОнтрл + Windows + V: показать твит."
msgstr "* Контрол + Windows + V: показать твит."
#: ../doc\strings.py:166
msgid "* Control + Windows + F4: Quit TWBlue."
msgstr "* Контрл + Windows + F4: закрыть TWBlue."
msgstr "* Контрол + Windows + F4: закрыть TWBlue."
#: ../doc\strings.py:167
msgid "* Control + Windows + I: Open user timeline."
msgstr "* Контрл + Windows + I: открыть ленту пользователя."
msgstr "* Контрол + Windows + I: открыть ленту пользователя."
#: ../doc\strings.py:168
msgid "* Control + Windows + Shift + I: Destroy buffer."
msgstr "* КОнтрл + Windows + Шифт + I: закрыть и удалить буфер."
msgstr "* Контрол + Windows + Шифт + I: закрыть и удалить буфер."
#: ../doc\strings.py:169
msgid "* Control + Windows + Alt + Up: Increase volume by 5%."
msgstr "* КОнтрл + Windows + Альт + вверх: увеличить громкость на 5%."
msgstr "* Контрол + Windows + Альт + вверх: увеличить громкость на 5%."
#: ../doc\strings.py:170
msgid "* Control + Windows + Alt + Down: Decrease volume by 5%."
msgstr "* Контрл + Windows + Альт + Вниз: уменьшить громкость на 5%."
msgstr "* Контрол + Windows + Альт + Вниз: уменьшить громкость на 5%."
#: ../doc\strings.py:171
msgid ""
"* Control + Windows + Home: Jump to the first element of the current buffer."
msgstr "* Контрл + Windows + Хоум: перейти к первому элементу текущего буфера."
msgstr ""
"* Контрол + Windows + Хоум: перейти к первому элементу текущего буфера."
#: ../doc\strings.py:172
msgid ""
"* Control + Windows + End: Jump to the last element of the current buffer."
msgstr ""
"* Контрл + Windows + Энд: перейти к последнему элементу текущего буфера."
"* Контрол + Windows + Энд: перейти к последнему элементу текущего буфера."
#: ../doc\strings.py:173
msgid ""
"* Control + Windows + PageUp: Jump 20 elements up in the current buffer."
msgstr ""
"* КОнтрл + Windows + Страница вверх: перейти на 20элементов вверх в текущем "
"* Контрол + Windows + Страница вверх: перейти на 20элементов вверх в текущем "
"буфере."
#: ../doc\strings.py:174
msgid ""
"* Control + Windows + PageDown: Jump 20 elements down in the current buffer."
msgstr ""
"* Контрл + Windows + Страница вниз: перейти на 20 элементов вниз в текущем "
"* Контрол + Windows + Страница вниз: перейти на 20 элементов вниз в текущем "
"буфере."
#: ../doc\strings.py:175
@@ -1332,57 +1335,57 @@ msgstr "* Windows + Альт + P: редактировать профиль."
#: ../doc\strings.py:176
msgid "* Control + Windows + Delete: Delete a tweet or direct message."
msgstr "* КОнтрл + Windows + Делит: удалить твит или личное сообщение."
msgstr "* Контрол + Windows + Дэлит: удалить твит или личное сообщение."
#: ../doc\strings.py:177
msgid "* Control + Windows + Shift + Delete: Empty the current buffer."
msgstr "* Control + Windows + Шифт + Делит: очистить текущий буфер."
msgstr "* Контрол + Windows + Шифт + Дэлит: очистить текущий буфер."
#: ../doc\strings.py:178
msgid "* Control + Windows + Space: Repeat last item."
msgstr "* Контрл + Windows + Пробел: повторить последний элемент."
msgstr "* Контрол + Windows + Пробел: повторить последний элемент."
#: ../doc\strings.py:179
msgid "* Control + Windows + Shift + C: Copy to clipboard."
msgstr "* Контрл + Windows + Шифт + C: скопировать в буфер обмена."
msgstr "* Контрол + Windows + Шифт + C: скопировать в буфер обмена."
#: ../doc\strings.py:180
msgid "* Control + Windows+ A: Add user to list."
msgstr "* Контрл + Windows+ A: добавить пользователя в список."
msgstr "* Контрол + Windows+ A: добавить пользователя в список."
#: ../doc\strings.py:181
msgid "* Control + Windows + Shift + A: Remove user from list."
msgstr "* Контрл + Windows + Шифт + A:удалить пользователя из списка. "
msgstr "* Контрол + Windows + Шифт + A: удалить пользователя из списка. "
#: ../doc\strings.py:182
msgid "* Control + Windows + Shift + M: Mute / unmute the current buffer."
msgstr ""
"* Контрл + Windows + Шифт + M: отключить / включить звуки для текущего "
"* Контрол + Windows + Шифт + M: отключить / включить звуки для текущего "
"буфера."
#: ../doc\strings.py:183
msgid "* Windows + Alt + M: Mute / unmute the current session."
msgstr "* Windows + Альт + M: отключить / включить звуки для текущей сессии."
msgstr "* Windows + Альт + M: Отключить / включить звуки для текущей сессии."
#: ../doc\strings.py:184
msgid ""
"* Control + Windows + E: Toggle the automatic reading of incoming tweets in "
"the current buffer."
msgstr ""
"* Контрл + Windows + E: переключить авточтение входящих твитов в текущем "
"* Контрол + Windows + E: переключить авточтение входящих твитов в текущем "
"буфере."
#: ../doc\strings.py:185
msgid "* Control + Windows + -: Search on Twitter."
msgstr "* Контрл + Windows + -: искать в Твиттере."
msgstr "* Контрол + Windows + -: искать в Твиттере."
#: ../doc\strings.py:186
msgid "* Control + Windows + K: Show the keystroke editor."
msgstr "* Control + Windows + K: показать редактор горячих клавиш."
msgstr "* Контрол + Windows + K: показать редактор горячих клавиш."
#: ../doc\strings.py:187
msgid "* Control + Windows + L: Show lists for a specified user."
msgstr "* КОнтрл + Windows + L: показать списки указанного пользователя."
msgstr "* Контрол + Windows + L: показать списки указанного пользователя."
#: ../doc\strings.py:188
msgid "* Windows + Alt + PageUp: Load previous items for the current buffer."
@@ -1392,22 +1395,22 @@ msgstr ""
#: ../doc\strings.py:189
msgid "* Control + Windows + G: Get geolocation."
msgstr "* КОнтрл + Windows + G: получить местоположение."
msgstr "* Контрол + Windows + G: получить местоположение."
#: ../doc\strings.py:190
msgid ""
"* Control + Windows + Shift + G: Display the tweet's geolocation in a "
"dialogue."
msgstr ""
"* КОнтрл + Windows + Шифт + G: показать местоположение для твита в диалоге."
"* Контрол + Windows + Шифт + G: показать местоположение для твита в диалоге."
#: ../doc\strings.py:191
msgid "* Control + Windows + T: Create a trending topics' buffer."
msgstr "* Контрл + Windows + T: создать буфер для трендов."
msgstr "* Контрол + Windows + T: создать буфер для трендов."
#: ../doc\strings.py:192
msgid "* Control + Windows + {: Find a string in the current buffer."
msgstr "* КОнтрл + Windows + {: найти фразу в текущем буфере."
msgstr "* Контрол + Windows + {: найти фразу в текущем буфере."
#: ../doc\strings.py:193
msgid "## Configuration"
@@ -1571,7 +1574,7 @@ msgid ""
msgstr ""
"* Язык: здесь можно выбрать язык программы. В настоящий момент "
"поддерживаются Арабский,Каталанский, немецкий, английский,испанский, "
"баскский, финский, французский, Галицкий, хорватский, венгерский, "
"баскский, финский, французский, Галисийский, хорватский, венгерский, "
"итальянский, польский, португальский, русский и турецкий."
#: ../doc\strings.py:216
@@ -1598,8 +1601,8 @@ msgid ""
"\"ready\"."
msgstr ""
"* Произносить приветствие при запуске TWBlue: то же, что и предыдущий "
"параметр, но определяетбудет ли программа экранного доступа говорить \"готово"
"\"."
"параметр, но определяет будет ли программа экранного доступа говорить "
"\"готово\"."
#: ../doc\strings.py:219
msgid ""
@@ -1692,7 +1695,7 @@ msgstr ""
#: ../doc\strings.py:229
msgid "## Contact"
msgstr "## КОнтакт"
msgstr "## Контакт"
#: ../doc\strings.py:230
msgid ""
@@ -1704,7 +1707,7 @@ msgid ""
"es)"
msgstr ""
"Если, после прочтения этого документа, у вас все еще остались вопросы, если "
"вы хотите каким-либо образом посотрудничать с проектом, или, если вы просто "
"вы хотите каким-либо образом сотрудничать с проектом, или, если вы просто "
"хотите связаться с разработчиком этого приложения, начните читать в Твиттере "
"пользователя [@tw\\_blue2](https://twitter.com/tw_blue2) или "
"[@manuelcortez00.](https://twitter.com/manuelcortez00). Вы также можете "
@@ -1720,8 +1723,8 @@ msgid ""
"manuelcortez00) and [José Manuel Delicado](https://twitter.com/jmdaweb). "
"It's supported and sponsored by [Technow S. L.](https://twitter.com/technow)"
msgstr ""
"Разрабатывают и поддерживают TWBlue [Мануэль Кортез](https://twitter.com/"
"manuelcortez00) и [Хосе Мануэль Деликадо](https://twitter.com/jmdaweb). "
"Разрабатывают и поддерживают TWBlue [Мануэль Кортес](https://twitter.com/"
"manuelcortez00) и [Хосе Мануэль Деликадо](https://twitter.com/jmdaweb). "
"Поддержку и спонсорскую помощь оказывает [Technow S. L.](https://twitter.com/"
"technow)"
@@ -1743,7 +1746,7 @@ msgstr "* Арабский : [Mohammed Al Shara](https://twitter.com/mohammed020
#: ../doc\strings.py:236
msgid "* Catalan: [Francisco Torres](https://twitter.com/ftgalleg)"
msgstr "* Галицийский: [Francisco Torres](https://twitter.com/ftgalleg)"
msgstr "* Каталанский: [Francisco Torres](https://twitter.com/ftgalleg)"
#: ../doc\strings.py:237
msgid "* Spanish: [Manuel Cortéz](https://twitter.com/manuelcortez00)."
@@ -1763,7 +1766,7 @@ msgstr "* Французский: [Rémi Ruiz](https://twitter.com/blindhelp38).
#: ../doc\strings.py:241
msgid "* Galician: [Juan Buño](https://twitter.com/Quetzatl_)."
msgstr "* Галицийский: [Juan Buño](https://twitter.com/Quetzatl_)."
msgstr "* Галисийский: [Juan Buño](https://twitter.com/Quetzatl_)."
#: ../doc\strings.py:242
msgid "* German: [Steffen Schultz](https://twitter.com/schulle4u)."
@@ -1826,7 +1829,7 @@ msgid ""
"twitter.com/brianhartgen) and [Bill Dengler](https://twitter.com/codeofdusk)."
msgstr ""
"Также огромная благодарность всем, кто работал над документацией. Изначально "
"[Мануэль Кортез](https://twitter.com/manuelcortez00) создал документацию на "
"[Мануэль Кортес](https://twitter.com/manuelcortez00) создал документацию на "
"испанском языке, затем она была переведена на английский пользователями "
"[Bryner Villalobos](https://twitter.com/Bry_StarkCR), [Robert Spangler]"
"(https://twitter.com/glasscity1837), [Sussan Rey](https://twitter.com/"

View File

@@ -1,6 +1,6 @@
[Format]
Type=PortableApps.comFormat
Version=3.3
Version=3.4
[Details]
Name=tw blue portable
@@ -20,8 +20,8 @@ CommercialUse=true
EULAVersion=2
[Version]
PackageVersion=0.85.0.0
DisplayVersion=0.85
PackageVersion=0.87.0.0
DisplayVersion=0.87
[Control]
Icons=1

View File

@@ -13,9 +13,9 @@ SetCompressor /solid lzma
SetDatablockOptimize on
VIAddVersionKey ProductName "TWBlue"
VIAddVersionKey LegalCopyright "Copyright 2016 Manuel Cortéz."
VIAddVersionKey ProductVersion "0.85"
VIAddVersionKey FileVersion "0.85"
VIProductVersion "0.85.0.0"
VIAddVersionKey ProductVersion "0.87"
VIAddVersionKey FileVersion "0.87"
VIProductVersion "0.87.0.0"
!insertmacro MUI_PAGE_WELCOME
!define MUI_LICENSEPAGE_RADIOBUTTONS
!insertmacro MUI_PAGE_LICENSE "license.txt"
@@ -69,10 +69,10 @@ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "D
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "UninstallString" '"$INSTDIR\uninstall.exe"'
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall" "InstallLocation" $INSTDIR
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall" "Publisher" "Manuel Cortéz"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "DisplayVersion" "0.85"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "DisplayVersion" "0.87"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "URLInfoAbout" "http://twblue.es"
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "VersionMajor" 0
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "VersionMinor" 85
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "VersionMinor" 87
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "NoModify" 1
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "NoRepair" 1
SectionEnd

View File

@@ -39,3 +39,4 @@ spelling_language = string(default="")
save_followers_in_autocompletion_db = boolean(default=False)
save_friends_in_autocompletion_db = boolean(default=False)
twishort_enabled = boolean(default=False)
mention_all = boolean(default=True)

View File

@@ -2,7 +2,7 @@
name = 'TWBlue'
snapshot = False
if snapshot == False:
version = "0.85"
version = "0.87"
update_url = 'http://twblue.es/updates/twblue_ngen.json'
mirror_update_url = 'https://raw.githubusercontent.com/manuelcortez/TWBlue/next-gen/updates/stable.json'
else:

View File

@@ -224,7 +224,7 @@ class emptyPanel(bufferController):
self.needs_init = True
class baseBufferController(bufferController):
def __init__(self, parent, function, name, sessionObject, account, sound=None, bufferType=None, *args, **kwargs):
def __init__(self, parent, function, name, sessionObject, account, sound=None, bufferType=None, compose_func="compose_tweet", *args, **kwargs):
super(baseBufferController, self).__init__(parent, function, *args, **kwargs)
log.debug("Initializing buffer %s, account %s" % (name, account,))
if bufferType != None:
@@ -235,7 +235,7 @@ class baseBufferController(bufferController):
self.name = name
self.type = self.buffer.type
self.session = sessionObject
self.compose_function = compose.compose_tweet
self.compose_function = getattr(compose, compose_func)
log.debug("Compose_function: %s" % (self.compose_function,))
self.account = account
self.buffer.account = account
@@ -258,10 +258,10 @@ class baseBufferController(bufferController):
if tweet.has_key("message"):
message = tweet["message"]
try:
tweet = self.session.twitter.twitter.show_status(id=tweet_id, include_ext_alt_text=True)
urls = utils.find_urls_in_text(tweet["text"])
tweet = self.session.twitter.twitter.show_status(id=tweet_id, include_ext_alt_text=True, tweet_mode="extended")
urls = utils.find_urls_in_text(tweet["full_text"])
for url in range(0, len(urls)):
try: tweet["text"] = tweet["text"].replace(urls[url], tweet["entities"]["urls"][url]["expanded_url"])
try: tweet["full_text"] = tweet["full_text"].replace(urls[url], tweet["entities"]["urls"][url]["expanded_url"])
except IndexError: pass
except TwythonError as e:
utils.twitter_error(e)
@@ -272,10 +272,10 @@ class baseBufferController(bufferController):
while l != False:
tweetsList.append(tweet)
try:
tweet = self.session.twitter.twitter.show_status(id=l, include_ext_alt_text=True)
urls = utils.find_urls_in_text(tweet["text"])
tweet = self.session.twitter.twitter.show_status(id=l, include_ext_alt_text=True, tweet_mode="extended")
urls = utils.find_urls_in_text(tweet["full_text"])
for url in range(0, len(urls)):
try: tweet["text"] = tweet["text"].replace(urls[url], tweet["entities"]["urls"][url]["expanded_url"])
try: tweet["full_text"] = tweet["full_text"].replace(urls[url], tweet["entities"]["urls"][url]["expanded_url"])
except IndexError: pass
except TwythonError as e:
utils.twitter_error(e)
@@ -479,20 +479,23 @@ class baseBufferController(bufferController):
tweet = self.get_right_tweet()
screen_name = tweet["user"]["screen_name"]
id = tweet["id"]
users = utils.get_all_mentioned(tweet, self.session.db)
message = messages.reply(self.session, _(u"Reply"), _(u"Reply to %s") % (screen_name,), "@%s " % (screen_name,), twishort_enabled=self.session.settings["mysc"]["twishort_enabled"], users=users)
users = utils.get_all_mentioned(tweet, self.session.db)
message = messages.reply(self.session, _(u"Reply"), _(u"Reply to %s") % (screen_name,), "", twishort_enabled=self.session.settings["mysc"]["twishort_enabled"], users=users)
if message.message.get_response() == widgetUtils.OK:
self.session.settings["mysc"]["twishort_enabled"] = message.message.long_tweet.GetValue()
self.session.settings["mysc"]["mention_all"] = message.message.mentionAll.GetValue()
text = message.message.get_text()
if message.message.mentionAll.GetValue() == False:
text = u"@{0} {1}".format(screen_name, text)
if len(text) > 140 and message.message.get("long_tweet") == True:
if message.image == None:
text = twishort.create_tweet(self.session.settings["twitter"]["user_key"], self.session.settings["twitter"]["user_secret"], text)
else:
text = twishort.create_tweet(self.session.settings["twitter"]["user_key"], self.session.settings["twitter"]["user_secret"], text, 1)
if message.image == None:
call_threaded(self.session.api_call, call_name="update_status", _sound="reply_send.ogg", in_reply_to_status_id=id, status=text)
call_threaded(self.session.api_call, call_name="update_status", _sound="reply_send.ogg", in_reply_to_status_id=id, status=text, auto_populate_reply_metadata=message.message.mentionAll.GetValue())
else:
call_threaded(self.session.api_call, call_name="update_status_with_media", _sound="reply_send.ogg", in_reply_to_status_id=id, status=text, media=message.file)
call_threaded(self.session.api_call, call_name="update_status_with_media", _sound="reply_send.ogg", in_reply_to_status_id=id, status=text, media=message.file, auto_populate_reply_metadata=message.message.mentionAll.GetValue())
if hasattr(message.message, "destroy"): message.message.destroy()
@_tweets_exist
@@ -534,20 +537,16 @@ class baseBufferController(bufferController):
self._retweet_with_comment(tweet, id)
def _retweet_with_comment(self, tweet, id, comment=''):
retweet = messages.tweet(self.session, _(u"Retweet"), _(u"Add your comment to the tweet"), u"“@%s: %s" % (tweet["user"]["screen_name"], tweet["text"]), max=116, messageType="retweet", twishort_enabled=self.session.settings["mysc"]["twishort_enabled"])
if tweet.has_key("full_text"):
comments = tweet["full_text"]
else:
comments = tweet["text"]
retweet = messages.tweet(self.session, _(u"Quote"), _(u"Add your comment to the tweet"), u"“@%s: %s" % (tweet["user"]["screen_name"], comments), max=116, messageType="retweet", twishort_enabled=self.session.settings["mysc"]["twishort_enabled"])
if comment != '':
retweet.message.set_text(comment)
if retweet.message.get_response() == widgetUtils.OK:
text = retweet.message.get_text()
comments=text
if len(text+ u"“@%s: %s" % (tweet["user"]["screen_name"], tweet["text"])) < 140:
text = text+u"“@%s: %s" % (tweet["user"]["screen_name"], tweet["text"])
else:
answer = commonMessageDialogs.retweet_as_link(self.buffer)
if answer == widgetUtils.YES:
text = text+" https://twitter.com/{0}/status/{1}".format(tweet["user"]["screen_name"], id)
else:
return self._retweet_with_comment(tweet, id, comment=comments)
text = text+" https://twitter.com/{0}/status/{1}".format(tweet["user"]["screen_name"], id)
if retweet.image == None:
call_threaded(self.session.api_call, call_name="update_status", _sound="retweet_send.ogg", status=text, in_reply_to_status_id=id)
else:
@@ -1100,7 +1099,7 @@ class conversationBufferController(searchBufferController):
tweet = self.tweet
while tweet["in_reply_to_status_id"] != None:
try:
tweet = self.session.twitter.twitter.show_status(id=tweet["in_reply_to_status_id"])
tweet = self.session.twitter.twitter.show_status(id=tweet["in_reply_to_status_id"], tweet_mode="extended")
except TwythonError as err:
break
self.statuses.insert(0, tweet)
@@ -1108,7 +1107,7 @@ class conversationBufferController(searchBufferController):
if tweet["in_reply_to_status_id"] == None:
self.kwargs["since_id"] = tweet["id"]
self.ids.append(tweet["id"])
val2 = self.session.search(self.name, *self.args, **self.kwargs)
val2 = self.session.search(self.name, tweet_mode="extended", *self.args, **self.kwargs)
for i in val2:
if i["in_reply_to_status_id"] in self.ids:
self.statuses.append(i)
@@ -1128,12 +1127,3 @@ class conversationBufferController(searchBufferController):
return True
elif dlg == widgetUtils.NO:
return False
class pocketBufferController(baseBufferController):
def __init__(self, parent, name, sessionObject, account, sound=None, function=None, bufferType=None, *args, **kwargs):
super(pocketBufferController, self).__init__(parent, name, sessionObject, account, sound, function, bufferType, *args, **kwargs)
self.type = "pocket"
def start_stream(self):
log.debug("Starting stream for buffer %s, account %s and type %s" % (self.name, self.account, self.type))
log.debug("args: %s, kwargs: %s" % (self.args, self.kwargs))

View File

@@ -175,6 +175,8 @@ class Controller(object):
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.open_timeline, self.view.timeline)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.open_favs_timeline, self.view.favs)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.open_conversation, menuitem=self.view.view_conversation)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.seekLeft, menuitem=self.view.seekLeft)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.seekRight, menuitem=self.view.seekRight)
if widgetUtils.toolkit == "wx":
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)
@@ -291,27 +293,27 @@ class Controller(object):
self.view.add_buffer(account.buffer , name=session.db["user_name"])
for i in session.settings['general']['buffer_order']:
if i == 'home':
home = buffersController.baseBufferController(self.view.nb, "get_home_timeline", "home_timeline", session, session.db["user_name"])
home = buffersController.baseBufferController(self.view.nb, "get_home_timeline", "home_timeline", session, session.db["user_name"], tweet_mode="extended")
self.buffers.append(home)
self.view.insert_buffer(home.buffer, name=_(u"Home"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
elif i == 'mentions':
mentions = buffersController.baseBufferController(self.view.nb, "get_mentions_timeline", "mentions", session, session.db["user_name"], sound="mention_received.ogg")
mentions = buffersController.baseBufferController(self.view.nb, "get_mentions_timeline", "mentions", session, session.db["user_name"], sound="mention_received.ogg", tweet_mode="extended")
self.buffers.append(mentions)
self.view.insert_buffer(mentions.buffer, name=_(u"Mentions"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
elif i == 'dm':
dm = buffersController.baseBufferController(self.view.nb, "get_direct_messages", "direct_messages", session, session.db["user_name"], bufferType="dmPanel", sound="dm_received.ogg", full_text=True)
dm = buffersController.baseBufferController(self.view.nb, "get_direct_messages", "direct_messages", session, session.db["user_name"], bufferType="dmPanel", compose_func="compose_dm", sound="dm_received.ogg", full_text=True)
self.buffers.append(dm)
self.view.insert_buffer(dm.buffer, name=_(u"Direct messages"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
elif i == 'sent_dm':
sent_dm = buffersController.baseBufferController(self.view.nb, "get_sent_messages", "sent_direct_messages", session, session.db["user_name"], bufferType="dmPanel", full_text=True)
sent_dm = buffersController.baseBufferController(self.view.nb, "get_sent_messages", "sent_direct_messages", session, session.db["user_name"], bufferType="dmPanel", compose_func="compose_dm", full_text=True)
self.buffers.append(sent_dm)
self.view.insert_buffer(sent_dm.buffer, name=_(u"Sent direct messages"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
elif i == 'sent_tweets':
sent_tweets = buffersController.baseBufferController(self.view.nb, "get_user_timeline", "sent_tweets", session, session.db["user_name"], bufferType="dmPanel", screen_name=session.db["user_name"])
sent_tweets = buffersController.baseBufferController(self.view.nb, "get_user_timeline", "sent_tweets", session, session.db["user_name"], bufferType="dmPanel", screen_name=session.db["user_name"], tweet_mode="extended")
self.buffers.append(sent_tweets)
self.view.insert_buffer(sent_tweets.buffer, name=_(u"Sent tweets"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
elif i == 'favorites':
favourites = buffersController.baseBufferController(self.view.nb, "get_favorites", "favourites", session, session.db["user_name"])
favourites = buffersController.baseBufferController(self.view.nb, "get_favorites", "favourites", session, session.db["user_name"], tweet_mode="extended")
self.buffers.append(favourites)
self.view.insert_buffer(favourites.buffer, name=_(u"Likes"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
@@ -339,14 +341,14 @@ class Controller(object):
self.buffers.append(timelines)
self.view.insert_buffer(timelines.buffer , name=_(u"Timelines"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
for i in session.settings["other_buffers"]["timelines"]:
tl = buffersController.baseBufferController(self.view.nb, "get_user_timeline", "%s-timeline" % (i,), session, session.db["user_name"], bufferType=None, screen_name=i)
tl = buffersController.baseBufferController(self.view.nb, "get_user_timeline", "%s-timeline" % (i,), session, session.db["user_name"], bufferType=None, screen_name=i, tweet_mode="extended")
self.buffers.append(tl)
self.view.insert_buffer(tl.buffer, name=_(u"Timeline for {}").format(i,), pos=self.view.search("timelines", session.db["user_name"]))
favs_timelines = buffersController.emptyPanel(self.view.nb, "favs_timelines", session.db["user_name"])
self.buffers.append(favs_timelines)
self.view.insert_buffer(favs_timelines.buffer , name=_(u"Likes timelines"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
for i in session.settings["other_buffers"]["favourites_timelines"]:
tl = buffersController.baseBufferController(self.view.nb, "get_favorites", "%s-favorite" % (i,), session, session.db["user_name"], bufferType=None, screen_name=i)
tl = buffersController.baseBufferController(self.view.nb, "get_favorites", "%s-favorite" % (i,), session, session.db["user_name"], bufferType=None, screen_name=i, tweet_mode="extended")
self.buffers.append(tl)
self.view.insert_buffer(tl.buffer, name=_(u"Likes for {}").format(i,), pos=self.view.search("favs_timelines", session.db["user_name"]))
tl.timer = RepeatingTimer(300, tl.start_stream)
@@ -373,7 +375,7 @@ class Controller(object):
self.buffers.append(lists)
self.view.insert_buffer(lists.buffer , name=_(u"Lists"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
for i in session.settings["other_buffers"]["lists"]:
tl = buffersController.listBufferController(self.view.nb, "get_list_statuses", "%s-list" % (i,), session, session.db["user_name"], bufferType=None, list_id=utils.find_list(i, session.db["lists"]))
tl = buffersController.listBufferController(self.view.nb, "get_list_statuses", "%s-list" % (i,), session, session.db["user_name"], bufferType=None, list_id=utils.find_list(i, session.db["lists"]), tweet_mode="extended")
session.lists.append(tl)
self.buffers.append(tl)
self.view.insert_buffer(tl.buffer, name=_(u"List for {}").format(i), pos=self.view.search("lists", session.db["user_name"]))
@@ -381,7 +383,7 @@ class Controller(object):
self.buffers.append(searches)
self.view.insert_buffer(searches.buffer , name=_(u"Searches"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
for i in session.settings["other_buffers"]["tweet_searches"]:
tl = buffersController.searchBufferController(self.view.nb, "search", "%s-searchterm" % (i,), session, session.db["user_name"], bufferType="searchPanel", q=i, count=session.settings["general"]["max_tweets_per_call"])
tl = buffersController.searchBufferController(self.view.nb, "search", "%s-searchterm" % (i,), session, session.db["user_name"], bufferType="searchPanel", q=i, count=session.settings["general"]["max_tweets_per_call"], tweet_mode="extended")
self.buffers.append(tl)
self.view.insert_buffer(tl.buffer, name=_(u"Search for {}").format(i), pos=self.view.search("searches", session.db["user_name"]))
tl.timer = RepeatingTimer(180, tl.start_stream)
@@ -478,6 +480,18 @@ class Controller(object):
output.speak(_(u"{0} not found.").format(string,), True)
page.buffer.list.select_item(start)
def seekLeft(self, *args, **kwargs):
try:
sound.URLPlayer.seek(-5)
except:
output.speak("Unable to seek.",True)
def seekRight(self, *args, **kwargs):
try:
sound.URLPlayer.seek(5)
except:
output.speak("Unable to seek.",True)
def edit_keystrokes(self, *args, **kwargs):
editor = keystrokeEditor.KeystrokeEditor()
if editor.changed == True:

View File

@@ -147,10 +147,11 @@ class tweet(basicTweet):
class reply(tweet):
def __init__(self, session, title, caption, text, twishort_enabled, users=None):
super(reply, self).__init__(session, title, caption, text, twishort_enabled, messageType="reply")
self.users = users
if self.users != None and len(self.users) > 1:
widgetUtils.connect_event(self.message.mentionAll, widgetUtils.BUTTON_PRESSED, self.mention_all)
self.message.mentionAll.SetValue(True)
if len(users) > 1:
# widgetUtils.connect_event(self.message.mentionAll, widgetUtils.CHECKBOX, self.mention_all)
self.message.enable_button("mentionAll")
self.message.mentionAll.SetValue(self.session.settings["mysc"]["mention_all"])
self.message.set_cursor_at_end()
self.text_processor()
@@ -184,10 +185,10 @@ class viewTweet(basicTweet):
if tweetList[i].has_key("message") and tweetList[i]["is_quote_status"] == False:
value = "message"
else:
value = "text"
value = "full_text"
if tweetList[i].has_key("retweeted_status") and tweetList[i]["is_quote_status"] == False:
if tweetList[i].has_key("message") == False:
text = text + "rt @%s: %s\n" % (tweetList[i]["retweeted_status"]["user"]["screen_name"], tweetList[i]["retweeted_status"]["text"])
text = text + "rt @%s: %s\n" % (tweetList[i]["retweeted_status"]["user"]["screen_name"], tweetList[i]["retweeted_status"]["full_text"])
else:
text = text + "rt @%s: %s\n" % (tweetList[i]["retweeted_status"]["user"]["screen_name"], tweetList[i][value])
else:
@@ -206,10 +207,10 @@ class viewTweet(basicTweet):
if tweet.has_key("message"):
value = "message"
else:
value = "text"
value = "full_text"
if tweet.has_key("retweeted_status"):
if tweet.has_key("message") == False:
text = "rt @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], tweet["retweeted_status"]["text"])
text = "rt @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], tweet["retweeted_status"]["full_text"])
else:
text = "rt @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], tweet[value])
else:

View File

@@ -11,11 +11,11 @@ right = string(default="alt+win+right")
next_account = string(default="alt+win+shift+right")
previous_account = string(default="alt+win+shift+left")
open_conversation = string(default="alt+win+c")
show_hide = string(default="alt+win+w")
show_hide = string(default="control+win+w")
post_tweet = string(default="alt+win+n")
post_reply = string(default="control+win+r")
post_retweet = string(default="alt+win+shift+r")
send_dm = string(default="alt+win+d")
send_dm = string(default="alt+win+shift+d")
add_to_favourites = string(default="alt+win+f")
remove_from_favourites = string(default="alt+shift+win+f")
follow = string(default="alt+win+s")

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

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

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

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

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

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

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -24,7 +24,11 @@ def is_long(tweet):
return False
def clear_url(tweet):
urls = utils.find_urls_in_text(tweet["text"])
if tweet.has_key("full_text"):
value = "full_text"
else:
value = "text"
urls = utils.find_urls_in_text(tweet[value])
try: tweet["message"] = tweet["message"].replace(urls[-1], "")
except IndexError: pass
return tweet

View File

@@ -18,8 +18,8 @@
############################################################
import requests
import keys
import application
from twitter import utils
from requests_oauthlib import OAuth1Session
def get_twishort_uri(url):
try:
@@ -30,25 +30,39 @@ def get_twishort_uri(url):
def is_long(tweet):
long = False
for url in range(0, len(tweet["entities"]["urls"])):
if "twishort.com" in tweet["entities"]["urls"][url]["expanded_url"]:
long = get_twishort_uri(tweet["entities"]["urls"][url]["expanded_url"])
try:
if "twishort.com" in tweet["entities"]["urls"][url]["expanded_url"]:
long = get_twishort_uri(tweet["entities"]["urls"][url]["expanded_url"])
except TypeError:
pass
return long
def get_full_text(uri):
# try:
r = requests.get("http://api.twishort.com/1.1/get.json", params={"uri": uri, "api_key": keys.keyring.get("twishort_api_key")})
return r.json()["text"]
# except:
# return False
try:
r = requests.get("http://api.twishort.com/1.1/get.json", params={"uri": uri, "api_key": keys.keyring.get("twishort_api_key")})
return r.json()["text"]
except:
return False
def create_tweet(user_token, user_secret, text, media=0):
if application.snapshot == True:
url = "http://twblue.es/snapshot_twishort.php"
else:
url = "http://twblue.es/stable_twishort.php"
data = {"user_token": user_token,
"user_secret": user_secret,
twitter = OAuth1Session(keys.keyring.get("api_key"), client_secret=keys.keyring.get("api_secret"), resource_owner_key=user_token, resource_owner_secret=user_secret)
twishort_key=keys.keyring.get("twishort_api_key")
x_auth_service_provider = "https://api.twitter.com/1.1/account/verify_credentials.json"
twishort_post_url = "http://api.twishort.com/1.1/post.json"
twishort_update_ids_url = "http://api.twishort.com/1.1/update_ids.json"
r=requests.Request('GET', x_auth_service_provider)
prep=twitter.prepare_request(r)
resp=twitter.send(prep)
twitter.headers={
'X-Auth-Service-Provider':x_auth_service_provider,
'X-Verify-Credentials-Authorization':prep.headers['Authorization'],
}
data = {'api_key':twishort_key,
"text": text.encode("utf-8"),
"media": media}
response = requests.post(url, data=data)
return response.json()["text_to_tweet"]
response = twitter.post(twishort_post_url, data=data)
try:
return response.json()["text_to_tweet"]
except:
print "There was a problem creating a long tweet"
return 0

View File

@@ -26,8 +26,9 @@ def stream_threaded(func, *args, **kwargs):
def new_func(*a, **k):
try:
func(**k)
except:
except exception as msg:
log.error("Error in stream with args: %r" % (a,))
log.error(msg.message)
pub.sendMessage("stream-error", session=a[0])
thread = threading.Thread(target=new_func, args=args, kwargs=kwargs)

View File

@@ -432,17 +432,21 @@ class Session(object):
def get_quoted_tweet(self, tweet):
quoted_tweet = tweet
urls = utils.find_urls_in_text(quoted_tweet["text"])
if tweet.has_key("full_text"):
value = "full_text"
else:
value = "text"
urls = utils.find_urls_in_text(quoted_tweet[value])
for url in range(0, len(urls)):
try: quoted_tweet["text"] = quoted_tweet["text"].replace(urls[url], quoted_tweet["entities"]["urls"][url]["expanded_url"])
try: quoted_tweet[value] = quoted_tweet[value].replace(urls[url], quoted_tweet["entities"]["urls"][url]["expanded_url"])
except IndexError: pass
id = tweets.is_long(quoted_tweet)
try: original_tweet = self.twitter.twitter.show_status(id=id)
try: original_tweet = self.twitter.twitter.show_status(id=id, tweet_mode="extended")
except: return quoted_tweet
original_tweet = self.check_long_tweet(original_tweet)
urls = utils.find_urls_in_text(original_tweet["text"])
urls = utils.find_urls_in_text(original_tweet["full_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"])
try: original_tweet["full_text"] = original_tweet["full_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

@@ -117,6 +117,22 @@ class URLStream(object):
log.debug("Transformed URL: %s. Prepared" % (self.url,))
self.prepared = True
def seek(self,step):
pos=self.stream.get_position()
pos=self.stream.bytes_to_seconds(pos)
pos+=step
pos=self.stream.seconds_to_bytes(pos)
if pos<0:
pos=0
self.stream.set_position(pos)
def playpause(self):
if self.stream.is_playing==True:
self.stream.pause()
else:
self.stream.play()
def play(self, url=None, volume=1.0, stream=None,announce=True):
if announce:
output.speak(_(u"Playing..."))

View File

@@ -17,5 +17,4 @@ class handler(BaseHTTPServer.BaseHTTPRequestHandler):
params = parse_qs(urlparse(self.path).query)
global verifier
verifier = params.get('oauth_verifier', [None])[0]
self.wfile.write("You have successfully logged into Twitter with" + application.name + ". "
"You can close this window now.")
self.wfile.write(_(u"You have successfully logged into Twitter with {0}. You can close this window now.").format(application.name))

View File

@@ -67,8 +67,12 @@ class timelinesStreamer(TwythonStreamer):
self.friends = friends
def on_success(self, data):
try:
if "text" in data and utils.is_allowed(data, self.session.settings["twitter"]["ignored_clients"]) == True:
self.check_tls(data)
except:
pass
# try:
if "text" in data and utils.is_allowed(data, self.session.settings["twitter"]["ignored_clients"]) == True:
if data.has_key("extended_tweet"):
data["full_text"] = data["extended_tweet"]["full_text"]
# data["entities"] = data["extended_tweet"]["entities"]
# log.error(data["extended_entities"])
self.check_tls(data)
# except:
# pass

View File

@@ -135,6 +135,11 @@ class streamer(TwythonStreamer):
self.friends = data["friends"]
pub.sendMessage("friends-receibed")
elif "text" in data and utils.is_allowed(data, self.session.settings["twitter"]["ignored_clients"]) == True:
if data.has_key("extended_tweet"):
data["full_text"] = data["extended_tweet"]["full_text"]
# data["entities"].extend(data["extended_tweet"]["entities"])
# log.error(data["extended_tweet"])
# log.error("Extended tweet")
if data["user"]["id"] in self.muted_users: return
self.check_mentions(data)
self.check_send(data)

View File

@@ -40,47 +40,75 @@ def compose_tweet(tweet, db, relative_times):
ts = tweet["created_at"]
if tweet.has_key("message"):
value = "message"
elif tweet.has_key("full_text"):
value = "full_text"
else:
value = "text"
# log.exception(tweet.keys())
text = StripChars(tweet[value])
if tweet.has_key("sender"):
source = "DM"
if db["user_name"] == tweet["sender"]["screen_name"]: user = _(u"Dm to %s ") % (tweet["recipient"]["name"],)
else: user = tweet["sender"]["name"]
elif tweet.has_key("user"):
user = tweet["user"]["name"]
source = re.sub(r"(?s)<.*?>", "", tweet["source"])
if tweet.has_key("retweeted_status"):
if tweet.has_key("message") == False and tweet["retweeted_status"]["is_quote_status"] == False:
text = "RT @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], StripChars(tweet["retweeted_status"]["text"]))
elif tweet["retweeted_status"]["is_quote_status"]:
text = "%s" % (StripChars(tweet[value]))
else:
text = "RT @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], StripChars(tweet[value]))
if text[-1] in chars: text=text+"."
user = tweet["user"]["name"]
source = re.sub(r"(?s)<.*?>", "", tweet["source"])
if tweet.has_key("retweeted_status"):
if tweet.has_key("message") == False and tweet["retweeted_status"]["is_quote_status"] == False:
text = "RT @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], StripChars(tweet["retweeted_status"][value]))
elif tweet["retweeted_status"]["is_quote_status"]:
text = "%s" % (StripChars(tweet[value]))
else:
text = "RT @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], StripChars(tweet[value]))
# if text[-1] in chars: text=text+"."
if tweet.has_key("message") == False:
urls = utils.find_urls_in_text(text)
for url in range(0, len(urls)):
try: text = text.replace(urls[url], tweet["entities"]["urls"][url]["expanded_url"])
except IndexError: pass
try:
log.error(urls[url])
log.error(tweet["entities"]["urls"][url])
text = text.replace(urls[url], tweet["entities"]["urls"][url]["expanded_url"])
except: pass
if config.app['app-settings']['handle_longtweets']: pass
# return [user+", ", text, ts+", ", source]
return [user+", ", text, ts+", ", source]
def compose_dm(tweet, db, relative_times):
""" It receives a tweet and returns a list with the user, text for the tweet or message, date and the client where user is."""
if system == "Windows":
original_date = arrow.get(tweet["created_at"], "ddd MMM DD H:m:s Z YYYY", locale="en")
if relative_times == True:
ts = original_date.humanize(locale=languageHandler.getLanguage())
else:
ts = original_date.replace(seconds=db["utc_offset"]).format(_(u"dddd, MMMM D, YYYY H:m:s"), locale=languageHandler.getLanguage())
else:
ts = tweet["created_at"]
text = StripChars(tweet["text"])
source = "DM"
if db["user_name"] == tweet["sender"]["screen_name"]: user = _(u"Dm to %s ") % (tweet["recipient"]["name"],)
else: user = tweet["sender"]["name"]
if text[-1] in chars: text=text+"."
urls = utils.find_urls_in_text(text)
for url in range(0, len(urls)):
try: text = text.replace(urls[url], tweet["entities"]["urls"][url]["expanded_url"])
except IndexError: pass
return [user+", ", 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"])
if quoted_tweet.has_key("full_text"):
value = "full_text"
else:
value = "text"
text = StripChars(quoted_tweet[value])
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"]))
try: text = "rt @%s: %s" % (quoted_tweet["retweeted_status"]["user"]["screen_name"], StripChars(quoted_tweet["retweeted_status"][value]))
except KeyError: text = "%s" % (StripChars(quoted_tweet[value]))
if text[-1] in chars: text=text+"."
original_user = original_tweet["user"]["screen_name"]
if original_tweet.has_key("message"):
original_text = StripChars(original_tweet["message"])
elif original_tweet.has_key("full_text"):
original_text = StripChars(original_tweet["full_text"])
else:
original_text = StripChars(original_tweet["text"])
quoted_tweet["message"] = _(u"{0}. Quoted tweet from @{1}: {2}").format( quoted_tweet["text"], original_user, original_text)
original_text = StripChars(original_tweet["text"])
quoted_tweet["message"] = _(u"{0}. Quoted tweet from @{1}: {2}").format( quoted_tweet[value], original_user, original_text)
quoted_tweet = tweets.clear_url(quoted_tweet)
return quoted_tweet

View File

@@ -25,6 +25,8 @@ def find_urls (tweet):
urls = []
if tweet.has_key("message"):
i = "message"
elif tweet.has_key("full_text"):
i = "full_text"
else:
i = "text"
return [s[0] for s in url_re.findall(tweet[i])]
@@ -57,6 +59,7 @@ def is_audio(tweet):
if i["text"] == "audio":
return True
except:
print tweet["entities"]["hashtags"]
log.exception("Exception while executing is_audio hashtag algorithm")
def is_geocoded(tweet):
@@ -68,8 +71,8 @@ def get_all_mentioned(tweet, conf):
string = []
for i in tweet["entities"]["user_mentions"]:
if i["screen_name"] != conf["user_name"] and i["screen_name"] != tweet["user"]["screen_name"]:
if "@"+i["screen_name"] not in string:
string.append("@"+i["screen_name"])
if i["id"] not in string:
string.append(i["id_str"])
return " ".join(string)+" "
def get_all_users(tweet, conf):
@@ -120,7 +123,7 @@ def is_allowed(tweet, clients):
for i in clients:
if i.lower() == source.lower():
allowed = False
log.exception("Tuit not allowed: %s" % (tweet["text"],))
# log.exception("Tuit not allowed: %r" % (tweet,))
return allowed
def twitter_error(error):

View File

@@ -234,7 +234,7 @@ class reply(tweet):
def __init__(self, title, message, text):
super(reply, self).__init__(message, title, text)
self.text.SetInsertionPoint(len(self.text.GetValue()))
self.mentionAll = wx.Button(self, -1, _(u"&Mention to all"), size=wx.DefaultSize)
self.mentionAll = wx.CheckBox(self, -1, _(u"&Mention to all"), size=wx.DefaultSize)
self.mentionAll.Disable()
self.buttonsBox1.Add(self.mentionAll, 0, wx.ALL, 5)
self.buttonsBox1.Layout()

View File

@@ -57,6 +57,11 @@ class mainFrame(wx.Frame):
self.clear = buffer.Append(wx.NewId(), _(u"&Clear buffer"))
self.deleteTl = buffer.Append(wx.NewId(), _(u"&Destroy"))
# audio menu
audio = wx.Menu()
self.seekLeft = audio.Append(wx.NewId(), _(u"&Seek back 5 seconds"))
self.seekRight = audio.Append(wx.NewId(), _(u"&Seek forward 5 seconds"))
# Help Menu
help = wx.Menu()
self.doc = help.Append(-1, _(u"&Documentation"))
@@ -72,6 +77,7 @@ class mainFrame(wx.Frame):
menuBar.Append(tweet, _(u"&Tweet"))
menuBar.Append(user, _(u"&User"))
menuBar.Append(buffer, _(u"&Buffer"))
menuBar.Append(audio, _(u"&Audio"))
menuBar.Append(help, _(u"&Help"))
self.accel_tbl = wx.AcceleratorTable([
@@ -88,7 +94,10 @@ class mainFrame(wx.Frame):
(wx.ACCEL_CTRL, ord('I'), self.timeline.GetId()),
(wx.ACCEL_CTRL|wx.ACCEL_SHIFT, ord('I'), self.deleteTl.GetId()),
(wx.ACCEL_CTRL, ord('M'), self.show_hide.GetId()),
(wx.ACCEL_CTRL, wx.WXK_LEFT, self.seekLeft.GetId()),
(wx.ACCEL_CTRL, ord('P'), self.updateProfile.GetId()),
(wx.ACCEL_CTRL, wx.WXK_RIGHT, self.seekRight.GetId()),
(wx.ACCEL_CTRL, ord(' '), self.seekLeft.GetId()),
])
self.SetAcceleratorTable(self.accel_tbl)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
{"current_version": "0.85",
{"current_version": "0.87",
"description": "The first version for the new generation of TWBlue.",
"downloads":
{"Windows32": "http://twblue.es/pubs/twblue_ngen_0.80_x86.zip",