Compare commits

...

191 Commits

Author SHA1 Message Date
4c1cad7f61 Updated snapshot information 2018-11-18 05:22:20 -06:00
fffd98e09e Pressing enter in the list will work when adding or removing someone from a list 2018-11-17 13:40:59 -06:00
a1a084bfda Fixed a small typo 2018-11-15 04:49:48 -06:00
85e575386e Long and quoted tweets are displayed properly in sent tweets. Fixes #253 2018-11-15 04:43:16 -06:00
2c64805eec Show list manager action in keystroke editor. Fixes #260 2018-11-13 17:32:12 -06:00
6f2e439ddc Invert slider movement when up/down arrows are pressed. Fixes #261 2018-11-13 17:16:51 -06:00
7e42a096a5 Finished implementing autoreading features. Closes #221 2018-11-13 16:33:17 -06:00
9d2cf05a41 Added more docstrings to buffers code 2018-11-13 15:34:45 -06:00
d7c095173d Improved autoreading functions for #221. Closes #271 2018-11-01 15:04:26 -06:00
36ba6eca92 Started refactoring of autoreading for buffers 2018-10-19 17:35:56 -05:00
b6fa131999 Fixed typos in changelog 2018-10-03 09:03:15 -05:00
c85c478595 Added date and time wen displaying tweets and dm's 2018-09-30 14:39:59 -05:00
Jose Manuel Delicado
74e020c090 Added certifi and backports.functools-lru-cache to requirements.txt 2018-09-30 11:56:47 +02:00
40105f37ed Added support for deleting dm's with the new Twitter API methods 2018-09-29 11:13:11 -05:00
ca3f8779b8 Separated twitter buffers from generic buffers code 2018-09-22 21:55:19 -05:00
a6a651d6f7 Install py2exe_py2 in appveyor script only. Removed it from requirements. Closes #266 2018-09-22 13:04:27 -05:00
7748b4bb5d Added attempt to update setuptools in AppVeyor script 2018-09-22 13:03:21 -05:00
01a6c65c82 Updated to Twython 3.7.0 2018-09-22 12:03:59 -05:00
211d43aa30 Updated changelog 2018-09-22 10:21:50 -05:00
c716f4aa96 When quoting a retweet, quote will be in original tweet 2018-09-22 10:18:25 -05:00
9fd9d2a120 Updated snapshot info in repo 2018-09-19 16:14:43 -05:00
5c75be20d3 Updated snapshot information 2018-09-19 15:41:05 -05:00
1ccb898f78 Updated changelog 2018-09-19 12:57:14 -05:00
d734a30a18 Merge pull request #265 from manuelcortez/appveyor
Generate snapshot versions with AppVeyor. Closes #264
2018-09-19 12:42:39 -05:00
3d310c0ee4 ADded other missing module from oauthlib (really?) 2018-09-19 12:00:29 -05:00
79512af350 Try to add a missing module by hand in setup 2018-09-19 11:47:13 -05:00
7a2ad3797d Added py2exe_py2 from PyPi 2018-09-19 11:12:51 -05:00
f87312fc53 Disable building in all commits 2018-09-19 00:09:52 -05:00
682f1e8bd4 Skipped folder option 2018-09-18 23:55:00 -05:00
cbc2e978c9 Fixed remote ftp path again 2018-09-18 23:29:01 -05:00
72fd93eaf6 Added appveyor badge 2018-09-18 23:26:15 -05:00
8bac4b8ec6 Commented and fixed everything. Ready for pr 2018-09-18 21:29:42 -05:00
6c29a4a18f Use absolute path to ftp destination 2018-09-18 17:48:18 -05:00
3ae581a19f Let's try with beta ftp lib 2018-09-18 17:39:09 -05:00
a9378988cb Second test with faked path 2018-09-18 17:28:33 -05:00
00f96bb7af Real deployment with fake path to ftp 2018-09-18 17:23:44 -05:00
ecd2984a61 Last test before real deployment 2018-09-18 17:14:47 -05:00
3be69cb6a2 Tried moving artifacts 2018-09-18 17:11:06 -05:00
099bc49761 Test ftp deployment 2018-09-18 16:50:10 -05:00
ec61f4b431 Cleaning up 2018-09-18 13:56:17 -05:00
b16a6c5ddb Add absolute path to artifacts 2018-09-18 13:27:48 -05:00
9a94b92018 Specify artifact name to appveyor 2018-09-18 13:13:20 -05:00
fe8a3b1565 Try to create an artifact after packaged 2018-09-18 13:07:54 -05:00
a3d1052193 More path issues 2018-09-18 12:43:51 -05:00
fbbd3cf00e Call documentation importer before attempt to build doc 2018-09-18 12:39:42 -05:00
8a6f73fdc2 Fixed a typo 2018-09-18 12:33:34 -05:00
c806f17484 Calls doc generator just before packaging 2018-09-18 12:31:28 -05:00
db231e07f8 Documentation should be generated in a folder called documentation 2018-09-18 12:31:02 -05:00
eaf13a4453 Changes in paths 2018-09-18 11:46:51 -05:00
d4a73fb3bb Add direct url to Py2exe 2018-09-18 11:41:36 -05:00
8459135002 Fixed other problem 2018-09-18 11:35:31 -05:00
4aef2595b2 Fixed syntax error 2018-09-18 11:32:25 -05:00
ccdcc7676e Adds py2exe and pyenchant to the party 2018-09-18 11:31:18 -05:00
967cc8da71 Fix 2018-09-18 11:18:10 -05:00
071bcf55ef Try to clone include submodules 2018-09-18 11:10:20 -05:00
cf735211c9 Initial file 2018-09-18 10:52:54 -05:00
bd56eb953b provide better control over cursored buffers when getting more items 2018-09-18 09:09:25 -05:00
940ace664c Fixed error when adding tweet to likes from the menu bar 2018-09-02 08:59:22 -05:00
Jose Manuel Delicado
8619deb6ee Updated readme to remove pywin32 as an installable module 2018-08-31 14:02:18 +02:00
Jose Manuel Delicado
9fcc5d36e5 Updated requirements.txt 2018-08-31 14:00:16 +02:00
Jose Manuel Delicado
c374cdefe9 Updated windows dependencies to remove pywin32 2018-08-31 13:59:42 +02:00
7b925b5909 Fixed a race contidion in the main twitter session 2018-08-26 08:09:55 -05:00
013a80a1f2 Show quoted tweets properly after being sent 2018-08-26 08:07:00 -05:00
ec860aa6fc Updated changelog 2018-08-26 02:59:12 -05:00
12e06eb52d Added option for visiting soundpacks section in website, from the help menu #247 2018-08-26 02:48:04 -05:00
464fce07b0 Added FreakyBlue as an option for next snapshot. #247 2018-08-26 02:28:30 -05:00
ad484a1f35 Display extended tweets properly after being sent. #253 2018-08-22 17:11:15 -05:00
7296d2a939 Extended tweets should be displayed properly in lists 2018-08-22 13:06:08 -05:00
cd596a6ad6 Merge pull request #251 from Menelion/geocode-i18n
Localize geocoding to the current language
2018-08-19 22:18:18 -05:00
Andre Polykanine
ed3b9c9538 Localize geocoding to the current language 2018-08-20 01:15:31 +03:00
df9d99edcd Merge pull request #250 from Mohamed00/next-gen
Convert audio.ogg in classic soundpack to mono #247
2018-08-19 07:01:34 -05:00
Mohamed Al-Hajamy
f5f4074409 Add files via upload 2018-08-19 07:53:04 -04:00
6439eac76c Win10: Remapped show location in tweet to ctrl+win+g as suggested in #177 2018-08-18 23:17:41 -05:00
5c794aaeff Added contents of client.py into twitter session 2018-08-18 23:09:08 -05:00
8cdd1b52d1 Added docstrings to long_tweets package 2018-08-18 20:49:40 -05:00
6928ac4b99 Sent dm's: Buffer name matches string in translation files. 2018-08-18 06:07:07 -05:00
ae42a53b41 Finixhed docstrings in Twitter main session 2018-08-17 21:01:58 -05:00
be7df1714d Added docstrings for some of the functions in twitter session 2018-08-17 17:42:41 -05:00
8cf7ca5ef2 Store created sessions in the sessions module 2018-08-17 12:16:51 -05:00
0cfa89b389 Moved Twitter's session from sessionmanager to sessions.twitter 2018-08-17 05:12:49 -05:00
f63ed6d0a7 Removed hold code related to application.streaming_lives(). Fixes #248 2018-08-17 02:24:02 -05:00
00440e9050 Removed long_tweets module from the src directory 2018-08-16 17:38:35 -05:00
76db14360a Removed hold modules from code. Now everything is in sessions 2018-08-16 17:27:02 -05:00
0966739296 Modified refs to hold Twitter modules to use the new sessions package 2018-08-16 17:26:19 -05:00
1e27056902 Added Twitter module and long_tweets as a session so we will have everything related to twitter in the same session 2018-08-16 17:25:16 -05:00
3b41e18573 Added experimental module with a base session 2018-08-16 16:57:37 -05:00
2668e47a6f tweets, replies and retweets will be added to sent tweets after being sent 2018-08-16 11:17:15 -05:00
b44e30ed28 Removed old compose_dm and compose_event 2018-08-16 10:44:27 -05:00
bfad5b82f0 Deleted code related to Streaming Features 2018-08-16 10:42:14 -05:00
41d4c97067 Fixed error when sent dm's are hidden. Fixes #246 2018-08-16 09:11:57 -05:00
Jose Manuel Delicado
52f27c87b9 Updated version to 0.94 2018-08-15 22:02:03 +02:00
3f5ef28a48 Updated info for a new Snapshot (coming soon) 2018-08-15 14:53:33 -05:00
4ec1e08606 Removed unneeded VLC plugins 2018-08-15 14:50:13 -05:00
f2cea695ee Play sound when a tweet has been sent and streaming is not available 2018-08-15 13:38:31 -05:00
e4a6ead606 Merge pull request #244 from Menelion/requirements
Make several modifications for better running from source
2018-08-15 12:38:36 -05:00
dc536c45de Fixed a few typos 2018-08-15 12:29:01 -05:00
95fcbe6ba4 Updated translations 2018-08-15 11:34:29 -05:00
60f55940b7 Updated translation templates 2018-08-15 11:22:51 -05:00
655331d405 Updated script for generating translation templates 2018-08-15 11:22:12 -05:00
4381992718 Made sound playback during startup as it was before 2018-08-15 11:19:31 -05:00
eb87d924c2 Setup.py: Fixed syntax error 2018-08-15 09:37:46 -05:00
1cebb29bdc Removed an output message from empty buffers 2018-08-15 05:08:25 -05:00
27c1ec990a Play sounds when updating buffers 2018-08-15 05:04:30 -05:00
d40b816c48 Started adding docstrings to buffer functions 2018-08-15 04:30:53 -05:00
ac5daec462 Set mandatory=True when updating buffers automatically to bypass 180 secs restriction 2018-08-15 04:30:27 -05:00
0835a34c71 Fixed a typo 2018-08-14 08:56:11 -05:00
babbc0a08d Updated changelog 2018-08-13 11:50:08 -05:00
04ac629b51 Added sent dm buffer working. Closes #233. Needs testing 2018-08-13 11:26:55 -05:00
Andre Polykanine
3920435eb7 Make several modifications for better running from source:
* Added a requirements file for easier dependencies installation
* Updated Gitignore to add VLC libraries (see #243)
* Updated the Readme file to reflect these changes.
2018-08-13 01:25:52 +03:00
2f0b20558e Create sent direct messages buffer during startup 2018-08-12 16:24:18 -05:00
9ca6e15a20 Added a new buffer for sen't dm. This will not be connected to any endpoint. #233 2018-08-12 16:23:45 -05:00
9c2dba7cf8 Added sent dm's to TWBlue settings #233 2018-08-12 16:23:07 -05:00
318b6caf5f Change type of vlc's environment variables 2018-08-12 16:19:15 -05:00
Jose Manuel Delicado
83612b6a3c Call os.chdir() before importing vlc, only if we are running from source. Restore the original current dir after that. Changed wx.NewId() calls to wx.ID_ANY 2018-08-12 14:50:58 +02:00
Jose Manuel Delicado
f4e20f8ed4 Load libvlccore.dll before importing the sound module 2018-08-12 13:38:39 +02:00
Jose Manuel Delicado
7883413210 When running from source, specify via two environment variables where is the vlc library located 2018-08-12 12:35:43 +02:00
Jose Manuel Delicado
ad54134c86 Updated windows dependencies and setup.py 2018-08-11 22:21:38 +02:00
Jose Manuel Delicado
ef0d3a9eae Updated readme 2018-08-11 22:03:49 +02:00
ea48733cef Updated changelog 2018-08-06 11:45:17 -05:00
6893d923a3 Don't put a sent dm in the buffer right after the event has been sent 2018-08-06 11:37:46 -05:00
d94b133e63 Update interval in buffers is configurable from global settings. Closes #223 2018-08-06 11:31:52 -05:00
28b6d554e2 Switched to new method for sending Direct messages #215 2018-07-25 11:22:57 -05:00
931cadfffa Modified Twython for sending data as json and added direct_messages/events/new #215 2018-07-25 11:11:20 -05:00
232d876c8f Allow Quoting and retweet from sent tweets. Closes #226. Fixes #238 2018-07-25 08:43:46 -05:00
c7f4fd2926 is_audio, find_urls and is_media should work with dm's #215 2018-07-20 10:04:53 -05:00
6b43ff1c0e Hide events buffer in accountSettingsDialog if streaming is disabled. Closes #227 2018-07-20 09:22:52 -05:00
5b5d762759 Fixed user actions from dm's buffer. Closes #237 2018-07-20 09:10:52 -05:00
b4020d0f95 Implemented get_more_items to dm's. Closes #235 2018-07-19 12:27:01 -05:00
d8da78e22d Fixed issue in database when storing dm's #215 2018-07-18 10:52:12 -05:00
c82bb4125b Removed sent direct messages from config. Closes #233 2018-07-18 10:34:08 -05:00
7b5e6477d3 Avoid putting sent dm's in the buffer as they are different to the new ones #215 2018-07-18 09:36:51 -05:00
41582a3770 Ignore dm's coming from streaming API as they are quite different. #215 2018-07-18 09:36:15 -05:00
e9cbe0d825 Created new dm's buffer for cursored results. Very unstable #215 2018-07-18 09:30:03 -05:00
dc563523bc Removed creation of sent direct messages buffer #215 2018-07-18 09:29:33 -05:00
b15eed9697 Added direct_messages/events/show and direct_messages/events/list in Twython #215 2018-07-18 09:29:00 -05:00
019e83c55b is_audio, is_geocoded, is_media, get_urls ignore dm's for now #215 2018-07-18 09:28:16 -05:00
7dad22189a Accept session object in all composers for searching users if needed #215 2018-07-18 09:27:37 -05:00
eebaf94cbf Modified cursored functions so they will match new endpoints #215 2018-07-18 09:27:02 -05:00
1726d5882c Added new parser for direct messages #215 2018-07-17 11:22:53 -05:00
64d843d98a Added helper for getting user object by id #232 2018-07-17 10:58:09 -05:00
610f18dcb6 Added all user objects to the local cache according to #232 2018-07-17 09:27:13 -05:00
cea638b680 Fixed a small isue 2018-07-13 17:29:54 -05:00
e1e0a4e092 Updated info for a new Snapshot 2018-06-18 04:37:56 -05:00
bc4a8bcba1 Check_connection: sets counter to 0 in the right conditional block 2018-06-17 19:38:29 -05:00
3db13062ed Fixed a few typos 2018-06-17 19:26:47 -05:00
9559f07013 Adds new VLC stuff in distributable file 2018-06-15 19:34:10 -05:00
dee30385cc Added VLC stuff (only x86 for now) to dependencies 2018-06-15 13:36:51 -05:00
49ce469c12 Don't display dialog when opening protected user's timeline. Closes #225 2018-06-15 13:32:12 -05:00
59e1299a0b Merge branch 'next-gen' of github.com:manuelcortez/TWBlue into next-gen 2018-06-15 08:46:12 -05:00
ab2667529f Added option to disable streaming from global settings. Closes #219 2018-06-15 08:45:10 -05:00
Jose Manuel Delicado
a7fd88b4be Updated Windows dependencies 2018-06-14 18:41:28 +02:00
a2cb4ba889 Fixed an issue related to high CPU Usage when Streaming is enabled. Closes #220 2018-06-06 11:14:42 -05:00
9847f7ad01 Get back to PIN code authorization due to Twitter changes. Closes #216 2018-06-06 09:11:37 -05:00
c2d81279fe Removed unneeded code 2018-06-06 08:23:07 -05:00
77489cab1e Sent dm's are added properly to the buffer if no streaming Enabled. Fixes #222 2018-05-29 17:35:04 -05:00
7d35dbc752 Stop using the Streaming API endpoints. Closes #213. Needs testing 2018-05-25 12:11:53 -05:00
f2ea4136c0 Skip creation of events buffer and made changes for #213. Closes #217 2018-05-25 12:11:17 -05:00
537d011b40 Remove support for multiple API calls in buffers. Closes #214 2018-05-25 11:35:24 -05:00
8af1e650b7 Added streaming_lives, wich will tell TWBlue if it should use Streaming Features or not 2018-05-25 09:46:39 -05:00
e3cbd8be87 Stop relying in home_timeline for everything. Fixes #171. Needs testing 2018-05-24 10:32:56 -05:00
7099875bc7 Added settings to turn off automatic speech or Braille feedback. #203 2018-05-18 13:38:58 -05:00
4a15fe1602 Add access keys to Spellchecking dialog. Closes #211 2018-05-16 10:22:54 -05:00
7478edd454 spellchecking dictionaries will be located in user's config directory. #208 2018-03-19 21:40:55 -06:00
da4658c220 Sessionmanager: Skip processing of dicts folder in user config. Needed for #208 2018-03-19 21:39:29 -06:00
6768bf85d5 Updated changelog 2018-03-19 21:38:25 -06:00
199a06c6e5 Move TWBlue to WX project phoenix (#207)
Move TWBlue to WX Python Phoenix
2018-03-19 01:55:09 -06:00
b967c32393 Updated readme 2018-03-14 15:24:44 -06:00
e9797ce6ac Updated menus 2018-03-14 15:16:27 -06:00
861de1f354 Moved about dialog and fixed a few bugs in tweet dialogs 2018-03-14 14:18:11 -06:00
6f838d12e9 Avoid converting items to string before passing to SetItem 2018-03-14 13:43:59 -06:00
010c0011aa Posted event codes and task bar icons 2018-03-14 13:34:56 -06:00
b1c5ddbca8 Display quoted tweets properly when original_tweet is made with Twishort 2018-03-14 11:34:49 -06:00
a16f16d36d Added additional checks for new filter improvements 2018-03-12 09:01:28 -06:00
e5196f0aad Changed chahracter limit for tweets in documentation 2018-03-12 09:00:52 -06:00
b8df56dcbb Updated changelog 2018-02-27 16:46:58 -06:00
612f4ffadf Filter by retweet, quotes and replies in filter creation #102 2018-02-27 16:43:16 -06:00
652d3c7ff8 Removed old function call. Closes #204 2018-02-27 13:57:28 -06:00
b6d49bb851 Removed unneded code 2018-02-21 16:22:19 -06:00
cb6f90a027 Use best audio stream for youtube videos 2018-02-21 16:21:20 -06:00
fff215fcdb Updated app info 2018-02-20 12:42:24 -06:00
8e9743cae1 Updated installation instructions 2018-02-20 11:52:53 -06:00
0e41fabbe6 Added youtube support. Closes #94 2018-02-20 11:47:33 -06:00
5ff5a4a6d2 youtube: Started code for playback from youtube. Not functionnal, yet 2018-02-16 17:58:57 -06:00
d4dadfcdc7 Added option for remembering state of mention all and long tweet 2018-02-06 17:37:49 -06:00
fac228dec1 Fixed a few issues 2018-02-06 16:47:47 -06:00
79490f8346 Set mention all checkbox disabled by default 2018-02-06 16:44:36 -06:00
635b467394 Fixed item ordering issue in reversed buffers for people objects 2018-02-06 15:18:42 -06:00
e886090830 Removed unneeded print 2018-01-31 17:15:23 -06:00
80cb5567d5 Show error messages in failed audio uploads. Hopefully Fixes api uploads in sndup 2018-01-31 17:12:43 -06:00
3c0824aad4 Added toggle likes to keystroke editor 2018-01-12 08:36:14 -06:00
0bbbb3f1b6 Merged like/unlike action for windows 10 users in invisible interface 2018-01-10 09:25:27 -06:00
188 changed files with 21139 additions and 32023 deletions

View File

@@ -1,5 +1,5 @@
Tw Blue is free software, licensed under the GNU GPL license, either version 2 or, at your option, any later version. You can view the license in the file named license.txt, or online at http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
Copyright © 2013-2015. Manuel Cortéz
Copyright © 2013-2018. Manuel Cortéz
Documentation is written by Sukil Etxenike, Brian Hartgen and Bill Dengler, covered by the Creative Commons Attribution-NonCommercial-ShareAlike 2.5 license. You can read the license at https://creativecommons.org/licenses/by-nc-sa/2.5/

View File

@@ -1,7 +1,9 @@
TWBlue -
======
TW Blue is an app designed to use Twitter simply and efficiently while using minimal system resources.
[![Build status](https://ci.appveyor.com/api/projects/status/fml5fu7h1fj8vf6l?svg=true)](https://ci.appveyor.com/project/manuelcortez/twblue)
TW Blue is an app designed to use Twitter simply and efficiently while using minimal system resources.
With this app youll have access to twitter features such as:
* Create, reply to, like, retweet and delete tweets,
@@ -29,50 +31,38 @@ Although most dependencies can be found in the windows-dependencies directory, w
#### Dependencies packaged in windows installers
* [Python,](http://python.org) version 2.7.14
* [Python,](http://python.org) version 2.7.15
If you want to build both x86 and x64 binaries, you can install python x86 to C:\python27 and python x64 to C:\python27x64, for example.
* [wxPython](http://www.wxpython.org) for Python 2.7, version 3.0.2.0
* [Python windows extensions (pywin32)](http://www.sourceforge.net/projects/pywin32/) for python 2.7, build 221
* [PyEnchant,](http://pythonhosted.org/pyenchant/) version 1.6.6.
x64 version has been built by TWBlue developers, so you only will find it in windows-dependencies folder
The windows installers are available only in the windows-dependencies folder
The windows installers are available only in the windows-dependencies folder.
To build a binary version:
* [Py2exe](http://www.sourceforge.net/projects/py2exe/) for Python 2.7, version 0.6.9
#### Dependencies that must be installed using easy_install
#### Dependencies that must be installed using pip
setuptools installs a script, called easy_install. You can find it in the python scripts directory. To install packages using easy_install, you have to navigate to the scripts directory using a command prompt, for example:
Python installs a tool called Pip that allows to install packages in a simple way. You can find it in the python scripts directory. To install packages using Pip, you have to navigate to the scripts directory using a command prompt, for example:
cd C:\python27x64\scripts
You can also add the scripts folder to your path environment variable.
You can also add the scripts folder to your path environment variable or choose the corresponding option when installing Python.
Note: pip and setuptools are included in the Python installer since version 2.7.9.
After that, run the following command to install a package, replacing packagename with the names listed below:
Pip is able to install packages listed in a special text file, called the requirements file. To install all remaining dependencies, perform the following command:
easy_install -Z package
pip install -r requirements.txt
The -z switch unzips the package, instead of installing it compressed. If you add the --upgrade switch, you can upgrade a package to its latest version. The following packages need to be installed:
Note that if you perform the command from the path where Pip is located, you need to specify the path to your Tw Blue root folder where the requirements file is located, for example:
* pypubsub==3.3.0
* configobj
* requests-oauthlib
* requests-toolbelt
* future
* pygeocoder
* arrow
* markdown
* winpaths
* PySocks
* win_inet_pton
* yandex.translate
pip install -r D:\repos\TwBlue\requirements.txt
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 markdown future requests oauthlib requests-oauthlib requests-toolbelt pypubsub==3.3.0 pygeocoder arrow python-dateutil futures winpaths PySocks win_inet_pton yandex.translate idna chardet urllib3
Pip will automatically get the additional libraries that the listed packages need to work properly.
If you need to update your dependencies, perform the following command:
pip install --upgrade -r requirements.txt
#### Other dependencies
@@ -82,16 +72,17 @@ These dependencies are located in the windows-dependencies directory. You don't
This dependency has been built using pure basic 4.61. Its source can be found at http://hg.q-continuum.net/updater
* [oggenc2.exe,](http://www.rarewares.org/ogg-oggenc.php) version 2.87
* Microsoft Visual c++ 2008 redistributable dlls.
* VLC plugins and DLL libraries.
#### Dependencies required to build the installer
* [NSIS,](http://nsis.sourceforge.net/) version 3.02.1
* [NSIS,](http://nsis.sourceforge.net/) version 3.03
#### Dependencies required to build the portableApps.com format archive
* [NSIS Portable,](http://portableapps.com/apps/development/nsis_portable) version 3.02.1
* [NSIS Portable,](http://portableapps.com/apps/development/nsis_portable) version 3.03
* [PortableApps.com Launcher,](http://portableapps.com/apps/development/portableapps.com_launcher) version 2.2.1
* [PortableApps.com Installer,](http://portableapps.com/apps/development/portableapps.com_installer) version 3.5.5
* [PortableApps.com Installer,](http://portableapps.com/apps/development/portableapps.com_installer) version 3.5.8
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, ...
@@ -101,19 +92,21 @@ In order to add the support for spell checking in more languages than english yo
### Running TW Blue from source
Now that you have installed all these packages, you can run TW Blue from source using a command prompt. Navigate to the repo's src directory, and type the following command:
Now that you have installed all these packages, you can run TW Blue from source using a command prompt. Navigate to the repo's `src` directory, and type the following command:
python main.py
If necessary, change the first part of the command to reflect the location of your python executable. You can run TW Blue using python x86 and x64
If necessary, change the first part of the command to reflect the location of your python executable. You can run TW Blue using python x86 and x64.
### Generating the documentation
To generate the documentation in html format, navigate to the doc folder inside this repo. After that, run these commands:
python document_importer.py
python generator.py
The documentation will be generated, placing each language in a separate folder in the doc directory. Move these folders (for example de, en, es, fr, it, ...) to src/documentation, creating the directory if necesary.
Also, copy the license.txt located in the root of the repo to the documentation folder.
python document_importer.py
python generator.py
The documentation will be generated, placing each language in a separate folder in the doc directory. Move these folders (for example `de`, `en`, `es`, `fr`, `it`, ...) to `src/documentation`, creating the directory if necessary.
Also, copy the `license.txt` file located in the root of the repo to the documentation folder.
### Building a binary version

83
appveyor.yml Normal file
View File

@@ -0,0 +1,83 @@
pull_requests:
# Avoid building after pull requests. Shall we disable this option?
do_not_increment_build_number: true
# Only build whenever we add tags to the repo.
skip_non_tags: true
environment:
matrix:
# List of python versions we want to work with.
- PYTHON: "C:\\Python27"
PYTHON_VERSION: "2.7.x" # currently 2.7.9
PYTHON_ARCH: "32"
# perhaps we may enable this one in future?
# - PYTHON: "C:\\Python27-x64"
# PYTHON_VERSION: "2.7.x" # currently 2.7.9
# PYTHON_ARCH: "64"
# This is important so we will retrieve everything in submodules as opposed to default method.
clone_script:
- cmd: >-
git clone -q --branch=%APPVEYOR_REPO_BRANCH% https://github.com/%APPVEYOR_REPO_NAME%.git %APPVEYOR_BUILD_FOLDER%
&& cd %APPVEYOR_BUILD_FOLDER%
&& git checkout -qf %APPVEYOR_REPO_COMMIT%
&& git submodule update --init --recursive
install:
# If there is a newer build queued for the same PR, cancel this one.
# The AppVeyor 'rollout builds' option is supposed to serve the same
# purpose but it is problematic because it tends to cancel builds pushed
# directly to master instead of just PR builds (or the converse).
# credits: JuliaLang developers.
- ps: if ($env:APPVEYOR_PULL_REQUEST_NUMBER -and $env:APPVEYOR_BUILD_NUMBER -ne ((Invoke-RestMethod `
https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG/history?recordsNumber=50).builds | `
Where-Object pullRequestId -eq $env:APPVEYOR_PULL_REQUEST_NUMBER)[0].buildNumber) { `
throw "There are newer queued builds for this pull request, failing early." }
- ECHO "Filesystem root:"
- ps: "ls \"C:/\""
# Check that we have the expected version and architecture for Python
- "python --version"
- "python -c \"import struct; print(struct.calcsize('P') * 8)\""
# Upgrade to the latest version of pip to avoid it displaying warnings
# about it being out of date.
- "python -m pip install --upgrade pip setuptools"
# Install the build dependencies of the project. If some dependencies contain
# compiled extensions and are not provided as pre-built wheel packages,
# pip will build them from source using the MSVC compiler matching the
# target Python version and architecture
- "%CMD_IN_ENV% pip install -r requirements.txt"
- "%CMD_IN_ENV% pip install pyenchant py2exe_py2"
build_script:
# Build documentation at first, so setup.py won't fail when copying everything.
- "cd doc"
# Import documentation before building, so strings.py will be created.
- "%CMD_IN_ENV% python documentation_importer.py"
# build doc from src folder so it will generate result files right there.
- "cd ..\\src"
- "%CMD_IN_ENV% python ..\\doc\\generator.py"
# Build distributable files.
- "%CMD_IN_ENV% python setup.py py2exe"
- "cd dist"
# Zip it all.
- cmd: 7z a ..\..\snapshot.zip *
artifacts:
- path: snapshot.zip
deploy:
- provider: FTP
host: twblue.es
protocol: ftp
beta: true
username: twblue
password:
secure: ml/xB8YEoZ7DmjzDr+KSNw==
# folder: '//pubs'

View File

@@ -2,7 +2,7 @@
name = 'TWBlue'
snapshot = False
if snapshot == False:
version = "0.93"
version = "0.94"
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

@@ -2,6 +2,49 @@
## changes in this version
* When adding or removing an user from a list, it is possible to press enter in the focused list instead of having to search for the "add" or "delete" button.
* Quoted and long tweets are displayed properly in the sent tweets buffer after being send. ([#253](https://github.com/manuelcortez/TWBlue/issues/253))
* Fixed an issue that was making the list manager keystroke unable to be shown in the keystroke editor. Now the keystroke is listed properly. ([#260](https://github.com/manuelcortez/TWBlue/issues/260))
* The volume slider, located in the account settings of TWBlue, now should decrease and increase value properly when up and down arrows are pressed. Before it was doing it in inverted order. ([#261](https://github.com/manuelcortez/TWBlue/issues/261))
* autoreading has been redesigned to work in a similar way for almost all buffers. Needs testing. ([#221](https://github.com/manuelcortez/TWBlue/issues/221))
* When displaying tweets or direct messages, a new field has been added to show the date when the item has been posted to Twitter.
* Added support for deleting direct messages by using the new Twitter API methods.
* When quoting a retweet, the quote will be made to the original tweet instead of the retweet.
* If the sent direct messages buffer is hidden, TWBlue should keep loading everything as expected. ([#246](https://github.com/manuelcortez/TWBlue/issues/246))
* There is a new soundpack, called FreakyBlue (Thanks to [Andre Louis](https://twitter.com/FreakyFwoof)) as a new option in TWBlue. This pack can be the default in the next stable, so users can take a look and share their opinion in snapshot versions. ([#247](https://github.com/manuelcortez/TWBlue/issues/247))
* There is a new option in the help menu that allows you to visit the soundpacks section in the TWBlue website. ([#247](https://github.com/manuelcortez/TWBlue/issues/247))
* When reading location of a geotagged tweet, it will be translated for users of other languages. ([#251](https://github.com/manuelcortez/TWBlue/pull/251))
* In the Windows 10 Keymap, the action to read location of a tweet has been remapped to Ctrl+Win+G. ([#177](https://github.com/manuelcortez/TWBlue/pull/177))
* When there are no more items to retrieve in direct messages and people buffers, a message will announce it.
* Fixed an issue reported by some users that was making them unable to load more items in their direct messages.
* It is possible to add a tweet to the likes buffer from the menu bar again.
* Tweets, replies and retweets will be added to sent tweets right after being posted in Twitter.
* Extended Tweets should be displayed properly in list buffers.
## Changes in version 0.94
* Added an option in the global settings dialog to disable the Streaming features of TWBlue. TWBlue will remove all Streaming features after August 16, so this option will give people an idea about how it will be. ([#219](https://github.com/manuelcortez/TWBlue/issues/219))
* Due to Twitter API changes, Switched authorisation method to Pin-code based authorisation. When you add new accounts to TWBlue, you will be required to paste a code displayed in the Twitter website in order to grant access to TWBlue. ([#216](https://github.com/manuelcortez/TWBlue/issues/216))
* In order to comply with latest Twitter changes, TWBlue has switched to the new method used to send and receive direct messages, according to issue [#215.](https://github.com/manuelcortez/twblue/issues/215)
* The new method does not allow direct messages to be processed in real time. Direct messages will be updated periodically.
* After august 16 or when streaming is disabled, the events buffer will no longer be created in TWBlue.
* You can configure frequency for buffer updates in TWBlue. By default, TWBlue will update all buffers every 2 minutes, but you can change this setting in the global settings dialog. ([#223](https://github.com/manuelcortez/TWBlue/issues/223))
* Added a new tab called feedback, in the account settings dialog. This tab allows you to control whether automatic speech or Braille feedbak in certain events (mentions and direct messages received) is enabled. Take into account that this option will take preference over automatic reading of buffers and any kind of automatic output. ([#203](https://github.com/manuelcortez/TWBlue/issues/203))
* The spell checking dialog now has access keys defined for the most important actions. ([#211](https://github.com/manuelcortez/TWBlue/issues/211))
* TWBlue now Uses WXPython 4.0.1. This will allow us to migrate all important components to Python 3 in the future. ([#207](https://github.com/manuelcortez/TWBlue/issues/207))
* When you quote a Tweet, if the original tweet was posted with Twishort, TWBlue should display properly the quoted tweet. Before it was displaying the original tweet only. ([#206](https://github.com/manuelcortez/TWBlue/issues/206))
* It is possible to filter by retweets, quotes and replies when creating a new filter.
* Added support for playing youtube Links directly from the client. ([#94](https://github.com/manuelcortez/TWBlue/issues/94))
* Replaced Bass with libVLC for playing URL streams.
* the checkbox for indicating whether TWBlue will include everyone in a reply or not, will be unchecked by default.
* You can request TWBlue to save the state for two checkboxes: Long tweet and mention all, from the global settings dialogue.
* For windows 10 users, some keystrokes in the invisible user interface have been changed or merged:
* control+Windows+alt+F will be used for toggling between adding and removing a tweet to user's likes. This function will execute the needed action based in the current status for the focused tweet.
* TWBlue will show an error if something goes wrong in an audio upload.
* And more. ([#171,](https://github.com/manuelcortez/TWBlue/issues/171)
## Changes in version 0.93
* A new soundpack has been added to TWBlue. Thanks to [@ValeriaK305](https://twitter.com/ValeriaK305)
* In the Windows 10 keymap, we have changed some default keystrokes as windows now uses some previously assigned shortcuts:
* For liking a tweet, press Control+Windows+alt+f

View File

@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import markdown
import os
import shutil
from codecs import open as _open
import languageHandler
languageHandler.setLanguage("en")
@@ -38,14 +39,18 @@ def generate_document(language, document_type="documentation"):
""" % (language, title, title)
first_html_block = first_html_block+ markdown_file
first_html_block = first_html_block + "\n</body>\n</html>"
if not os.path.exists(language):
os.mkdir(language)
mdfile = _open("%s/%s" % (language, filename), "w", encoding="utf-8")
if not os.path.exists(os.path.join("documentation", language)):
os.mkdir(os.path.join("documentation", language))
mdfile = _open(os.path.join("documentation", language, filename), "w", encoding="utf-8")
mdfile.write(first_html_block)
mdfile.close()
def create_documentation():
print("Creating documentation in the supported languages...\n")
if not os.path.exists("documentation"):
os.mkdir("documentation")
if os.path.exists(os.path.join("documentation", "license.txt")) == False:
shutil.copy(os.path.join("..", "license.txt"), os.path.join("documentation", "license.txt"))
for i in languages:
print("Creating documentation for: %s" % (i,))
generate_document(i)

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: TW Blue documentation 0.89\n"
"POT-Creation-Date: 2017-01-18 08:42+Hora estndar central (Mxico)\n"
"POT-Creation-Date: 2018-08-07 13:19+Hora de verano central (Mexico)\n"
"PO-Revision-Date: 2017-03-25 15:15+0100\n"
"Last-Translator: Joan Rabat <joanrabat@hotmail.com>\n"
"Language-Team: Francisco Torres Gallego <frantorresgallego@gmail.com>\n"
@@ -114,9 +114,10 @@ msgid "## Usage"
msgstr "##funcionament"
#: ../doc/strings.py:21
#, fuzzy
msgid ""
"Twitter is a social networking or micro-blogging tool which allows you to "
"compose short status updates of your activities in 140 characters or less. "
"compose short status updates of your activities in 280 characters or less. "
"Twitter is a way for friends, family and co-workers to communicate and stay "
"connected through the exchange of quick, frequent messages. You can restrict "
"delivery of updates to those in your circle of friends or, by default, allow "
@@ -521,9 +522,10 @@ msgid "#### Buttons in the application"
msgstr "###Botons en l'aplicació."
#: ../doc/strings.py:65
#, fuzzy
msgid ""
"* Tweet: this button opens up a dialogue box to write your tweet. Normal "
"tweets must not exceed 140 characters. However you can press the long tweet "
"tweets must not exceed 280 characters. However you can press the long tweet "
"checkbox and your tweet will be posted throught Twishort, wich will allow "
"you to write longer tweets (10000 characters). If you write past this limit, "
"a sound will play to warn you. Note that the character count is displayed in "

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: TWBlue Documentation\n"
"POT-Creation-Date: 2017-01-18 08:42+Hora estndar central (Mxico)\n"
"PO-Revision-Date: 2017-07-09 10:41+0200\n"
"POT-Creation-Date: 2018-08-07 13:19+Hora de verano central (Mexico)\n"
"PO-Revision-Date: 2018-08-08 11:01+0200\n"
"Last-Translator: Steffen Schultz <schulle3o@yahoo.de>\n"
"Language-Team: Steffen Schultz <schulle3o@yahoo.de>\n"
"Language: de\n"
@@ -14,7 +14,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
"X-Generator: Poedit 2.0.2\n"
"X-Generator: Poedit 2.0.6\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../doc/strings.py:3
@@ -111,17 +111,17 @@ msgstr "## Verwendung"
#: ../doc/strings.py:21
msgid ""
"Twitter is a social networking or micro-blogging tool which allows you to "
"compose short status updates of your activities in 140 characters or less. "
"compose short status updates of your activities in 280 characters or less. "
"Twitter is a way for friends, family and co-workers to communicate and stay "
"connected through the exchange of quick, frequent messages. You can restrict "
"delivery of updates to those in your circle of friends or, by default, allow "
"anyone to access them."
msgstr ""
"Twitter ist ein soziales Netzwerk oder Micro-Blog, welches das Verfassen von "
"Status-Nachrichten von nicht mehr als 140 Zeichen Länge erlaubt. Dieser "
"Dienst ist perfekt für Freunde, Familien und Mitarbeiter, um schnell und "
"regelmäßig Kurznachrichten auszutauschen. Die Nachrichten können dabei allen "
"zugänglich gemacht oder nur auf den Freundeskreis beschränkt werden."
"Status-Nachrichten von bis zu 280 Zeichen Länge erlaubt. Dieser Dienst ist "
"perfekt für Freunde, Familien und Mitarbeiter, um schnell und regelmäßig "
"Kurznachrichten auszutauschen. Die Nachrichten können dabei allen zugänglich "
"gemacht oder nur auf den Freundeskreis beschränkt werden."
#: ../doc/strings.py:22
msgid ""
@@ -527,7 +527,7 @@ msgstr "#### Schaltflächen der Anwendung"
#: ../doc/strings.py:65
msgid ""
"* Tweet: this button opens up a dialogue box to write your tweet. Normal "
"tweets must not exceed 140 characters. However you can press the long tweet "
"tweets must not exceed 280 characters. However you can press the long tweet "
"checkbox and your tweet will be posted throught Twishort, wich will allow "
"you to write longer tweets (10000 characters). If you write past this limit, "
"a sound will play to warn you. Note that the character count is displayed in "
@@ -541,7 +541,7 @@ msgid ""
"message in English describing the problem."
msgstr ""
"* Tweet: Diese Schaltfläche öffnet einen Dialog zum Verfassen eines neuen "
"Tweets. Die Nachricht darf normalerweise 140 Zeichen nicht überschreiten, "
"Tweets. Die Nachricht darf normalerweise 280 Zeichen nicht überschreiten, "
"kann jedoch durch aktivieren der Checkbox \"Langer Tweet\" über den Twishort-"
"Dienst gesendet werden (maximal 10000 Zeichen). Geht eine Nachricht darüber "
"hinaus, kennzeichnet TWBlue dies durch einen Warnklang. Die Anzahl der "

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: twblue-documentation 0.84\n"
"POT-Creation-Date: 2017-12-06 15:59+Hora estndar central (Mxico)\n"
"POT-Creation-Date: 2018-08-07 13:19+Hora de verano central (Mexico)\n"
"PO-Revision-Date: 2017-01-18 09:13-0600\n"
"Last-Translator: Manuel Cortéz <manuel@manuelcortez.net>\n"
"Language-Team: Spanish <manuel@manuelcortez.net>\n"
@@ -116,9 +116,10 @@ msgid "## Usage"
msgstr "## Uso"
#: ../doc/strings.py:21
#, fuzzy
msgid ""
"Twitter is a social networking or micro-blogging tool which allows you to "
"compose short status updates of your activities in 140 characters or less. "
"compose short status updates of your activities in 280 characters or less. "
"Twitter is a way for friends, family and co-workers to communicate and stay "
"connected through the exchange of quick, frequent messages. You can restrict "
"delivery of updates to those in your circle of friends or, by default, allow "
@@ -552,9 +553,10 @@ msgid "#### Buttons in the application"
msgstr "#### Botones de la aplicación"
#: ../doc/strings.py:65
#, fuzzy
msgid ""
"* Tweet: this button opens up a dialogue box to write your tweet. Normal "
"tweets must not exceed 140 characters. However you can press the long tweet "
"tweets must not exceed 280 characters. However you can press the long tweet "
"checkbox and your tweet will be posted throught Twishort, wich will allow "
"you to write longer tweets (10000 characters). If you write past this limit, "
"a sound will play to warn you. Note that the character count is displayed in "

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: TW Blue documentation 0.46\n"
"POT-Creation-Date: 2017-01-18 08:42+Hora estndar central (Mxico)\n"
"POT-Creation-Date: 2018-08-07 13:19+Hora de verano central (Mexico)\n"
"PO-Revision-Date: 2015-11-27 08:33-0600\n"
"Last-Translator: Manuel Cortéz <manuel@manuelcortez.net>\n"
"Language-Team: Sukil Echenique <sukiletxe@yahoo.es>\n"
@@ -116,9 +116,10 @@ msgid "## Usage"
msgstr " Nola erabili"
#: ../doc/strings.py:21
#, fuzzy
msgid ""
"Twitter is a social networking or micro-blogging tool which allows you to "
"compose short status updates of your activities in 140 characters or less. "
"compose short status updates of your activities in 280 characters or less. "
"Twitter is a way for friends, family and co-workers to communicate and stay "
"connected through the exchange of quick, frequent messages. You can restrict "
"delivery of updates to those in your circle of friends or, by default, allow "
@@ -446,7 +447,7 @@ msgstr "&Aplikazioa"
#: ../doc/strings.py:65
msgid ""
"* Tweet: this button opens up a dialogue box to write your tweet. Normal "
"tweets must not exceed 140 characters. However you can press the long tweet "
"tweets must not exceed 280 characters. However you can press the long tweet "
"checkbox and your tweet will be posted throught Twishort, wich will allow "
"you to write longer tweets (10000 characters). If you write past this limit, "
"a sound will play to warn you. Note that the character count is displayed in "

File diff suppressed because it is too large Load Diff

View File

@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: TW Blue documentation 0.88\n"
"POT-Creation-Date: 2017-01-18 08:42+Hora estndar central (Mxico)\n"
"PO-Revision-Date: 2017-01-18 16:32+0100\n"
"POT-Creation-Date: 2018-08-07 13:19+Hora de verano central (Mexico)\n"
"PO-Revision-Date: 2018-08-11 12:25+0200\n"
"Last-Translator: Rémy Ruiz <remyruiz@gmail.com>\n"
"Language-Team: Rémy Ruiz <remyruiz@gmail.com>\n"
"Language: fr\n"
@@ -14,7 +14,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
"X-Generator: Poedit 1.8.9\n"
"X-Generator: Poedit 1.8.12\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Poedit-SourceCharset: UTF-8\n"
@@ -120,14 +120,14 @@ msgstr "## Utilisation"
#: ../doc/strings.py:21
msgid ""
"Twitter is a social networking or micro-blogging tool which allows you to "
"compose short status updates of your activities in 140 characters or less. "
"compose short status updates of your activities in 280 characters or less. "
"Twitter is a way for friends, family and co-workers to communicate and stay "
"connected through the exchange of quick, frequent messages. You can restrict "
"delivery of updates to those in your circle of friends or, by default, allow "
"anyone to access them."
msgstr ""
"Twitter est un réseau social qui vous permet de créer vos mises à jour du "
"statut de vos activités en 140 caractères ou moins. Twitter est un moyen de "
"statut de vos activités en 280 caractères ou moins. Twitter est un moyen de "
"rester connecté avec vos amis, famille et collègues de travail à travers de "
"l'échange de messages courts. Vous pouvez restreindre vos mises à jour afin "
"que seuls vos amis puissent les voir, ou permettre à quiconque de les voir. "
@@ -568,7 +568,7 @@ msgstr "#### Boutons dans l'application"
#: ../doc/strings.py:65
msgid ""
"* Tweet: this button opens up a dialogue box to write your tweet. Normal "
"tweets must not exceed 140 characters. However you can press the long tweet "
"tweets must not exceed 280 characters. However you can press the long tweet "
"checkbox and your tweet will be posted throught Twishort, wich will allow "
"you to write longer tweets (10000 characters). If you write past this limit, "
"a sound will play to warn you. Note that the character count is displayed in "
@@ -582,7 +582,7 @@ msgid ""
"message in English describing the problem."
msgstr ""
"* Tweet: Ce bouton ouvre la boîte de dialogue pour écrire un tweet. Le "
"message ne doit pas dépasser au-delà de 140 caractères. Cependant, vous "
"message ne doit pas dépasser au-delà de 280 caractères. Cependant, vous "
"pouvez appuyer sur la case à cocher Long tweet et votre tweet sera affiché "
"via Twishort qui vous permettra d'écrire des tweets plus longs (10000 "
"caractères). Si vous écrivez au-delà de cette limite, un son sera joués pour "
@@ -1093,7 +1093,7 @@ msgid ""
"* Play/pause: try to play audio for the selected item (if available), or "
"stop the currently played audio."
msgstr ""
"* Lecture/Pause: essayez de lire l'audio de l'élément sélectionné (si "
"* Lecture / Pause: essayez de lire l'audio de l'élément sélectionné (si "
"disponible) ou arrêtez l'audio actuellement en cours de lecture."
#: ../doc/strings.py:117
@@ -1478,13 +1478,13 @@ msgstr "* Contrôle+Windows+Maj+A: Supprimer l'utilisateur de la liste."
#: ../doc/strings.py:187
msgid "* Control + Windows + Shift + M: Mute / unmute the current buffer."
msgstr ""
"* Contrôle+Windows+Maj+M: Activer muet /désactiver muet dans le tampon "
"* Contrôle+Windows+Maj+M: Activer muet / désactiver muet dans le tampon "
"actuel."
#: ../doc/strings.py:188
msgid "* Windows + Alt + M: Mute / unmute the current session."
msgstr ""
"* Windows +Alt+M: : Activer muet /désactiver muet dans la session actuelle."
"* Windows +Alt+M: : Activer muet / désactiver muet dans la session actuelle."
#: ../doc/strings.py:189
msgid ""

File diff suppressed because it is too large Load Diff

View File

@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: tw blue documentation 0.46\n"
"POT-Creation-Date: 2017-01-18 08:42+Hora estndar central (Mxico)\n"
"PO-Revision-Date: 2017-01-20 16:44+0100\n"
"POT-Creation-Date: 2018-08-07 13:19+Hora de verano central (Mexico)\n"
"PO-Revision-Date: 2018-08-08 11:34+0100\n"
"Last-Translator: Juan C. Buño <oprisniki@gmail.com>\n"
"Language-Team: Alba Quinteiro <alba_080695@hotmail.com>\n"
"Language: gl\n"
@@ -117,18 +117,19 @@ msgstr "## Uso"
#: ../doc/strings.py:21
msgid ""
"Twitter is a social networking or micro-blogging tool which allows you to "
"compose short status updates of your activities in 140 characters or less. "
"compose short status updates of your activities in 280 characters or less. "
"Twitter is a way for friends, family and co-workers to communicate and stay "
"connected through the exchange of quick, frequent messages. You can restrict "
"delivery of updates to those in your circle of friends or, by default, allow "
"anyone to access them."
msgstr ""
"Twitter é unha rede social que che permite crear actualizacións de estado "
"sobre as túas actividades nun máximo de 140 caracteres. Twitter é un xeito "
"de manterte conectado cos teus amigos, familiares e compañeiros de traballo "
"a través do intercambio de mensaxes curtas. Podes restrinxir as túas "
"actualizacións para que só as vexan os teus amigos, ou permitir que calquera "
"poda velas. Esta segunda opción é o comportamento por defecto de Twitter."
"Twitter é unha rede social ou ferramenta de micro-blogging que che permite "
"compoñer curtas actualizacións de estado das túas actividades en 280 "
"caracteres ou menos. Twitter é un xeito para que amigos, familiares e "
"compañeiros de traballo se comuniquen e permanezan conectados a través do "
"intercambio de mensaxes rápidas e frecuentes. Podes restrinxir a entrega de "
"actualizacións aos membros do teu círculo de amigos ou, de xeito "
"predeterminado, permitir que calquera persoa teña aceso a elas."
#: ../doc/strings.py:22
msgid ""
@@ -546,7 +547,7 @@ msgstr "#### Botóns na aplicación"
#: ../doc/strings.py:65
msgid ""
"* Tweet: this button opens up a dialogue box to write your tweet. Normal "
"tweets must not exceed 140 characters. However you can press the long tweet "
"tweets must not exceed 280 characters. However you can press the long tweet "
"checkbox and your tweet will be posted throught Twishort, wich will allow "
"you to write longer tweets (10000 characters). If you write past this limit, "
"a sound will play to warn you. Note that the character count is displayed in "
@@ -559,20 +560,20 @@ msgid ""
"hear a sound confirming it. Otherwise, the screen reader will speak an error "
"message in English describing the problem."
msgstr ""
"* Chío: este botón abre unha Caixa de diálogo para escreber o teu chío. Os "
"chíos normais non deben pasar dos 140 carácteres. Non obstante podes premer "
"a Caixa de verificación Chíos Longos e o chío publicarase a través do "
"Twishort, o que che permitirá escribir chíos máis longos (10000 carácteres). "
"Se te pasas escrebindo este límite, reproducirase un son para avisarte. Ten "
"en conta que a conta de carácteres amósase na barra de título. Poderás usar "
"os botón acurtar e expandir URL para aumentar os límites de carácteres. "
"Podes descargar un gráfico, correxir a ortografía, engadir audio ou traducir "
"a túa mensaxe seleccionando un dos botón disponibles na Caixa de diálogo. "
"Ademáis, podes autocompletar a introducción de usuarios premendo Alt + C ou "
"o botón para ese propósito se tes a base de datos de usuarios configurada. "
"Preme intro para enviar o chío. Se todo foi ben, escoitarás un son "
"confirmándocho. De outro xeito, o lector de pantallas falará unha mensaxe de "
"erro en inglés descrebindo o problema."
"* Chío: este botón abre una Caixa de diálogo para escreber os teus chíos. Os "
"chíos normais non deben exceder de 280 caracteres. Non obstante podes premer "
"a Caixa de verificación chíos longos e os teus chíos publicaránse a través "
"de Twishort, o que che permite escreber chíos máis longos (10000 "
"caracteres). Se escrebes pasando este límite, reproducirase un son para "
"advertirte. Ten en conta que o reconto de caracteres amósase na barra de "
"título. Podes usar os botons de acurtar e expandir URL para cumplir co "
"límite de caracteres. Podes cargar una imaxe, correxir a ortografía, "
"adxuntar audio ou traducir a túa mensaxe seleccionando un dos botóns "
"disponibles na caixa de diálogo. Ademáis, podes autocompretar a introducción "
"de usuarios premendo Alt + C ou o botón para ese propósito se tes a base de "
"datos de usuarios configurada. Preme intro para enviar o chío. Se todo foi "
"ben, escoitarás un son confirmándoo. Doutro xeito, o lector de pantalla "
"falará una mensaxe de erro en inglés descrebindo o problema."
#: ../doc/strings.py:66
msgid ""

View File

@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: TW Blue documentation 0.46\n"
"POT-Creation-Date: 2017-01-18 08:42+Hora estndar central (Mxico)\n"
"PO-Revision-Date: 2017-01-24 14:35+0100\n"
"POT-Creation-Date: 2018-08-07 13:19+Hora de verano central (Mexico)\n"
"PO-Revision-Date: 2018-08-09 11:51+0100\n"
"Last-Translator: Chris Leo Mameli <llajta2012@gmail.com>\n"
"Language-Team: \n"
"Language: it\n"
@@ -116,19 +116,19 @@ msgstr "## Caratteristiche"
#: ../doc/strings.py:21
msgid ""
"Twitter is a social networking or micro-blogging tool which allows you to "
"compose short status updates of your activities in 140 characters or less. "
"compose short status updates of your activities in 280 characters or less. "
"Twitter is a way for friends, family and co-workers to communicate and stay "
"connected through the exchange of quick, frequent messages. You can restrict "
"delivery of updates to those in your circle of friends or, by default, allow "
"anyone to access them."
msgstr ""
"Twitter è un social network o strumento di micro-blogging che consente di "
"pubblicare gli aggiornamenti di stato delle vostre attività in 140 caratteri "
"o meno. È un modo per comunicare con amici, parenti, colleghi e rimanere in "
"contatto attraverso lo scambio frequente e rapido di messaggi. È possibile "
"limitare la visualizzazione degli aggiornamenti alla tua cerchia di amici o, "
"modificando come impostazione predefinita, consentire a chiunque di "
"accedervi."
"aTwitter è un social network o strumento di micro-blogging che consente di "
"pubblicare gli aggiornamenti di stato delle vostre attività con un massimo "
"di 180 caratteri. È un modo per comunicare con amici, parenti, colleghi e "
"restare in contatto attraverso lo scambio frequente e rapido di messaggi. È "
"possibile limitare la visualizzazione degli aggiornamenti alla tua cerchia "
"di amici o, modificando come impostazione predefinita, consentire a chiunque "
"di accedervi."
#: ../doc/strings.py:22
msgid ""
@@ -533,7 +533,7 @@ msgstr "#### Pulsanti dell'applicazione"
#: ../doc/strings.py:65
msgid ""
"* Tweet: this button opens up a dialogue box to write your tweet. Normal "
"tweets must not exceed 140 characters. However you can press the long tweet "
"tweets must not exceed 280 characters. However you can press the long tweet "
"checkbox and your tweet will be posted throught Twishort, wich will allow "
"you to write longer tweets (10000 characters). If you write past this limit, "
"a sound will play to warn you. Note that the character count is displayed in "
@@ -547,7 +547,7 @@ msgid ""
"message in English describing the problem."
msgstr ""
"* Twit: Questo pulsante apre una finestra di dialogo per digitare un tweet. "
"Il limite è 140 caratteri. Tuttavia, è possibile scrivere tweet lunghi "
"Il limite è 180 caratteri. Tuttavia, è possibile scrivere tweet lunghi "
"selezionando la casella di controllo apposita che attiva Twishort(il limite "
"in questo caso sarà 10000 caratteri). Quando si supera il limite, verrà "
"riprodotto un suono di avviso. Il numero dei caratteri digitati viene "

File diff suppressed because it is too large Load Diff

View File

@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: 2017-01-18 08:42+Hora estndar central (Mxico)\n"
"PO-Revision-Date: 2017-01-23 00:07+0900\n"
"POT-Creation-Date: 2018-08-07 13:19+Hora de verano central (Mexico)\n"
"PO-Revision-Date: 2018-08-08 19:09+0900\n"
"Last-Translator: Masamitsu Misono <misono@nvsupport.org>\n"
"Language-Team: NVDA Help Desk <nvdahelp@center-aikoh.net>\n"
"Language: ja_JP\n"
@@ -14,12 +14,12 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
"X-Generator: Poedit 1.8.7\n"
"X-Generator: Poedit 2.1.1\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: ../doc/strings.py:3
msgid "Documentation for TWBlue - 0.88"
msgstr "TWBlue 0.88 取扱説明書"
msgstr "TWBlue - 0.88 取扱説明書"
#: ../doc/strings.py:4
msgid "## Table of contents"
@@ -31,7 +31,7 @@ msgstr "[TOC]"
#: ../doc/strings.py:6
msgid "## Warning!"
msgstr "## 警告"
msgstr "## 警告!"
#: ../doc/strings.py:7
msgid ""
@@ -112,17 +112,17 @@ msgstr "## 使い方"
#: ../doc/strings.py:21
msgid ""
"Twitter is a social networking or micro-blogging tool which allows you to "
"compose short status updates of your activities in 140 characters or less. "
"compose short status updates of your activities in 280 characters or less. "
"Twitter is a way for friends, family and co-workers to communicate and stay "
"connected through the exchange of quick, frequent messages. You can restrict "
"delivery of updates to those in your circle of friends or, by default, allow "
"anyone to access them."
msgstr ""
"ツイッターは、ソーシャルネットワークまたは小さなブログのようなもので、自分の"
"活動を文字以下で登校することができるツールです。ツイッターは、友達や家"
"族、同僚とコミュニケーションをとったり、接続を維持して、頻繁に素早くメッセー"
"ジを交換するための一つの方法です。あなたは、友人とのサークルなどのように、公"
"開範囲を制限するか、だれでもツイートをみえるようにすることができます。"
"活動を280文字以下で登校することができるツールです。ツイッターは、友達や家族、"
"同僚とコミュニケーションをとったり、接続を維持して、頻繁に素早くメッセージを"
"交換するための一つの方法です。あなたは、友人とのサークルなどのように、公開範"
"囲を制限するか、だれでもツイートをみえるようにすることができます。"
#: ../doc/strings.py:22
msgid ""
@@ -528,7 +528,7 @@ msgstr "#### アプリケーション上のボタン"
#: ../doc/strings.py:65
msgid ""
"* Tweet: this button opens up a dialogue box to write your tweet. Normal "
"tweets must not exceed 140 characters. However you can press the long tweet "
"tweets must not exceed 280 characters. However you can press the long tweet "
"checkbox and your tweet will be posted throught Twishort, wich will allow "
"you to write longer tweets (10000 characters). If you write past this limit, "
"a sound will play to warn you. Note that the character count is displayed in "
@@ -542,7 +542,7 @@ msgid ""
"message in English describing the problem."
msgstr ""
"* ツイート: このボタンはツイートを書き込むためのダイアログボックスを開きま"
"す。メッセージは140字以内です。書き込み字数が制限を超過した場合は警告音が鳴り"
"す。メッセージは280字以内です。書き込み字数が制限を超過した場合は警告音が鳴り"
"ます。タイトルバーには文字カウントを表示します。ツイートを短縮して投稿に"
"チェックを入れると、1万文字までのツイートをTwishortを経由して、投稿できます。"
"画像をアップロードボタンや、スペルチェックボタンや音声を添付ボタンを押すと、"

File diff suppressed because it is too large Load Diff

View File

@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: twblue-documentation 0.46\n"
"POT-Creation-Date: 2017-01-18 08:42+Hora estndar central (Mxico)\n"
"PO-Revision-Date: 2017-01-23 09:55+0200\n"
"POT-Creation-Date: 2018-08-07 13:19+Hora de verano central (Mexico)\n"
"PO-Revision-Date: 2018-08-08 10:32+0300\n"
"Last-Translator: Florian Ionașcu <florianionascu@hotmail.com>\n"
"Language-Team: Spanish <manuel@manuelcortez.net>\n"
"Language: ro\n"
@@ -14,7 +14,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
"X-Generator: Poedit 1.8.9\n"
"X-Generator: Poedit 2.0.6\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-SourceCharset: UTF-8\n"
@@ -115,9 +115,10 @@ msgid "## Usage"
msgstr "## Utilizare"
#: ../doc/strings.py:21
#, fuzzy
msgid ""
"Twitter is a social networking or micro-blogging tool which allows you to "
"compose short status updates of your activities in 140 characters or less. "
"compose short status updates of your activities in 280 characters or less. "
"Twitter is a way for friends, family and co-workers to communicate and stay "
"connected through the exchange of quick, frequent messages. You can restrict "
"delivery of updates to those in your circle of friends or, by default, allow "
@@ -523,7 +524,7 @@ msgstr "#### Butoane în aplicație"
#: ../doc/strings.py:65
msgid ""
"* Tweet: this button opens up a dialogue box to write your tweet. Normal "
"tweets must not exceed 140 characters. However you can press the long tweet "
"tweets must not exceed 280 characters. However you can press the long tweet "
"checkbox and your tweet will be posted throught Twishort, wich will allow "
"you to write longer tweets (10000 characters). If you write past this limit, "
"a sound will play to warn you. Note that the character count is displayed in "
@@ -537,7 +538,7 @@ msgid ""
"message in English describing the problem."
msgstr ""
"* Postare: acest buton deschide o casetă de dialog pentru a vă scrie "
"postarea. Postările normale nu trebuie să depășească 140 de caractere. "
"postarea. Postările normale nu trebuie să depășească 280 de caractere. "
"Totuși, puteți bifa caseta postare lungă, iar postarea dumneavoastră va fi "
"postată prin Twishort, care vă permite să scrieți postări lungi (10000 de "
"caractere). Dacă depășiți această limită, se va reda un sunet pentru a vă "

File diff suppressed because it is too large Load Diff

View File

@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: TW Blue documentation 0.46\n"
"POT-Creation-Date: 2017-12-06 15:59+Hora estndar central (Mxico)\n"
"PO-Revision-Date: 2017-01-18 18:50+0400\n"
"POT-Creation-Date: 2018-08-07 13:19+Hora de verano central (Mexico)\n"
"PO-Revision-Date: 2018-08-14 21:44+0400\n"
"Last-Translator: Valeria <luciana.lu3a@gmail.com>\n"
"Language-Team: \n"
"Language: ru\n"
@@ -117,14 +117,14 @@ msgstr "## Использование"
#: ../doc/strings.py:21
msgid ""
"Twitter is a social networking or micro-blogging tool which allows you to "
"compose short status updates of your activities in 140 characters or less. "
"compose short status updates of your activities in 280 characters or less. "
"Twitter is a way for friends, family and co-workers to communicate and stay "
"connected through the exchange of quick, frequent messages. You can restrict "
"delivery of updates to those in your circle of friends or, by default, allow "
"anyone to access them."
msgstr ""
"Твиттер - это социальная сеть или инструмент для микро-блоггинга, "
"позволяющий создавать короткие, не более 140 символов заметки. Твиттер - это "
"позволяющий создавать короткие, не более 280 символов заметки. Твиттер - это "
"возможность общаться с друзьями, членами семьи и коллегами, обмениваясь "
"быстрыми, короткими сообщениями, и оставаясь всегда на связи. Обновления "
"можно ограничить только для круга друзей или, как выбрано по умолчанию, "
@@ -541,7 +541,7 @@ msgstr "#### Кнопки приложения"
#: ../doc/strings.py:65
msgid ""
"* Tweet: this button opens up a dialogue box to write your tweet. Normal "
"tweets must not exceed 140 characters. However you can press the long tweet "
"tweets must not exceed 280 characters. However you can press the long tweet "
"checkbox and your tweet will be posted throught Twishort, wich will allow "
"you to write longer tweets (10000 characters). If you write past this limit, "
"a sound will play to warn you. Note that the character count is displayed in "
@@ -555,7 +555,7 @@ msgid ""
"message in English describing the problem."
msgstr ""
"* Твит: этой кнопкой открывается диалоговое окно для написания твита. Длина "
"обычного сообщения не должна превышать 140 символов. Однако, можно отметить "
"обычного сообщения не должна превышать 280 символов. Однако, можно отметить "
"флажок длинный твит и ваша запись будет отправлена через сервис Twishort, "
"позволяющий отправлять более длинные сообщения (10000 символов). Если вы "
"привысите лимит, прозвучит предупреждающий сигнал. Обратите внимание, что "

View File

@@ -26,7 +26,7 @@ TWBlue is an application to make Twitter simple and fast, while using as few res
## Usage
Twitter is a social networking or micro-blogging tool which allows you to compose short status updates of your activities in 140 characters or less. Twitter is a way for friends, family and co-workers to communicate and stay connected through the exchange of quick, frequent messages. You can restrict delivery of updates to those in your circle of friends or, by default, allow anyone to access them.
Twitter is a social networking or micro-blogging tool which allows you to compose short status updates of your activities in 280 characters or less. Twitter is a way for friends, family and co-workers to communicate and stay connected through the exchange of quick, frequent messages. You can restrict delivery of updates to those in your circle of friends or, by default, allow anyone to access them.
You can monitor the status of updates from your friends, family or co-workers (known as following), and they in turn can read any updates you create, (known as followers). The updates are referred to as Tweets. The Tweets are posted to your Twitter profile or Blog and are searchable using Twitter Search.
@@ -98,7 +98,7 @@ In summary, the GUI contains two core components. These are the controls you wil
#### Buttons in the application
* Tweet: this button opens up a dialogue box to write your tweet. Normal tweets must not exceed 140 characters. However you can press the long tweet checkbox and your tweet will be posted throught Twishort, wich will allow you to write longer tweets (10000 characters). If you write past this limit, a sound will play to warn you. Note that the character count is displayed in the title bar. You may use the shorten and expand URL buttons to comply with the character limit. You can upload a picture, check spelling, attach audio or translate your message by selecting one of the available buttons in the dialogue box. In addition, you can autocomplete the entering of users by pressing Alt + C or the button for that purpose if you have the database of users configured. Press enter to send the tweet. If all goes well, you'll hear a sound confirming it. Otherwise, the screen reader will speak an error message in English describing the problem.
* Tweet: this button opens up a dialogue box to write your tweet. Normal tweets must not exceed 280 characters. However you can press the long tweet checkbox and your tweet will be posted throught Twishort, wich will allow you to write longer tweets (10000 characters). If you write past this limit, a sound will play to warn you. Note that the character count is displayed in the title bar. You may use the shorten and expand URL buttons to comply with the character limit. You can upload a picture, check spelling, attach audio or translate your message by selecting one of the available buttons in the dialogue box. In addition, you can autocomplete the entering of users by pressing Alt + C or the button for that purpose if you have the database of users configured. Press enter to send the tweet. If all goes well, you'll hear a sound confirming it. Otherwise, the screen reader will speak an error message in English describing the problem.
* Retweet: this button retweets the message you're reading. After you press it, if you haven't configured the application not to do so, you'll be asked if you want to add a comment or simply send it as written. If you choose to add a comment, it will post a quoted tweet, that is, the comment with a link to the originating tweet.
* Reply: when you're viewing a tweet, you can reply to the user who sent it by pressing this button. A dialogue will open up similar to the one for tweeting. If there are more users referred to in the tweet, you can press tab and activate the mention to all checkbox, or enabling checkbox for the users you want to mention separately. When you're on the friends or followers lists, the button will be called mention instead.
* Direct message: exactly like sending a tweet, but it's a private message which can only be read by the user you send it to. Press shift-tab twice to see the recipient. If there were other users mentioned in the tweet you were reading, you can arrow up or down to choose which one to send it to, or write the username yourself without the at sign. In addition, you can autocomplete the entering of users by pressing Alt + C or the button for that purpose if you have the database of users configured.

View File

@@ -20,8 +20,8 @@ CommercialUse=true
EULAVersion=2
[Version]
PackageVersion=0.93.0.0
DisplayVersion=0.93
PackageVersion=0.94.0.0
DisplayVersion=0.94
[Control]
Icons=1

26
requirements.txt Normal file
View File

@@ -0,0 +1,26 @@
wxpython
six
configobj
markdown
future
requests
oauthlib
requests-oauthlib
requests-toolbelt
pypubsub==3.3.0
pygeocoder
arrow
python-dateutil
futures
winpaths
PySocks
win_inet_pton
yandex.translate
idna
chardet
urllib3
youtube-dl
python-vlc
pywin32
certifi
backports.functools_lru_cache

View File

@@ -14,11 +14,11 @@ SetCompress auto
SetCompressor /solid lzma
SetDatablockOptimize on
VIAddVersionKey ProductName "TWBlue"
VIAddVersionKey LegalCopyright "Copyright 2016 Manuel Cortéz."
VIAddVersionKey ProductVersion "0.93"
VIAddVersionKey FileVersion "0.93"
VIProductVersion "0.93.0.0"
VIFileVersion "0.93.0.0"
VIAddVersionKey LegalCopyright "Copyright 2018 Manuel Cortéz."
VIAddVersionKey ProductVersion "0.94"
VIAddVersionKey FileVersion "0.94"
VIProductVersion "0.94.0.0"
VIFileVersion "0.94.0.0"
!insertmacro MUI_PAGE_WELCOME
!define MUI_LICENSEPAGE_RADIOBUTTONS
!insertmacro MUI_PAGE_LICENSE "license.txt"
@@ -72,10 +72,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.93"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "DisplayVersion" "0.94"
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" 93
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "VersionMinor" 94
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "NoModify" 1
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "NoRepair" 1
SectionEnd

View File

@@ -9,12 +9,11 @@ relative_times = boolean(default=True)
max_api_calls = integer(default=1)
max_tweets_per_call = integer(default=100)
reverse_timelines = boolean(default=False)
time_to_check_streams = integer(default=30)
announce_stream_status = boolean(default=True)
retweet_mode = string(default="ask")
persist_size = integer(default=0)
show_screen_names = boolean(default=False)
buffer_order = list(default=list('home','mentions','dm','sent_dm','sent_tweets','favorites','followers','friends','blocks','muted','events'))
buffer_order = list(default=list('home','mentions', 'dm', 'sent_dm', 'sent_tweets','favorites','followers','friends','blocks','muted','events'))
[sound]
volume = float(default=1.0)
@@ -44,4 +43,8 @@ save_followers_in_autocompletion_db = boolean(default=False)
save_friends_in_autocompletion_db = boolean(default=False)
ocr_language = string(default="")
[reporting]
braille_reporting = boolean(default=True)
speech_reporting = boolean(default=True)
[filters]

View File

@@ -5,6 +5,7 @@ ignored_sessions = list(default=list())
[app-settings]
language = string(default="system")
update_period = integer(default=2)
hide_gui = boolean(default=False)
voice_enabled = boolean(default=False)
ask_at_exit = boolean(default=True)
@@ -17,6 +18,10 @@ log_level = string(default="error")
load_keymap = string(default="default.keymap")
donation_dialog_displayed = boolean(default=False)
check_for_updates = boolean(default=True)
remember_mention_and_longtweet = boolean(default=False)
longtweet = boolean(default=false)
mention_all = boolean(default=False)
no_streaming = boolean(default=False)
[proxy]
type = string(default="Direct connection")

View File

@@ -1,17 +1,19 @@
# -*- coding: utf-8 -*-
import datetime
name = 'TWBlue'
snapshot = False
snapshot = True
if snapshot == False:
version = "0.93"
version = "0.94"
update_url = 'https://twblue.es/updates/stable.php'
mirror_update_url = 'https://raw.githubusercontent.com/manuelcortez/TWBlue/next-gen/updates/stable.json'
else:
version = "3"
version = "11"
update_url = 'https://twblue.es/updates/snapshot.php'
mirror_update_url = 'https://raw.githubusercontent.com/manuelcortez/TWBlue/next-gen/updates/snapshots.json'
authors = [u"Manuel Cortéz", u"José Manuel Delicado"]
authorEmail = "manuel@manuelcortez.net"
copyright = u"Copyright (C) 2013-2017, Manuel cortéz."
copyright = u"Copyright (C) 2013-2018, Manuel cortéz."
description = unicode(name+" is an app designed to use Twitter simply and efficiently while using minimal system resources. This app provides access to most Twitter features.")
translators = [u"Manuel Cortéz (English)", u"Mohammed Al Shara, Hatoun Felemban (Arabic)", u"Francisco Torres (Catalan)", u"Manuel cortéz (Spanish)", u"Sukil Etxenike Arizaleta (Basque)", u"Jani Kinnunen (finnish)", u"Rémy Ruiz (French)", u"Juan Buño (Galician)", u"Steffen Schultz (German)", u"Zvonimir Stanečić (Croatian)", u"Robert Osztolykan (Hungarian)", u"Christian Leo Mameli (Italian)", u"Riku (Japanese)", u"Paweł Masarczyk (Polish)", u"Odenilton Júnior Santos (Portuguese)", u"Florian Ionașcu, Nicușor Untilă (Romanian)", u"Natalia Hedlund, Valeria Kuznetsova (Russian)", u"Aleksandar Đurić (Serbian)", u"Burak Yüksek (Turkish)"]
url = u"https://twblue.es"

View File

@@ -2,6 +2,7 @@ from audio_services import matches_url
import json
import re
import urllib
import youtube_utils
@matches_url('https://audioboom.com')
def convert_audioboom(url):
@@ -28,5 +29,9 @@ def convert_soundcloud (url):
else:
raise TypeError('%r is not streamable' % url)
@matches_url ('https://www.youtube.com/watch')
def convert_youtube_long (url):
return youtube_utils.get_video_url(url)
def convert_generic_audio(url):
return url

View File

@@ -0,0 +1,7 @@
# -*- coding: utf-8 -*-
""" this package contains logic related to buffers. A buffer is a virtual representation of a group of items retrieved through the Social network API'S.
Ideally, new social networks added to TWBlue will have its own "buffers", and these buffers should be defined within this package, following the Twitter example.
Currently, the package contains the following modules:
* baseBuffers: Define a set of functions and structure to be expected in all buffers. New buffers should inherit its classes from one of the classes present here.
* twitterBuffers: All other code, specific to Twitter.
"""

View File

@@ -0,0 +1,201 @@
# -*- coding: utf-8 -*-
""" Common logic to all buffers in TWBlue."""
import logging
import wx
import output
import config
import sound
import widgetUtils
from pubsub import pub
from wxUI import buffers
log = logging.getLogger("controller.buffers.baseBuffers")
def _items_exist(function):
""" A decorator to execute a function only if the selected buffer contains at least one item."""
def function_(self, *args, **kwargs):
if self.buffer.list.get_count() > 0:
function(self, *args, **kwargs)
return function_
class buffer(object):
""" A basic buffer object. This should be the base class for all other derived buffers."""
def __init__(self, parent=None, function=None, session=None, *args, **kwargs):
"""Inits the main controller for this buffer:
@ parent wx.Treebook object: Container where we will put this buffer.
@ function str or None: function to be called periodically and update items on this buffer.
@ session sessionmanager.session object or None: Session handler for settings, database and data access.
"""
super(buffer, self).__init__()
self.function = function
# Compose_function will be used to render an object on this buffer. Normally, signature is as follows:
# compose_function(item, db, relative_times, show_screen_names=False, session=None)
# Read more about compose functions in twitter/compose.py.
self.compose_function = None
self.args = args
self.kwargs = kwargs
# This will be used as a reference to the wx.Panel object wich stores the buffer GUI.
self.buffer = None
# This should countains the account associated to this buffer.
self.account = ""
# This controls whether the start_stream function should be called when starting the program.
self.needs_init = True
# if this is set to False, the buffer will be ignored on the invisible interface.
self.invisible = False
# Control variable, used to track time of execution for calls to start_stream.
self.execution_time = 0
def clear_list(self):
pass
def get_event(self, ev):
""" Catch key presses in the WX interface and generate the corresponding event names."""
if ev.GetKeyCode() == wx.WXK_RETURN and ev.ControlDown(): event = "audio"
elif ev.GetKeyCode() == wx.WXK_RETURN: event = "url"
elif ev.GetKeyCode() == wx.WXK_F5: event = "volume_down"
elif ev.GetKeyCode() == wx.WXK_F6: event = "volume_up"
elif ev.GetKeyCode() == wx.WXK_DELETE and ev.ShiftDown(): event = "clear_list"
elif ev.GetKeyCode() == wx.WXK_DELETE: event = "destroy_status"
else:
event = None
ev.Skip()
if event != None:
try:
getattr(self, event)()
except AttributeError:
pass
def volume_down(self):
""" Decreases volume by 5%"""
if self.session.settings["sound"]["volume"] > 0.0:
if self.session.settings["sound"]["volume"] <= 0.05:
self.session.settings["sound"]["volume"] = 0.0
else:
self.session.settings["sound"]["volume"] -=0.05
sound.URLPlayer.player.audio_set_volume(int(self.session.settings["sound"]["volume"]*100.0))
self.session.sound.play("volume_changed.ogg")
self.session.settings.write()
def volume_up(self):
""" Increases volume by 5%."""
if self.session.settings["sound"]["volume"] < 1.0:
if self.session.settings["sound"]["volume"] >= 0.95:
self.session.settings["sound"]["volume"] = 1.0
else:
self.session.settings["sound"]["volume"] +=0.05
sound.URLPlayer.player.audio_set_volume(int(self.session.settings["sound"]["volume"]*100))
self.session.sound.play("volume_changed.ogg")
self.session.settings.write()
def start_stream(self, mandatory=False, play_sound=True):
pass
def get_more_items(self):
output.speak(_(u"This action is not supported for this buffer"), True)
def put_items_on_list(self, items):
pass
def remove_buffer(self):
return False
def remove_item(self, item):
f = self.buffer.list.get_selected()
self.buffer.list.remove_item(item)
self.buffer.list.select_item(f)
def bind_events(self):
pass
def get_object(self):
return self.buffer
def get_message(self):
pass
def set_list_position(self, reversed=False):
if reversed == False:
self.buffer.list.select_item(-1)
else:
self.buffer.list.select_item(0)
def reply(self):
pass
def send_message(self):
pass
def share_item(self):
pass
def destroy_status(self):
pass
def post_status(self, *args, **kwargs):
pass
def save_positions(self):
try:
self.session.db[self.name+"_pos"]=self.buffer.list.get_selected()
except AttributeError:
pass
class accountPanel(buffer):
def __init__(self, parent, name, account, account_id):
super(accountPanel, self).__init__(parent, None, name)
log.debug("Initializing buffer %s, account %s" % (name, account,))
self.buffer = buffers.accountPanel(parent, name)
self.type = self.buffer.type
self.compose_function = None
self.session = None
self.needs_init = False
self.account = account
self.buffer.account = account
self.name = name
self.account_id = account_id
def setup_account(self):
widgetUtils.connect_event(self.buffer, widgetUtils.CHECKBOX, self.autostart, menuitem=self.buffer.autostart_account)
if self.account_id in config.app["sessions"]["ignored_sessions"]:
self.buffer.change_autostart(False)
else:
self.buffer.change_autostart(True)
if not hasattr(self, "logged"):
self.buffer.change_login(login=False)
widgetUtils.connect_event(self.buffer.login, widgetUtils.BUTTON_PRESSED, self.logout)
else:
self.buffer.change_login(login=True)
widgetUtils.connect_event(self.buffer.login, widgetUtils.BUTTON_PRESSED, self.login)
def login(self, *args, **kwargs):
del self.logged
self.setup_account()
pub.sendMessage("login", session_id=self.account_id)
def logout(self, *args, **kwargs):
self.logged = False
self.setup_account()
pub.sendMessage("logout", session_id=self.account_id)
def autostart(self, *args, **kwargs):
if self.account_id in config.app["sessions"]["ignored_sessions"]:
self.buffer.change_autostart(True)
config.app["sessions"]["ignored_sessions"].remove(self.account_id)
else:
self.buffer.change_autostart(False)
config.app["sessions"]["ignored_sessions"].append(self.account_id)
config.app.write()
class emptyPanel(buffer):
def __init__(self, parent, name, account):
super(emptyPanel, self).__init__(parent=parent)
log.debug("Initializing buffer %s, account %s" % (name, account,))
self.buffer = buffers.emptyPanel(parent, name)
self.type = self.buffer.type
self.compose_function = None
self.account = account
self.buffer.account = account
self.name = name
self.session = None
self.needs_init = True

View File

@@ -14,6 +14,9 @@ class filter(object):
contains = self.dialog.get("contains")
term = self.dialog.get("term")
regexp = self.dialog.get("regexp")
allow_rts = self.dialog.get("allow_rts")
allow_quotes = self.dialog.get("allow_quotes")
allow_replies = self.dialog.get("allow_replies")
load_language = self.dialog.get("load_language")
ignore_language = self.dialog.get("ignore_language")
lang_option = None
@@ -26,7 +29,7 @@ class filter(object):
for i in application.supported_languages:
if i["name"] in langs:
langcodes.append(i["code"])
d = dict(in_buffer=self.buffer.name, word=term, regexp=regexp, in_lang=lang_option, languages=langcodes, if_word_exists=contains)
d = dict(in_buffer=self.buffer.name, word=term, regexp=regexp, in_lang=lang_option, languages=langcodes, if_word_exists=contains, allow_rts=allow_rts, allow_quotes=allow_quotes, allow_replies=allow_replies)
if self.buffer.session.settings["filters"].has_key(title):
return commonMessageDialogs.existing_filter()
self.buffer.session.settings["filters"][title] = d
@@ -49,7 +52,6 @@ class filterManager(object):
def insert_filters(self, filters):
self.dialog.filters.clear()
for f in filters.keys():
# ToDo: Add titles to filters.
filterName = f
buffer = filters[f]["in_buffer"]
if filters[f]["if_word_exists"] == "True" and filters[f]["word"] != "":

View File

@@ -3,7 +3,7 @@ import widgetUtils
import output
from wxUI.dialogs import lists
from twython import TwythonError
from twitter import compose, utils
from sessions.twitter import compose, utils
from pubsub import pub
class listsController(object):
@@ -29,7 +29,7 @@ class listsController(object):
return [compose.compose_list(item) for item in self.session.db["lists"]]
def get_user_lists(self, user):
self.lists = self.session.twitter.twitter.show_lists(reverse=True, screen_name=user)
self.lists = self.session.twitter.show_lists(reverse=True, screen_name=user)
return [compose.compose_list(item) for item in self.lists]
def create_list(self, *args, **kwargs):
@@ -43,7 +43,7 @@ class listsController(object):
else:
mode = "private"
try:
new_list = self.session.twitter.twitter.create_list(name=name, description=description, mode=mode)
new_list = self.session.twitter.create_list(name=name, description=description, mode=mode)
self.session.db["lists"].append(new_list)
self.dialog.lista.insert_item(False, *compose.compose_list(new_list))
except TwythonError as e:
@@ -63,7 +63,7 @@ class listsController(object):
else:
mode = "private"
try:
self.session.twitter.twitter.update_list(list_id=list["id"], name=name, description=description, mode=mode)
self.session.twitter.update_list(list_id=list["id"], name=name, description=description, mode=mode)
self.session.get_lists()
self.dialog.populate_list(self.get_all_lists(), True)
except TwythonError as e:
@@ -75,7 +75,7 @@ class listsController(object):
list = self.session.db["lists"][self.dialog.get_item()]["id"]
if lists.remove_list() == widgetUtils.YES:
try:
self.session.twitter.twitter.delete_list(list_id=list)
self.session.twitter.delete_list(list_id=list)
self.session.db["lists"].pop(self.dialog.get_item())
self.dialog.lista.remove_item(self.dialog.get_item())
except TwythonError as e:
@@ -90,7 +90,7 @@ class listsController(object):
if self.dialog.lista.get_count() == 0: return
list_id = self.lists[self.dialog.get_item()]["id"]
try:
list = self.session.twitter.twitter.subscribe_to_list(list_id=list_id)
list = self.session.twitter.subscribe_to_list(list_id=list_id)
item = utils.find_item(list["id"], self.session.db["lists"])
self.session.db["lists"].append(list)
except TwythonError as e:
@@ -100,7 +100,7 @@ class listsController(object):
if self.dialog.lista.get_count() == 0: return
list_id = self.lists[self.dialog.get_item()]["id"]
try:
list = self.session.twitter.twitter.unsubscribe_from_list(list_id=list_id)
list = self.session.twitter.unsubscribe_from_list(list_id=list_id)
self.session.db["lists"].remove(list)
except TwythonError as e:
output.speak("error %s: %s" % (e.status_code, e.msg))

File diff suppressed because it is too large Load Diff

View File

@@ -2,19 +2,24 @@
import re
import platform
import attach
import arrow
import languageHandler
system = platform.system()
import widgetUtils
import output
import url_shortener
import sound
import config
from pubsub import pub
if system == "Windows":
from wxUI.dialogs import message, urlList
from wxUI import commonMessageDialogs
from extra import translator, SpellChecker, autocompletionUsers
from extra.AudioUploader import audioUploader
elif system == "Linux":
from gtkUI.dialogs import message
from twitter import utils
from sessions.twitter import utils
class basicTweet(object):
""" This class handles the tweet main features. Other classes should derive from this class."""
@@ -26,14 +31,14 @@ class basicTweet(object):
self.message = getattr(message, messageType)(title, caption, text, *args, **kwargs)
widgetUtils.connect_event(self.message.spellcheck, widgetUtils.BUTTON_PRESSED, self.spellcheck)
widgetUtils.connect_event(self.message.attach, widgetUtils.BUTTON_PRESSED, self.attach)
# if system == "Windows":
# if messageType != "dm":
widgetUtils.connect_event(self.message.text, widgetUtils.ENTERED_TEXT, self.text_processor)
widgetUtils.connect_event(self.message.shortenButton, widgetUtils.BUTTON_PRESSED, self.shorten)
widgetUtils.connect_event(self.message.unshortenButton, widgetUtils.BUTTON_PRESSED, self.unshorten)
widgetUtils.connect_event(self.message.translateButton, widgetUtils.BUTTON_PRESSED, self.translate)
if hasattr(self.message, "long_tweet"):
widgetUtils.connect_event(self.message.long_tweet, widgetUtils.CHECKBOX, self.text_processor)
if config.app["app-settings"]["remember_mention_and_longtweet"]:
self.message.long_tweet.SetValue(config.app["app-settings"]["longtweet"])
self.attachments = []
def translate(self, event=None):
@@ -114,11 +119,12 @@ class basicTweet(object):
url = dlg.uploaderFunction.get_url()
pub.unsubscribe(dlg.uploaderDialog.update, "uploading")
dlg.uploaderDialog.destroy()
if url != 0:
if "sndup.net/" in url:
self.message.set_text(self.message.get_text()+url+" #audio")
self.text_processor()
else:
output.speak(_(u"Unable to upload the audio"))
commonMessageDialogs.common_error(url)
dlg.cleanup()
dlg = audioUploader.audioUploader(self.session.settings, completed_callback)
self.message.text_focus()
@@ -148,7 +154,8 @@ class reply(tweet):
if len(users) > 0:
widgetUtils.connect_event(self.message.mentionAll, widgetUtils.CHECKBOX, self.mention_all)
self.message.enable_button("mentionAll")
self.message.set("mentionAll", True)
if config.app["app-settings"]["remember_mention_and_longtweet"]:
self.message.mentionAll.SetValue(config.app["app-settings"]["mention_all"])
self.mention_all()
self.message.set_cursor_at_end()
self.text_processor()
@@ -188,12 +195,13 @@ class dm(basicTweet):
c.show_menu("dm")
class viewTweet(basicTweet):
def __init__(self, tweet, tweetList, is_tweet=True):
def __init__(self, tweet, tweetList, is_tweet=True, utc_offset=0, date=""):
""" This represents a tweet displayer. However it could be used for showing something wich is not a tweet, like a direct message or an event.
param tweet: A dictionary that represents a full tweet or a string for non-tweets.
param tweetList: If is_tweet is set to True, this could be a list of quoted tweets.
param is_tweet: True or false, depending wether the passed object is a tweet or not."""
if is_tweet == True:
self.title = _(u"Tweet")
image_description = []
text = ""
for i in xrange(0, len(tweetList)):
@@ -223,6 +231,8 @@ class viewTweet(basicTweet):
favs_count = str(tweet["favorite_count"])
# Gets the client from where this tweet was made.
source = str(re.sub(r"(?s)<.*?>", "", tweet["source"].encode("utf-8")))
original_date = arrow.get(tweet["created_at"], "ddd MMM DD H:m:s Z YYYY", locale="en")
date = original_date.replace(seconds=utc_offset).format(_(u"MMM D, YYYY. H:m"), locale=languageHandler.getLanguage())
if text == "":
if tweet.has_key("message"):
value = "message"
@@ -244,12 +254,13 @@ class viewTweet(basicTweet):
for z in tweet["retweeted_status"]["extended_entities"]["media"]:
if z.has_key("ext_alt_text") and z["ext_alt_text"] != None:
image_description.append(z["ext_alt_text"])
self.message = message.viewTweet(text, rt_count, favs_count, source.decode("utf-8"))
self.message = message.viewTweet(text, rt_count, favs_count, source.decode("utf-8"), date)
self.message.set_title(len(text))
[self.message.set_image_description(i) for i in image_description]
else:
self.title = _(u"View item")
text = tweet
self.message = message.viewNonTweet(text)
self.message = message.viewNonTweet(text, date)
widgetUtils.connect_event(self.message.spellcheck, widgetUtils.BUTTON_PRESSED, self.spellcheck)
widgetUtils.connect_event(self.message.translateButton, widgetUtils.BUTTON_PRESSED, self.translate)
if self.contain_urls() == True:

View File

@@ -61,13 +61,16 @@ class globalSettingsController(object):
else:
self.dialog.general.autostart.Enable(False)
self.dialog.set_value("general", "ask_at_exit", config.app["app-settings"]["ask_at_exit"])
self.dialog.set_value("general", "no_streaming", config.app["app-settings"]["no_streaming"])
self.dialog.set_value("general", "play_ready_sound", config.app["app-settings"]["play_ready_sound"])
self.dialog.set_value("general", "speak_ready_msg", config.app["app-settings"]["speak_ready_msg"])
self.dialog.set_value("general", "handle_longtweets", config.app["app-settings"]["handle_longtweets"])
self.dialog.set_value("general", "use_invisible_shorcuts", config.app["app-settings"]["use_invisible_keyboard_shorcuts"])
self.dialog.set_value("general", "disable_sapi5", config.app["app-settings"]["voice_enabled"])
self.dialog.set_value("general", "hide_gui", config.app["app-settings"]["hide_gui"])
self.dialog.set_value("general", "update_period", config.app["app-settings"]["update_period"])
self.dialog.set_value("general", "check_for_updates", config.app["app-settings"]["check_for_updates"])
self.dialog.set_value("general", "remember_mention_and_longtweet", config.app["app-settings"]["remember_mention_and_longtweet"])
proxyTypes=config.proxyTypes
self.dialog.create_proxy([_(u"Direct connection")]+proxyTypes)
if config.app["proxy"]["type"] not in proxyTypes:
@@ -92,13 +95,18 @@ class globalSettingsController(object):
kmFile = open(paths.config_path("keymap.keymap"), "w")
kmFile.close()
self.needs_restart = True
if config.app["app-settings"]["autostart"] != self.dialog.get_value("general", "autostart") and paths.mode == "installed":
config.app["app-settings"]["autostart"] = self.dialog.get_value("general", "autostart")
autostart_windows.setAutoStart(application.name, enable=self.dialog.get_value("general", "autostart"))
if config.app["app-settings"]["use_invisible_keyboard_shorcuts"] != self.dialog.get_value("general", "use_invisible_shorcuts"):
config.app["app-settings"]["use_invisible_keyboard_shorcuts"] = self.dialog.get_value("general", "use_invisible_shorcuts")
pub.sendMessage("invisible-shorcuts-changed", registered=self.dialog.get_value("general", "use_invisible_shorcuts"))
if config.app["app-settings"]["no_streaming"] != self.dialog.get_value("general", "no_streaming"):
config.app["app-settings"]["no_streaming"] = self.dialog.get_value("general", "no_streaming")
self.needs_restart = True
if config.app["app-settings"]["update_period"] != self.dialog.get_value("general", "update_period"):
config.app["app-settings"]["update_period"] = self.dialog.get_value("general", "update_period")
self.needs_restart = True
config.app["app-settings"]["voice_enabled"] = self.dialog.get_value("general", "disable_sapi5")
config.app["app-settings"]["hide_gui"] = self.dialog.get_value("general", "hide_gui")
config.app["app-settings"]["ask_at_exit"] = self.dialog.get_value("general", "ask_at_exit")
@@ -106,6 +114,7 @@ class globalSettingsController(object):
config.app["app-settings"]["play_ready_sound"] = self.dialog.get_value("general", "play_ready_sound")
config.app["app-settings"]["speak_ready_msg"] = self.dialog.get_value("general", "speak_ready_msg")
config.app["app-settings"]["check_for_updates"] = self.dialog.get_value("general", "check_for_updates")
config.app["app-settings"]["remember_mention_and_longtweet"] = self.dialog.get_value("general", "remember_mention_and_longtweet")
if config.app["proxy"]["type"]!=self.dialog.get_value("proxy", "type") or config.app["proxy"]["server"] != self.dialog.get_value("proxy", "server") or config.app["proxy"]["port"] != self.dialog.get_value("proxy", "port") or config.app["proxy"]["user"] != self.dialog.get_value("proxy", "user") or config.app["proxy"]["password"] != self.dialog.get_value("proxy", "password"):
if self.is_started == True:
self.needs_restart = True
@@ -129,7 +138,6 @@ class accountSettingsController(globalSettingsController):
widgetUtils.connect_event(self.dialog.general.au, widgetUtils.BUTTON_PRESSED, self.manage_autocomplete)
self.dialog.set_value("general", "relative_time", self.config["general"]["relative_times"])
self.dialog.set_value("general", "show_screen_names", self.config["general"]["show_screen_names"])
self.dialog.set_value("general", "apiCalls", self.config["general"]["max_api_calls"])
self.dialog.set_value("general", "itemsPerApiCall", self.config["general"]["max_tweets_per_call"])
self.dialog.set_value("general", "reverse_timelines", self.config["general"]["reverse_timelines"])
rt = self.config["general"]["retweet_mode"]
@@ -140,6 +148,9 @@ class accountSettingsController(globalSettingsController):
else:
self.dialog.set_value("general", "retweet_mode", _(u"Retweet with comments"))
self.dialog.set_value("general", "persist_size", str(self.config["general"]["persist_size"]))
self.dialog.create_reporting()
self.dialog.set_value("reporting", "speech_reporting", self.config["reporting"]["speech_reporting"])
self.dialog.set_value("reporting", "braille_reporting", self.config["reporting"]["braille_reporting"])
self.dialog.create_other_buffers()
buffer_values = self.get_buffers_list()
self.dialog.buffers.insert_buffers(buffer_values)
@@ -178,7 +189,6 @@ class accountSettingsController(globalSettingsController):
self.needs_restart = True
self.config["general"]["relative_times"] = self.dialog.get_value("general", "relative_time")
self.config["general"]["show_screen_names"] = self.dialog.get_value("general", "show_screen_names")
self.config["general"]["max_api_calls"] = self.dialog.get_value("general", "apiCalls")
self.config["general"]["max_tweets_per_call"] = self.dialog.get_value("general", "itemsPerApiCall")
if self.config["general"]["persist_size"] != self.dialog.get_value("general", "persist_size"):
if self.dialog.get_value("general", "persist_size") == '':
@@ -204,6 +214,8 @@ class accountSettingsController(globalSettingsController):
if set(self.config["general"]["buffer_order"]) != set(buffers_list) or buffers_list != self.config["general"]["buffer_order"]:
self.needs_restart = True
self.config["general"]["buffer_order"] = buffers_list
self.config["reporting"]["speech_reporting"] = self.dialog.get_value("reporting", "speech_reporting")
self.config["reporting"]["braille_reporting"] = self.dialog.get_value("reporting", "braille_reporting")
self.config["mysc"]["ocr_language"] = OCRSpace.OcrLangs[self.dialog.extras.ocr_lang.GetSelection()]
# if self.config["other_buffers"]["show_followers"] != self.dialog.get_value("buffers", "followers"):
# self.config["other_buffers"]["show_followers"] = self.dialog.get_value("buffers", "followers")
@@ -277,7 +289,6 @@ class accountSettingsController(globalSettingsController):
all_buffers['friends']=_(u"Friends")
all_buffers['blocks']=_(u"Blocked users")
all_buffers['muted']=_(u"Muted users")
all_buffers['events']=_(u"Events")
list_buffers = []
hidden_buffers=[]
for i in all_buffers.keys():
@@ -291,27 +302,4 @@ class accountSettingsController(globalSettingsController):
def toggle_buffer_active(self, ev):
change = self.dialog.buffers.get_event(ev)
if change == True:
self.dialog.buffers.change_selected_item()
# def manage_pocket(self, *args, **kwargs):
# if self.dialog.services.get_pocket_status() == _(u"Connect your Pocket account"):
# self.connect_pocket()
# else:
# self.disconnect_pocket()
# def connect_pocket(self):
# dlg = self.dialog.services.show_pocket_dialog()
# if dlg == widgetUtils.YES:
# request_token = pocket.Pocket.get_request_token(consumer_key=keys.keyring.get("pocket_consumer_key"), redirect_uri="http://127.0.0.1:8080")
# auth_url = pocket.Pocket.get_auth_url(code=request_token, redirect_uri="http://127.0.0.1:8080")
# webbrowser.open_new_tab(auth_url)
# httpd = BaseHTTPServer.HTTPServer(('127.0.0.1', 8080), authorisationHandler.handler)
# while authorisationHandler.logged == False:
# httpd.handle_request()
# user_credentials = pocket.Pocket.get_credentials(consumer_key=keys.keyring.get("pocket_consumer_key"), code=request_token)
# self.dialog.services.set_pocket(True)
# self.config["services"]["pocket_access_token"] = user_credentials["access_token"]
def disconnect_dropbox(self):
self.config["services"]["pocket_access_token"] = ""
self.dialog.services.set_pocket(False)
self.dialog.buffers.change_selected_item()

View File

@@ -8,7 +8,7 @@ class trendingTopicsController(object):
self.countries = {}
self.cities = {}
self.dialog = trends.trendingTopicsDialog()
self.information = session.twitter.twitter.get_available_trends()
self.information = session.twitter.get_available_trends()
self.split_information()
widgetUtils.connect_event(self.dialog.country, widgetUtils.RADIOBUTTON, self.get_places)
widgetUtils.connect_event(self.dialog.city, widgetUtils.RADIOBUTTON, self.get_places)

View File

@@ -41,9 +41,9 @@ class profileController(object):
self.do_update()
def get_data(self, screen_name):
self.data = self.session.twitter.twitter.show_user(screen_name=screen_name)
self.data = self.session.twitter.show_user(screen_name=screen_name)
if screen_name != self.session.db["user_name"]:
self.friendship_status = self.session.twitter.twitter.show_friendship(source_screen_name=self.session.db["user_name"], target_screen_name=screen_name)
self.friendship_status = self.session.twitter.show_friendship(source_screen_name=self.session.db["user_name"], target_screen_name=screen_name)
def fill_profile_fields(self):
self.dialog.set_name(self.data["name"])
@@ -81,11 +81,11 @@ class profileController(object):
url = self.dialog.get("url")
if self.file != None:
try:
self.session.twitter.twitter.update_profile_image(image=self.file)
self.session.twitter.update_profile_image(image=self.file)
except TwythonError as e:
output.speak(u"Error %s. %s" % (e.error_code, e.msg))
try:
self.session.twitter.twitter.update_profile(name=name, description=description, location=location, url=url)
self.session.twitter.update_profile(name=name, description=description, location=location, url=url)
except TwythonError as e:
output.speak(u"Error %s. %s" % (e.error_code, e.msg))

View File

@@ -29,43 +29,43 @@ class userActionsController(object):
def follow(self, user):
try:
self.session.twitter.twitter.create_friendship(screen_name=user )
self.session.twitter.create_friendship(screen_name=user )
except TwythonError as err:
output.speak("Error %s: %s" % (err.error_code, err.msg), True)
def unfollow(self, user):
try:
id = self.session.twitter.twitter.destroy_friendship(screen_name=user )
id = self.session.twitter.destroy_friendship(screen_name=user )
except TwythonError as err:
output.speak("Error %s: %s" % (err.error_code, err.msg), True)
def mute(self, user):
try:
id = self.session.twitter.twitter.create_mute(screen_name=user )
id = self.session.twitter.create_mute(screen_name=user )
except TwythonError as err:
output.speak("Error %s: %s" % (err.error_code, err.msg), True)
def unmute(self, user):
try:
id = self.session.twitter.twitter.destroy_mute(screen_name=user )
id = self.session.twitter.destroy_mute(screen_name=user )
except TwythonError as err:
output.speak("Error %s: %s" % (err.error_code, err.msg), True)
def report(self, user):
try:
id = self.session.twitter.twitter.report_spam(screen_name=user )
id = self.session.twitter.report_spam(screen_name=user )
except TwythonError as err:
output.speak("Error %s: %s" % (err.error_code, err.msg), True)
def block(self, user):
try:
id = self.session.twitter.twitter.create_block(screen_name=user )
id = self.session.twitter.create_block(screen_name=user )
except TwythonError as err:
output.speak("Error %s: %s" % (err.error_code, err.msg), True)
def unblock(self, user):
try:
id = self.session.twitter.twitter.destroy_block(screen_name=user )
id = self.session.twitter.destroy_block(screen_name=user )
except TwythonError as err:
output.speak("Error %s: %s" % (err.error_code, err.msg), True)

View File

@@ -52,7 +52,7 @@ class audioUploader(object):
self.uploaderDialog = wx_transfer_dialogs.UploadDialog(self.file)
output.speak(_(u"Attaching..."))
if self.dialog.get("services") == "SNDUp":
base_url = "http://sndup.net/post.php"
base_url = "https://sndup.net/post.php"
if len(self.config["sound"]["sndup_api_key"]) > 0:
url = base_url + '?apikey=' + self.config['sound']['sndup_api_key']
else:

View File

@@ -69,5 +69,15 @@ class Upload(object):
self.completed_callback(self.obj)
if hasattr(self,'fin') and callable(self.fin.close):
self.fin.close()
def get_url(self):
return self.response.json()['url']
try:
data = self.response.json()
except:
return _("Error in file upload: {0}").format(self.data.content,)
if data.has_key("url") and data["url"] != "0":
return data["url"]
elif data.has_key("error") and data["error"] != "0":
return data["error"]
else:
return _("Error in file upload: {0}").format(self.data.content,)

View File

@@ -6,7 +6,7 @@ import widgetUtils
class UploadDialog(widgetUtils.BaseDialog):
def __init__(self, filename, *args, **kwargs):
super(UploadDialog, self).__init__(parent=None, id=wx.NewId(), *args, **kwargs)
super(UploadDialog, self).__init__(parent=None, id=wx.ID_ANY, *args, **kwargs)
self.pane = wx.Panel(self)
self.progress_bar = wx.Gauge(parent=self.pane)
fileBox = wx.BoxSizer(wx.HORIZONTAL)

View File

@@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
import os
import logging
import wx_ui
import widgetUtils
@@ -16,6 +17,12 @@ log = logging.getLogger("extra.SpellChecker.spellChecker")
class spellChecker(object):
def __init__(self, text, dictionary):
super(spellChecker, self).__init__()
# Set Dictionary path if not set in a previous call to this method.
# Dictionary path will be located in user config, see https://github.com/manuelcortez/twblue/issues/208
dict_path = enchant.get_param("enchant.myspell.dictionary.path")
if dict_path == None:
enchant.set_param("enchant.myspell.dictionary.path", os.path.join(paths.config_path(), "dicts"))
log.debug("Dictionary path set to %s" % (os.path.join(paths.config_path(), "dicts"),))
log.debug("Creating the SpellChecker object. Dictionary: %s" % (dictionary,))
self.active = True
try:

View File

@@ -39,11 +39,11 @@ class spellCheckerDialog(wx.Dialog):
suggestionsBox = wx.BoxSizer(wx.HORIZONTAL)
suggestionsBox.Add(suggest, 0, wx.ALL, 5)
suggestionsBox.Add(self.suggestions, 0, wx.ALL, 5)
self.ignore = wx.Button(panel, -1, _(u"Ignore"))
self.ignoreAll = wx.Button(panel, -1, _(u"Ignore all"))
self.replace = wx.Button(panel, -1, _(u"Replace"))
self.replaceAll = wx.Button(panel, -1, _(u"Replace all"))
self.add = wx.Button(panel, -1, _(u"Add to personal dictionary"))
self.ignore = wx.Button(panel, -1, _(u"&Ignore"))
self.ignoreAll = wx.Button(panel, -1, _(u"I&gnore all"))
self.replace = wx.Button(panel, -1, _(u"&Replace"))
self.replaceAll = wx.Button(panel, -1, _(u"R&eplace all"))
self.add = wx.Button(panel, -1, _(u"&Add to personal dictionary"))
close = wx.Button(panel, wx.ID_CANCEL)
btnBox = wx.BoxSizer(wx.HORIZONTAL)
btnBox.Add(self.ignore, 0, wx.ALL, 5)

View File

@@ -10,7 +10,7 @@ class menu(wx.Menu):
def append_options(self, options):
for i in options:
item = wx.MenuItem(self, wx.NewId(), "%s (@%s)" % (i[1], i[0]))
item = wx.MenuItem(self, wx.ID_ANY, "%s (@%s)" % (i[1], i[0]))
self.AppendItem(item)
self.Bind(wx.EVT_MENU, lambda evt, temp=i[0]: self.select_text(evt, temp), item)

View File

@@ -16,8 +16,7 @@ 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+shift+d")
add_to_favourites = string(default="control+alt+win+f")
remove_from_favourites = string(default="alt+shift+win+f")
toggle_like = string(default="control+alt+win+f")
follow = string(default="alt+win+shift+s")
user_details = string(default="alt+win+shift+n")
view_item = string(default="alt+win+v")
@@ -46,7 +45,7 @@ search = string(default="alt+win+-")
edit_keystrokes = string(default="alt+win+k")
view_user_lists = string(default="alt+win+l")
get_more_items = string(default="alt+win+pageup")
reverse_geocode = string(default="alt+win+g")
reverse_geocode = string(default="control+win+g")
view_reverse_geocode = string(default="alt+win+shift+g")
get_trending_topics = string(default="control+win+t")
check_for_updates = string(default="alt+win+u")

View File

@@ -12,6 +12,7 @@ actions = {
"post_retweet": _(u"Retweet"),
"send_dm": _(u"Send direct message"),
"add_to_favourites": _(u"Like a tweet"),
"toggle_like": _(u"Like/unlike a tweet"),
"remove_from_favourites": _(u"Unlike a tweet"),
"follow": _(u"Open the user actions dialogue"),
"user_details": _(u"See user details"),
@@ -49,6 +50,7 @@ actions = {
"check_for_updates": _(u"Check and download updates"),
"lists_manager": _(u"Opens the list manager, which allows you to create, edit, delete and open lists in buffers."),
"configuration": _(u"Opens the global settings dialogue"),
"list_manager": _(u"Opens the list manager"),
"accountConfiguration": _(u"Opens the account settings dialogue"),
"audio": _(u"Try to play an audio file"),
"update_buffer": _(u"Updates the buffer and retrieves possible lost items there."),

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

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.

Some files were not shown because too many files have changed in this diff Show More