mirror of
https://github.com/MCV-Software/TWBlue.git
synced 2025-08-25 17:39:23 +00:00
Compare commits
24 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
12f47b85af | ||
30c0a8249e | |||
62e51ad14b | |||
d076ed1f56 | |||
9bbe325517 | |||
6f5ef6d3f1 | |||
378d277a98 | |||
![]() |
2fdbcbc152 | ||
![]() |
ef7ba0fe40 | ||
![]() |
3c5de10fe6 | ||
![]() |
230e0fa951 | ||
31192a5801 | |||
f1c974b4cf | |||
![]() |
a9f9cb7969 | ||
![]() |
3a3393e03a | ||
3a7c0c8f12 | |||
bd2460e42b | |||
![]() |
2dd262cc83 | ||
![]() |
a2cf1ac8d0 | ||
df345b5eec | |||
![]() |
b535c996d6 | ||
b131f50d42 | |||
d729f86898 | |||
![]() |
51ef047fb6 |
@@ -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, ...
|
||||
|
||||
|
@@ -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:
|
||||
|
Binary file not shown.
@@ -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/"
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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)
|
@@ -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:
|
||||
|
@@ -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))
|
||||
|
@@ -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:
|
||||
|
@@ -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:
|
||||
|
@@ -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
@@ -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
|
@@ -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
|
||||
|
@@ -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)
|
||||
|
@@ -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)
|
||||
|
||||
|
16
src/sound.py
16
src/sound.py
@@ -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..."))
|
||||
|
@@ -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))
|
||||
|
@@ -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
|
||||
|
@@ -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)
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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):
|
||||
|
@@ -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()
|
||||
|
@@ -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
3022
tools/twblue.pot
3022
tools/twblue.pot
File diff suppressed because it is too large
Load Diff
@@ -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",
|
||||
|
Submodule windows-dependencies updated: d927229b99...ec88a194da
Reference in New Issue
Block a user