mirror of
https://github.com/MCV-Software/TWBlue.git
synced 2025-08-25 17:39:23 +00:00
Compare commits
59 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
12f47b85af | ||
30c0a8249e | |||
62e51ad14b | |||
d076ed1f56 | |||
9bbe325517 | |||
6f5ef6d3f1 | |||
378d277a98 | |||
![]() |
2fdbcbc152 | ||
![]() |
ef7ba0fe40 | ||
![]() |
3c5de10fe6 | ||
![]() |
230e0fa951 | ||
31192a5801 | |||
f1c974b4cf | |||
![]() |
a9f9cb7969 | ||
![]() |
3a3393e03a | ||
3a7c0c8f12 | |||
bd2460e42b | |||
![]() |
2dd262cc83 | ||
![]() |
a2cf1ac8d0 | ||
df345b5eec | |||
![]() |
b535c996d6 | ||
b131f50d42 | |||
d729f86898 | |||
![]() |
51ef047fb6 | ||
![]() |
5565e08610 | ||
ab65a8f6db | |||
7f3c363da8 | |||
7bc26a94c7 | |||
![]() |
47b8575f55 | ||
![]() |
2a27998831 | ||
![]() |
a64e89994f | ||
05a8cb7a28 | |||
![]() |
b2ebbf5b7a | ||
![]() |
a03ef851e3 | ||
7a8d000635 | |||
41b10e3a84 | |||
4056c73052 | |||
ef95244f0c | |||
143ad70073 | |||
817d7bd6bb | |||
3fca5c20fb | |||
![]() |
a373ef8dff | ||
696d1764bd | |||
14b2189840 | |||
16a94aded1 | |||
![]() |
d352aaeaac | ||
![]() |
9250aad80b | ||
![]() |
6e9be63029 | ||
92d8c7257e | |||
![]() |
6a265f0203 | ||
![]() |
b30a0ac25b | ||
![]() |
212f49df08 | ||
2c58645e02 | |||
e11a727a77 | |||
![]() |
d2123fdab7 | ||
45263732b8 | |||
d50e8e2798 | |||
![]() |
990ddf64f5 | ||
ff529eacb4 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -17,4 +17,5 @@ src/Microsoft.VC90.MFC
|
||||
src/launcher.bat
|
||||
src/sounds/iOs
|
||||
release-snapshot/
|
||||
src/com_cache/
|
||||
src/com_cache/
|
||||
doc/strings.py
|
@@ -73,7 +73,7 @@ setuptools installs a script, called easy_install. You can find it in the python
|
||||
|
||||
easy_install will automatically get the additional libraries that these packages need to work properly.
|
||||
Run the following command to quickly install and upgrade all packages and their dependencies:
|
||||
easy_install -Z --upgrade six configobj goslate markdown future suds requests oauthlib requests-oauthlib requests-toolbelt pypubsub pygeocoder arrow==0.6 python-dateutil futures markdown microsofttranslator winpaths
|
||||
easy_install -Z --upgrade six configobj goslate markdown future suds requests oauthlib requests-oauthlib requests-toolbelt pypubsub pygeocoder arrow==0.6 python-dateutil futures microsofttranslator winpaths
|
||||
|
||||
#### Other dependencies
|
||||
|
||||
@@ -92,7 +92,7 @@ This dependency has been built using pure basic 4.61. Its source can be found at
|
||||
|
||||
* [NSIS Unicode Portable,](http://portableapps.com/apps/development/nsis_portable) version 2.46.5 rev 3
|
||||
* [PortableApps.com Launcher,](http://portableapps.com/apps/development/portableapps.com_launcher) version 2.2
|
||||
* [PortableApps.com Installer,](http://portableapps.com/apps/development/portableapps.com_installer) version 3.1.3
|
||||
* [PortableApps.com Installer,](http://portableapps.com/apps/development/portableapps.com_installer) version 3.4.2
|
||||
|
||||
Important! Install these 3 apps into the same folder, otherwise you won't be able to build the pa.c version. For example: D:\portableApps\NSISPortable, D:\PortableApps\PortableApps.com installer, ...
|
||||
|
||||
@@ -106,8 +106,9 @@ Now that you have installed all these packages, you can run TW Blue from source
|
||||
|
||||
### Generating the documentation
|
||||
|
||||
To generate the documentation in html format, navigate to the doc folder inside this repo. After that, run this command:
|
||||
python generator.py
|
||||
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.
|
||||
|
||||
|
@@ -2,7 +2,7 @@
|
||||
name = 'TWBlue'
|
||||
snapshot = False
|
||||
if snapshot == False:
|
||||
version = "0.82"
|
||||
version = "0.87"
|
||||
update_url = 'http://twblue.es/updates/twblue_ngen.json'
|
||||
mirror_update_url = 'https://raw.githubusercontent.com/manuelcortez/TWBlue/next-gen/updates/stable.json'
|
||||
else:
|
||||
|
@@ -10,14 +10,19 @@ def prepare_documentation_in_file(fileSource, fileDest):
|
||||
f2 = open(fileDest, "w")
|
||||
lns = f1.readlines()
|
||||
f2.write("# -*- coding: utf-8 -*-\n")
|
||||
f2.write("documentation = []\n")
|
||||
f2.write("documentation = [\n")
|
||||
for i in lns:
|
||||
if len(i) > 2:
|
||||
newvar = "documentation.append(_(u\"\"\"%s\"\"\"))\n" % (i[:-2])
|
||||
if "\n" == i:
|
||||
newvar = "\"\","
|
||||
elif "\n" == i[-1]:
|
||||
newvar = "_(u\"\"\"%s\"\"\"),\n" % (i[:-1])
|
||||
else:
|
||||
newvar = "documentation.append(_(u\"\"\"%s\"\"\"))\n" % (i)
|
||||
newvar = "_(u\"\"\"%s\"\"\"),\n" % (i)
|
||||
# print i[-1:]
|
||||
f2.write(newvar)
|
||||
f1.close()
|
||||
f2.write("]")
|
||||
f2.close()
|
||||
|
||||
|
||||
prepare_documentation_in_file("manual.md", "strings.py")
|
@@ -7,7 +7,7 @@ languageHandler.setLanguage("en")
|
||||
import strings
|
||||
|
||||
# the list of supported language codes of TW Blue
|
||||
languages = ["en", "es", "fr", "de", "it", "gl", "ja", "ru"]
|
||||
languages = ["en", "es", "fr", "de", "it", "gl", "ja", "ru", "ro"]
|
||||
#"eu", "ar", "ca", "es", "fi", "fr", "gl", "hu", "it", "pl", "pt", "ru", "tr"]
|
||||
|
||||
def generate_document(language):
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,184 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta http-equiv="Content-Style-Type" content="text/css" />
|
||||
<meta name="generator" content="pandoc" />
|
||||
<title>Liste des Changements</title>
|
||||
<style type="text/css">code{white-space: pre;}</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<h1 class="title">Liste des Changements</h1>
|
||||
</div>
|
||||
<h1 id="attention">Attention !</h1>
|
||||
<p>Avant de poursuivre l'essai du programme, il est considéré que c'est une version de développement. Plus précisément, la version 0.42. Cela signifie qu'il n'est pas seulement possible de trouver des erreurs, mais que vous les trouverez. L'idée est de signaler le plus d'erreurs possibles afin qu'ils puisse être résolus pour les prochaines alphas.</p>
|
||||
<p>Voici la liste des changements dans le programme. Si vous voulez lire comment l'utiliser, <a href="manual.html">voir ce document.</a> Si vous voyez un lien avec un signe dièse (#) et un code qui commence par plusieurs numéro, vous voyez une erreur qui a été signalé dans le Système de suivi d'incidences. N'hésitez pas à publier vos propres erreurs et demandes d'améliorations et nouvelles fonctionnalités à travers de cet outils, disponible dans le menu Aide de TW Blue.</p>
|
||||
<h2 id="changements-ajouter-dans-cette-nouvelle-version">Changements ajouter dans cette nouvelle version</h2>
|
||||
<ul>
|
||||
<li>Correction d'une erreur qu'elle ne permettait pas d'afficher les listes avec des accents ou des caractères spéciaux dans un tampon.</li>
|
||||
<li>Maintenant TW blue ne devrait pas actualiser les Tweets soudainement.</li>
|
||||
<li>Maintenant TW blue supporte l'option "muet" de Twitter. Lorsque cette option est activée pour un utilisateur, vous ne pouvez pas voir ces tweets ni ces mentions, mais vous le suivez toujours, et vous serez en mesure de être en contact avec lui à travers de message direct. Ceci est différent de la fonction Bloquer ou Ne pas suivre, avec cette option l'utilisateur sera pas au courant que vous avez activée l'option muet. sette option se trouvent dans la boîte de dialogue des actions utilisateur de l'interface invisible, ou dans le menu Utilisateur de l'interface graphique.</li>
|
||||
<li>Un onglet "Audio" a été ajoutée dans la boîte de dialogue de configuration qui vous permet de sélectionner les périphériques d'entrée et de sortie, régler le volume et activer/ désactiver tous les sons pour TW Blue. D'autres options ont été déplacées depuis l'onglet "Général" vers l'onglet "Audio".</li>
|
||||
<li>Le fichier de configuration a été repensé. La plupart des options devront être reconfigurés à nouveau.</li>
|
||||
<li>Vous pouvez maintenant désactiver SAPI5 afin qu'il n'intervienne pas s'il n'y a aucun lecteur d'écran supporté en cours d'exécution.</li>
|
||||
<li>Dans l'onglet Général, Vous pouvez modifier manuellement la langue. Tw Blue reqiere redémarré.</li>
|
||||
<li>Maintenant il y a une nouvelle boîte de dialogue où vous pouvez apprendre les différents sons de TW Blue.</li>
|
||||
<li>Il est possible maintenant de désactiver le son et notification d'un tampon. Le reste du client fonctionnera correctement. Appuyez sur Contrôle+Windows+Maj+m (interface invisible) ou le sélectionnez depuis le menu "Tampon" (interface visible) pour basculer entre cette fonctionnalité.</li>
|
||||
<li>Vous pouvez maintenant rechercher par utilisateur et par tweets. Les recherches de tweets sont sauvegardées dans la configuration, tandis que ceux des utilisateurs seront supprimer lors de la fermeture. Appuyez sur Ctrl+Windows+- (tiret) (interface invisible) ou le sélectionnez depuis le menu "Application" (interface visible).</li>
|
||||
<li>Vous pouvez ouvrir le tampon pour voir les favoris d'un utilisateur dans le menu "Utilisateur".</li>
|
||||
<li>Maintenant avec Contrôle+Windows+Maj+Flèche Haut / Bas (dans l'interface graphique) et Contrôle+Windows+Flèche Haut / Bas (dans l'interface invisible), vous pouvez aller au tweet précédent ou suivant dans la conversation. Pour que cela fonctionne les tweets de la conversation doivent être dans la chronologie principale.</li>
|
||||
<li>Au cours d'un enregistrement audio pour ajouter, maintenant vous pouvez mettre en pause ou reprendre l'enregistrement pour sauter des parties qui peuvent générer un audio très long.</li>
|
||||
<li>Il est maintenant possible de charger de l'audio vers Dropbox. Pour configurer le service aller dans l'onglet "Services audio" dans la boîte de dialogue de Configuration.</li>
|
||||
<li>Maintenant que vous pouvez charger de l'audio vers Dropbox, dans la boîte de dialogue pour ajouter un audio vous pouvez sélectionner le service auquelle vous souhaitez charger.</li>
|
||||
<li>Maintenant il comprend une boîte de dialogue pour la correction orthographique pour les tweets ou messages. Les langues actuellement disponibles sont: Espagnol, Anglais, Portugais, Russe et Polonais. La langue sera sélectionnée automatiquement selon la configuration de TW Blue.</li>
|
||||
<li>Ajouter la lecture automatique des Tweets pour un tampon. L'activation de cette fonctionnalité peut faire que TW Blue lit automatiquement les tweets lors de l'arrivée dans les tampons qui ont cette option activée. Appuyez sur Contrôle+Windows+e pour basculer entre cette fonction.</li>
|
||||
<li>Dans la boîte de dialogue de Configuration maintenant vous pouvez spécifiez si vous voulez que TW Blue démarre avec l'interface invisible.</li>
|
||||
<li>Les URLs s'affiche dans leur version originale. Uniquement les photos de Twitter ils apparaissent toujours comme réduites, et celles qui ont été réduites manuellement avant de les envoyer dans un tweet.</li>
|
||||
</ul>
|
||||
<h2 id="changements-ajouter-dans-la-version-0.40">Changements ajouter dans la version 0.40</h2>
|
||||
<ul>
|
||||
<li>Vous pouvez changer entre les différents paquets de sons utilisé par TW Blue et de créer vos propres sons. Chaque paquet doit être dans un répertoire par séparé dans le dossier sounds. Pour modifier le paquet de sons vous pouvez le sélectionner dans la boîte de dialogue de configuration.</li>
|
||||
<li>Les fichiers audio doivent être au format OGG.</li>
|
||||
<li>TW Blue doit être maintenant en mesure de fermer correctement.</li>
|
||||
<li>L'heure est écrit tenant en compte le format 12 heures (AM /P M).</li>
|
||||
<li>L'heure est écrit d'accord au fuseau horaire que vous avez défini dans votre compte Twitter.</li>
|
||||
<li>Ajout de nouvelles traductions en Portugais, Polonais et Russe. Merci les gars !</li>
|
||||
<li>TW Blue supprime de la configuration la chronologie de l'utilisateur qui ont changé leur noms ou supprimer leurs comptes Twitter.</li>
|
||||
<li>Maintenant est gérés la grande majorité des événements dans Twitter avec le tampon des événements.</li>
|
||||
<li>Il est maintenant possible de voir le texte des événements avec Contrôle+Maj+V (GUI) ou Contrôle+Windows+V (interface invisible).</li>
|
||||
<li>Gestionnaire de listes: Vous pouvez créer, modifier, supprimer, afficher une liste comme tampon dans TW Blue, ajouter et supprimer des membres d'une liste.</li>
|
||||
<li>Maintenant, si au démarrage de TW Blue il tente de charger une chronologie qui n'existe pas, automatiquement il la supprime de la configuration et il continue à charger normalement.</li>
|
||||
<li>Seuls seront chargées jusqu'à 400 following et followers pour éviter les problèmes avec l'API. Elle sera corrigée dans les versions futures.</li>
|
||||
<li>Pour le mode invisible, il inclus des raccourcis pour réentendre le tweet sur lequel vous êtes (Contrôle+Windows+espace) et pour copier le message dans le presse-papiers (Contrôle+Windows+c).</li>
|
||||
</ul>
|
||||
<h2 id="changements-ajouter-dans-la-version-0.38">Changements ajouter dans la version 0.38</h2>
|
||||
<ul>
|
||||
<li>Correction d'une erreur qui empêchait en donnant l'ordre de fermer.</li>
|
||||
<li>Maintenant les tweets ne finissent pas par un point obligatoirement. Si le programme détecte que le tweet se termine par une lettre ou un chiffre, il va placez un point automatiquement. Si ce n'est pas le cas, il va laisser le texte tel qu'il est.</li>
|
||||
<li>Il est maintenant possible de charger des images aux tweets et réponses. Veuillez noter que la taille des images est mis en place par twitter.</li>
|
||||
<li>Pour se déplacer vers la gauche ou vers la droite en utilisant le mode invisible, maintenant il s'annonce uniquement des informations de la position dans la liste d'éléments.</li>
|
||||
<li>TW Blue devrait maintenant fonctionner pour Windows XP au moment de la demande d'autorisation pour l'application.</li>
|
||||
<li>Ajouté une nouvelle option dans la boîte de dialogue de configuration qui vous permet de revenir à vos tampons. Cela signifie que vous pouvez choisir si vous voulez voir les tweets comme jusqu'à maintenant, ou que les plus nouveaux soit placés vers le haut et les anciens vers le bas.</li>
|
||||
<li>Maintenant les photos peuvent être chargées aux profil de Twitter, disponible à partir de la boîte de dialogue Mettre à jour votre profil.</li>
|
||||
<li>Ajouté un tampon d'événements, où ils sont stockés pour le moment quelques événements qui se déroulent dans Twitter, comme suivre ou faire que quelqu'un vous suivent, marquer un favori, que un de vos tweet soit marqué comme favoris, Etc. Vous pouvez activer et désactiver ce tampon de la boîte de dialogue de configuration.</li>
|
||||
<li>Maintenant, vous pouvez supprimer des chronologies déjà créé qui ne contiennent pas des tweets, et il ne sera pas permit de créer des chronologies pour les utilisateurs sans tweets.</li>
|
||||
<li>L'interface de l'application est traduisible. Maintenant, n'importe quel utilisateur peut faire leurs propres traductions en différentes langues.</li>
|
||||
</ul>
|
||||
<h2 id="changements-ajouter-dans-la-version-0.36">Changements ajouter dans la version 0.36</h2>
|
||||
<ul>
|
||||
<li>Les utilisateurs brésiliens pourront voir quelques messages en Portugais. (Usuários brasileiros poderão ver algumas mensagens em Português).</li>
|
||||
<li>Correction d'une erreur qui fait que quelques sons ils peuvent s'entendre et d'autres non. Maintenant, ils devraient s'entendre tous.</li>
|
||||
<li>La réconnexion aussi a reçu une correction, parce que parfois, il s'effectué de façon incorrecte et il devait s'ouvrir à nouveau l'application.</li>
|
||||
<li>Maintenant TW Blue permet de supprimer uniquement les chronologies avec la commande correspondante. Avant il s'affichées la boîte de dialogue peu importe dans quel tampon vous aviez été.</li>
|
||||
<li>Vous êtes en mesure à nouveau de voir les détails des utilisateurs avec la touche Entrée étant dans le tampon pour les following ou followers.</li>
|
||||
<li>À partir de cette version, il n'y a pas de support pour les bases de données.</li>
|
||||
<li>Vous entendrez une notification vocale lorsque quelqu'un marque comme favori un de vos tweets.</li>
|
||||
<li>Les following et followers sont déjà mis à jour.</li>
|
||||
<li>lorsque vous suivez quelqu'un, il ne se produit aucune erreur Si ne sont pas affichées les following. C'est la même chose avec les followers.</li>
|
||||
<li>Vous pouvez effacer un tampon en appuyant sur Maj+Supprimer dans la fenêtre visible, et Contrôle+Windows+Maj+Supprimer dans la fenêtre invisible. Ceci va vider tous les tweets dans le tampon courant.</li>
|
||||
</ul>
|
||||
<h2 id="changements-ajouter-dans-la-version-0.35">Changements ajouter dans la version 0.35</h2>
|
||||
<ul>
|
||||
<li>Il existe un site Web officiel pour le programme, aller sur <a href="http://twblue.com.mx">twblue.com.mx.</a> Dans cet espace, vous trouverez le système de suivi d'erreurs, le blog avec les dernières nouvelles, et la dernière version disponible.</li>
|
||||
<li>TW Blue il annonce lorsque vous êtes mentionné, et lorsque vous obtenez un message direct.</li>
|
||||
<li>Jaws il ne dit pas le raccourci clavier qui est appuyé dans le mode invisible. <a href="http://twblue.a12x.net/errores/view.php?id=11">#11</a></li>
|
||||
<li>Dans le mode invisible, les commandes Contrôle+Windows+Origine, Contrôle+Windows+Fin, Contrôle+Windows+Page Suivante et Contrôle+Windows+Page Précédente va aller vers le haut de la liste, vers la fin, 20 éléments vers le bas et 20 éléments vers le haut respectivement. <a href="http://twblue.a12x.net/errores/view.php?id=10">#10,</a> <a href="http://twblue.a12x.net/errores/view.php?id=21">#21,</a> <a href="http://twblue.a12x.net/errores/view.php?id=22">#22</a></li>
|
||||
<li>Maintenant vous pouvez lire l'audios d'Audiobook.</li>
|
||||
<li>Maintenant, le flux doit être connecté une fois que la machine revient d'une suspension.</li>
|
||||
<li>Il est possible d'enregistrer de l'audio ou charger fichiers sur SndUp.net. Si vous êtes inscrit dans cette page, vous pouvez mettre dans la configuration votre API Key pour que les fichiers se charge sur votre nom. Vous pouvez charger des fichiers Wav, OGG et MP3. Les fichiers wav ils seront récodifier en OGG.</li>
|
||||
<li>Si vous n'utilisez aucun lecteur d'écran, quelques actions de TW blue utilisent la synthèse vocale SAPI5.</li>
|
||||
<li>Il existe une version pour les architectures de 64 Bits. Merci à <span class="citation">[@jmdaweb]</span>(https://twitter.com/jmdaweb) pour prendre le travail de faire fonctionner l'application dans cette architecture et la préparez pour sa distribution.</li>
|
||||
<li>Changement dans les sons du client. Merci à <span class="citation">[@guilevi_es]</span>(https://twitter.com/guilevi_es) pour la collaboration avec le paquet de sons.</li>
|
||||
<li>Quelques messages du programme peuvent être traduits. Dans des futures versions la totalité de l'interface sera internationalisé.</li>
|
||||
<li>Et quelques correction d'erreur en plus (<a href="http://twblue.com.mx/errores/view.php?id=5">#5,</a> <a href="http://twblue.com.mx/errores/view.php?id=7">#7,</a> <a href="http://twblue.com.mx/errores/view.php?id=8">#8,</a> <a href="http://twblue.com.mx/errores/view.php?id=9">#9,</a> <a href="http://twblue.com.mx/errores/view.php?id=12">#12,</a>)</li>
|
||||
</ul>
|
||||
<h2 id="changements-ajouter-dans-la-version-0.3">Changements ajouter dans la version 0.3</h2>
|
||||
<ul>
|
||||
<li>Maintenant vous pouvez mettre à jour votre profil à partir de TW Blue. <a href="http://twblue.a12x.net/issues/view.php?id=19">#19</a></li>
|
||||
<li>Maintenant vous pouvez créer les chronologies à nouveau et ils ne donne pas de problèmes. <a href="http://twblue.a12x.net/issues/view.php?id=24">#24</a></li>
|
||||
<li>Maintenant les fichiers d'erreur sont enregistrés dans le répertoire "logs".</li>
|
||||
<li>Lorsque vous créez une chronologie, il sera mis à jour en temps réel dès le début au lieu de le mettre à jour toutes les 2 minutes.</li>
|
||||
<li>Vous pouvez maintenant demander davantage d'appels à l'API qui fonctionnera pour obtenir 200 tweets chaqu'une. Un appel est équivalent à 200 éléments de la liste principal, mentions, messages directs, favoris et chronologies. Dans le fichier de configuration Vous pouvez modifier l'option dans [twitter]/max_api_calls. Il est recommandé de ne pas demander à Twitter plus de 2 appels à l'API, ou sinon vous arriverez bientôt à la limite des appels autorisés et l'application échouera.</li>
|
||||
<li>Lorsque vous répondez à un Tweet, c'est envoyé comme réponse au même et pas comme s'il s'agissait d'un nouveau tweet.</li>
|
||||
<li>L'ancien système de rapport d'erreurs il a dû être changée. À partir de cette version, vous pouvez signaler des erreurs, directement depuis l'application. L'option Signaler une erreur ouvrira une boîte de dialogue qui vous demande des détails sur votre erreur et il va envoyer le rapport automatiquement.</li>
|
||||
<li>Ils sont déjà supprimées les following lorsque ils ne suivent pas un utilisateur.</li>
|
||||
<li>Aussi les favoris, au moment de retirer un tweet comme favori, il exécutent le changement.</li>
|
||||
<li>Ajouté une boîte de dialogue de configuration qui permet de contrôler le nombre d'appels à l'API à exécuter, si oui ou non utiliser des bases de données, et masquer ou afficher les listes de following, followers et favoris.</li>
|
||||
<li>En mentionnant les tweets, les guillemets qui entourent le message maintenant sont séparés par un espace de la dernière lettre. Il en est ainsi parce qu'avant, lorsque il y avait une URL, il causé que les guillemets facent partie de l'URL en envoyant vers des sites inexistants.</li>
|
||||
<li>Améliorations avec quelques chronologies. Vous pouvez maintenant enregistrer une chronologie sans problèmes. Il ne devrait pas faire des erreurs.</li>
|
||||
<li>Maintenant, l'audio est joué seulement avec Contrôle+Entrée, tandis que l'URL s'ouvrira avec la touche Entrée.</li>
|
||||
<li>Le flux tentera de se reconnecter à l'échec de la connexion internet.</li>
|
||||
<li>Maintenant depuis les followers et following on peut mentionner un utilisateur.</li>
|
||||
<li>Maintenant il est fournit un mode "invisible". Sous le menu "Application", dans l'option "Masquer la fenêtre" ou en appuyant sur Contrôle+M. Pour afficher la fenêtre à nouveau appuyez sur Contrôle+Windows+M.</li>
|
||||
</ul>
|
||||
<h2 id="changements-ajouter-dans-la-version-0.025">Changements ajouter dans la version 0.025</h2>
|
||||
<p>Veuillez noter que lorsque un utilisateur vous ne sui pas ou vous ne suivez pas quelqu'un d'autre, la liste des following ou des followers il ne sera pas mis à jour pour le moment. Lorsque vous redémarrez le programme, si les informations son correctes ils seront afficher.</p>
|
||||
<ul>
|
||||
<li>Correction d'une erreur qui rendait impossible de fermer l'application jusqu'à ce que le programme a annoncé qu'elle était prête. <a href="http://twblue.a12x.net/issues/view.php?id=17">#17</a> y <a href="http://twblue.a12x.net/issues/view.php?id=18">#18</a></li>
|
||||
<li>Changé la façon d'organiser les chronologies dans la configuration. Il est nécessaire de les recréer.</li>
|
||||
<li>Maintenant, vous pouvez envoyer un message direct aux following et followers en utilisant le bouton. Cela ne fonctionnait pas dans la version 0.02 et 0.021.</li>
|
||||
<li>Vous pouvez augmenter et diminuer le volume depuis la liste des followers et following.</li>
|
||||
<li>Dans la boîte de dialogue pour écrire un tweet peut être maintenant traduit le message à l'aide de Google Traductor. Une boîte de dialogue s'affiche pour demander les langues source et destination.</li>
|
||||
<li>Le menu fichier contient l'option Sortir.</li>
|
||||
<li>À partir de cette version ils se jouera uniquement les fichiers de'audio en appuyant sur Entrée s'ils contienne le hashtag #audio.</li>
|
||||
<li>Vous pouvez essayer de jouer une URL quelconque sans qui comporte le hashtag #audio en appuyant sur Contrôle+Entrée. Cette commande va tenter de reproduire la première URL trouvée.</li>
|
||||
<li>A été amélioré le moteur de recherche d'URLS, en rendant plus rapide la fonction et maintenant, devrait être capable de détecter toutes les URLS. <a href="http://twblue.a12x.net/issues/view.php?id=21">#21</a></li>
|
||||
<li>Maintenant, la boîte de dialogue qui s'affiche pour sélectionner l'utilisateur que vous souhaitez afficher les détails permet en plus de le sélectionner dans une liste, écrire le nom de l'utilisateur que vous souhaitez.</li>
|
||||
</ul>
|
||||
<h2 id="changements-ajouter-dans-la-version-0.02-et-0.021">Changements ajouter dans la version 0.02 et 0.021</h2>
|
||||
<ul>
|
||||
<li>Le message qui se reproduicé lorsque vous suivez un utilisateur maintenant dit "maintenant vous suivez à x utilisateur" en lieu de "maintenant vous ne suivez pas à x utilisateur". <a href="http://twblue.a12x.net/issues/view.php?id=5">#5</a></li>
|
||||
<li>Lorsque vous sorter une boîte de dialogue vous demandera si vous voulez le faire. Maintenant vous sorter d'une façon beaucoup plus proprement du programme, empêchant plusieurs erreurs pendant la fermeture.</li>
|
||||
<li>Changement des sons pour les dm entrant et sortant. Merci à <span class="citation">[@marcedsosa]</span>(https://twitter.com/marcedsosa) pour les nouveaux sons.</li>
|
||||
<li>Le Nom d'utilisateur de twitter il se lit dans le titre de la fenêtre.</li>
|
||||
<li>Les sons du programme aussi peuvent lire le volume depuis la configuration. Le module de sons devrait prendre moins de temps pour reproduire plusieurs des sons de l'application.</li>
|
||||
<li>Les actions d'augmenter et de diminuer le volume ils reproduisent un son indiquant que tant forts ça sonne.</li>
|
||||
<li>Il n'affichent plus les mentions de personnes qui ne vous suivent pas dans votre chronologie principal. <a href="http://twblue.a12x.net/issues/view.php?id=1">#1</a></li>
|
||||
<li>Vous pouvez maintenant supprimer les tweets et les messages directs. Vous ne pouvez supprimer que les tweets que vous avez écrit.</li>
|
||||
<li>Correction d'une erreur qui empêchait de charger correctement les différentes listes si dans quelques une d'elles ils n'y avait aucun tweet, utilisateur ou message direct. Ceci affectant surtout les comptes avec 0 favoris, 0 tweets, 0 envoyés ou 0 messages directes. <a href="http://twblue.a12x.net/issues/view.php?id=2">#2</a></li>
|
||||
<li>Maintenant à chaque fois qu'une nouvelle version est disponible, vous serez informé de cela. Si vous avez accès pour le télécharger, le programme va télécharger et copier tout ce dont vous avez besoin.</li>
|
||||
<li>Maintenant, vous pouvez obtenir la liste complète des following et followers.</li>
|
||||
<li>Ajouter la date du dernier tweet des followers et following.</li>
|
||||
<li>Les following et followers sont maintenant mis à jour en temps réel. (ToDo: Les following et followers ils ne montrent pas la date de ces dernier tweet lorsque une mise à jour est faite en temps réel. Ils le font lors du rechargement une fois redémarrée l'application).</li>
|
||||
<li>L'ordre des onglets il a changé. Maintenant ils sont classés en commençant par Principal, Mentions, Messages directs et Envoyés.</li>
|
||||
<li>Maintenant dans la liste de tweets envoyés les messages directs sont affichés lorsque le flux est chargé pour la première fois. Ceci ne était pas le cas et si l'utilisateur envoyés un DM à partir d'un autre client lorsque Tw Blue n'était pas ouvert, lors de l'ouverture de l'application il ne montré pas la dite DM. <a href="http://twblue.a12x.net/issues/view.php?id=8">#8</a></li>
|
||||
<li>Con Control+A, se puede seleccionar todo el texto de un mensaje. Funciona con Jaws y NVDA.</li>
|
||||
<li>Il y a des raccourcis clavier (détaillés dans la <a href="leeme.html">Documentation)</a> pour un grand nombre d'actions qui peut faire le programme.</li>
|
||||
<li>Maintenant TW Blue détecte plus d'audio dans les URLS qui vienne dans les retweets, et des audio partagé à partir de Dropbox. <a href="http://twblue.a12x.net/issues/view.php?id=3">#3</a></li>
|
||||
<li>Inclut la documentation pour l'application et les crédits.</li>
|
||||
<li>Si la connexion internet s'arrête de fonctionner, le flux va essayer de se reconnecter pendant 30 minutes.</li>
|
||||
<li>On a écrit un document qui détaille comment utiliser le programme.</li>
|
||||
<li>Il a été ouvert le <a href="http://twblue.a12x.net/issues/">Système de suivi d'incidents</a> où les utilisateurs peuvent signaler des erreurs et si vous le souhaitez, vous pouvez apporter de nouvelles idées pour le développement de l'application. Il existe un accès direct au formulaire réservée au rapport d'incidents dans le menu Aide.</li>
|
||||
<li>Il y a maintenant des crédits à partir de la version actuelle.</li>
|
||||
<li>Ajout d'une option dans menu Utilisateur pour afficher les détails. Cela fonctionne également si vous appuyez sur entrer sur un following ou follower.</li>
|
||||
</ul>
|
||||
<h2 id="changements-ajouter-dans-la-version-prealpha1">Changements ajouter dans la version Prealpha1</h2>
|
||||
<p>Veuillez noter que dans cette version les following et les followers ne sont pas mis à jour automatiquement. Cela s'ajoutera à une autre version. Vous ne pouvez pas également supprimer des tweet, ou DM. Tous les tweets, messages directs, mentions, favoris, followers et following lors de la mise à jour seront télécharger un maximum de 200. Bientôt ils s'ajouteront plus à la quantité lors des mises à jour. Ici les changements à partir de la première version.</p>
|
||||
<ul>
|
||||
<li>La date il s'affiche bien, selon le fuseau horaire de l'utilisateur.</li>
|
||||
<li>Maintenant, le curseur est placé au début lorsque vous allez à répondre ou faire un retweet.</li>
|
||||
<li>Si vous appuyez sur contrôle + E dans les zones d'édition, l'intégralité du message sera sélectionné.</li>
|
||||
<li>Quelques corrections pour la gestion des chronologies (j'ai besoin d'apporter des améliorations dans la façon de gérer cela).</li>
|
||||
<li>Les favoris sont mises à jour en temps réel.</li>
|
||||
<li>Vous entendrez un son lorsque vous passez par un tweet qui pourrait contenir un audio jouable.</li>
|
||||
<li>Supporte la lecture audio avec le hashtag #audio et une URL. Appuyez sur Entrée pour entendre la chanson. Appuyez sur F5 pour diminuer le volume de 5%, ou f6 pour augmenter d'un 5%. Si vous souhaitez arrêter la lecture, aller où il y a une audio, puis appuyez sur Entrée. Si le programme est incapable de reproduire quelque chose, il vous avertira. Le volume de la musique (pas pour les sons du programme pour l'instant) est enregistré dans la configuration, et le programme va le mémorisé pour la prochaine fois que vous jouez quelque chose.</li>
|
||||
<li>Vous pouvez voir les 200 premiers following et followers avec leurs noms d'utilisateur, nom réel et un peu d'informations utiles. Dans des futures versions vous pourrez tout voir si vous avez plus de 200. Veuillez noter que il y a des actions que vous ne pouvez pas faire avec ces utilisateurs dans la liste (par exemple, répondre ou retweet, parce qu'ils ne sont pas des tweets, sont utilisateurs), Mais oui, vous pouvez les suivre, ne pas les suivre, et faire presque tout (moins envoyer DM pour l'instant) ce que vous pourriez faire dans le menu Utilisateur.</li>
|
||||
</ul>
|
||||
<p>Maintenant, il faut l'utiliser et le tester et lorsque vous trouvez une erreur, s'il vous plaît veuillez regarder dans le dossier de l'application, puis il doit générer un fichier avec le nom du fichier exécutable, mais avec une extension .log à la fin. Eh bien, c'est vital pour moi de savoir où le programme a été cassé, et vous devriez être reconnaissant si vous me l'envoyer ainsi qu'une description de ce qui était plus ou moins ce qu'ils faisaient quand l'application fait ce qu'il avait à faire. Par exemple, « j'ai essayé de m'envoyer un DM, mais la boîte de dialogue de message direct jamais elle a été ouverte". Si vous pouvez le charger vers un serveur de stockage (comme Dropbox,](https://www.dropbox.com) par exemple), et me l'envoyer soit en mentionnant à <span class="citation">[@tw_blue2]</span>(https://twitter.com/tw_blue2) ou à <span class="citation">[@manuelcortez00,]</span>(https://twitter.com/manuelcortez00) ce serait formidable.</p>
|
||||
<p>Merci infiniment de l'essayer !</p>
|
||||
<h2 id="nouveautés-dans-la-version-prealpha-0">Nouveautés dans la version prealpha 0</h2>
|
||||
<ul>
|
||||
<li>Faire des tweets, répondre aux tweets des autres, mentionner tous les utilisateurs, lorsque il y a plus d'un dans le tweet, retweet ce qui vous plaît, ajouter ou non un commentaire au retweet et les supprimez.</li>
|
||||
<li>Ajouter ou supprimer des favoris un tweet.</li>
|
||||
<li>Réduire et élargir une URL lorsque vous écrivez un tweet ou dm (vous pouvez sélectionner quelle URL vous souhaitez réduire et élargir à partir d'une liste lorsque ils sont plus d'une).</li>
|
||||
<li>Ouvrir un navigateur Web avec l'URL venant dans le tweet, en appuyant sur Entrée. Lorsque il y a plusieurs URLs, vous verrez une liste où on vous demandera la quelles vous voulez.</li>
|
||||
<li>Utilisateurs: Vous pouvez Suivre, Ne pas suivre, Signaler comme spam, Bloquer et Envoyer un message direct aux utilisateurs.</li>
|
||||
<li>Vous pouvez ouvrir et supprimer des chronologies individuels pour chaque utilisateur.</li>
|
||||
<li>Vous pourrez aussi voir vos favoris.</li>
|
||||
<li>Et pour l'instant, à moins qu'il m'arrive d'oublier quelque chose, c'est tout.</li>
|
||||
</ul>
|
||||
<hr />
|
||||
<p>Copyright © 2013-2014, Manuel Cortéz</p>
|
||||
</body>
|
||||
</html>
|
@@ -1,178 +0,0 @@
|
||||
% Liste des Changements
|
||||
|
||||
#Attention !
|
||||
|
||||
Avant de poursuivre l'essai du programme, il est considéré que c'est une version de développement. Plus précisément, la version 0.42. Cela signifie qu'il n'est pas seulement possible de trouver des erreurs, mais que vous les trouverez. L'idée est de signaler le plus d'erreurs possibles afin qu'ils puisse être résolus pour les prochaines alphas.
|
||||
|
||||
Voici la liste des changements dans le programme. Si vous voulez lire comment l'utiliser, [voir ce document.](manual.html) Si vous voyez un lien avec un signe dièse (#) et un code qui commence par plusieurs numéro, vous voyez une erreur qui a été signalé dans le Système de suivi d'incidences. N'hésitez pas à publier vos propres erreurs et demandes d'améliorations et nouvelles fonctionnalités à travers de cet outils, disponible dans le menu Aide de TW Blue.
|
||||
|
||||
## Changements ajouter dans cette nouvelle version
|
||||
|
||||
* Correction d'une erreur qu'elle ne permettait pas d'afficher les listes avec des accents ou des caractères spéciaux dans un tampon.
|
||||
* Maintenant TW blue ne devrait pas actualiser les Tweets soudainement.
|
||||
* Maintenant TW blue supporte l'option "muet" de Twitter. Lorsque cette option est activée pour un utilisateur, vous ne pouvez pas voir ces tweets ni ces mentions, mais vous le suivez toujours, et vous serez en mesure de être en contact avec lui à travers de message direct. Ceci est différent de la fonction Bloquer ou Ne pas suivre, avec cette option l'utilisateur sera pas au courant que vous avez activée l'option muet. sette option se trouvent dans la boîte de dialogue des actions utilisateur de l'interface invisible, ou dans le menu Utilisateur de l'interface graphique.
|
||||
* Un onglet "Audio" a été ajoutée dans la boîte de dialogue de configuration qui vous permet de sélectionner les périphériques d'entrée et de sortie, régler le volume et activer/ désactiver tous les sons pour TW Blue. D'autres options ont été déplacées depuis l'onglet "Général" vers l'onglet "Audio".
|
||||
* Le fichier de configuration a été repensé. La plupart des options devront être reconfigurés à nouveau.
|
||||
* Vous pouvez maintenant désactiver SAPI5 afin qu'il n'intervienne pas s'il n'y a aucun lecteur d'écran supporté en cours d'exécution.
|
||||
* Dans l'onglet Général, Vous pouvez modifier manuellement la langue. Tw Blue reqiere redémarré.
|
||||
* Maintenant il y a une nouvelle boîte de dialogue où vous pouvez apprendre les différents sons de TW Blue.
|
||||
* Il est possible maintenant de désactiver le son et notification d'un tampon. Le reste du client fonctionnera correctement. Appuyez sur Contrôle+Windows+Maj+m (interface invisible) ou le sélectionnez depuis le menu "Tampon" (interface visible) pour basculer entre cette fonctionnalité.
|
||||
* Vous pouvez maintenant rechercher par utilisateur et par tweets. Les recherches de tweets sont sauvegardées dans la configuration, tandis que ceux des utilisateurs seront supprimer lors de la fermeture. Appuyez sur Ctrl+Windows+- (tiret) (interface invisible) ou le sélectionnez depuis le menu "Application" (interface visible).
|
||||
* Vous pouvez ouvrir le tampon pour voir les favoris d'un utilisateur dans le menu "Utilisateur".
|
||||
* Maintenant avec Contrôle+Windows+Maj+Flèche Haut / Bas (dans l'interface graphique) et Contrôle+Windows+Flèche Haut / Bas (dans l'interface invisible), vous pouvez aller au tweet précédent ou suivant dans la conversation. Pour que cela fonctionne les tweets de la conversation doivent être dans la chronologie principale.
|
||||
* Au cours d'un enregistrement audio pour ajouter, maintenant vous pouvez mettre en pause ou reprendre l'enregistrement pour sauter des parties qui peuvent générer un audio très long.
|
||||
* Il est maintenant possible de charger de l'audio vers Dropbox. Pour configurer le service aller dans l'onglet "Services audio" dans la boîte de dialogue de Configuration.
|
||||
* Maintenant que vous pouvez charger de l'audio vers Dropbox, dans la boîte de dialogue pour ajouter un audio vous pouvez sélectionner le service auquelle vous souhaitez charger.
|
||||
* Maintenant il comprend une boîte de dialogue pour la correction orthographique pour les tweets ou messages. Les langues actuellement disponibles sont: Espagnol, Anglais, Portugais, Russe et Polonais. La langue sera sélectionnée automatiquement selon la configuration de TW Blue.
|
||||
* Ajouter la lecture automatique des Tweets pour un tampon. L'activation de cette fonctionnalité peut faire que TW Blue lit automatiquement les tweets lors de l'arrivée dans les tampons qui ont cette option activée. Appuyez sur Contrôle+Windows+e pour basculer entre cette fonction.
|
||||
* Dans la boîte de dialogue de Configuration maintenant vous pouvez spécifiez si vous voulez que TW Blue démarre avec l'interface invisible.
|
||||
* Les URLs s'affiche dans leur version originale. Uniquement les photos de Twitter ils apparaissent toujours comme réduites, et celles qui ont été réduites manuellement avant de les envoyer dans un tweet.
|
||||
|
||||
## Changements ajouter dans la version 0.40
|
||||
|
||||
* Vous pouvez changer entre les différents paquets de sons utilisé par TW Blue et de créer vos propres sons. Chaque paquet doit être dans un répertoire par séparé dans le dossier sounds. Pour modifier le paquet de sons vous pouvez le sélectionner dans la boîte de dialogue de configuration.
|
||||
* Les fichiers audio doivent être au format OGG.
|
||||
* TW Blue doit être maintenant en mesure de fermer correctement.
|
||||
* L'heure est écrit tenant en compte le format 12 heures (AM /P M).
|
||||
* L'heure est écrit d'accord au fuseau horaire que vous avez défini dans votre compte Twitter.
|
||||
* Ajout de nouvelles traductions en Portugais, Polonais et Russe. Merci les gars !
|
||||
* TW Blue supprime de la configuration la chronologie de l'utilisateur qui ont changé leur noms ou supprimer leurs comptes Twitter.
|
||||
* Maintenant est gérés la grande majorité des événements dans Twitter avec le tampon des événements.
|
||||
* Il est maintenant possible de voir le texte des événements avec Contrôle+Maj+V (GUI) ou Contrôle+Windows+V (interface invisible).
|
||||
* Gestionnaire de listes: Vous pouvez créer, modifier, supprimer, afficher une liste comme tampon dans TW Blue, ajouter et supprimer des membres d'une liste.
|
||||
* Maintenant, si au démarrage de TW Blue il tente de charger une chronologie qui n'existe pas, automatiquement il la supprime de la configuration et il continue à charger normalement.
|
||||
* Seuls seront chargées jusqu'à 400 following et followers pour éviter les problèmes avec l'API. Elle sera corrigée dans les versions futures.
|
||||
* Pour le mode invisible, il inclus des raccourcis pour réentendre le tweet sur lequel vous êtes (Contrôle+Windows+espace) et pour copier le message dans le presse-papiers (Contrôle+Windows+c).
|
||||
|
||||
## Changements ajouter dans la version 0.38
|
||||
|
||||
* Correction d'une erreur qui empêchait en donnant l'ordre de fermer.
|
||||
* Maintenant les tweets ne finissent pas par un point obligatoirement. Si le programme détecte que le tweet se termine par une lettre ou un chiffre, il va placez un point automatiquement. Si ce n'est pas le cas, il va laisser le texte tel qu'il est.
|
||||
* Il est maintenant possible de charger des images aux tweets et réponses. Veuillez noter que la taille des images est mis en place par twitter.
|
||||
* Pour se déplacer vers la gauche ou vers la droite en utilisant le mode invisible, maintenant il s'annonce uniquement des informations de la position dans la liste d'éléments.
|
||||
* TW Blue devrait maintenant fonctionner pour Windows XP au moment de la demande d'autorisation pour l'application.
|
||||
* Ajouté une nouvelle option dans la boîte de dialogue de configuration qui vous permet de revenir à vos tampons. Cela signifie que vous pouvez choisir si vous voulez voir les tweets comme jusqu'à maintenant, ou que les plus nouveaux soit placés vers le haut et les anciens vers le bas.
|
||||
* Maintenant les photos peuvent être chargées aux profil de Twitter, disponible à partir de la boîte de dialogue Mettre à jour votre profil.
|
||||
* Ajouté un tampon d'événements, où ils sont stockés pour le moment quelques événements qui se déroulent dans Twitter, comme suivre ou faire que quelqu'un vous suivent, marquer un favori, que un de vos tweet soit marqué comme favoris, Etc. Vous pouvez activer et désactiver ce tampon de la boîte de dialogue de configuration.
|
||||
* Maintenant, vous pouvez supprimer des chronologies déjà créé qui ne contiennent pas des tweets, et il ne sera pas permit de créer des chronologies pour les utilisateurs sans tweets.
|
||||
* L'interface de l'application est traduisible. Maintenant, n'importe quel utilisateur peut faire leurs propres traductions en différentes langues.
|
||||
|
||||
## Changements ajouter dans la version 0.36
|
||||
|
||||
* Les utilisateurs brésiliens pourront voir quelques messages en Portugais. (Usuários brasileiros poderão ver algumas mensagens em Português).
|
||||
* Correction d'une erreur qui fait que quelques sons ils peuvent s'entendre et d'autres non. Maintenant, ils devraient s'entendre tous.
|
||||
* La réconnexion aussi a reçu une correction, parce que parfois, il s'effectué de façon incorrecte et il devait s'ouvrir à nouveau l'application.
|
||||
* Maintenant TW Blue permet de supprimer uniquement les chronologies avec la commande correspondante. Avant il s'affichées la boîte de dialogue peu importe dans quel tampon vous aviez été.
|
||||
* Vous êtes en mesure à nouveau de voir les détails des utilisateurs avec la touche Entrée étant dans le tampon pour les following ou followers.
|
||||
* À partir de cette version, il n'y a pas de support pour les bases de données.
|
||||
* Vous entendrez une notification vocale lorsque quelqu'un marque comme favori un de vos tweets.
|
||||
* Les following et followers sont déjà mis à jour.
|
||||
* lorsque vous suivez quelqu'un, il ne se produit aucune erreur Si ne sont pas affichées les following. C'est la même chose avec les followers.
|
||||
* Vous pouvez effacer un tampon en appuyant sur Maj+Supprimer dans la fenêtre visible, et Contrôle+Windows+Maj+Supprimer dans la fenêtre invisible. Ceci va vider tous les tweets dans le tampon courant.
|
||||
|
||||
## Changements ajouter dans la version 0.35
|
||||
|
||||
* Il existe un site Web officiel pour le programme, aller sur [twblue.com.mx.](http://twblue.com.mx) Dans cet espace, vous trouverez le système de suivi d'erreurs, le blog avec les dernières nouvelles, et la dernière version disponible.
|
||||
* TW Blue il annonce lorsque vous êtes mentionné, et lorsque vous obtenez un message direct.
|
||||
* Jaws il ne dit pas le raccourci clavier qui est appuyé dans le mode invisible. [#11](http://twblue.a12x.net/errores/view.php?id=11)
|
||||
* Dans le mode invisible, les commandes Contrôle+Windows+Origine, Contrôle+Windows+Fin, Contrôle+Windows+Page Suivante et Contrôle+Windows+Page Précédente va aller vers le haut de la liste, vers la fin, 20 éléments vers le bas et 20 éléments vers le haut respectivement. [#10,](http://twblue.a12x.net/errores/view.php?id=10) [#21,](http://twblue.a12x.net/errores/view.php?id=21) [#22](http://twblue.a12x.net/errores/view.php?id=22)
|
||||
* Maintenant vous pouvez lire l'audios d'Audiobook.
|
||||
* Maintenant, le flux doit être connecté une fois que la machine revient d'une suspension.
|
||||
* Il est possible d'enregistrer de l'audio ou charger fichiers sur SndUp.net. Si vous êtes inscrit dans cette page, vous pouvez mettre dans la configuration votre API Key pour que les fichiers se charge sur votre nom. Vous pouvez charger des fichiers Wav, OGG et MP3. Les fichiers wav ils seront récodifier en OGG.
|
||||
* Si vous n'utilisez aucun lecteur d'écran, quelques actions de TW blue utilisent la synthèse vocale SAPI5.
|
||||
* Il existe une version pour les architectures de 64 Bits. Merci à [@jmdaweb](https://twitter.com/jmdaweb) pour prendre le travail de faire fonctionner l'application dans cette architecture et la préparez pour sa distribution.
|
||||
* Changement dans les sons du client. Merci à [@guilevi_es](https://twitter.com/guilevi_es) pour la collaboration avec le paquet de sons.
|
||||
* Quelques messages du programme peuvent être traduits. Dans des futures versions la totalité de l'interface sera internationalisé.
|
||||
* Et quelques correction d'erreur en plus ([#5,](http://twblue.com.mx/errores/view.php?id=5) [#7,](http://twblue.com.mx/errores/view.php?id=7) [#8,](http://twblue.com.mx/errores/view.php?id=8) [#9,](http://twblue.com.mx/errores/view.php?id=9) [#12,](http://twblue.com.mx/errores/view.php?id=12))
|
||||
|
||||
## Changements ajouter dans la version 0.3
|
||||
|
||||
* Maintenant vous pouvez mettre à jour votre profil à partir de TW Blue. [#19](http://twblue.a12x.net/issues/view.php?id=19)
|
||||
* Maintenant vous pouvez créer les chronologies à nouveau et ils ne donne pas de problèmes. [#24](http://twblue.a12x.net/issues/view.php?id=24)
|
||||
* Maintenant les fichiers d'erreur sont enregistrés dans le répertoire "logs".
|
||||
* Lorsque vous créez une chronologie, il sera mis à jour en temps réel dès le début au lieu de le mettre à jour toutes les 2 minutes.
|
||||
* Vous pouvez maintenant demander davantage d'appels à l'API qui fonctionnera pour obtenir 200 tweets chaqu'une. Un appel est équivalent à 200 éléments de la liste principal, mentions, messages directs, favoris et chronologies. Dans le fichier de configuration Vous pouvez modifier l'option dans [twitter]/max_api_calls. Il est recommandé de ne pas demander à Twitter plus de 2 appels à l'API, ou sinon vous arriverez bientôt à la limite des appels autorisés et l'application échouera.
|
||||
* Lorsque vous répondez à un Tweet, c'est envoyé comme réponse au même et pas comme s'il s'agissait d'un nouveau tweet.
|
||||
* L'ancien système de rapport d'erreurs il a dû être changée. À partir de cette version, vous pouvez signaler des erreurs, directement depuis l'application. L'option Signaler une erreur ouvrira une boîte de dialogue qui vous demande des détails sur votre erreur et il va envoyer le rapport automatiquement.
|
||||
* Ils sont déjà supprimées les following lorsque ils ne suivent pas un utilisateur.
|
||||
* Aussi les favoris, au moment de retirer un tweet comme favori, il exécutent le changement.
|
||||
* Ajouté une boîte de dialogue de configuration qui permet de contrôler le nombre d'appels à l'API à exécuter, si oui ou non utiliser des bases de données, et masquer ou afficher les listes de following, followers et favoris.
|
||||
* En mentionnant les tweets, les guillemets qui entourent le message maintenant sont séparés par un espace de la dernière lettre. Il en est ainsi parce qu'avant, lorsque il y avait une URL, il causé que les guillemets facent partie de l'URL en envoyant vers des sites inexistants.
|
||||
* Améliorations avec quelques chronologies. Vous pouvez maintenant enregistrer une chronologie sans problèmes. Il ne devrait pas faire des erreurs.
|
||||
* Maintenant, l'audio est joué seulement avec Contrôle+Entrée, tandis que l'URL s'ouvrira avec la touche Entrée.
|
||||
* Le flux tentera de se reconnecter à l'échec de la connexion internet.
|
||||
* Maintenant depuis les followers et following on peut mentionner un utilisateur.
|
||||
* Maintenant il est fournit un mode "invisible". Sous le menu "Application", dans l'option "Masquer la fenêtre" ou en appuyant sur Contrôle+M. Pour afficher la fenêtre à nouveau appuyez sur Contrôle+Windows+M.
|
||||
|
||||
## Changements ajouter dans la version 0.025
|
||||
|
||||
Veuillez noter que lorsque un utilisateur vous ne sui pas ou vous ne suivez pas quelqu'un d'autre, la liste des following ou des followers il ne sera pas mis à jour pour le moment. Lorsque vous redémarrez le programme, si les informations son correctes ils seront afficher.
|
||||
|
||||
* Correction d'une erreur qui rendait impossible de fermer l'application jusqu'à ce que le programme a annoncé qu'elle était prête. [#17](http://twblue.a12x.net/issues/view.php?id=17) y [#18](http://twblue.a12x.net/issues/view.php?id=18)
|
||||
* Changé la façon d'organiser les chronologies dans la configuration. Il est nécessaire de les recréer.
|
||||
* Maintenant, vous pouvez envoyer un message direct aux following et followers en utilisant le bouton. Cela ne fonctionnait pas dans la version 0.02 et 0.021.
|
||||
* Vous pouvez augmenter et diminuer le volume depuis la liste des followers et following.
|
||||
* Dans la boîte de dialogue pour écrire un tweet peut être maintenant traduit le message à l'aide de Google Traductor. Une boîte de dialogue s'affiche pour demander les langues source et destination.
|
||||
* Le menu fichier contient l'option Sortir.
|
||||
* À partir de cette version ils se jouera uniquement les fichiers de'audio en appuyant sur Entrée s'ils contienne le hashtag #audio.
|
||||
* Vous pouvez essayer de jouer une URL quelconque sans qui comporte le hashtag #audio en appuyant sur Contrôle+Entrée. Cette commande va tenter de reproduire la première URL trouvée.
|
||||
* A été amélioré le moteur de recherche d'URLS, en rendant plus rapide la fonction et maintenant, devrait être capable de détecter toutes les URLS. [#21](http://twblue.a12x.net/issues/view.php?id=21)
|
||||
* Maintenant, la boîte de dialogue qui s'affiche pour sélectionner l'utilisateur que vous souhaitez afficher les détails permet en plus de le sélectionner dans une liste, écrire le nom de l'utilisateur que vous souhaitez.
|
||||
|
||||
## Changements ajouter dans la version 0.02 et 0.021
|
||||
|
||||
* Le message qui se reproduicé lorsque vous suivez un utilisateur maintenant dit "maintenant vous suivez à x utilisateur" en lieu de "maintenant vous ne suivez pas à x utilisateur". [#5](http://twblue.a12x.net/issues/view.php?id=5)
|
||||
* Lorsque vous sorter une boîte de dialogue vous demandera si vous voulez le faire. Maintenant vous sorter d'une façon beaucoup plus proprement du programme, empêchant plusieurs erreurs pendant la fermeture.
|
||||
* Changement des sons pour les dm entrant et sortant. Merci à [@marcedsosa](https://twitter.com/marcedsosa) pour les nouveaux sons.
|
||||
* Le Nom d'utilisateur de twitter il se lit dans le titre de la fenêtre.
|
||||
* Les sons du programme aussi peuvent lire le volume depuis la configuration. Le module de sons devrait prendre moins de temps pour reproduire plusieurs des sons de l'application.
|
||||
* Les actions d'augmenter et de diminuer le volume ils reproduisent un son indiquant que tant forts ça sonne.
|
||||
* Il n'affichent plus les mentions de personnes qui ne vous suivent pas dans votre chronologie principal. [#1](http://twblue.a12x.net/issues/view.php?id=1)
|
||||
* Vous pouvez maintenant supprimer les tweets et les messages directs. Vous ne pouvez supprimer que les tweets que vous avez écrit.
|
||||
* Correction d'une erreur qui empêchait de charger correctement les différentes listes si dans quelques une d'elles ils n'y avait aucun tweet, utilisateur ou message direct. Ceci affectant surtout les comptes avec 0 favoris, 0 tweets, 0 envoyés ou 0 messages directes. [#2](http://twblue.a12x.net/issues/view.php?id=2)
|
||||
* Maintenant à chaque fois qu'une nouvelle version est disponible, vous serez informé de cela. Si vous avez accès pour le télécharger, le programme va télécharger et copier tout ce dont vous avez besoin.
|
||||
* Maintenant, vous pouvez obtenir la liste complète des following et followers.
|
||||
* Ajouter la date du dernier tweet des followers et following.
|
||||
* Les following et followers sont maintenant mis à jour en temps réel. (ToDo: Les following et followers ils ne montrent pas la date de ces dernier tweet lorsque une mise à jour est faite en temps réel. Ils le font lors du rechargement une fois redémarrée l'application).
|
||||
* L'ordre des onglets il a changé. Maintenant ils sont classés en commençant par Principal, Mentions, Messages directs et Envoyés.
|
||||
* Maintenant dans la liste de tweets envoyés les messages directs sont affichés lorsque le flux est chargé pour la première fois. Ceci ne était pas le cas et si l'utilisateur envoyés un DM à partir d'un autre client lorsque Tw Blue n'était pas ouvert, lors de l'ouverture de l'application il ne montré pas la dite DM. [#8](http://twblue.a12x.net/issues/view.php?id=8)
|
||||
* Con Control+A, se puede seleccionar todo el texto de un mensaje. Funciona con Jaws y NVDA.
|
||||
* Il y a des raccourcis clavier (détaillés dans la [Documentation)](leeme.html) pour un grand nombre d'actions qui peut faire le programme.
|
||||
* Maintenant TW Blue détecte plus d'audio dans les URLS qui vienne dans les retweets, et des audio partagé à partir de Dropbox. [#3](http://twblue.a12x.net/issues/view.php?id=3)
|
||||
* Inclut la documentation pour l'application et les crédits.
|
||||
* Si la connexion internet s'arrête de fonctionner, le flux va essayer de se reconnecter pendant 30 minutes.
|
||||
* On a écrit un document qui détaille comment utiliser le programme.
|
||||
* Il a été ouvert le [Système de suivi d'incidents](http://twblue.a12x.net/issues/) où les utilisateurs peuvent signaler des erreurs et si vous le souhaitez, vous pouvez apporter de nouvelles idées pour le développement de l'application. Il existe un accès direct au formulaire réservée au rapport d'incidents dans le menu Aide.
|
||||
* Il y a maintenant des crédits à partir de la version actuelle.
|
||||
* Ajout d'une option dans menu Utilisateur pour afficher les détails. Cela fonctionne également si vous appuyez sur entrer sur un following ou follower.
|
||||
|
||||
## Changements ajouter dans la version Prealpha1
|
||||
|
||||
Veuillez noter que dans cette version les following et les followers ne sont pas mis à jour automatiquement. Cela s'ajoutera à une autre version. Vous ne pouvez pas également supprimer des tweet, ou DM. Tous les tweets, messages directs, mentions, favoris, followers et following lors de la mise à jour seront télécharger un maximum de 200. Bientôt ils s'ajouteront plus à la quantité lors des mises à jour. Ici les changements à partir de la première version.
|
||||
|
||||
* La date il s'affiche bien, selon le fuseau horaire de l'utilisateur.
|
||||
* Maintenant, le curseur est placé au début lorsque vous allez à répondre ou faire un retweet.
|
||||
* Si vous appuyez sur contrôle + E dans les zones d'édition, l'intégralité du message sera sélectionné.
|
||||
* Quelques corrections pour la gestion des chronologies (j'ai besoin d'apporter des améliorations dans la façon de gérer cela).
|
||||
* Les favoris sont mises à jour en temps réel.
|
||||
* Vous entendrez un son lorsque vous passez par un tweet qui pourrait contenir un audio jouable.
|
||||
* Supporte la lecture audio avec le hashtag #audio et une URL. Appuyez sur Entrée pour entendre la chanson. Appuyez sur F5 pour diminuer le volume de 5%, ou f6 pour augmenter d'un 5%. Si vous souhaitez arrêter la lecture, aller où il y a une audio, puis appuyez sur Entrée. Si le programme est incapable de reproduire quelque chose, il vous avertira. Le volume de la musique (pas pour les sons du programme pour l'instant) est enregistré dans la configuration, et le programme va le mémorisé pour la prochaine fois que vous jouez quelque chose.
|
||||
* Vous pouvez voir les 200 premiers following et followers avec leurs noms d'utilisateur, nom réel et un peu d'informations utiles. Dans des futures versions vous pourrez tout voir si vous avez plus de 200. Veuillez noter que il y a des actions que vous ne pouvez pas faire avec ces utilisateurs dans la liste (par exemple, répondre ou retweet, parce qu'ils ne sont pas des tweets, sont utilisateurs), Mais oui, vous pouvez les suivre, ne pas les suivre, et faire presque tout (moins envoyer DM pour l'instant) ce que vous pourriez faire dans le menu Utilisateur.
|
||||
|
||||
Maintenant, il faut l'utiliser et le tester et lorsque vous trouvez une erreur, s'il vous plaît veuillez regarder dans le dossier de l'application, puis il doit générer un fichier avec le nom du fichier exécutable, mais avec une extension .log à la fin. Eh bien, c'est vital pour moi de savoir où le programme a été cassé, et vous devriez être reconnaissant si vous me l'envoyer ainsi qu'une description de ce qui était plus ou moins ce qu'ils faisaient quand l'application fait ce qu'il avait à faire. Par exemple, « j'ai essayé de m'envoyer un DM, mais la boîte de dialogue de message direct jamais elle a été ouverte". Si vous pouvez le charger vers un serveur de stockage (comme Dropbox,](https://www.dropbox.com) par exemple), et me l'envoyer soit en mentionnant à [@tw_blue2](https://twitter.com/tw_blue2) ou à [@manuelcortez00,](https://twitter.com/manuelcortez00) ce serait formidable.
|
||||
|
||||
Merci infiniment de l'essayer !
|
||||
|
||||
## Nouveautés dans la version prealpha 0
|
||||
|
||||
* Faire des tweets, répondre aux tweets des autres, mentionner tous les utilisateurs, lorsque il y a plus d'un dans le tweet, retweet ce qui vous plaît, ajouter ou non un commentaire au retweet et les supprimez.
|
||||
* Ajouter ou supprimer des favoris un tweet.
|
||||
* Réduire et élargir une URL lorsque vous écrivez un tweet ou dm (vous pouvez sélectionner quelle URL vous souhaitez réduire et élargir à partir d'une liste lorsque ils sont plus d'une).
|
||||
* Ouvrir un navigateur Web avec l'URL venant dans le tweet, en appuyant sur Entrée. Lorsque il y a plusieurs URLs, vous verrez une liste où on vous demandera la quelles vous voulez.
|
||||
* Utilisateurs: Vous pouvez Suivre, Ne pas suivre, Signaler comme spam, Bloquer et Envoyer un message direct aux utilisateurs.
|
||||
* Vous pouvez ouvrir et supprimer des chronologies individuels pour chaque utilisateur.
|
||||
* Vous pourrez aussi voir vos favoris.
|
||||
* Et pour l'instant, à moins qu'il m'arrive d'oublier quelque chose, c'est tout.
|
||||
|
||||
---
|
||||
Copyright © 2013-2014, Manuel Cortéz
|
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
BIN
doc/locales/ro/LC_MESSAGES/twblue-documentation.mo
Normal file
BIN
doc/locales/ro/LC_MESSAGES/twblue-documentation.mo
Normal file
Binary file not shown.
2534
doc/locales/ro/LC_MESSAGES/twblue-documentation.po
Normal file
2534
doc/locales/ro/LC_MESSAGES/twblue-documentation.po
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
344
doc/manual.md
Normal file
344
doc/manual.md
Normal file
@@ -0,0 +1,344 @@
|
||||
Documentation for TWBlue - 0.84
|
||||
|
||||
## Table of contents
|
||||
|
||||
[TOC]
|
||||
|
||||
## Warning!
|
||||
|
||||
You are reading documentation produced for a program still in development. The object of this manual is to explain some details of the operation of the program. Bear in mind that as the software is in the process of active development, parts of this user guide may change in the near future, so it is advisable to keep checking from time to time to avoid missing important information.
|
||||
|
||||
If you want to see what has changed from the previous version, [read the list of updates here.](changes.html)
|
||||
|
||||
## Introduction
|
||||
|
||||
TWBlue is an application to make Twitter simple and fast, while using as few resources as possible. With TWBlue, you can do things like the following:
|
||||
|
||||
* Tweet, reply to, retweet and delete tweets,
|
||||
* Mark and unmark a tweet as favourite,
|
||||
* Send and delete direct messages,
|
||||
* See your friends and followers,
|
||||
* Follow, unfollow, report and block a user,
|
||||
* Open a user's timeline to see their tweets separately,
|
||||
* Open URLs from a tweet or direct message,
|
||||
* Play several types of audio files from addresses,
|
||||
* And more.
|
||||
|
||||
## 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.
|
||||
|
||||
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.
|
||||
|
||||
In order to use TWBlue, you must first have created an account on the Twitter website. The process for signing up for a Twitter account is very accessible. During the account registration, you will need to choose a Twitter username. This serves two purposes. This is the method through which people will comunicate with you, but most importantly, your username and password will be required to connect TWBlue to your Twitter account. We suggest you choose a username which is memorable both to you and the people you hope will follow you.
|
||||
|
||||
We'll start from the premise that you have a Twitter account with its corresponding username and password.
|
||||
|
||||
### Authorising the application
|
||||
|
||||
First of all, it's necessary to authorise the program so it can access your Twitter account and act on your behalf. The authorisation process is quite simple, and the program never retains data such as your password. In order to authorise the application, you just need to run the main executable file, called TWBlue.exe (on some computers it may appear simply as TWBlue if Windows Explorer is not set to display file extensions). We suggest you may like to place a Windows shortcut on your Desktop pointing to this executable file for quick and easy location.
|
||||
|
||||
You can log into several Twitter accounts simultaneously. The program refers to each Twitter account you have configured as a "Session". If this is the first time you have launched TWBlue, and if no Twitter session exists, you will see the Session Manager. This dialogue box allows you to authorise as many accounts as you wish. If you press the Tab key to reach the "new account" button and activate it by pressing the Space Bar, a dialogue box will advise you that your default internet browser will be opened in order to authorise the application and you will be asked if you would like to continue. Activate the "yes" Button by pressing the letter "Y" so the process may start.
|
||||
|
||||
Your default browser will open on the Twitter page to request authorisation. Enter your username and password into the appropriate edit fields if you're not already logged in, select the authorise button, and press it.
|
||||
|
||||
Once you've authorised your twitter account, the website will redirect you to a page which will notify you that TWBlue has been authorised successfully. Now you are able to close the page by pressing ALT+F4 which will return you to the Session Manager. On the session list, you will see a new item temporarily called "Authorised account x" -where x is a number. The session name will change once you open that session.
|
||||
|
||||
To start running TWBlue, press the Ok button in the Session Manager dialogue. By default, the program starts all the configured sessions automatically, however, you can change this behavior.
|
||||
|
||||
If all went well, the application will start playing sounds, indicating your data is being updated.
|
||||
|
||||
When the process is finished, by default the program will play another sound, and the screen reader will say "ready" (this behaviour can be configured).
|
||||
|
||||
## General concepts
|
||||
|
||||
Before starting to describe TWBlue's usage, we'll explain some concepts that will be used extensively throughout this manual.
|
||||
|
||||
### Buffer
|
||||
|
||||
A buffer is a list of items to manage the data which arrives from Twitter, after being processed by the application. When you configure a new session on TWBlue and start it, many buffers are created. Each of them may contain some of the items which this program works with: Tweets, direct messages, users, trends or events. According to the buffer you are focusing, you will be able to do different actions with these items.
|
||||
|
||||
The following is a description for every one of TWBlue's buffers and the kind of items they work with.
|
||||
|
||||
* Home: this shows all the tweets on the main timeline. These are the tweets by users you follow.
|
||||
* Mentions: if a user, whether you follow them or not, mentions you on Twitter, you will find it in this list.
|
||||
* Direct messages: here you will find the private direct messages you exchange with users who follow you , or with any user, if you allow direct messages from everyone (this setting is configurable from Twitter). This list only shows received messages.
|
||||
* Sent direct messages: this buffer shows all the direct messages sent from your account.
|
||||
* Sent tweets: this shows all the tweets sent from your account.
|
||||
* Favourites: here you will see all the tweets you have favourited.
|
||||
* Followers: when users follow you, you'll be able to see them on this buffer, with some of their account details.
|
||||
* Friends: the same as the previous buffer, but these are the users you follow.
|
||||
* User timelines: these are buffers you may create. They contain only the tweets by a specific user. They're used so you can see the tweets by a single person and you don't want to look all over your timeline. You may create as many as you like.
|
||||
* Events: An event is anything that happens on Twitter, such as when someone follows you, when someone adds or removes one of your tweets from their favourites list, or when you subscribe to a list. There are many more, but the program shows the most common ones in the events buffer so that you can easily keep track of what is happening on your account.
|
||||
* Lists: A list is similar to a user timeline, except that you can configure it to contain tweets from multiple users.
|
||||
* Search: A search buffer contains the results of a search operation.
|
||||
* User favourites: You can have the program create a buffer containing tweets favourited by a particular user.
|
||||
* Trending Topics: a trend buffer shows the top ten most used terms in a geographical region. This region may be a country or a city. Trends are updated every five minutes.
|
||||
|
||||
If a tweet contains a URL, you can press enter in the GUI or Control + Windows + Enter in the invisible interface to open it. If it contains audio, you can press Control + Enter or Control + Windows + Alt + Enter to play it, respectively. TWBlue will play a sound if the tweet contains the \#audio hashtag, but there may be tweets which contain audio without this. Finally, if a tweet contains geographical information, you can press Control + Windows + G in the invisible interface to retrieve it.
|
||||
|
||||
### Username fields
|
||||
|
||||
These fields accept a Twitter username (without the at sign) as the input. They are present in the send direct message and the user actions dialogue boxes. Those dialogues will be discussed later. The initial value of these fields depends on where they were opened from. They are prepopulated with the username of the sender of the focused tweet (if they were opened from the home and sent timelines, from users' timelines or from lists), the sender of the focused direct message (if from the received or sent direct message buffers) or in the focused user (if from the followers' or friends' buffer). If one of those dialogue boxes is opened from a tweet, and if there are more users mentioned in it, you can use the arrow keys to switch between them. Alternatively, you can also type a username.
|
||||
|
||||
## The program's interfaces
|
||||
|
||||
### The graphical user interface (GUI)
|
||||
|
||||
The graphical user interface of TWBlue consists of a window containing:
|
||||
|
||||
* a menu bar accomodating five menus (application, tweet, user, buffer and help);
|
||||
* One tree view,
|
||||
* One list of items
|
||||
* Four buttons in most dialogs: Tweet, retweet , reply and direct message.
|
||||
|
||||
The actions that are available for every item will be described later.
|
||||
|
||||
In summary, the GUI contains two core components. These are the controls you will find while pressing the Tab key within the program's interface, and the different elements present on the menu bar.
|
||||
|
||||
#### Buttons in the application
|
||||
|
||||
* Tweet: this button opens up a dialogue box to write your tweet. The message must not exceed 140 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 + A 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, and if the original tweet plus the comment exceeds 140 characters, you will be asked if you want to post it as a comment with a mention to the original user and 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, but with the name of the user already filled in (for example @user) so you only need to write your message. If there are more users referred to in the tweet, you can press shift-tab and activate the mention all users button. 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 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.
|
||||
|
||||
Bear in mind that buttons will appear according to which actions are possible on the list you are browsing. For example, on the home timeline, mentions, sent, favourites and user timelines you will see the four buttons, while on the direct messages list you'll only get the direct message and tweet buttons, and on friends and followers lists the direct message, tweet, and mention buttons will be available.
|
||||
|
||||
#### Menus
|
||||
|
||||
Visually, Towards the top of the main application window, can be found a menu bar which contains many of the same functions as listed in the previous section, together with some additional items. To access the menu bar, press the alt key. You will find five menus listed: application, tweet, user, buffer and help. This section describes the items on each one of them.
|
||||
|
||||
##### Application menu
|
||||
|
||||
* Manage accounts: Opens a window with all the sessions configured in TWBlue, where you can add new sessions or delete the ones you've already created.
|
||||
* Update profile: opens a dialogue where you can update your information on Twitter: name, location, website and bio. If you have already set this up the fields will be prefilled with the existing information. Also, you can upload a photo to your profile.
|
||||
* Hide window: turns off the Graphical User Interface. Read the section on the invisible interface for further details.
|
||||
* Search: shows a dialogue box where you can search for tweets or users on Twitter.
|
||||
* Lists Manager: This dialogue box allows you to manage your Twitter lists. In order to use them, you must first create them. Here, you can view, edit, create, delete or, optionally, open them in buffers similar to user timelines.
|
||||
* Edit keystrokes: this opens a dialogue where you can see and edit the shortcuts used in the invisible interface.
|
||||
* Account settings: Opens a dialogue box which lets you customize settings for the current account.
|
||||
* Global settings: Opens a dialogue which lets you configure settings for the entire application.
|
||||
* Exit: asks whether you want to exit the program. If the answer is yes, it closes the application. If you do not want to be asked for confirmation before exiting, uncheck the checkbox from the global settings dialogue box.
|
||||
|
||||
##### Tweet menu
|
||||
|
||||
* You will first find the items to tweet, reply and retweet, which are equivalent to the buttons with the same name.
|
||||
* Add to favourites: marks the tweet you're viewing as a favourite.
|
||||
* Remove from favourites: removes the tweet from your favourites, but not from Twitter.
|
||||
* Show tweet: opens up a dialogue box where you can read the tweet, direct message, friend or follower which has focus. You can read the text with the arrow keys. It's a similar dialog box as used for composing tweets, without the ability to send the tweet, file attachment and autocompleting capabilities. It does however include a retweets and favourites count. If you are in the followers or the friends list, it will only contain a read-only edit box with the information in the focused item and a close button.
|
||||
* View address: If the selected tweet has geographical information, TWBlue may display a dialogue box where you can read the tweet address. This address is retrieved by sending the geographical coordinates of the tweet to Google maps.
|
||||
* View conversation: If you are focusing a tweet with a mention, it opens a buffer where you can view the whole conversation.
|
||||
* Delete: permanently removes the tweet or direct message which has focus from Twitter and from your lists. Bear in mind that Twitter only allows you to delete tweets you have posted yourself.
|
||||
|
||||
##### User menu
|
||||
|
||||
* Actions: Opens a dialogue where you can interact with a user. This dialogue box will be populated with the user who sent the tweet or direct message in focus or the selected user in the friends or followers buffer. You can edit it or leave it as is and choose one of the following actions:
|
||||
* Follow: Follows a user. This means you'll see his/her tweets on your home timeline, and if he/she also follows you, you'll be able to exchange direct messages. You may also send / receive direct messages from each other if you have configured the option to allow direct messages from anyone.
|
||||
* Unfollow: Stops following a user, which causes you not being able to see his/her tweets on your main timeline neither exchanging direct messages, unless they have enabled receiving direct messages from anyone.
|
||||
* Mute: While muting someone, TWBlue won't show you nor his/her tweets on your main timeline; neither will you see that person's mentions. But you both will be able to exchange direct messages. The muted user is not informed of this action.
|
||||
* Unmute: this option allows TWBlue to display the user's tweets and mentions again.
|
||||
* Block: Blocks a user. This forces the user to unfollow you .
|
||||
* Unblock: Stops blocking a user.
|
||||
* Report as spam: this option sends a message to Twitter suggesting the user is performing prohibited practices on the social network.
|
||||
* Ignore tweets from this client: Adds the client from which the focused tweet was sent to the ignored clients list.
|
||||
* View timeline: Lets you open a user's timeline by choosing the user in a dialog box. It is created when you press enter. If you invoke this option relative to a user that has no tweets, the operation will fail. If you try creating an existing timeline the program will warn you and will not create it again.
|
||||
* Direct message: same action as the button.
|
||||
* Add to List: In order to see someone's tweets in one or more of your lists, you must add them first. In the dialogue box that opens after selecting the user, you will be asked to select the list you wish to add the user to. Thereafter, the list will contain a new member and their tweets will be displayed there.
|
||||
* Remove from list: lets you remove a user from a list.
|
||||
* View lists: Shows the lists created by a specified user.
|
||||
* Show user profile: opens a dialogue with the profile of the specified user.
|
||||
* View favourites: Opens a buffer where you can see the tweets which have been favourited by a particular user.
|
||||
|
||||
##### Buffer menu
|
||||
|
||||
* New trending topics buffer: This opens a buffer to get the worlwide trending topics or those of a country or a city. You'll be able to select from a dialogue box if you wish to retrieve countries' trends, cities' trends or worldwide trends (this option is in the cities' list) and choose one from the selected list. The trending topics buffer will be created once the "OK" button has been activated within the dialogue box. Remember this kind of buffer will be updated every five minutes.
|
||||
* Load previous items: This allows more items to be loaded for the specified buffer.
|
||||
* Mute: Mutes notifications of a particular buffer so you will not hear when new tweets arrive.
|
||||
* autoread: When enabled, the screen reader or SAPI 5 Text to Speech voice (if enabled) will read the text of incoming tweets. Please note that this could get rather chatty if there are a lot of incoming tweets.
|
||||
* Clear buffer: Deletes all items from the buffer.
|
||||
* Destroy: dismisses the list you're on.
|
||||
|
||||
##### Help menu
|
||||
|
||||
* Documentation: opens up this file, where you can read some useful program concepts.
|
||||
* Sounds tutorial: Opens a dialog box where you can familiarize yourself with the different sounds of the program.
|
||||
* What's new in this version?: opens up a document with the list of changes from the current version to the earliest.
|
||||
* Check for updates: every time you open the program it automatically checks for new versions. If an update is available, it will ask you if you want to download the update. If you accept, the updating process will commence. When complete, TWBlue will be restarted. This item checks for new updates without having to restart the application.
|
||||
* Report an error: opens up a dialogue box to report a bug by completing a small number of fields. Pressing enter will send the report. If the operation doesn't succeed the program will display a warning.
|
||||
* TWBlue's website: visit our [home page](http://twblue.es) where you can find all relevant information and downloads for TWBlue and become a part of the community.
|
||||
* About TWBlue: shows the credits of the program.
|
||||
|
||||
### The invisible user interface
|
||||
|
||||
The invisible interface, as its name suggests, has no graphical window and works directly with screen readers such as JAWS for Windows, NVDA and System Access. This interface is disabled by default, but you can enable it by pressing Control + M. It works similarly to TheQube and Chicken Nugget. Its shortcuts are similar to those found in these two clients. In addition, the program has builtin support for the keymaps for these applications, configurable through the global settings dialogue. By default, you cannot use this interface's shortcuts in the GUI, but you can configure this in the global settings dialogue.
|
||||
|
||||
The next section contains a list of keyboard shortcuts for both interfaces. Bear in mind that we will only describe the default keymap.
|
||||
|
||||
## Keyboard shortcuts
|
||||
|
||||
### Shortcuts of the graphical user interface (GUI)
|
||||
|
||||
* Enter: Open URL.
|
||||
* Control + Enter: Play audio.
|
||||
* Control + M: Hide the GUI.
|
||||
* Control + N: Compose a new tweet.
|
||||
* Control + R: Reply / mention.
|
||||
* Control + Shift + R: Retweet.
|
||||
* Control + D: Send a direct message.
|
||||
* control + F: Add tweet to favourites.
|
||||
* Control + Shift + F: Remove a tweet from favourites.
|
||||
* Control + S: Open the user actions dialogue.
|
||||
* Control + Shift + V: Show tweet.
|
||||
* Control + Q: Quit this program.
|
||||
* Control + I: Open user timeline.
|
||||
* Control + Shift + i: Destroy buffer.
|
||||
* F5: Increase volume by 5%.
|
||||
* F6: Decrease volume by 5%.
|
||||
* Control + P: Edit your profile.
|
||||
* Control + Delete: Delete a tweet or direct message.
|
||||
* Control + Shift + Delete: Empty the current buffer.
|
||||
|
||||
### Shortcuts of the invisible interface (default keymap)
|
||||
|
||||
* Control + Windows + Up Arrow: moves to the previous item in the buffer.
|
||||
* Control + Windows + Down Arrow: moves to the next item in the buffer.
|
||||
* Control + Windows + Left Arrow: Move to the previous buffer.
|
||||
* Control + Windows + Right Arrow: Move to the next buffer.
|
||||
* Control + Windows + Shift + Left: Focus the previous session.
|
||||
* Control + Windows + Shift + Right: Focus the next session.
|
||||
* Control + Windows + C: View conversation.
|
||||
* Control + Windows + Enter: Open URL.
|
||||
* Control + Windows + ALT + Enter: Play audio.
|
||||
* Control + Windows + M: Show or hide the GUI.
|
||||
* Control + Windows + N: New tweet.
|
||||
* Control + Windows + R: Reply / Mention.
|
||||
* Control + Windows + Shift + R: Retweet.
|
||||
* Control + Windows + D: Send direct message.
|
||||
* Windows+ Alt + F: Like a tweet.
|
||||
* Alt + Windows + Shift + F: Remove from likes.
|
||||
* Control + Windows + S: Open the user actions dialogue.
|
||||
* Control + Windows + Alt + N: See user details.
|
||||
* Control + Windows + V: Show tweet.
|
||||
* Control + Windows + F4: Quit TWBlue.
|
||||
* Control + Windows + I: Open user timeline.
|
||||
* Control + Windows + Shift + I: Destroy buffer.
|
||||
* Control + Windows + Alt + Up: Increase volume by 5%.
|
||||
* Control + Windows + Alt + Down: Decrease volume by 5%.
|
||||
* Control + Windows + Home: Jump to the first element of the current buffer.
|
||||
* Control + Windows + End: Jump to the last element of the current buffer.
|
||||
* Control + Windows + PageUp: Jump 20 elements up in the current buffer.
|
||||
* Control + Windows + PageDown: Jump 20 elements down in the current buffer.
|
||||
* Windows + Alt + P: Edit profile.
|
||||
* Control + Windows + Delete: Delete a tweet or direct message.
|
||||
* Control + Windows + Shift + Delete: Empty the current buffer.
|
||||
* Control + Windows + Space: Repeat last item.
|
||||
* Control + Windows + Shift + C: Copy to clipboard.
|
||||
* Control + Windows+ A: Add user to list.
|
||||
* Control + Windows + Shift + A: Remove user from list.
|
||||
* Control + Windows + Shift + M: Mute / unmute the current buffer.
|
||||
* Windows + Alt + M: Mute / unmute the current session.
|
||||
* Control + Windows + E: Toggle the automatic reading of incoming tweets in the current buffer.
|
||||
* Control + Windows + -: Search on Twitter.
|
||||
* Control + Windows + K: Show the keystroke editor.
|
||||
* Control + Windows + L: Show lists for a specified user.
|
||||
* Windows + Alt + PageUp: Load previous items for the current buffer.
|
||||
* Control + Windows + G: Get geolocation.
|
||||
* Control + Windows + Shift + G: Display the tweet's geolocation in a dialogue.
|
||||
* Control + Windows + T: Create a trending topics' buffer.
|
||||
* Control + Windows + {: Find a string in the current buffer.
|
||||
|
||||
## Configuration
|
||||
|
||||
As described above, this application has two configuration dialogues, the global settings dialogue and the account settings dialogue.
|
||||
|
||||
### The account settings dialogue
|
||||
|
||||
#### General tab
|
||||
|
||||
* Autocompletion settings: Allows you to configure the autocompletion database. You can add users manually or let TWBlue add your followers, friends or both.
|
||||
* Relative timestamps: Allows you to configure whether the application will calculate the time the tweet or direct message was sent or received based on the current time, or simply say the time it was received or sent.
|
||||
* API calls: Allows you to adjust the number of API calls to be made to Twitter by this program.
|
||||
* Items on each API call: Allows you to specify how many items should be retrieved from Twitter for each API call (default and maximum is 200).
|
||||
* Inverted buffers: Allows you to specify whether the buffers should be inverted, which means that the oldest items will show at the end of them and the newest at the beginning.
|
||||
* Retweet mode: Allows you to specify the behaviour when posting a retweet: you can choose between retweeting with a comment, retweeting without comment or being asked.
|
||||
* Number of items per buffer to cache in database: This allows you to specify how many items TWBlue should cache in a database. You can type any number, 0 to cache all items, or leave blank to disable caching entirely.
|
||||
|
||||
#### buffers tab
|
||||
|
||||
This tab displays a list for each buffer you have available in TWBlue, except for searches, timelines, favourites' timelines and lists. You can show, hide and move them.
|
||||
|
||||
#### The ignored clients tab
|
||||
|
||||
In this tab, you can add and remove clients to be ignored by the program.
|
||||
|
||||
#### Sound tab
|
||||
|
||||
In this tab, you can adjust the sound volume, select the input and output device and set the soundpack used by the program.
|
||||
|
||||
#### Audio service tab
|
||||
|
||||
In this tab, you can enter your SndUp API key (if you have one) to upload audio to SndUp with your account. Note that if account credentials are not specified you will upload anonimously.
|
||||
|
||||
### Global settings
|
||||
|
||||
This dialogue allows you to configure some settings which will affect the entire application.
|
||||
|
||||
#### General tab {#general-tab_1}
|
||||
|
||||
* Language: This allows you to change the language of this program. Currently supported languages are arabic, Catalan, German, English, Spanish, Basque, Finnish, French, Galician, Croatian, Hungarian, Italian, Polish, Portuguese, Russian and Turkish.
|
||||
* Ask before exiting TWBlue: This checkbox allows you to control whetherthe program will ask for confirmation before exiting.
|
||||
* Play a sound when TWBlue launches: This checkbox allows you to configure whether the application will play a sound when it has finished loading the buffers.
|
||||
* Speak a message when TWBlue launches: This is the same as the previous option, but this checkbox configures whether the screen reader will say "ready".
|
||||
* Use the invisible interface's shortcuts in the GUI: As the invisible interface and the Graphical User Interface have their own shortcuts, you may want to use the invisible interface's keystrokes all the time. If this option is checked, the invisible interface's shortcuts will be usable in the GUI.
|
||||
* Activate SAPI5 when any other screen reader is not being run: This checkbox allows to activate SAPI 5 TTS when no other screen reader is being run.
|
||||
* Hide GUI on launch: This allows you to configure whether TWBlue will start with the GUI or the invisible interface.
|
||||
* Keymap: This option allows you to change the keymap used by the program in the invisible interface. The shipped keymaps are Default, Qwitter, Windows 10 and Chicken Nugget. The keymaps are in the "keymaps" folder, and you can create new ones. Just create a new ".keymap" file and change the keystrokes associated with the actions, as it is done in the shipped keymaps.
|
||||
|
||||
#### Proxi tab
|
||||
|
||||
In this tab you can configure TWBlue to use a Proxy server by completing the fields displayed (server, port, user and password).
|
||||
|
||||
## License, source code and donations
|
||||
|
||||
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>.
|
||||
|
||||
The source code of the program is available on GitHub at <https://www.github.com/manuelcortez/twblue>.
|
||||
|
||||
If you want to donate to the project, you can do so at <http://twblue.es/?q=node/3&language=en>. Thank you for your support!
|
||||
|
||||
## Contact
|
||||
|
||||
If you still have questions after reading this document, if you wish to collaborate to the project in some other way, or if you simply want to get in touch with the application developer, follow the Twitter account [@tw\_blue2](https://twitter.com/tw_blue2) or [@manuelcortez00.](https://twitter.com/manuelcortez00) You can also visit [our website](http://twblue.es)
|
||||
|
||||
## Credits
|
||||
|
||||
TWBlue is developed and mantained by [Manuel Cortéz](https://twitter.com/manuelcortez00) and [José Manuel Delicado](https://twitter.com/jmdaweb). It's supported and sponsored by [Technow S. L.](https://twitter.com/technow)
|
||||
|
||||
We would also like to thank the translators of TWBlue, who have allowed the spreading of the application.
|
||||
|
||||
* English: [Manuel Cortéz](https://twitter.com/manuelcortez00).
|
||||
* Arabic: [Mohammed Al Shara](https://twitter.com/mohammed0204).
|
||||
* Catalan: [Francisco Torres](https://twitter.com/ftgalleg)
|
||||
* Spanish: [Manuel Cortéz](https://twitter.com/manuelcortez00).
|
||||
* Basque: [Sukil Etxenike](https://twitter.com/sukil2011).
|
||||
* Finnish: [Jani Kinnunen](https://twitter.com/jani_kinnunen).
|
||||
* French: [Rémi Ruiz](https://twitter.com/blindhelp38).
|
||||
* Galician: [Juan Buño](https://twitter.com/Quetzatl_).
|
||||
* German: [Steffen Schultz](https://twitter.com/schulle4u).
|
||||
* Croatian: [Zvonimir Stanečić](https://twitter.com/zvonimirek222).
|
||||
* Hungarian: Robert Osztolykan.
|
||||
* Italian: [Christian Leo Mameli](https://twitter.com/llajta2012).
|
||||
* Japanese: [Riku](https://twitter.com/riku_sub001)
|
||||
* Polish: [Pawel Masarczyk.](https://twitter.com/Piciok)
|
||||
* Portuguese: Odenilton Júnior Santos.
|
||||
* Romanian: [Florian Ionașcu](https://twitter.com/7ro) and [Răzvan Ciule](https://twitter.com/pilgrim89)
|
||||
* Russian: [Наталья Хедлунд](https://twitter.com/Lifestar_n).
|
||||
* Serbian: [Aleksandar Đurić](https://twitter.com/sokodtreshnje)
|
||||
* Turkish: [Burak Yüksek](https://twitter.com/burakyuksek).
|
||||
|
||||
Many thanks also to the people who worked on the documentation. Initially, [Manuel Cortez](https://twitter.com/manuelcortez00) did the documentation in Spanish, and translated to English by [Bryner Villalobos](https://twitter.com/Bry_StarkCR), [Robert Spangler](https://twitter.com/glasscity1837), [Sussan Rey](https://twitter.com/sussanrey17), [Anibal Hernandez](https://twitter.com/anibalmetal), and [Holly Scott-Gardner](https://twitter.com/holly1994). It was updated by [Sukil Etxenike](https://twitter.com/sukil2011), with some valuable corrections by [Brian Hartgen](https://twitter.com/brianhartgen) and [Bill Dengler](https://twitter.com/codeofdusk).
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
Copyright © 2013-2016. Manuel Cortéz
|
432
doc/strings.py
432
doc/strings.py
@@ -1,432 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import application
|
||||
documentation = []
|
||||
documentation.append(_(u"""Documentation for TWBlue - {0}""").format(application.version))
|
||||
# Translators: This is the new line character, don't change it in the translations.
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""## Table of contents"""))
|
||||
# Table of contents for the python markdown extension
|
||||
documentation.append("""[TOC]""")
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""## Warning!"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""You are reading documentation produced for a program still in development. The object of this manual is to explain some details of the operation of the program. Bear in mind that as the software is in the process of active development, parts of this user guide may change in the near future, so it is advisable to keep checking from time to time to avoid missing important information."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""If you want to see what has changed from the previous version, [read the list of updates here.](changes.html)"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""## Introduction"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""TWBlue is an application to make Twitter simple and fast, while using as few resources as possible. With TWBlue, you can do things like the following:"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""* Tweet, reply to, retweet and delete tweets,"""))
|
||||
documentation.append(_(u"""* Mark and unmark a tweet as favourite,"""))
|
||||
documentation.append(_(u"""* Send and delete direct messages,"""))
|
||||
documentation.append(_(u"""* See your friends and followers,"""))
|
||||
documentation.append(_(u"""* Follow, unfollow, report and block a user,"""))
|
||||
documentation.append(_(u"""* Open a user's timeline to see their tweets separately,"""))
|
||||
documentation.append(_(u"""* Open URLs from a tweet or direct message,"""))
|
||||
documentation.append(_(u"""* Play several types of audio files from addresses,"""))
|
||||
documentation.append(_(u"""* And more."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""## Usage"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""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."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""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."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""In order to use TWBlue, you must first have created an account on the Twitter website. The process for signing up for a Twitter account is very accessible. During the account registration, you will need to choose a Twitter username. This serves two purposes. This is the method through which people will comunicate with you, but most importantly, your username and password will be required to connect TWBlue to your Twitter account. We suggest you choose a username which is memorable both to you and the people you hope will follow you."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""We'll start from the premise that you have a Twitter account with its corresponding username and password."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""### Authorising the application"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""First of all, it's necessary to authorise the program so it can access your Twitter account and act on your behalf. The authorisation process is quite simple, and the program never retains data such as your password. In order to authorise the application, you just need to run the main executable file, called TWBlue.exe (on some computers it may appear simply as TWBlue if Windows Explorer is not set to display file extensions). We suggest you may like to place a Windows shortcut on your Desktop pointing to this executable file for quick and easy location."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""You can log into several Twitter accounts simultaneously. The program refers to each Twitter account you have configured as a "Session". If this is the first time you have launched TWBlue, and if no Twitter session exists, you will see the Session Manager. This dialogue box allows you to authorise as many accounts as you wish. If you press the Tab key to reach the "new account" button and activate it by pressing the Space Bar, a dialogue box will advise you that your default internet browser will be opened in order to authorise the application and you will be asked if you would like to continue. Activate the "yes" Button by pressing the letter "Y" so the process may start."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""Your default browser will open on the Twitter page to request authorisation. Enter your username and password into the appropriate edit fields if you're not already logged in, select the authorise button, and press it."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""Once you've authorised your twitter account, the website will redirect you to a page which will notify you that TWBlue has been authorised successfully. Now you are able to close the page by pressing ALT+F4 which will return you to the Session Manager. On the session list, you will see a new item temporarily called "Authorised account x" -where x is a number. The session name will change once you open that session."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""To start running TWBlue, press the Ok button in the Session Manager dialogue. By default, the program starts all the configured sessions automatically, however, you can change this behavior."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""If all went well, the application will start playing sounds, indicating your data is being updated."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""When the process is finished, by default the program will play another sound, and the screen reader will say "ready" (this behaviour can be configured)."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""## General concepts"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""Before starting to describe TWBlue's usage, we'll explain some concepts that will be used extensively throughout this manual."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""### Buffer"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""A buffer is a list of items to manage the data which arrives from Twitter, after being processed by the application. When you configure a new session on TWBlue and start it, many buffers are created. Each of them may contain some of the items which this program works with: Tweets, direct messages, users, trends or events. According to the buffer you are focusing, you will be able to do different actions with these items."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""The following is a description for every one of TWBlue's buffers and the kind of items they work with."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""* Home: this shows all the tweets on the main timeline. These are the tweets by users you follow."""))
|
||||
documentation.append(_(u"""* Mentions: if a user, whether you follow them or not, mentions you on Twitter, you will find it in this list."""))
|
||||
documentation.append(_(u"""* Direct messages: here you will find the private direct messages you exchange with users who follow you , or with any user, if you allow direct messages from everyone (this setting is configurable from Twitter). This list only shows received messages."""))
|
||||
documentation.append(_(u"""* Sent direct messages: this buffer shows all the direct messages sent from your account."""))
|
||||
documentation.append(_(u"""* Sent tweets: this shows all the tweets sent from your account."""))
|
||||
documentation.append(_(u"""* Favourites: here you will see all the tweets you have favourited."""))
|
||||
documentation.append(_(u"""* Followers: when users follow you, you'll be able to see them on this buffer, with some of their account details."""))
|
||||
documentation.append(_(u"""* Friends: the same as the previous buffer, but these are the users you follow."""))
|
||||
documentation.append(_(u"""* User timelines: these are buffers you may create. They contain only the tweets by a specific user. They're used so you can see the tweets by a single person and you don't want to look all over your timeline. You may create as many as you like."""))
|
||||
documentation.append(_(u"""* Events: An event is anything that happens on Twitter, such as when someone follows you, when someone adds or removes one of your tweets from their favourites list, or when you subscribe to a list. There are many more, but the program shows the most common ones in the events buffer so that you can easily keep track of what is happening on your account."""))
|
||||
documentation.append(_(u"""* Lists: A list is similar to a user timeline, except that you can configure it to contain tweets from multiple users."""))
|
||||
documentation.append(_(u"""* Search: A search buffer contains the results of a search operation."""))
|
||||
documentation.append(_(u"""* User favourites: You can have the program create a buffer containing tweets favourited by a particular user."""))
|
||||
documentation.append(_(u"""* Trending Topics: a trend buffer shows the top ten most used terms in a geographical region. This region may be a country or a city. Trends are updated every five minutes."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""If a tweet contains a URL, you can press enter in the GUI or Control + Windows + Enter in the invisible interface to open it. If it contains audio, you can press Control + Enter or Control + Windows + Alt + Enter to play it, respectively. TWBlue will play a sound if the tweet contains the #audio hashtag, but there may be tweets which contain audio without this. Finally, if a tweet contains geographical information, you can press Control + Windows + G in the invisible interface to retrieve it."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""### Username fields"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""These fields accept a Twitter username (without the at sign) as the input. They are present in the send direct message and the user actions dialogue boxes. Those dialogues will be discussed later. The initial value of these fields depends on where they were opened from. They are prepopulated with the username of the sender of the focused tweet (if they were opened from the home and sent timelines, from users' timelines or from lists), the sender of the focused direct message (if from the received or sent direct message buffers) or in the focused user (if from the followers' or friends' buffer). If one of those dialogue boxes is opened from a tweet, and if there are more users mentioned in it, you can use the arrow keys to switch between them. Alternatively, you can also type a username."""))
|
||||
documentation.append(_(u"""## The program's interfaces"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""### The graphical user interface (GUI)"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""The graphical user interface of TWBlue consists of a window containing:"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""* a menu bar accomodating five menus (application, tweet, user, buffer and help);"""))
|
||||
documentation.append(_(u"""* One tree view,"""))
|
||||
documentation.append(_(u"""* One list of items"""))
|
||||
documentation.append(_(u"""* Four buttons in most dialogs: Tweet, retweet , reply and direct message."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""The actions that are available for every item will be described later."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""In summary, the GUI contains two core components. These are the controls you will find while pressing the Tab key within the program's interface, and the different elements present on the menu bar."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""#### Buttons in the application"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""* Tweet: this button opens up a dialogue box to write your tweet. The message must not exceed 140 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 + A 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."""))
|
||||
documentation.append(_(u"""* 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, and if the original tweet plus the comment exceeds 140 characters, you will be asked if you want to post it as a comment with a mention to the original user and a link to the originating tweet."""))
|
||||
documentation.append(_(u"""* 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, but with the name of the user already filled in (for example @user) so you only need to write your message. If there are more users referred to in the tweet, you can press shift-tab and activate the mention all users button. When you're on the friends or followers lists, the button will be called mention instead."""))
|
||||
documentation.append(_(u"""* 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 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."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""Bear in mind that buttons will appear according to which actions are possible on the list you are browsing. For example, on the home timeline, mentions, sent, favourites and user timelines you will see the four buttons, while on the direct messages list you'll only get the direct message and tweet buttons, and on friends and followers lists the direct message, tweet, and mention buttons will be available."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""#### Menus"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""Visually, Towards the top of the main application window, can be found a menu bar which contains many of the same functions as listed in the previous section, together with some additional items. To access the menu bar, press the alt key. You will find five menus listed: application, tweet, user, buffer and help. This section describes the items on each one of them."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""##### Application menu"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""* Manage accounts: Opens a window with all the sessions configured in TWBlue, where you can add new sessions or delete the ones you've already created."""))
|
||||
documentation.append(_(u"""* Update profile: opens a dialogue where you can update your information on Twitter: name, location, website and bio. If you have already set this up the fields will be prefilled with the existing information. Also, you can upload a photo to your profile."""))
|
||||
documentation.append(_(u"""* Hide window: turns off the Graphical User Interface. Read the section on the invisible interface for further details."""))
|
||||
documentation.append(_(u"""* Search: shows a dialogue box where you can search for tweets or users on Twitter."""))
|
||||
documentation.append(_(u"""* Lists Manager: This dialogue box allows you to manage your Twitter lists. In order to use them, you must first create them. Here, you can view, edit, create, delete or, optionally, open them in buffers similar to user timelines."""))
|
||||
documentation.append(_(u"""* Edit keystrokes: this opens a dialogue where you can see and edit the shortcuts used in the invisible interface."""))
|
||||
documentation.append(_(u"""* Account settings: Opens a dialogue box which lets you customize settings for the current account."""))
|
||||
documentation.append(_(u"""* Global settings: Opens a dialogue which lets you configure settings for the entire application."""))
|
||||
documentation.append(_(u"""* Exit: asks whether you want to exit the program. If the answer is yes, it closes the application. If you do not want to be asked for confirmation before exiting, uncheck the checkbox from the global settings dialogue box."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""##### Tweet menu"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""* You will first find the items to tweet, reply and retweet, which are equivalent to the buttons with the same name."""))
|
||||
documentation.append(_(u"""* Add to favourites: marks the tweet you're viewing as a favourite."""))
|
||||
documentation.append(_(u"""* Remove from favourites: removes the tweet from your favourites, but not from Twitter."""))
|
||||
documentation.append(_(u"""* Show tweet: opens up a dialogue box where you can read the tweet, direct message, friend or follower which has focus. You can read the text with the arrow keys. It's a similar dialog box as used for composing tweets, without the ability to send the tweet, file attachment and autocompleting capabilities. It does however include a retweets and favourites count. If you are in the followers or the friends list, it will only contain a read-only edit box with the information in the focused item and a close button."""))
|
||||
documentation.append(_(u"""* View address: If the selected tweet has geographical information, TWBlue may display a dialogue box where you can read the tweet address. This address is retrieved by sending the geographical coordinates of the tweet to Google maps."""))
|
||||
documentation.append(_(u"""* View conversation: If you are focusing a tweet with a mention, it opens a buffer where you can view the whole conversation."""))
|
||||
documentation.append(_(u"""* Delete: permanently removes the tweet or direct message which has focus from Twitter and from your lists. Bear in mind that Twitter only allows you to delete tweets you have posted yourself."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""##### User menu"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""* Actions: Opens a dialogue where you can interact with a user. This dialogue box will be populated with the user who sent the tweet or direct message in focus or the selected user in the friends or followers buffer. You can edit it or leave it as is and choose one of the following actions:"""))
|
||||
documentation.append(_(u""" * Follow: Follows a user. This means you'll see his/her tweets on your home timeline, and if he/she also follows you, you'll be able to exchange direct messages. You may also send / receive direct messages from each other if you have configured the option to allow direct messages from anyone."""))
|
||||
documentation.append(_(u""" * Unfollow: Stops following a user, which causes you not being able to see his/her tweets on your main timeline neither exchanging direct messages, unless they have enabled receiving direct messages from anyone."""))
|
||||
documentation.append(_(u""" * Mute: While muting someone, TWBlue won't show you nor his/her tweets on your main timeline; neither will you see that person's mentions. But you both will be able to exchange direct messages. The muted user is not informed of this action."""))
|
||||
documentation.append(_(u""" * Unmute: this option allows TWBlue to display the user's tweets and mentions again."""))
|
||||
documentation.append(_(u""" * Block: Blocks a user. This forces the user to unfollow you ."""))
|
||||
documentation.append(_(u""" * Unblock: Stops blocking a user."""))
|
||||
documentation.append(_(u""" * Report as spam: this option sends a message to Twitter suggesting the user is performing prohibited practices on the social network."""))
|
||||
documentation.append(_(u""" * Ignore tweets from this client: Adds the client from which the focused tweet was sent to the ignored clients list."""))
|
||||
documentation.append(_(u"""* View timeline: Lets you open a user's timeline by choosing the user in a dialog box. It is created when you press enter. If you invoke this option relative to a user that has no tweets, the operation will fail. If you try creating an existing timeline the program will warn you and will not create it again."""))
|
||||
documentation.append(_(u"""* Direct message: same action as the button."""))
|
||||
documentation.append(_(u"""* Add to List: In order to see someone's tweets in one or more of your lists, you must add them first. In the dialogue box that opens after selecting the user, you will be asked to select the list you wish to add the user to. Thereafter, the list will contain a new member and their tweets will be displayed there."""))
|
||||
documentation.append(_(u"""* Remove from list: lets you remove a user from a list."""))
|
||||
documentation.append(_(u"""* View lists: Shows the lists created by a specified user."""))
|
||||
documentation.append(_(u"""* Show user profile: opens a dialogue with the profile of the specified user."""))
|
||||
documentation.append(_(u"""* View favourites: Opens a buffer where you can see the tweets which have been favourited by a particular user."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""##### Buffer menu"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""* New trending topics buffer: This opens a buffer to get the worlwide trending topics or those of a country or a city. You'll be able to select from a dialogue box if you wish to retrieve countries' trends, cities' trends or worldwide trends (this option is in the cities' list) and choose one from the selected list. The trending topics buffer will be created once the "OK" button has been activated within the dialogue box. Remember this kind of buffer will be updated every five minutes."""))
|
||||
documentation.append(_(u"""* Load previous items: This allows more items to be loaded for the specified buffer."""))
|
||||
documentation.append(_(u"""* Mute: Mutes notifications of a particular buffer so you will not hear when new tweets arrive."""))
|
||||
documentation.append(_(u"""* autoread: When enabled, the screen reader or SAPI 5 Text to Speech voice (if enabled) will read the text of incoming tweets. Please note that this could get rather chatty if there are a lot of incoming tweets."""))
|
||||
documentation.append(_(u"""* Clear buffer: Deletes all items from the buffer."""))
|
||||
documentation.append(_(u"""* Destroy: dismisses the list you're on."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""##### Help menu"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""* Documentation: opens up this file, where you can read some useful program concepts."""))
|
||||
documentation.append(_(u"""* Sounds tutorial: Opens a dialog box where you can familiarize yourself with the different sounds of the program."""))
|
||||
documentation.append(_(u"""* What's new in this version?: opens up a document with the list of changes from the current version to the earliest."""))
|
||||
documentation.append(_(u"""* Check for updates: every time you open the program it automatically checks for new versions. If an update is available, it will ask you if you want to download the update. If you accept, the updating process will commence. When complete, TWBlue will be restarted. This item checks for new updates without having to restart the application."""))
|
||||
documentation.append(_(u"""* Report an error: opens up a dialogue box to report a bug by completing a small number of fields. Pressing enter will send the report. If the operation doesn't succeed the program will display a warning."""))
|
||||
documentation.append(_(u"""* TWBlue's website: visit our [home page](http://twblue.es) where you can find all relevant information and downloads for TWBlue and become a part of the community."""))
|
||||
documentation.append(_(u"""* About TWBlue: shows the credits of the program."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""### The invisible user interface"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""The invisible interface, as its name suggests, has no graphical window and works directly with screen readers such as JAWS for Windows, NVDA and System Access. This interface is disabled by default, but you can enable it by pressing Control + M. It works similarly to TheQube and Chicken Nugget. Its shortcuts are similar to those found in these two clients. In addition, the program has builtin support for the keymaps for these applications, configurable through the global settings dialogue. By default, you cannot use this interface's shortcuts in the GUI, but you can configure this in the global settings dialogue."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""The next section contains a list of keyboard shortcuts for both interfaces. Bear in mind that we will only describe the default keymap."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""## Keyboard shortcuts"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""### Shortcuts of the graphical user interface (GUI)"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""* Enter: Open URL."""))
|
||||
documentation.append(_(u"""* Control + Enter: Play audio."""))
|
||||
documentation.append(_(u"""* Control + M: Hide the GUI."""))
|
||||
documentation.append(_(u"""* Control + N: Compose a new tweet."""))
|
||||
documentation.append(_(u"""* Control + R: Reply / mention."""))
|
||||
documentation.append(_(u"""* Control + Shift + R: Retweet."""))
|
||||
documentation.append(_(u"""* Control + D: Send a direct message."""))
|
||||
documentation.append(_(u"""* control + F: Add tweet to favourites."""))
|
||||
documentation.append(_(u"""* Control + Shift + F: Remove a tweet from favourites."""))
|
||||
documentation.append(_(u"""* Control + S: Open the user actions dialogue."""))
|
||||
documentation.append(_(u"""* Control + Shift + V: Show tweet."""))
|
||||
documentation.append(_(u"""* Control + Q: Quit this program."""))
|
||||
documentation.append(_(u"""* Control + I: Open user timeline."""))
|
||||
documentation.append(_(u"""* Control + Shift + i: Destroy buffer."""))
|
||||
documentation.append(_(u"""* F5: Increase volume by 5%."""))
|
||||
documentation.append(_(u"""* F6: Decrease volume by 5%."""))
|
||||
documentation.append(_(u"""* Control + P: Edit your profile."""))
|
||||
documentation.append(_(u"""* Control + Delete: Delete a tweet or direct message."""))
|
||||
documentation.append(_(u"""* Control + Shift + Delete: Empty the current buffer."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""### Shortcuts of the invisible interface (default keymap)"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""* Control + Windows + Up Arrow: moves to the previous item in the buffer."""))
|
||||
documentation.append(_(u"""* Control + Windows + Down Arrow: moves to the next item in the buffer."""))
|
||||
documentation.append(_(u"""* Control + Windows + Left Arrow: Move to the previous buffer."""))
|
||||
documentation.append(_(u"""* Control + Windows + Right Arrow: Move to the next buffer."""))
|
||||
documentation.append(_(u"""* Control + Windows + Shift + Left: Focus the previous session."""))
|
||||
documentation.append(_(u"""* Control + Windows + Shift + Right: Focus the next session."""))
|
||||
documentation.append(_(u"""* Control + Windows + C: View conversation."""))
|
||||
documentation.append(_(u"""* Control + Enter: Open URL."""))
|
||||
documentation.append(_(u"""* Control + Windows + Enter: Play audio."""))
|
||||
documentation.append(_(u"""* Control + Windows + M: Show or hide the GUI."""))
|
||||
documentation.append(_(u"""* Control + Windows + N: New tweet."""))
|
||||
documentation.append(_(u"""* Control + Windows + R: Reply / Mention."""))
|
||||
documentation.append(_(u"""* Control + Windows + Shift + R: Retweet."""))
|
||||
documentation.append(_(u"""* Control + Windows + D: Send direct message."""))
|
||||
documentation.append(_(u"""* Windows+ Alt + F: Mark as favourite."""))
|
||||
documentation.append(_(u"""* Alt + Windows + Shift + F: Remove from favourites."""))
|
||||
documentation.append(_(u"""* Control + Windows + S: Open the user actions dialogue."""))
|
||||
documentation.append(_(u"""* Control + Windows + Alt + N: See user details."""))
|
||||
documentation.append(_(u"""* Control + Windows + V: Show tweet."""))
|
||||
documentation.append(_(u"""* Control + Windows + F4: Quit TWBlue."""))
|
||||
documentation.append(_(u"""* Control + Windows + I: Open user timeline."""))
|
||||
documentation.append(_(u"""* Control + Windows + Shift + I: Destroy buffer."""))
|
||||
documentation.append(_(u"""* Control + Windows + Alt + Up: Increase volume by 5%."""))
|
||||
documentation.append(_(u"""* Control + Windows + Alt + Down: Decrease volume by 5%."""))
|
||||
documentation.append(_(u"""* Control + Windows + Home: Jump to the first element of the current buffer."""))
|
||||
documentation.append(_(u"""* Control + Windows + End: Jump to the last element of the current buffer."""))
|
||||
documentation.append(_(u"""* Control + Windows + PageUp: Jump 20 elements up in the current buffer."""))
|
||||
documentation.append(_(u"""* Control + Windows + PageDown: Jump 20 elements down in the current buffer."""))
|
||||
documentation.append(_(u"""* Windows + Alt + P: Edit profile."""))
|
||||
documentation.append(_(u"""* Control + Windows + Delete: Delete a tweet or direct message."""))
|
||||
documentation.append(_(u"""* Control + Windows + Shift + Delete: Empty the current buffer."""))
|
||||
documentation.append(_(u"""* Control + Windows + Space: Repeat last item."""))
|
||||
documentation.append(_(u"""* Control + Windows + Shift + C: Copy to clipboard."""))
|
||||
documentation.append(_(u"""* Control + Windows+ A: Add user to list."""))
|
||||
documentation.append(_(u"""* Control + Windows + Shift + A: Remove user from list."""))
|
||||
documentation.append(_(u"""* Control + Windows + M: Mute / unmute the current buffer."""))
|
||||
documentation.append(_(u"""* Windows + Alt + M: Mute / unmute the current session."""))
|
||||
documentation.append(_(u"""* Control + Windows + E: Toggle the automatic reading of incoming tweets in the current buffer."""))
|
||||
documentation.append(_(u"""* Control + Windows + -: Search on Twitter."""))
|
||||
documentation.append(_(u"""* Control + Windows + K: Show the keystroke editor."""))
|
||||
documentation.append(_(u"""* Control + Windows + L: Show lists for a specified user."""))
|
||||
documentation.append(_(u"""* Windows + Alt + PageUp: Load previous items for the current buffer."""))
|
||||
documentation.append(_(u"""* Control + Windows + G: Get geolocation."""))
|
||||
documentation.append(_(u"""* Control + Windows + Shift + G: Display the tweet's geolocation in a dialogue."""))
|
||||
documentation.append(_(u"""* Control + Windows + T: Create a trending topics' buffer."""))
|
||||
documentation.append(_(u"""* Control + Windows + {: Find a string in the current buffer."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""## Configuration"""))
|
||||
documentation.append(_(u"""As described above, this application has two configuration dialogues, the global settings dialogue and the account settings dialogue."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""### The account settings dialogue"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""#### General tab"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""* Autocompletion settings: Allows you to configure the autocompletion database. You can add users manually or let TWBlue add your followers, friends or both."""))
|
||||
documentation.append(_(u"""* Relative timestamps: Allows you to configure whether the application will calculate the time the tweet or direct message was sent or received based on the current time, or simply say the time it was received or sent."""))
|
||||
documentation.append(_(u"""* API calls: Allows you to adjust the number of API calls to be made to Twitter by this program."""))
|
||||
documentation.append(_(u"""* Items on each API call: Allows you to specify how many items should be retrieved from Twitter for each API call (default and maximum is 200)."""))
|
||||
documentation.append(_(u"""* Inverted buffers: Allows you to specify whether the buffers should be inverted, which means that the oldest items will show at the end of them and the newest at the beginning."""))
|
||||
documentation.append(_(u"""* Retweet mode: Allows you to specify the behaviour when posting a retweet: you can choose between retweeting with a comment, retweeting without comment or being asked."""))
|
||||
documentation.append(_(u"""* Number of items per buffer to cache in database: This allows you to specify how many items TWBlue should cache in a database. You can type any number, 0 to cache all items, or leave blank to disable caching entirely."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""#### buffers tab"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""This tab displays a list for each buffer you have available in TWBlue, except for searches, timelines, favourites' timelines and lists. You can show, hide and move them."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""#### The ignored clients tab"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""In this tab, you can add and remove clients to be ignored by the program."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""#### Sound tab"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""In this tab, you can adjust the sound volume, select the input and output device and set the soundpack used by the program."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""#### Audio service tab"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""In this tab, you can enter your SndUp API key (if you have one) to upload audio to SndUp with your account. Note that if account credentials are not specified you will upload anonimously."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""### Global settings"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""This dialogue allows you to configure some settings which will affect the entire application."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""#### General tab"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""* Language: This allows you to change the language of this program. Currently supported languages are arabic, Catalan, German, English, Spanish, Basque, Finnish, French, Galician, Croatian, Hungarian, Italian, Polish, Portuguese, Russian and Turkish."""))
|
||||
documentation.append(_(u"""* Ask before exiting TWBlue: This checkbox allows you to control whetherthe program will ask for confirmation before exiting."""))
|
||||
documentation.append(_(u"""* Play a sound when TWBlue launches: This checkbox allows you to configure whether the application will play a sound when it has finished loading the buffers."""))
|
||||
documentation.append(_(u"""* Speak a message when TWBlue launches: This is the same as the previous option, but this checkbox configures whether the screen reader will say \"ready\"."""))
|
||||
documentation.append(_(u"""* Use the invisible interface's shortcuts in the GUI: As the invisible interface and the Graphical User Interface have their own shortcuts, you may want to use the invisible interface's keystrokes all the time. If this option is checked, the invisible interface's shortcuts will be usable in the GUI."""))
|
||||
documentation.append(_(u"""* Activate SAPI5 when any other screen reader is not being run: This checkbox allows to activate SAPI 5 TTS when no other screen reader is being run."""))
|
||||
documentation.append(_(u"""* Hide GUI on launch: This allows you to configure whether TWBlue will start with the GUI or the invisible interface."""))
|
||||
documentation.append(_(u"""* Keymap: This option allows you to change the keymap used by the program in the invisible interface. The shipped keymaps are Default, Qwitter, Windows 10 and Chicken Nugget. The keymaps are in the \"keymaps\" folder, and you can create new ones. Just create a new \".keymap\" file and change the keystrokes associated with the actions, as it is done in the shipped keymaps."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""#### Proxi tab"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""In this tab you can configure TWBlue to use a Proxy server by completing the fields displayed (server, port, user and password)."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""## License, source code and donations"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""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>."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""The source code of the program is available on GitHub at <https://www.github.com/manuelcortez/twblue>."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""If you want to donate to the project, you can do so at <http://twblue.es/?q=node/3&language=en>. Thank you for your support!"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""## Contact"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""If you still have questions after reading this document, if you wish to collaborate to the project in some other way, or if you simply want to get in touch with the application developer, follow the Twitter account [@tw_blue2](https://twitter.com/tw_blue2) or [@manuelcortez00.](https://twitter.com/manuelcortez00) You can also visit [our website](http://twblue.es)"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""## Credits"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""TWBlue is developed and mantained by [Manuel Cortéz](https://twitter.com/manuelcortez00), [José Manuel Delicado](https://twitter.com/jmdaweb), and [Bill Dengler](https://twitter.com/codeofdusk). It's supported and sponsored by [Technow S. L.](https://twitter.com/technow)"""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""We would also like to thank the translators of TWBlue, who have allowed the spreading of the application."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""* English: [Bryner Villalobos](https://twitter.com/Bry_StarkCR) and [Bill Dengler](https://twitter.com/codeofdusk)."""))
|
||||
documentation.append(_(u"""* Arabic: [Mohammed Al Shara](https://twitter.com/mohammed0204)."""))
|
||||
documentation.append(_(u"""* Catalan: [Joan Rabat](https://twitter.com/joanrabat) and Juan Carlos Rivilla."""))
|
||||
documentation.append(_(u"""* Spanish: [Manuel Cortéz](https://twitter.com/manuelcortez00)."""))
|
||||
documentation.append(_(u"""* Basque: [Sukil Etxenike](https://twitter.com/sukil2011)."""))
|
||||
documentation.append(_(u"""* Finnish: [Jani Kinnunen](https://twitter.com/jani_kinnunen)."""))
|
||||
documentation.append(_(u"""* French: [Rémi Ruiz](https://twitter.com/blindhelp38)."""))
|
||||
documentation.append(_(u"""* Galician: [Juan Buño](https://twitter.com/Quetzatl_)."""))
|
||||
documentation.append(_(u"""* German: [Steffen Schultz](https://twitter.com/schulle4u)."""))
|
||||
documentation.append(_(u"""* Croatian: [Zvonimir Stanečić](https://twitter.com/zvonimirek222)."""))
|
||||
documentation.append(_(u"""* Hungarian: Robert Osztolykan."""))
|
||||
documentation.append(_(u"""* Italian: [Christian Leo Mameli](https://twitter.com/llajta2012)."""))
|
||||
documentation.append(_(u"""* Japanese: [Riku](https://twitter.com/riku_sub001)"""))
|
||||
documentation.append(_(u"""* Polish: [Pawel Masarczyk.](https://twitter.com/Piciok)"""))
|
||||
documentation.append(_(u"""* Portuguese: Odenilton Júnior Santos."""))
|
||||
documentation.append(_(u"""* Romanian: [Florian Ionașcu](https://twitter.com/7ro) and [Răzvan Ciule](https://twitter.com/pilgrim89)"""))
|
||||
documentation.append(_(u"""* Russian: [Александр Яшин](https://twitter.com/radovest)."""))
|
||||
documentation.append(_(u"""* Serbian: [Aleksandar Đurić](https://twitter.com/sokodtreshnje)"""))
|
||||
documentation.append(_(u"""* Turkish: [Burak Yüksek](https://twitter.com/burakyuksek)."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""Many thanks also to the people who worked on the documentation. Initially, [Manuel Cortez](https://twitter.com/manuelcortez00) did the documentation in Spanish, and translated to English by [Bryner Villalobos](https://twitter.com/Bry_StarkCR), [Robert Spangler](https://twitter.com/glasscity1837), [Sussan Rey](https://twitter.com/sussanrey17), [Anibal Hernandez](https://twitter.com/anibalmetal), and [Holly Scott-Gardner](https://twitter.com/holly1994). It was updated by [Sukil Etxenike](https://twitter.com/sukil2011), with some valuable corrections by [Brian Hartgen](https://twitter.com/brianhartgen) and [Bill Dengler](https://twitter.com/codeofdusk)."""))
|
||||
documentation.append(_(u"""
|
||||
"""))
|
||||
documentation.append(_(u"""---"""))
|
||||
documentation.append(_(u"""Copyright © 2013-2015. Manuel Cortéz"""))
|
@@ -1,6 +1,6 @@
|
||||
[Format]
|
||||
Type=PortableApps.comFormat
|
||||
Version=3.3
|
||||
Version=3.4
|
||||
|
||||
[Details]
|
||||
Name=tw blue portable
|
||||
@@ -20,8 +20,8 @@ CommercialUse=true
|
||||
EULAVersion=2
|
||||
|
||||
[Version]
|
||||
PackageVersion=0.82.0.0
|
||||
DisplayVersion=0.82
|
||||
PackageVersion=0.87.0.0
|
||||
DisplayVersion=0.87
|
||||
|
||||
[Control]
|
||||
Icons=1
|
||||
|
@@ -13,9 +13,9 @@ SetCompressor /solid lzma
|
||||
SetDatablockOptimize on
|
||||
VIAddVersionKey ProductName "TWBlue"
|
||||
VIAddVersionKey LegalCopyright "Copyright 2016 Manuel Cortéz."
|
||||
VIAddVersionKey ProductVersion "0.82"
|
||||
VIAddVersionKey FileVersion "0.82"
|
||||
VIProductVersion "0.82.0.0"
|
||||
VIAddVersionKey ProductVersion "0.87"
|
||||
VIAddVersionKey FileVersion "0.87"
|
||||
VIProductVersion "0.87.0.0"
|
||||
!insertmacro MUI_PAGE_WELCOME
|
||||
!define MUI_LICENSEPAGE_RADIOBUTTONS
|
||||
!insertmacro MUI_PAGE_LICENSE "license.txt"
|
||||
@@ -69,10 +69,10 @@ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "D
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "UninstallString" '"$INSTDIR\uninstall.exe"'
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall" "InstallLocation" $INSTDIR
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall" "Publisher" "Manuel Cortéz"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "DisplayVersion" "0.82"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "DisplayVersion" "0.87"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "URLInfoAbout" "http://twblue.es"
|
||||
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "VersionMajor" 0
|
||||
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "VersionMinor" 82
|
||||
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "VersionMinor" 87
|
||||
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "NoModify" 1
|
||||
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "NoRepair" 1
|
||||
SectionEnd
|
||||
|
@@ -39,3 +39,4 @@ spelling_language = string(default="")
|
||||
save_followers_in_autocompletion_db = boolean(default=False)
|
||||
save_friends_in_autocompletion_db = boolean(default=False)
|
||||
twishort_enabled = boolean(default=False)
|
||||
mention_all = boolean(default=True)
|
@@ -8,6 +8,7 @@ language = string(default="system")
|
||||
hide_gui = boolean(default=False)
|
||||
voice_enabled = boolean(default=False)
|
||||
ask_at_exit = boolean(default=True)
|
||||
autostart = boolean(default=False)
|
||||
handle_longtweets = boolean(default=True)
|
||||
use_invisible_keyboard_shorcuts = boolean(default=True)
|
||||
play_ready_sound = boolean(default=True)
|
||||
|
@@ -2,7 +2,7 @@
|
||||
name = 'TWBlue'
|
||||
snapshot = False
|
||||
if snapshot == False:
|
||||
version = "0.82"
|
||||
version = "0.87"
|
||||
update_url = 'http://twblue.es/updates/twblue_ngen.json'
|
||||
mirror_update_url = 'https://raw.githubusercontent.com/manuelcortez/TWBlue/next-gen/updates/stable.json'
|
||||
else:
|
||||
|
@@ -2,6 +2,7 @@
|
||||
import config_utils
|
||||
import paths
|
||||
import logging
|
||||
import platform
|
||||
|
||||
log = logging.getLogger("config")
|
||||
|
||||
@@ -10,10 +11,17 @@ MAINSPEC = "app-configuration.defaults"
|
||||
|
||||
app = None
|
||||
keymap=None
|
||||
changed_keymap = False
|
||||
|
||||
def setup ():
|
||||
global app
|
||||
log.debug("Loading global app settings...")
|
||||
app = config_utils.load_config(paths.config_path(MAINFILE), paths.app_path(MAINSPEC))
|
||||
log.debug("Loading keymap...")
|
||||
global keymap
|
||||
if float(platform.version()[:2]) >= 10 and app["app-settings"]["load_keymap"] == "default.keymap":
|
||||
app["app-settings"]["load_keymap"] = "Windows 10.keymap"
|
||||
app.write()
|
||||
global changed_keymap
|
||||
changed_keymap = True
|
||||
keymap = config_utils.load_config(paths.config_path("keymap.keymap"), paths.app_path("keymaps/"+app['app-settings']['load_keymap']))
|
||||
|
@@ -100,7 +100,9 @@ class bufferController(object):
|
||||
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
|
||||
@@ -222,7 +224,7 @@ class emptyPanel(bufferController):
|
||||
self.needs_init = True
|
||||
|
||||
class baseBufferController(bufferController):
|
||||
def __init__(self, parent, function, name, sessionObject, account, sound=None, bufferType=None, *args, **kwargs):
|
||||
def __init__(self, parent, function, name, sessionObject, account, sound=None, bufferType=None, compose_func="compose_tweet", *args, **kwargs):
|
||||
super(baseBufferController, self).__init__(parent, function, *args, **kwargs)
|
||||
log.debug("Initializing buffer %s, account %s" % (name, account,))
|
||||
if bufferType != None:
|
||||
@@ -233,7 +235,7 @@ class baseBufferController(bufferController):
|
||||
self.name = name
|
||||
self.type = self.buffer.type
|
||||
self.session = sessionObject
|
||||
self.compose_function = compose.compose_tweet
|
||||
self.compose_function = getattr(compose, compose_func)
|
||||
log.debug("Compose_function: %s" % (self.compose_function,))
|
||||
self.account = account
|
||||
self.buffer.account = account
|
||||
@@ -256,10 +258,10 @@ class baseBufferController(bufferController):
|
||||
if tweet.has_key("message"):
|
||||
message = tweet["message"]
|
||||
try:
|
||||
tweet = self.session.twitter.twitter.show_status(id=tweet_id, include_ext_alt_text=True)
|
||||
urls = utils.find_urls_in_text(tweet["text"])
|
||||
tweet = self.session.twitter.twitter.show_status(id=tweet_id, include_ext_alt_text=True, tweet_mode="extended")
|
||||
urls = utils.find_urls_in_text(tweet["full_text"])
|
||||
for url in range(0, len(urls)):
|
||||
try: tweet["text"] = tweet["text"].replace(urls[url], tweet["entities"]["urls"][url]["expanded_url"])
|
||||
try: tweet["full_text"] = tweet["full_text"].replace(urls[url], tweet["entities"]["urls"][url]["expanded_url"])
|
||||
except IndexError: pass
|
||||
except TwythonError as e:
|
||||
utils.twitter_error(e)
|
||||
@@ -270,10 +272,10 @@ class baseBufferController(bufferController):
|
||||
while l != False:
|
||||
tweetsList.append(tweet)
|
||||
try:
|
||||
tweet = self.session.twitter.twitter.show_status(id=l, include_ext_alt_text=True)
|
||||
urls = utils.find_urls_in_text(tweet["text"])
|
||||
tweet = self.session.twitter.twitter.show_status(id=l, include_ext_alt_text=True, tweet_mode="extended")
|
||||
urls = utils.find_urls_in_text(tweet["full_text"])
|
||||
for url in range(0, len(urls)):
|
||||
try: tweet["text"] = tweet["text"].replace(urls[url], tweet["entities"]["urls"][url]["expanded_url"])
|
||||
try: tweet["full_text"] = tweet["full_text"].replace(urls[url], tweet["entities"]["urls"][url]["expanded_url"])
|
||||
except IndexError: pass
|
||||
except TwythonError as e:
|
||||
utils.twitter_error(e)
|
||||
@@ -362,7 +364,7 @@ class baseBufferController(bufferController):
|
||||
self.remove_item(i)
|
||||
|
||||
def put_items_on_list(self, number_of_items):
|
||||
if number_of_items == 0: return
|
||||
if number_of_items == 0 and self.session.settings["general"]["persist_size"] == 0: return
|
||||
log.debug("The list contains %d items " % (self.buffer.list.get_count(),))
|
||||
log.debug("Putting %d items on the list" % (number_of_items,))
|
||||
if self.buffer.list.get_count() == 0:
|
||||
@@ -370,7 +372,7 @@ class baseBufferController(bufferController):
|
||||
tweet = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"])
|
||||
self.buffer.list.insert_item(False, *tweet)
|
||||
self.buffer.set_position(self.session.settings["general"]["reverse_timelines"])
|
||||
elif self.buffer.list.get_count() > 0:
|
||||
elif self.buffer.list.get_count() > 0 and number_of_items > 0:
|
||||
if self.session.settings["general"]["reverse_timelines"] == False:
|
||||
items = self.session.db[self.name][len(self.session.db[self.name])-number_of_items:]
|
||||
for i in items:
|
||||
@@ -477,20 +479,23 @@ class baseBufferController(bufferController):
|
||||
tweet = self.get_right_tweet()
|
||||
screen_name = tweet["user"]["screen_name"]
|
||||
id = tweet["id"]
|
||||
users = utils.get_all_mentioned(tweet, self.session.db)
|
||||
message = messages.reply(self.session, _(u"Reply"), _(u"Reply to %s") % (screen_name,), "@%s " % (screen_name,), twishort_enabled=self.session.settings["mysc"]["twishort_enabled"], users=users)
|
||||
users = utils.get_all_mentioned(tweet, self.session.db)
|
||||
message = messages.reply(self.session, _(u"Reply"), _(u"Reply to %s") % (screen_name,), "", twishort_enabled=self.session.settings["mysc"]["twishort_enabled"], users=users)
|
||||
if message.message.get_response() == widgetUtils.OK:
|
||||
self.session.settings["mysc"]["twishort_enabled"] = message.message.long_tweet.GetValue()
|
||||
self.session.settings["mysc"]["mention_all"] = message.message.mentionAll.GetValue()
|
||||
text = message.message.get_text()
|
||||
if message.message.mentionAll.GetValue() == False:
|
||||
text = u"@{0} {1}".format(screen_name, text)
|
||||
if len(text) > 140 and message.message.get("long_tweet") == True:
|
||||
if message.image == None:
|
||||
text = twishort.create_tweet(self.session.settings["twitter"]["user_key"], self.session.settings["twitter"]["user_secret"], text)
|
||||
else:
|
||||
text = twishort.create_tweet(self.session.settings["twitter"]["user_key"], self.session.settings["twitter"]["user_secret"], text, 1)
|
||||
if message.image == None:
|
||||
call_threaded(self.session.api_call, call_name="update_status", _sound="reply_send.ogg", in_reply_to_status_id=id, status=text)
|
||||
call_threaded(self.session.api_call, call_name="update_status", _sound="reply_send.ogg", in_reply_to_status_id=id, status=text, auto_populate_reply_metadata=message.message.mentionAll.GetValue())
|
||||
else:
|
||||
call_threaded(self.session.api_call, call_name="update_status_with_media", _sound="reply_send.ogg", in_reply_to_status_id=id, status=text, media=message.file)
|
||||
call_threaded(self.session.api_call, call_name="update_status_with_media", _sound="reply_send.ogg", in_reply_to_status_id=id, status=text, media=message.file, auto_populate_reply_metadata=message.message.mentionAll.GetValue())
|
||||
if hasattr(message.message, "destroy"): message.message.destroy()
|
||||
|
||||
@_tweets_exist
|
||||
@@ -532,20 +537,16 @@ class baseBufferController(bufferController):
|
||||
self._retweet_with_comment(tweet, id)
|
||||
|
||||
def _retweet_with_comment(self, tweet, id, comment=''):
|
||||
retweet = messages.tweet(self.session, _(u"Retweet"), _(u"Add your comment to the tweet"), u"“@%s: %s ”" % (tweet["user"]["screen_name"], tweet["text"]), max=116, messageType="retweet", twishort_enabled=self.session.settings["mysc"]["twishort_enabled"])
|
||||
if tweet.has_key("full_text"):
|
||||
comments = tweet["full_text"]
|
||||
else:
|
||||
comments = tweet["text"]
|
||||
retweet = messages.tweet(self.session, _(u"Quote"), _(u"Add your comment to the tweet"), u"“@%s: %s ”" % (tweet["user"]["screen_name"], comments), max=116, messageType="retweet", twishort_enabled=self.session.settings["mysc"]["twishort_enabled"])
|
||||
if comment != '':
|
||||
retweet.message.set_text(comment)
|
||||
if retweet.message.get_response() == widgetUtils.OK:
|
||||
text = retweet.message.get_text()
|
||||
comments=text
|
||||
if len(text+ u"“@%s: %s ”" % (tweet["user"]["screen_name"], tweet["text"])) < 140:
|
||||
text = text+u"“@%s: %s ”" % (tweet["user"]["screen_name"], tweet["text"])
|
||||
else:
|
||||
answer = commonMessageDialogs.retweet_as_link(self.buffer)
|
||||
if answer == widgetUtils.YES:
|
||||
text = text+" https://twitter.com/{0}/status/{1}".format(tweet["user"]["screen_name"], id)
|
||||
else:
|
||||
return self._retweet_with_comment(tweet, id, comment=comments)
|
||||
text = text+" https://twitter.com/{0}/status/{1}".format(tweet["user"]["screen_name"], id)
|
||||
if retweet.image == None:
|
||||
call_threaded(self.session.api_call, call_name="update_status", _sound="retweet_send.ogg", status=text, in_reply_to_status_id=id)
|
||||
else:
|
||||
@@ -583,10 +584,10 @@ class baseBufferController(bufferController):
|
||||
url=urls_list.get_string()
|
||||
if hasattr(urls_list, "destroy"): urls_list.destroy()
|
||||
if url != '':
|
||||
try:
|
||||
sound.URLPlayer.play(url, self.session.settings["sound"]["volume"])
|
||||
except:
|
||||
log.error("Exception while executing audio method.")
|
||||
# try:
|
||||
sound.URLPlayer.play(url, self.session.settings["sound"]["volume"])
|
||||
# except:
|
||||
# log.error("Exception while executing audio method.")
|
||||
|
||||
# @_tweets_exist
|
||||
def url(self, url='', announce=True, *args, **kwargs):
|
||||
@@ -1098,7 +1099,7 @@ class conversationBufferController(searchBufferController):
|
||||
tweet = self.tweet
|
||||
while tweet["in_reply_to_status_id"] != None:
|
||||
try:
|
||||
tweet = self.session.twitter.twitter.show_status(id=tweet["in_reply_to_status_id"])
|
||||
tweet = self.session.twitter.twitter.show_status(id=tweet["in_reply_to_status_id"], tweet_mode="extended")
|
||||
except TwythonError as err:
|
||||
break
|
||||
self.statuses.insert(0, tweet)
|
||||
@@ -1106,7 +1107,7 @@ class conversationBufferController(searchBufferController):
|
||||
if tweet["in_reply_to_status_id"] == None:
|
||||
self.kwargs["since_id"] = tweet["id"]
|
||||
self.ids.append(tweet["id"])
|
||||
val2 = self.session.search(self.name, *self.args, **self.kwargs)
|
||||
val2 = self.session.search(self.name, tweet_mode="extended", *self.args, **self.kwargs)
|
||||
for i in val2:
|
||||
if i["in_reply_to_status_id"] in self.ids:
|
||||
self.statuses.append(i)
|
||||
@@ -1126,12 +1127,3 @@ class conversationBufferController(searchBufferController):
|
||||
return True
|
||||
elif dlg == widgetUtils.NO:
|
||||
return False
|
||||
|
||||
class pocketBufferController(baseBufferController):
|
||||
def __init__(self, parent, name, sessionObject, account, sound=None, function=None, bufferType=None, *args, **kwargs):
|
||||
super(pocketBufferController, self).__init__(parent, name, sessionObject, account, sound, function, bufferType, *args, **kwargs)
|
||||
self.type = "pocket"
|
||||
|
||||
def start_stream(self):
|
||||
log.debug("Starting stream for buffer %s, account %s and type %s" % (self.name, self.account, self.type))
|
||||
log.debug("args: %s, kwargs: %s" % (self.args, self.kwargs))
|
||||
|
7
src/controller/filters.py
Normal file
7
src/controller/filters.py
Normal file
@@ -0,0 +1,7 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from wxUI.dialogs import filters
|
||||
|
||||
class filterController(object):
|
||||
def __init__(self):
|
||||
self.dialog = filters.filterDialog()
|
||||
self.dialog.get_response()
|
@@ -175,6 +175,8 @@ class Controller(object):
|
||||
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.open_timeline, self.view.timeline)
|
||||
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.open_favs_timeline, self.view.favs)
|
||||
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.open_conversation, menuitem=self.view.view_conversation)
|
||||
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.seekLeft, menuitem=self.view.seekLeft)
|
||||
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.seekRight, menuitem=self.view.seekRight)
|
||||
if widgetUtils.toolkit == "wx":
|
||||
widgetUtils.connect_event(self.view.nb, widgetUtils.NOTEBOOK_PAGE_CHANGED, self.buffer_changed)
|
||||
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.report_error, self.view.reportError)
|
||||
@@ -249,6 +251,8 @@ class Controller(object):
|
||||
# Connection checker executed each minute.
|
||||
self.checker_function = RepeatingTimer(60, self.check_connection)
|
||||
self.checker_function.start()
|
||||
self.save_db = RepeatingTimer(300, self.save_data_in_db)
|
||||
self.save_db.start()
|
||||
|
||||
def start(self):
|
||||
""" Starts all buffer objects. Loads their items."""
|
||||
@@ -289,27 +293,27 @@ class Controller(object):
|
||||
self.view.add_buffer(account.buffer , name=session.db["user_name"])
|
||||
for i in session.settings['general']['buffer_order']:
|
||||
if i == 'home':
|
||||
home = buffersController.baseBufferController(self.view.nb, "get_home_timeline", "home_timeline", session, session.db["user_name"])
|
||||
home = buffersController.baseBufferController(self.view.nb, "get_home_timeline", "home_timeline", session, session.db["user_name"], tweet_mode="extended")
|
||||
self.buffers.append(home)
|
||||
self.view.insert_buffer(home.buffer, name=_(u"Home"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
|
||||
elif i == 'mentions':
|
||||
mentions = buffersController.baseBufferController(self.view.nb, "get_mentions_timeline", "mentions", session, session.db["user_name"], sound="mention_received.ogg")
|
||||
mentions = buffersController.baseBufferController(self.view.nb, "get_mentions_timeline", "mentions", session, session.db["user_name"], sound="mention_received.ogg", tweet_mode="extended")
|
||||
self.buffers.append(mentions)
|
||||
self.view.insert_buffer(mentions.buffer, name=_(u"Mentions"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
|
||||
elif i == 'dm':
|
||||
dm = buffersController.baseBufferController(self.view.nb, "get_direct_messages", "direct_messages", session, session.db["user_name"], bufferType="dmPanel", sound="dm_received.ogg", full_text=True)
|
||||
dm = buffersController.baseBufferController(self.view.nb, "get_direct_messages", "direct_messages", session, session.db["user_name"], bufferType="dmPanel", compose_func="compose_dm", sound="dm_received.ogg", full_text=True)
|
||||
self.buffers.append(dm)
|
||||
self.view.insert_buffer(dm.buffer, name=_(u"Direct messages"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
|
||||
elif i == 'sent_dm':
|
||||
sent_dm = buffersController.baseBufferController(self.view.nb, "get_sent_messages", "sent_direct_messages", session, session.db["user_name"], bufferType="dmPanel", full_text=True)
|
||||
sent_dm = buffersController.baseBufferController(self.view.nb, "get_sent_messages", "sent_direct_messages", session, session.db["user_name"], bufferType="dmPanel", compose_func="compose_dm", full_text=True)
|
||||
self.buffers.append(sent_dm)
|
||||
self.view.insert_buffer(sent_dm.buffer, name=_(u"Sent direct messages"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
|
||||
elif i == 'sent_tweets':
|
||||
sent_tweets = buffersController.baseBufferController(self.view.nb, "get_user_timeline", "sent_tweets", session, session.db["user_name"], bufferType="dmPanel", screen_name=session.db["user_name"])
|
||||
sent_tweets = buffersController.baseBufferController(self.view.nb, "get_user_timeline", "sent_tweets", session, session.db["user_name"], bufferType="dmPanel", screen_name=session.db["user_name"], tweet_mode="extended")
|
||||
self.buffers.append(sent_tweets)
|
||||
self.view.insert_buffer(sent_tweets.buffer, name=_(u"Sent tweets"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
|
||||
elif i == 'favorites':
|
||||
favourites = buffersController.baseBufferController(self.view.nb, "get_favorites", "favourites", session, session.db["user_name"])
|
||||
favourites = buffersController.baseBufferController(self.view.nb, "get_favorites", "favourites", session, session.db["user_name"], tweet_mode="extended")
|
||||
self.buffers.append(favourites)
|
||||
|
||||
self.view.insert_buffer(favourites.buffer, name=_(u"Likes"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
|
||||
@@ -337,14 +341,14 @@ class Controller(object):
|
||||
self.buffers.append(timelines)
|
||||
self.view.insert_buffer(timelines.buffer , name=_(u"Timelines"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
|
||||
for i in session.settings["other_buffers"]["timelines"]:
|
||||
tl = buffersController.baseBufferController(self.view.nb, "get_user_timeline", "%s-timeline" % (i,), session, session.db["user_name"], bufferType=None, screen_name=i)
|
||||
tl = buffersController.baseBufferController(self.view.nb, "get_user_timeline", "%s-timeline" % (i,), session, session.db["user_name"], bufferType=None, screen_name=i, tweet_mode="extended")
|
||||
self.buffers.append(tl)
|
||||
self.view.insert_buffer(tl.buffer, name=_(u"Timeline for {}").format(i,), pos=self.view.search("timelines", session.db["user_name"]))
|
||||
favs_timelines = buffersController.emptyPanel(self.view.nb, "favs_timelines", session.db["user_name"])
|
||||
self.buffers.append(favs_timelines)
|
||||
self.view.insert_buffer(favs_timelines.buffer , name=_(u"Likes timelines"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
|
||||
for i in session.settings["other_buffers"]["favourites_timelines"]:
|
||||
tl = buffersController.baseBufferController(self.view.nb, "get_favorites", "%s-favorite" % (i,), session, session.db["user_name"], bufferType=None, screen_name=i)
|
||||
tl = buffersController.baseBufferController(self.view.nb, "get_favorites", "%s-favorite" % (i,), session, session.db["user_name"], bufferType=None, screen_name=i, tweet_mode="extended")
|
||||
self.buffers.append(tl)
|
||||
self.view.insert_buffer(tl.buffer, name=_(u"Likes for {}").format(i,), pos=self.view.search("favs_timelines", session.db["user_name"]))
|
||||
tl.timer = RepeatingTimer(300, tl.start_stream)
|
||||
@@ -355,7 +359,7 @@ class Controller(object):
|
||||
for i in session.settings["other_buffers"]["followers_timelines"]:
|
||||
tl = buffersController.peopleBufferController(self.view.nb, "get_followers_list", "%s-followers" % (i,), session, session.db["user_name"], screen_name=i)
|
||||
self.buffers.append(tl)
|
||||
self.view.insert_buffer(tl.buffer, name=_(u"Followers for {}").format(i,), pos=self.view.search("favs_timelines", session.db["user_name"]))
|
||||
self.view.insert_buffer(tl.buffer, name=_(u"Followers for {}").format(i,), pos=self.view.search("followers_timelines", session.db["user_name"]))
|
||||
tl.timer = RepeatingTimer(300, tl.start_stream)
|
||||
tl.timer.start()
|
||||
friends_timelines = buffersController.emptyPanel(self.view.nb, "friends_timelines", session.db["user_name"])
|
||||
@@ -364,22 +368,22 @@ class Controller(object):
|
||||
for i in session.settings["other_buffers"]["friends_timelines"]:
|
||||
tl = buffersController.peopleBufferController(self.view.nb, "get_friends_list", "%s-friends" % (i,), session, session.db["user_name"], screen_name=i)
|
||||
self.buffers.append(tl)
|
||||
self.view.insert_buffer(tl.buffer, name=_(u"Friends for {}").format(i,), pos=self.view.search("favs_timelines", session.db["user_name"]))
|
||||
self.view.insert_buffer(tl.buffer, name=_(u"Friends for {}").format(i,), pos=self.view.search("friends_timelines", session.db["user_name"]))
|
||||
tl.timer = RepeatingTimer(300, tl.start_stream)
|
||||
tl.timer.start()
|
||||
lists = buffersController.emptyPanel(self.view.nb, "lists", session.db["user_name"])
|
||||
self.buffers.append(lists)
|
||||
self.view.insert_buffer(lists.buffer , name=_(u"Lists"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
|
||||
for i in session.settings["other_buffers"]["lists"]:
|
||||
tl = buffersController.listBufferController(self.view.nb, "get_list_statuses", "%s-list" % (i,), session, session.db["user_name"], bufferType=None, list_id=utils.find_list(i, session.db["lists"]))
|
||||
tl = buffersController.listBufferController(self.view.nb, "get_list_statuses", "%s-list" % (i,), session, session.db["user_name"], bufferType=None, list_id=utils.find_list(i, session.db["lists"]), tweet_mode="extended")
|
||||
session.lists.append(tl)
|
||||
self.buffers.append(tl)
|
||||
self.view.insert_buffer(tl.buffer, name=_(u"List for {}").format(i), pos=self.view.search("timelines", session.db["user_name"]))
|
||||
self.view.insert_buffer(tl.buffer, name=_(u"List for {}").format(i), pos=self.view.search("lists", session.db["user_name"]))
|
||||
searches = buffersController.emptyPanel(self.view.nb, "searches", session.db["user_name"])
|
||||
self.buffers.append(searches)
|
||||
self.view.insert_buffer(searches.buffer , name=_(u"Searches"), pos=self.view.search(session.db["user_name"], session.db["user_name"]))
|
||||
for i in session.settings["other_buffers"]["tweet_searches"]:
|
||||
tl = buffersController.searchBufferController(self.view.nb, "search", "%s-searchterm" % (i,), session, session.db["user_name"], bufferType="searchPanel", q=i, count=session.settings["general"]["max_tweets_per_call"])
|
||||
tl = buffersController.searchBufferController(self.view.nb, "search", "%s-searchterm" % (i,), session, session.db["user_name"], bufferType="searchPanel", q=i, count=session.settings["general"]["max_tweets_per_call"], tweet_mode="extended")
|
||||
self.buffers.append(tl)
|
||||
self.view.insert_buffer(tl.buffer, name=_(u"Search for {}").format(i), pos=self.view.search("searches", session.db["user_name"]))
|
||||
tl.timer = RepeatingTimer(180, tl.start_stream)
|
||||
@@ -476,6 +480,18 @@ class Controller(object):
|
||||
output.speak(_(u"{0} not found.").format(string,), True)
|
||||
page.buffer.list.select_item(start)
|
||||
|
||||
def seekLeft(self, *args, **kwargs):
|
||||
try:
|
||||
sound.URLPlayer.seek(-5)
|
||||
except:
|
||||
output.speak("Unable to seek.",True)
|
||||
|
||||
def seekRight(self, *args, **kwargs):
|
||||
try:
|
||||
sound.URLPlayer.seek(5)
|
||||
except:
|
||||
output.speak("Unable to seek.",True)
|
||||
|
||||
def edit_keystrokes(self, *args, **kwargs):
|
||||
editor = keystrokeEditor.KeystrokeEditor()
|
||||
if editor.changed == True:
|
||||
@@ -1161,6 +1177,8 @@ class Controller(object):
|
||||
return keymap
|
||||
|
||||
def register_invisible_keyboard_shorcuts(self, keymap):
|
||||
if config.changed_keymap:
|
||||
commonMessageDialogs.changed_keymap()
|
||||
self.keyboard_handler = WXKeyboardHandler(self.view)
|
||||
self.keyboard_handler.register_keys(keymap)
|
||||
|
||||
@@ -1314,7 +1332,7 @@ class Controller(object):
|
||||
s.timelinesStream.disconnect()
|
||||
del s.timelinesStream
|
||||
s.counter = 0
|
||||
s.reconnection_function_active = False
|
||||
# s.reconnection_function_active = False
|
||||
# for i in self.buffers:
|
||||
# if i.invisible == True and i.session.session_id == s.session_id and i.type != "people":
|
||||
# i.start_stream()
|
||||
@@ -1492,4 +1510,8 @@ class Controller(object):
|
||||
id = data["delete"]["status"]["id"]
|
||||
for i in self.buffers:
|
||||
if hasattr(i, "remove_tweet") and hasattr(i, "name"):
|
||||
i.remove_tweet(id)
|
||||
i.remove_tweet(id)
|
||||
|
||||
def save_data_in_db(self):
|
||||
for i in session_.sessions:
|
||||
session_.sessions[i].shelve()
|
@@ -29,10 +29,11 @@ class basicTweet(object):
|
||||
# if system == "Windows":
|
||||
# if messageType != "dm":
|
||||
widgetUtils.connect_event(self.message.text, widgetUtils.ENTERED_TEXT, self.text_processor)
|
||||
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)
|
||||
self.attachments = []
|
||||
|
||||
def translate(self, event=None):
|
||||
@@ -43,6 +44,7 @@ class basicTweet(object):
|
||||
dest = [x[0] for x in translator.translator.available_languages()][dlg.get("dest_lang")]
|
||||
msg = translator.translator.translate(text=text_to_translate, source=source, target=dest)
|
||||
self.message.set_text(msg)
|
||||
self.text_processor()
|
||||
self.message.text_focus()
|
||||
output.speak(_(u"Translated"))
|
||||
else:
|
||||
@@ -56,6 +58,7 @@ class basicTweet(object):
|
||||
elif len(urls) == 1:
|
||||
self.message.set_text(self.message.get_text().replace(urls[0], url_shortener.shorten(urls[0])))
|
||||
output.speak(_(u"URL shortened"))
|
||||
self.text_processor()
|
||||
self.message.text_focus()
|
||||
elif len(urls) > 1:
|
||||
list_urls = urlList.urlList()
|
||||
@@ -63,6 +66,7 @@ class basicTweet(object):
|
||||
if list_urls.get_response() == widgetUtils.OK:
|
||||
self.message.set_text(self.message.get_text().replace(urls[list_urls.get_item()], url_shortener.shorten(list_urls.get_string())))
|
||||
output.speak(_(u"URL shortened"))
|
||||
self.text_processor()
|
||||
self.message.text_focus()
|
||||
|
||||
def unshorten(self, event=None):
|
||||
@@ -73,6 +77,7 @@ class basicTweet(object):
|
||||
elif len(urls) == 1:
|
||||
self.message.set_text(self.message.get_text().replace(urls[0], url_shortener.unshorten(urls[0])))
|
||||
output.speak(_(u"URL expanded"))
|
||||
self.text_processor()
|
||||
self.message.text_focus()
|
||||
elif len(urls) > 1:
|
||||
list_urls = urlList.urlList()
|
||||
@@ -80,6 +85,7 @@ class basicTweet(object):
|
||||
if list_urls.get_response() == widgetUtils.OK:
|
||||
self.message.set_text(self.message.get_text().replace(urls[list_urls.get_item()], url_shortener.unshorten(list_urls.get_string())))
|
||||
output.speak(_(u"URL expanded"))
|
||||
self.text_processor()
|
||||
self.message.text_focus()
|
||||
|
||||
def text_processor(self, *args, **kwargs):
|
||||
@@ -101,6 +107,7 @@ class basicTweet(object):
|
||||
checker = SpellChecker.spellchecker.spellChecker(text, "")
|
||||
if hasattr(checker, "fixed_text"):
|
||||
self.message.set_text(checker.fixed_text)
|
||||
self.text_processor()
|
||||
self.message.text_focus()
|
||||
|
||||
def attach(self, *args, **kwargs):
|
||||
@@ -110,6 +117,7 @@ class basicTweet(object):
|
||||
dlg.uploaderDialog.destroy()
|
||||
if url != 0:
|
||||
self.message.set_text(self.message.get_text()+url+" #audio")
|
||||
self.text_processor()
|
||||
else:
|
||||
output.speak(_(u"Unable to upload the audio"))
|
||||
dlg.cleanup()
|
||||
@@ -125,6 +133,7 @@ class tweet(basicTweet):
|
||||
if twishort_enabled == False:
|
||||
try: self.message.long_tweet.SetValue(False)
|
||||
except AttributeError: pass
|
||||
self.text_processor()
|
||||
|
||||
def upload_image(self, *args, **kwargs):
|
||||
a = attach.attach()
|
||||
@@ -138,21 +147,25 @@ class tweet(basicTweet):
|
||||
class reply(tweet):
|
||||
def __init__(self, session, title, caption, text, twishort_enabled, users=None):
|
||||
super(reply, self).__init__(session, title, caption, text, twishort_enabled, messageType="reply")
|
||||
self.users = users
|
||||
if self.users != None and len(self.users) > 1:
|
||||
widgetUtils.connect_event(self.message.mentionAll, widgetUtils.BUTTON_PRESSED, self.mention_all)
|
||||
self.message.mentionAll.SetValue(True)
|
||||
if len(users) > 1:
|
||||
# widgetUtils.connect_event(self.message.mentionAll, widgetUtils.CHECKBOX, self.mention_all)
|
||||
self.message.enable_button("mentionAll")
|
||||
self.message.mentionAll.SetValue(self.session.settings["mysc"]["mention_all"])
|
||||
self.message.set_cursor_at_end()
|
||||
self.text_processor()
|
||||
|
||||
def mention_all(self, *args, **kwargs):
|
||||
self.message.set_text(self.message.get_text()+self.users)
|
||||
self.message.set_cursor_at_end()
|
||||
self.message.text_focus()
|
||||
self.text_processor()
|
||||
|
||||
class dm(basicTweet):
|
||||
def __init__(self, session, title, caption, text):
|
||||
super(dm, self).__init__(session, title, caption, text, messageType="dm", max=10000)
|
||||
widgetUtils.connect_event(self.message.autocompletionButton, widgetUtils.BUTTON_PRESSED, self.autocomplete_users)
|
||||
self.text_processor()
|
||||
|
||||
def autocomplete_users(self, *args, **kwargs):
|
||||
c = autocompletionUsers.completion.autocompletionUsers(self.message, self.session.session_id)
|
||||
@@ -172,10 +185,10 @@ class viewTweet(basicTweet):
|
||||
if tweetList[i].has_key("message") and tweetList[i]["is_quote_status"] == False:
|
||||
value = "message"
|
||||
else:
|
||||
value = "text"
|
||||
value = "full_text"
|
||||
if tweetList[i].has_key("retweeted_status") and tweetList[i]["is_quote_status"] == False:
|
||||
if tweetList[i].has_key("message") == False:
|
||||
text = text + "rt @%s: %s\n" % (tweetList[i]["retweeted_status"]["user"]["screen_name"], tweetList[i]["retweeted_status"]["text"])
|
||||
text = text + "rt @%s: %s\n" % (tweetList[i]["retweeted_status"]["user"]["screen_name"], tweetList[i]["retweeted_status"]["full_text"])
|
||||
else:
|
||||
text = text + "rt @%s: %s\n" % (tweetList[i]["retweeted_status"]["user"]["screen_name"], tweetList[i][value])
|
||||
else:
|
||||
@@ -194,10 +207,10 @@ class viewTweet(basicTweet):
|
||||
if tweet.has_key("message"):
|
||||
value = "message"
|
||||
else:
|
||||
value = "text"
|
||||
value = "full_text"
|
||||
if tweet.has_key("retweeted_status"):
|
||||
if tweet.has_key("message") == False:
|
||||
text = "rt @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], tweet["retweeted_status"]["text"])
|
||||
text = "rt @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], tweet["retweeted_status"]["full_text"])
|
||||
else:
|
||||
text = "rt @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], tweet[value])
|
||||
else:
|
||||
|
@@ -1,7 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import os
|
||||
import webbrowser
|
||||
#import pocket
|
||||
import sound_lib
|
||||
import paths
|
||||
import widgetUtils
|
||||
@@ -15,10 +14,10 @@ from extra.autocompletionUsers import settings
|
||||
from pubsub import pub
|
||||
import logging
|
||||
import config_utils
|
||||
#from pocket_utils import authorisationHandler
|
||||
import BaseHTTPServer
|
||||
log = logging.getLogger("Settings")
|
||||
import keys
|
||||
from collections import OrderedDict
|
||||
from platform_utils.autostart import windows as autostart_windows
|
||||
|
||||
class globalSettingsController(object):
|
||||
def __init__(self):
|
||||
@@ -56,8 +55,11 @@ class globalSettingsController(object):
|
||||
self.dialog.create_general(langs,self.kmfriendlies)
|
||||
self.dialog.general.language.SetSelection(id)
|
||||
self.dialog.general.km.SetSelection(self.kmid)
|
||||
if paths.mode == "installed":
|
||||
self.dialog.set_value("general", "autostart", config.app["app-settings"]["autostart"])
|
||||
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", "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"])
|
||||
@@ -85,6 +87,9 @@ class globalSettingsController(object):
|
||||
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"))
|
||||
@@ -248,14 +253,25 @@ class accountSettingsController(globalSettingsController):
|
||||
self.dialog.ignored_clients.remove_(id)
|
||||
|
||||
def get_buffers_list(self):
|
||||
all_buffers = ['home','mentions','dm','sent_dm','sent_tweets','favorites','followers','friends','blocks','muted','events']
|
||||
all_buffers=OrderedDict()
|
||||
all_buffers['home']=_(u"Home")
|
||||
all_buffers['mentions']=_(u"Mentions")
|
||||
all_buffers['dm']=_(u"Direct Messages")
|
||||
all_buffers['sent_dm']=_(u"Sent direct messages")
|
||||
all_buffers['sent_tweets']=_(u"Sent tweets")
|
||||
all_buffers['favorites']=_(u"Likes")
|
||||
all_buffers['followers']=_(u"Followers")
|
||||
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:
|
||||
for i in all_buffers.keys():
|
||||
if i in self.config["general"]["buffer_order"]:
|
||||
list_buffers.append((i, True))
|
||||
list_buffers.append((i, all_buffers[i], True))
|
||||
else:
|
||||
hidden_buffers.append((i, False))
|
||||
hidden_buffers.append((i, all_buffers[i], False))
|
||||
list_buffers.extend(hidden_buffers)
|
||||
return list_buffers
|
||||
|
||||
|
@@ -19,7 +19,10 @@ class Upload(object):
|
||||
self.completed_callback = completed_callback
|
||||
self.background_thread = None
|
||||
self.transfer_rate = 0
|
||||
self.m = MultipartEncoder(fields={field:(os.path.basename(self.filename), open(self.filename, 'rb'), "application/octet-stream")})
|
||||
self.local_filename=os.path.basename(self.filename)
|
||||
if isinstance(self.local_filename, unicode):
|
||||
self.local_filename=self.local_filename.encode(sys.getfilesystemencoding())
|
||||
self.m = MultipartEncoder(fields={field:(self.local_filename, open(self.filename, 'rb'), "application/octet-stream")})
|
||||
self.monitor = MultipartEncoderMonitor(self.m, self.progress_callback)
|
||||
self.response=None
|
||||
self.obj=obj
|
||||
|
@@ -1,4 +1,4 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
from arrow import locales
|
||||
from arrow.locales import Locale
|
||||
|
||||
@@ -23,7 +23,7 @@ def get_locale(name):
|
||||
return locale_cls()
|
||||
|
||||
class CatalaLocale(Locale):
|
||||
names = ['ca', 'ca_ca']
|
||||
names = ['ca', 'ca_es', 'ca_ca']
|
||||
past = 'Fa {0}'
|
||||
future = '{0}' # I don't know what's the right phrase in catala for the future.
|
||||
|
||||
@@ -48,9 +48,9 @@ class CatalaLocale(Locale):
|
||||
day_abbreviations = ['', 'Dilluns', 'Dimars', 'Dimecres', 'Dijous', 'Divendres', 'Disabte', 'Diumenge']
|
||||
|
||||
class GalicianLocale(Locale):
|
||||
names = ['gl', 'gl_gl']
|
||||
names = ['gl', 'gl_es', 'gl_gl']
|
||||
past = 'Fai {0}'
|
||||
future = '{0}' # I don't know what's the right phrase in Galician for the future.
|
||||
future = 'En {0}'
|
||||
|
||||
timeframes = {
|
||||
'now': 'Agora mesmo',
|
||||
@@ -73,7 +73,7 @@ class GalicianLocale(Locale):
|
||||
day_abbreviations = ['', 'Lun', 'Mar', 'Mer', 'xov', 'Ven' 'Sab', 'Dom']
|
||||
|
||||
class BasqueLocale(Locale):
|
||||
names = ['eu', 'eu_eu']
|
||||
names = ['eu', 'eu_es', 'eu_eu']
|
||||
past = 'duela {0}'
|
||||
future = '{0} igarota'
|
||||
|
||||
|
@@ -1,5 +1,24 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from requests.packages import urllib3
|
||||
from requests.packages.urllib3 import fields
|
||||
import six
|
||||
import urllib
|
||||
|
||||
def fix():
|
||||
urllib3.disable_warnings()
|
||||
urllib3.disable_warnings()
|
||||
fields.format_header_param=patched_format_header_param
|
||||
|
||||
def patched_format_header_param(name, value):
|
||||
if not any(ch in value for ch in '"\\\r\n'):
|
||||
result = '%s="%s"' % (name, value)
|
||||
try:
|
||||
result.encode('ascii')
|
||||
except (UnicodeEncodeError, UnicodeDecodeError):
|
||||
pass
|
||||
else:
|
||||
return result
|
||||
if not six.PY3 and isinstance(value, six.text_type): # Python 2:
|
||||
value = value.encode('utf-8')
|
||||
value=urllib.quote(value, safe='')
|
||||
value = '%s=%s' % (name, value)
|
||||
return value
|
||||
|
@@ -11,11 +11,11 @@ right = string(default="alt+win+right")
|
||||
next_account = string(default="alt+win+shift+right")
|
||||
previous_account = string(default="alt+win+shift+left")
|
||||
open_conversation = string(default="alt+win+c")
|
||||
show_hide = string(default="alt+win+w")
|
||||
show_hide = string(default="control+win+w")
|
||||
post_tweet = string(default="alt+win+n")
|
||||
post_reply = string(default="control+win+r")
|
||||
post_retweet = string(default="alt+win+shift+r")
|
||||
send_dm = string(default="alt+win+d")
|
||||
send_dm = string(default="alt+win+shift+d")
|
||||
add_to_favourites = string(default="alt+win+f")
|
||||
remove_from_favourites = string(default="alt+shift+win+f")
|
||||
follow = string(default="alt+win+s")
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -24,7 +24,11 @@ def is_long(tweet):
|
||||
return False
|
||||
|
||||
def clear_url(tweet):
|
||||
urls = utils.find_urls_in_text(tweet["text"])
|
||||
if tweet.has_key("full_text"):
|
||||
value = "full_text"
|
||||
else:
|
||||
value = "text"
|
||||
urls = utils.find_urls_in_text(tweet[value])
|
||||
try: tweet["message"] = tweet["message"].replace(urls[-1], "")
|
||||
except IndexError: pass
|
||||
return tweet
|
@@ -18,8 +18,8 @@
|
||||
############################################################
|
||||
import requests
|
||||
import keys
|
||||
import application
|
||||
from twitter import utils
|
||||
from requests_oauthlib import OAuth1Session
|
||||
|
||||
def get_twishort_uri(url):
|
||||
try:
|
||||
@@ -30,25 +30,39 @@ def get_twishort_uri(url):
|
||||
def is_long(tweet):
|
||||
long = False
|
||||
for url in range(0, len(tweet["entities"]["urls"])):
|
||||
if "twishort.com" in tweet["entities"]["urls"][url]["expanded_url"]:
|
||||
long = get_twishort_uri(tweet["entities"]["urls"][url]["expanded_url"])
|
||||
try:
|
||||
if "twishort.com" in tweet["entities"]["urls"][url]["expanded_url"]:
|
||||
long = get_twishort_uri(tweet["entities"]["urls"][url]["expanded_url"])
|
||||
except TypeError:
|
||||
pass
|
||||
return long
|
||||
|
||||
def get_full_text(uri):
|
||||
# try:
|
||||
r = requests.get("http://api.twishort.com/1.1/get.json", params={"uri": uri, "api_key": keys.keyring.get("twishort_api_key")})
|
||||
return r.json()["text"]
|
||||
# except:
|
||||
# return False
|
||||
try:
|
||||
r = requests.get("http://api.twishort.com/1.1/get.json", params={"uri": uri, "api_key": keys.keyring.get("twishort_api_key")})
|
||||
return r.json()["text"]
|
||||
except:
|
||||
return False
|
||||
|
||||
def create_tweet(user_token, user_secret, text, media=0):
|
||||
if application.snapshot == True:
|
||||
url = "http://twblue.es/snapshot_twishort.php"
|
||||
else:
|
||||
url = "http://twblue.es/stable_twishort.php"
|
||||
data = {"user_token": user_token,
|
||||
"user_secret": user_secret,
|
||||
twitter = OAuth1Session(keys.keyring.get("api_key"), client_secret=keys.keyring.get("api_secret"), resource_owner_key=user_token, resource_owner_secret=user_secret)
|
||||
twishort_key=keys.keyring.get("twishort_api_key")
|
||||
x_auth_service_provider = "https://api.twitter.com/1.1/account/verify_credentials.json"
|
||||
twishort_post_url = "http://api.twishort.com/1.1/post.json"
|
||||
twishort_update_ids_url = "http://api.twishort.com/1.1/update_ids.json"
|
||||
r=requests.Request('GET', x_auth_service_provider)
|
||||
prep=twitter.prepare_request(r)
|
||||
resp=twitter.send(prep)
|
||||
twitter.headers={
|
||||
'X-Auth-Service-Provider':x_auth_service_provider,
|
||||
'X-Verify-Credentials-Authorization':prep.headers['Authorization'],
|
||||
}
|
||||
data = {'api_key':twishort_key,
|
||||
"text": text.encode("utf-8"),
|
||||
"media": media}
|
||||
response = requests.post(url, data=data)
|
||||
return response.json()["text_to_tweet"]
|
||||
response = twitter.post(twishort_post_url, data=data)
|
||||
try:
|
||||
return response.json()["text_to_tweet"]
|
||||
except:
|
||||
print "There was a problem creating a long tweet"
|
||||
return 0
|
||||
|
@@ -26,8 +26,9 @@ def stream_threaded(func, *args, **kwargs):
|
||||
def new_func(*a, **k):
|
||||
try:
|
||||
func(**k)
|
||||
except:
|
||||
except exception as msg:
|
||||
log.error("Error in stream with args: %r" % (a,))
|
||||
log.error(msg.message)
|
||||
pub.sendMessage("stream-error", session=a[0])
|
||||
|
||||
thread = threading.Thread(target=new_func, args=args, kwargs=kwargs)
|
||||
|
@@ -31,11 +31,11 @@ def getAutoStart(app_name):
|
||||
|
||||
def setAutoStart(app_name, enable=True):
|
||||
"""Configures automatic startup for the application, if the enable argument is set to True. If set to False, deletes the application AutoStart value."""
|
||||
|
||||
print paths.get_executable()
|
||||
if getAutoStart(app_name) == enable:
|
||||
return
|
||||
key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, RUN_REGKEY, 0, _winreg.KEY_WRITE)
|
||||
if enable:
|
||||
_winreg.SetValueEx(key, unicode(app_name), None, _winreg.REG_SZ, sys.argv[0])
|
||||
_winreg.SetValueEx(key, unicode(app_name), None, _winreg.REG_SZ, paths.get_executable())
|
||||
else:
|
||||
_winreg.DeleteValue(key, unicode(app_name))
|
||||
|
@@ -1,6 +1,7 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
""" The main session object. Here are the twitter functions to interact with the "model" of TWBlue."""
|
||||
import urllib2
|
||||
import config
|
||||
import twitter
|
||||
from keys import keyring
|
||||
import session_exceptions as Exceptions
|
||||
@@ -425,28 +426,32 @@ class Session(object):
|
||||
|
||||
def check_quoted_status(self, tweet):
|
||||
status = tweets.is_long(tweet)
|
||||
if status != False:
|
||||
if status != False and config.app["app-settings"]["handle_longtweets"]:
|
||||
tweet = self.get_quoted_tweet(tweet)
|
||||
return tweet
|
||||
|
||||
|
||||
def get_quoted_tweet(self, tweet):
|
||||
quoted_tweet = tweet
|
||||
urls = utils.find_urls_in_text(quoted_tweet["text"])
|
||||
if tweet.has_key("full_text"):
|
||||
value = "full_text"
|
||||
else:
|
||||
value = "text"
|
||||
urls = utils.find_urls_in_text(quoted_tweet[value])
|
||||
for url in range(0, len(urls)):
|
||||
try: quoted_tweet["text"] = quoted_tweet["text"].replace(urls[url], quoted_tweet["entities"]["urls"][url]["expanded_url"])
|
||||
try: quoted_tweet[value] = quoted_tweet[value].replace(urls[url], quoted_tweet["entities"]["urls"][url]["expanded_url"])
|
||||
except IndexError: pass
|
||||
id = tweets.is_long(quoted_tweet)
|
||||
try: original_tweet = self.twitter.twitter.show_status(id=id)
|
||||
try: original_tweet = self.twitter.twitter.show_status(id=id, tweet_mode="extended")
|
||||
except: return quoted_tweet
|
||||
urls = utils.find_urls_in_text(original_tweet["text"])
|
||||
original_tweet = self.check_long_tweet(original_tweet)
|
||||
urls = utils.find_urls_in_text(original_tweet["full_text"])
|
||||
for url in range(0, len(urls)):
|
||||
try: original_tweet["text"] = original_tweet["text"].replace(urls[url], original_tweet["entities"]["urls"][url]["expanded_url"])
|
||||
try: original_tweet["full_text"] = original_tweet["full_text"].replace(urls[url], original_tweet["entities"]["urls"][url]["expanded_url"])
|
||||
except IndexError: pass
|
||||
return compose.compose_quoted_tweet(quoted_tweet, original_tweet)
|
||||
|
||||
def check_long_tweet(self, tweet):
|
||||
long = twishort.is_long(tweet)
|
||||
if long != False:
|
||||
if long != False and config.app["app-settings"]["handle_longtweets"]:
|
||||
tweet["message"] = twishort.get_full_text(long)
|
||||
return tweet
|
@@ -41,7 +41,6 @@ def get_architecture_files():
|
||||
("Microsoft.VC90.MFC", glob("../windows-dependencies/x64/Microsoft.VC90.MFC/*")),]
|
||||
|
||||
def get_data():
|
||||
import accessible_output2
|
||||
import sound_lib
|
||||
import enchant
|
||||
return [
|
||||
@@ -50,11 +49,12 @@ def get_data():
|
||||
("accessible_output2/lib", glob("accessible_output2/lib/*.dll")),
|
||||
("keys/lib", glob("keys/lib/*.dll")),
|
||||
("keymaps", glob("keymaps/*.keymap")),
|
||||
]+get_sounds()+get_locales()+get_documentation()+sound_lib.find_datafiles()+accessible_output2.find_datafiles()+enchant.utils.win32_data_files()+get_architecture_files()+wx_files()
|
||||
("share/enchant/myspell", glob("../windows-dependencies/dictionaries/*")),
|
||||
]+get_sounds()+get_locales()+get_documentation()+sound_lib.find_datafiles()+enchant.utils.win32_data_files()+get_architecture_files()+wx_files()
|
||||
|
||||
def get_documentation ():
|
||||
answer = [("documentation", ["documentation/license.txt"])]
|
||||
depth = 9
|
||||
depth = 10
|
||||
for root, dirs, files in os.walk('documentation'):
|
||||
if depth == 0:
|
||||
break
|
||||
|
16
src/sound.py
16
src/sound.py
@@ -117,6 +117,22 @@ class URLStream(object):
|
||||
log.debug("Transformed URL: %s. Prepared" % (self.url,))
|
||||
self.prepared = True
|
||||
|
||||
|
||||
def seek(self,step):
|
||||
pos=self.stream.get_position()
|
||||
pos=self.stream.bytes_to_seconds(pos)
|
||||
pos+=step
|
||||
pos=self.stream.seconds_to_bytes(pos)
|
||||
if pos<0:
|
||||
pos=0
|
||||
self.stream.set_position(pos)
|
||||
|
||||
def playpause(self):
|
||||
if self.stream.is_playing==True:
|
||||
self.stream.pause()
|
||||
else:
|
||||
self.stream.play()
|
||||
|
||||
def play(self, url=None, volume=1.0, stream=None,announce=True):
|
||||
if announce:
|
||||
output.speak(_(u"Playing..."))
|
||||
|
@@ -17,5 +17,4 @@ class handler(BaseHTTPServer.BaseHTTPRequestHandler):
|
||||
params = parse_qs(urlparse(self.path).query)
|
||||
global verifier
|
||||
verifier = params.get('oauth_verifier', [None])[0]
|
||||
self.wfile.write("You have successfully logged into Twitter with" + application.name + ". "
|
||||
"You can close this window now.")
|
||||
self.wfile.write(_(u"You have successfully logged into Twitter with {0}. You can close this window now.").format(application.name))
|
||||
|
@@ -38,33 +38,41 @@ class timelinesStreamer(TwythonStreamer):
|
||||
data_ = self.session.check_quoted_status(data)
|
||||
data_ = self.session.check_long_tweet(data_)
|
||||
data = data_
|
||||
except AttributeError:
|
||||
except ValueError:
|
||||
pass
|
||||
if self.session.settings["general"]["reverse_timelines"] == False: self.session.db["%s-timeline" % (i,)].append(data)
|
||||
else: self.session.db["%s-timeline" % (i,)].insert(0, data)
|
||||
pub.sendMessage("item-in-timeline", data= data, user= self.session.db["user_name"], who= i)
|
||||
return
|
||||
for i in self.session.lists:
|
||||
try:
|
||||
i.users.index(data["user"]["id"])
|
||||
usr = data["in_reply_to_user_id"]
|
||||
if (usr != None and usr in self.friends) or data.has_key("retweeted_status"):
|
||||
data = self.session.check_quoted_status(data)
|
||||
data = self.session.check_long_tweet(data)
|
||||
if self.session.settings["general"]["reverse_timelines"] == False: self.session.db["%s" % (i.name,)].append(data)
|
||||
else: self.session.db["%s" % (i.name,)].insert(0, data)
|
||||
pub.sendMessage("item-in-list", data=data, user=self.session.db["user_name"], where=i.name)
|
||||
elif usr == None:
|
||||
data = self.session.check_quoted_status(data)
|
||||
data = self.session.check_long_tweet(data)
|
||||
if self.session.settings["general"]["reverse_timelines"] == False: self.session.db["%s" % (i.name,)].append(data)
|
||||
else: self.session.db["%s" % (i.name,)].insert(0, data)
|
||||
pub.sendMessage("item-in-list", data=data, user=self.session.db["user_name"], where=i.name)
|
||||
except ValueError:
|
||||
except NameError:
|
||||
pass
|
||||
|
||||
def set_friends(self, friends):
|
||||
self.friends = friends
|
||||
|
||||
def on_success(self, data):
|
||||
try:
|
||||
if "text" in data and utils.is_allowed(data, self.session.settings["twitter"]["ignored_clients"]) == True:
|
||||
self.check_tls(data)
|
||||
except:
|
||||
pass
|
||||
# try:
|
||||
if "text" in data and utils.is_allowed(data, self.session.settings["twitter"]["ignored_clients"]) == True:
|
||||
if data.has_key("extended_tweet"):
|
||||
data["full_text"] = data["extended_tweet"]["full_text"]
|
||||
# data["entities"] = data["extended_tweet"]["entities"]
|
||||
# log.error(data["extended_entities"])
|
||||
self.check_tls(data)
|
||||
# except:
|
||||
# pass
|
||||
|
@@ -127,14 +127,19 @@ class streamer(TwythonStreamer):
|
||||
|
||||
def on_success(self, data):
|
||||
try:
|
||||
if "delete" in data:
|
||||
pub.sendMessage("tweet-deleted", data=data)
|
||||
# if "delete" in data:
|
||||
# pub.sendMessage("tweet-deleted", data=data)
|
||||
if "direct_message" in data:
|
||||
self.process_dm(data)
|
||||
elif "friends" in data:
|
||||
self.friends = data["friends"]
|
||||
pub.sendMessage("friends-receibed")
|
||||
elif "text" in data and utils.is_allowed(data, self.session.settings["twitter"]["ignored_clients"]) == True:
|
||||
if data.has_key("extended_tweet"):
|
||||
data["full_text"] = data["extended_tweet"]["full_text"]
|
||||
# data["entities"].extend(data["extended_tweet"]["entities"])
|
||||
# log.error(data["extended_tweet"])
|
||||
# log.error("Extended tweet")
|
||||
if data["user"]["id"] in self.muted_users: return
|
||||
self.check_mentions(data)
|
||||
self.check_send(data)
|
||||
|
@@ -40,45 +40,75 @@ def compose_tweet(tweet, db, relative_times):
|
||||
ts = tweet["created_at"]
|
||||
if tweet.has_key("message"):
|
||||
value = "message"
|
||||
elif tweet.has_key("full_text"):
|
||||
value = "full_text"
|
||||
else:
|
||||
value = "text"
|
||||
# log.exception(tweet.keys())
|
||||
text = StripChars(tweet[value])
|
||||
if tweet.has_key("sender"):
|
||||
source = "DM"
|
||||
if db["user_name"] == tweet["sender"]["screen_name"]: user = _(u"Dm to %s ") % (tweet["recipient"]["name"],)
|
||||
else: user = tweet["sender"]["name"]
|
||||
elif tweet.has_key("user"):
|
||||
user = tweet["user"]["name"]
|
||||
source = re.sub(r"(?s)<.*?>", "", tweet["source"])
|
||||
if tweet.has_key("retweeted_status"):
|
||||
if tweet.has_key("message") == False and tweet["retweeted_status"]["is_quote_status"] == False:
|
||||
text = "RT @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], StripChars(tweet["retweeted_status"]["text"]))
|
||||
elif tweet["retweeted_status"]["is_quote_status"]:
|
||||
text = "%s" % (StripChars(tweet[value]))
|
||||
else:
|
||||
text = "RT @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], StripChars(tweet[value]))
|
||||
if text[-1] in chars: text=text+"."
|
||||
urls = utils.find_urls_in_text(text)
|
||||
for url in range(0, len(urls)):
|
||||
try: text = text.replace(urls[url], tweet["entities"]["urls"][url]["expanded_url"])
|
||||
except IndexError: pass
|
||||
user = tweet["user"]["name"]
|
||||
source = re.sub(r"(?s)<.*?>", "", tweet["source"])
|
||||
if tweet.has_key("retweeted_status"):
|
||||
if tweet.has_key("message") == False and tweet["retweeted_status"]["is_quote_status"] == False:
|
||||
text = "RT @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], StripChars(tweet["retweeted_status"][value]))
|
||||
elif tweet["retweeted_status"]["is_quote_status"]:
|
||||
text = "%s" % (StripChars(tweet[value]))
|
||||
else:
|
||||
text = "RT @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], StripChars(tweet[value]))
|
||||
# if text[-1] in chars: text=text+"."
|
||||
if tweet.has_key("message") == False:
|
||||
urls = utils.find_urls_in_text(text)
|
||||
for url in range(0, len(urls)):
|
||||
try:
|
||||
log.error(urls[url])
|
||||
log.error(tweet["entities"]["urls"][url])
|
||||
text = text.replace(urls[url], tweet["entities"]["urls"][url]["expanded_url"])
|
||||
except: pass
|
||||
if config.app['app-settings']['handle_longtweets']: pass
|
||||
# return [user+", ", text, ts+", ", source]
|
||||
return [user+", ", text, ts+", ", source]
|
||||
|
||||
def compose_dm(tweet, db, relative_times):
|
||||
""" It receives a tweet and returns a list with the user, text for the tweet or message, date and the client where user is."""
|
||||
if system == "Windows":
|
||||
original_date = arrow.get(tweet["created_at"], "ddd MMM DD H:m:s Z YYYY", locale="en")
|
||||
if relative_times == True:
|
||||
ts = original_date.humanize(locale=languageHandler.getLanguage())
|
||||
else:
|
||||
ts = original_date.replace(seconds=db["utc_offset"]).format(_(u"dddd, MMMM D, YYYY H:m:s"), locale=languageHandler.getLanguage())
|
||||
else:
|
||||
ts = tweet["created_at"]
|
||||
text = StripChars(tweet["text"])
|
||||
source = "DM"
|
||||
if db["user_name"] == tweet["sender"]["screen_name"]: user = _(u"Dm to %s ") % (tweet["recipient"]["name"],)
|
||||
else: user = tweet["sender"]["name"]
|
||||
if text[-1] in chars: text=text+"."
|
||||
urls = utils.find_urls_in_text(text)
|
||||
for url in range(0, len(urls)):
|
||||
try: text = text.replace(urls[url], tweet["entities"]["urls"][url]["expanded_url"])
|
||||
except IndexError: pass
|
||||
return [user+", ", text, ts+", ", source]
|
||||
|
||||
def compose_quoted_tweet(quoted_tweet, original_tweet):
|
||||
""" It receives a tweet and returns a list with the user, text for the tweet or message, date and the client where user is."""
|
||||
text = StripChars(quoted_tweet["text"])
|
||||
if quoted_tweet.has_key("full_text"):
|
||||
value = "full_text"
|
||||
else:
|
||||
value = "text"
|
||||
text = StripChars(quoted_tweet[value])
|
||||
quoting_user = quoted_tweet["user"]["name"]
|
||||
source = re.sub(r"(?s)<.*?>", "", quoted_tweet["source"])
|
||||
try: text = "rt @%s: %s" % (quoted_tweet["retweeted_status"]["user"]["screen_name"], StripChars(quoted_tweet["retweeted_status"]["text"]))
|
||||
except KeyError: text = "%s" % (StripChars(quoted_tweet["text"]))
|
||||
try: text = "rt @%s: %s" % (quoted_tweet["retweeted_status"]["user"]["screen_name"], StripChars(quoted_tweet["retweeted_status"][value]))
|
||||
except KeyError: text = "%s" % (StripChars(quoted_tweet[value]))
|
||||
if text[-1] in chars: text=text+"."
|
||||
original_user = original_tweet["user"]["screen_name"]
|
||||
original_text = StripChars(original_tweet["text"])
|
||||
try: original_text = "rt @%s: %s" % (original_tweet["retweeted_status"]["user"]["screen_name"], StripChars(original_tweet["retweeted_status"]["text"]))
|
||||
except KeyError: original_text = "%s" % (StripChars(original_tweet["text"]))
|
||||
quoted_tweet["message"] = _(u"{0}. Quoted tweet from @{1}: {2}").format( quoted_tweet["text"], original_user, original_text)
|
||||
if original_tweet.has_key("message"):
|
||||
original_text = StripChars(original_tweet["message"])
|
||||
elif original_tweet.has_key("full_text"):
|
||||
original_text = StripChars(original_tweet["full_text"])
|
||||
else:
|
||||
original_text = StripChars(original_tweet["text"])
|
||||
quoted_tweet["message"] = _(u"{0}. Quoted tweet from @{1}: {2}").format( quoted_tweet[value], original_user, original_text)
|
||||
quoted_tweet = tweets.clear_url(quoted_tweet)
|
||||
return quoted_tweet
|
||||
|
||||
|
@@ -25,6 +25,8 @@ def find_urls (tweet):
|
||||
urls = []
|
||||
if tweet.has_key("message"):
|
||||
i = "message"
|
||||
elif tweet.has_key("full_text"):
|
||||
i = "full_text"
|
||||
else:
|
||||
i = "text"
|
||||
return [s[0] for s in url_re.findall(tweet[i])]
|
||||
@@ -57,6 +59,7 @@ def is_audio(tweet):
|
||||
if i["text"] == "audio":
|
||||
return True
|
||||
except:
|
||||
print tweet["entities"]["hashtags"]
|
||||
log.exception("Exception while executing is_audio hashtag algorithm")
|
||||
|
||||
def is_geocoded(tweet):
|
||||
@@ -68,8 +71,8 @@ def get_all_mentioned(tweet, conf):
|
||||
string = []
|
||||
for i in tweet["entities"]["user_mentions"]:
|
||||
if i["screen_name"] != conf["user_name"] and i["screen_name"] != tweet["user"]["screen_name"]:
|
||||
if "@"+i["screen_name"] not in string:
|
||||
string.append("@"+i["screen_name"])
|
||||
if i["id"] not in string:
|
||||
string.append(i["id_str"])
|
||||
return " ".join(string)+" "
|
||||
|
||||
def get_all_users(tweet, conf):
|
||||
@@ -120,7 +123,7 @@ def is_allowed(tweet, clients):
|
||||
for i in clients:
|
||||
if i.lower() == source.lower():
|
||||
allowed = False
|
||||
log.exception("Tuit not allowed: %s" % (tweet["text"],))
|
||||
# log.exception("Tuit not allowed: %r" % (tweet,))
|
||||
return allowed
|
||||
|
||||
def twitter_error(error):
|
||||
|
@@ -67,4 +67,7 @@ def no_friends():
|
||||
|
||||
def view_geodata(geotext):
|
||||
"""Specific message dialog to display geolocation data"""
|
||||
return wx.MessageDialog(None, _(u"Geolocation data: {0}").format(geotext), _(u"Geo data for this tweet")).ShowModal()
|
||||
return wx.MessageDialog(None, _(u"Geolocation data: {0}").format(geotext), _(u"Geo data for this tweet")).ShowModal()
|
||||
|
||||
def changed_keymap():
|
||||
return wx.MessageDialog(None, _(u"TWBlue has detected that you're running windows 10 and has changed the default keymap to the Windows 10 keymap. It means that some keyboard shorcuts could be different. Please check the keystroke editor by pressing Alt+Win+K to see all available keystrokes for this keymap."), _(u"Information"), wx.OK).ShowModal()
|
@@ -18,7 +18,9 @@ class general(wx.Panel, baseDialog.BaseWXDialog):
|
||||
langBox.Add(language, 0, wx.ALL, 5)
|
||||
langBox.Add(self.language, 0, wx.ALL, 5)
|
||||
sizer.Add(langBox, 0, wx.ALL, 5)
|
||||
self.autostart = wx.CheckBox(self, -1, _(u"Run {0} at Windows startup").format(application.name,))
|
||||
self.ask_at_exit = wx.CheckBox(self, -1, _(U"ask before exiting {0}").format(application.name,))
|
||||
sizer.Add(self.autostart, 0, wx.ALL, 5)
|
||||
sizer.Add(self.ask_at_exit, 0, wx.ALL, 5)
|
||||
self.play_ready_sound = wx.CheckBox(self, -1, _(U"Play a sound when {0} launches").format(application.name,))
|
||||
sizer.Add(self.play_ready_sound, 0, wx.ALL, 5)
|
||||
@@ -114,7 +116,7 @@ class other_buffers(wx.Panel):
|
||||
def __init__(self, parent):
|
||||
super(other_buffers, self).__init__(parent)
|
||||
sizer = wx.BoxSizer(wx.VERTICAL)
|
||||
self.buffers = widgets.list(self, _(u"Buffer"), _(u"Status"), style=wx.LC_SINGLE_SEL|wx.LC_REPORT)
|
||||
self.buffers = widgets.list(self, _(u"Buffer"), _(u"Name"), _(u"Status"), style=wx.LC_SINGLE_SEL|wx.LC_REPORT)
|
||||
sizer.Add(self.buffers.list, 0, wx.ALL, 5)
|
||||
btnSizer = wx.BoxSizer(wx.HORIZONTAL)
|
||||
self.toggle_state = wx.Button(self, -1, _(u"Show/hide"))
|
||||
@@ -128,10 +130,10 @@ class other_buffers(wx.Panel):
|
||||
|
||||
def insert_buffers(self, buffers):
|
||||
for i in buffers:
|
||||
if i[1] == True:
|
||||
self.buffers.insert_item(False, *[i[0], _(u"Show")])
|
||||
if i[2] == True:
|
||||
self.buffers.insert_item(False, *[i[0], i[1], _(u"Show")])
|
||||
else:
|
||||
self.buffers.insert_item(False, *[i[0], _(u"Hide")])
|
||||
self.buffers.insert_item(False, *[i[0], i[1], _(u"Hide")])
|
||||
|
||||
def connect_hook_func(self, func):
|
||||
self.buffers.list.Bind(wx.EVT_CHAR_HOOK, func)
|
||||
@@ -141,40 +143,48 @@ class other_buffers(wx.Panel):
|
||||
if current == -1:
|
||||
output.speak(_(u"Select a buffer first."), True)
|
||||
return False
|
||||
if self.buffers.get_text_column(current, 1) == _(u"Hide"):
|
||||
if self.buffers.get_text_column(current, 2) == _(u"Hide"):
|
||||
output.speak(_(u"The buffer is hidden, show it first."), True)
|
||||
return False
|
||||
if current <= 0:
|
||||
output.speak(_(u"The buffer is already at the top of the list."), True)
|
||||
return False
|
||||
current_text = self.buffers.get_text_column(self.buffers.get_selected(), 0)
|
||||
current_text_state = self.buffers.get_text_column(self.buffers.get_selected(), 1)
|
||||
current_name = self.buffers.get_text_column(self.buffers.get_selected(), 1)
|
||||
current_text_state = self.buffers.get_text_column(self.buffers.get_selected(), 2)
|
||||
text_above = self.buffers.get_text_column(self.buffers.get_selected()-1, 0)
|
||||
text_above_state = self.buffers.get_text_column(self.buffers.get_selected()-1, 1)
|
||||
name_above = self.buffers.get_text_column(self.buffers.get_selected()-1, 1)
|
||||
text_above_state = self.buffers.get_text_column(self.buffers.get_selected()-1, 2)
|
||||
self.buffers.set_text_column(self.buffers.get_selected()-1, 0, current_text)
|
||||
self.buffers.set_text_column(self.buffers.get_selected()-1, 1, current_text_state)
|
||||
self.buffers.set_text_column(self.buffers.get_selected()-1, 1, current_name)
|
||||
self.buffers.set_text_column(self.buffers.get_selected()-1, 2, current_text_state)
|
||||
self.buffers.set_text_column(self.buffers.get_selected(), 0, text_above)
|
||||
self.buffers.set_text_column(self.buffers.get_selected(), 1, text_above_state)
|
||||
self.buffers.set_text_column(self.buffers.get_selected(), 1, name_above)
|
||||
self.buffers.set_text_column(self.buffers.get_selected(), 2, text_above_state)
|
||||
|
||||
def move_down(self, *args, **kwargs):
|
||||
current = self.buffers.get_selected()
|
||||
if current == -1:
|
||||
output.speak(_(u"Select a buffer first."), True)
|
||||
return False
|
||||
if self.buffers.get_text_column(current, 1) == _(u"Hide"):
|
||||
if self.buffers.get_text_column(current, 2) == _(u"Hide"):
|
||||
output.speak(_(u"The buffer is hidden, show it first."), True)
|
||||
return False
|
||||
if current+1 >= self.buffers.get_count():
|
||||
output.speak(_(u"The buffer is already at the bottom of the list."), True)
|
||||
return False
|
||||
current_text = self.buffers.get_text_column(self.buffers.get_selected(), 0)
|
||||
current_text_state = self.buffers.get_text_column(self.buffers.get_selected(), 1)
|
||||
current_name = self.buffers.get_text_column(self.buffers.get_selected(), 1)
|
||||
current_text_state = self.buffers.get_text_column(self.buffers.get_selected(), 2)
|
||||
text_below = self.buffers.get_text_column(self.buffers.get_selected()+1, 0)
|
||||
text_below_state = self.buffers.get_text_column(self.buffers.get_selected()+1, 1)
|
||||
name_below = self.buffers.get_text_column(self.buffers.get_selected()+1, 1)
|
||||
text_below_state = self.buffers.get_text_column(self.buffers.get_selected()+1, 2)
|
||||
self.buffers.set_text_column(self.buffers.get_selected()+1, 0, current_text)
|
||||
self.buffers.set_text_column(self.buffers.get_selected()+1, 1, current_text_state)
|
||||
self.buffers.set_text_column(self.buffers.get_selected()+1, 1, current_name)
|
||||
self.buffers.set_text_column(self.buffers.get_selected()+1, 2, current_text_state)
|
||||
self.buffers.set_text_column(self.buffers.get_selected(), 0, text_below)
|
||||
self.buffers.set_text_column(self.buffers.get_selected(), 1, text_below_state)
|
||||
self.buffers.set_text_column(self.buffers.get_selected(), 1, name_below)
|
||||
self.buffers.set_text_column(self.buffers.get_selected(), 2, text_below_state)
|
||||
|
||||
def get_event(self, ev):
|
||||
if ev.GetKeyCode() == wx.WXK_SPACE:
|
||||
@@ -185,16 +195,16 @@ class other_buffers(wx.Panel):
|
||||
|
||||
def change_selected_item(self):
|
||||
current = self.buffers.get_selected()
|
||||
text = self.buffers.get_text_column(current, 1)
|
||||
text = self.buffers.get_text_column(current, 2)
|
||||
if text == _(u"Show"):
|
||||
self.buffers.set_text_column(current, 1, _(u"Hide"))
|
||||
self.buffers.set_text_column(current, 2, _(u"Hide"))
|
||||
else:
|
||||
self.buffers.set_text_column(current, 1, _(u"Show"))
|
||||
output.speak(self.buffers.get_text_column(current, 1),True)
|
||||
self.buffers.set_text_column(current, 2, _(u"Show"))
|
||||
output.speak(self.buffers.get_text_column(current, 2),True)
|
||||
def get_list(self):
|
||||
buffers_list = []
|
||||
for i in xrange(0, self.buffers.get_count()):
|
||||
if self.buffers.get_text_column(i, 1) == _(u"Show"):
|
||||
if self.buffers.get_text_column(i, 2) == _(u"Show"):
|
||||
buffers_list.append(self.buffers.get_text_column(i, 0))
|
||||
return buffers_list
|
||||
|
||||
|
@@ -234,7 +234,7 @@ class reply(tweet):
|
||||
def __init__(self, title, message, text):
|
||||
super(reply, self).__init__(message, title, text)
|
||||
self.text.SetInsertionPoint(len(self.text.GetValue()))
|
||||
self.mentionAll = wx.Button(self, -1, _(u"&Mention to all"), size=wx.DefaultSize)
|
||||
self.mentionAll = wx.CheckBox(self, -1, _(u"&Mention to all"), size=wx.DefaultSize)
|
||||
self.mentionAll.Disable()
|
||||
self.buttonsBox1.Add(self.mentionAll, 0, wx.ALL, 5)
|
||||
self.buttonsBox1.Layout()
|
||||
|
@@ -57,6 +57,11 @@ class mainFrame(wx.Frame):
|
||||
self.clear = buffer.Append(wx.NewId(), _(u"&Clear buffer"))
|
||||
self.deleteTl = buffer.Append(wx.NewId(), _(u"&Destroy"))
|
||||
|
||||
# audio menu
|
||||
audio = wx.Menu()
|
||||
self.seekLeft = audio.Append(wx.NewId(), _(u"&Seek back 5 seconds"))
|
||||
self.seekRight = audio.Append(wx.NewId(), _(u"&Seek forward 5 seconds"))
|
||||
|
||||
# Help Menu
|
||||
help = wx.Menu()
|
||||
self.doc = help.Append(-1, _(u"&Documentation"))
|
||||
@@ -72,6 +77,7 @@ class mainFrame(wx.Frame):
|
||||
menuBar.Append(tweet, _(u"&Tweet"))
|
||||
menuBar.Append(user, _(u"&User"))
|
||||
menuBar.Append(buffer, _(u"&Buffer"))
|
||||
menuBar.Append(audio, _(u"&Audio"))
|
||||
menuBar.Append(help, _(u"&Help"))
|
||||
|
||||
self.accel_tbl = wx.AcceleratorTable([
|
||||
@@ -88,7 +94,10 @@ class mainFrame(wx.Frame):
|
||||
(wx.ACCEL_CTRL, ord('I'), self.timeline.GetId()),
|
||||
(wx.ACCEL_CTRL|wx.ACCEL_SHIFT, ord('I'), self.deleteTl.GetId()),
|
||||
(wx.ACCEL_CTRL, ord('M'), self.show_hide.GetId()),
|
||||
(wx.ACCEL_CTRL, wx.WXK_LEFT, self.seekLeft.GetId()),
|
||||
(wx.ACCEL_CTRL, ord('P'), self.updateProfile.GetId()),
|
||||
(wx.ACCEL_CTRL, wx.WXK_RIGHT, self.seekRight.GetId()),
|
||||
(wx.ACCEL_CTRL, ord(' '), self.seekLeft.GetId()),
|
||||
])
|
||||
|
||||
self.SetAcceleratorTable(self.accel_tbl)
|
||||
|
File diff suppressed because it is too large
Load Diff
762
tools/twblue.pot
762
tools/twblue.pot
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
{"current_version": "0.81",
|
||||
{"current_version": "0.87",
|
||||
"description": "The first version for the new generation of TWBlue.",
|
||||
"downloads":
|
||||
{"Windows32": "http://twblue.es/pubs/twblue_ngen_0.80_x86.zip",
|
||||
|
Submodule windows-dependencies updated: d40c896660...ec88a194da
Reference in New Issue
Block a user