Compare commits

...

51 Commits

Author SHA1 Message Date
5a6dc23524 Write secrets from CI environment 2021-10-30 01:34:37 -05:00
0e2ff4de8a Use latest available python version on package manager 2021-10-29 22:46:12 -05:00
36340d0596 Moved to python 3.7.10 to test if build passes properly 2021-10-29 22:38:44 -05:00
92ec178754 Merge branch 'next-gen' of gitlab.com:twblue/twblue into next-gen 2021-10-29 15:48:03 -05:00
5eb942981c Added some changes to setup file for the CI config 2021-10-29 10:58:30 -05:00
6739045cce Fixed manual addition of users to the autocomplete users database 2021-10-28 13:18:02 -05:00
307ed093af Merge pull request #414 from manuelcortez/improved_conversations
Improve conversation Support
2021-10-28 12:45:32 -05:00
d11fc44772 Read keys from environment 2021-10-28 12:44:50 -05:00
a3e5eec6de Merge branch 'next-gen' into improved_conversations 2021-10-28 12:39:55 -05:00
41a0935121 Merge branch 'next-gen' of github.com:manuelcortez/twblue into next-gen 2021-10-28 12:39:09 -05:00
0b03e7505f Conversation support improved via V2 searches 2021-10-28 12:28:19 -05:00
José Manuel Delicado
81c364c4e1 Merge pull request #412 from Oreonan/fr_281021-2
Small french fixes
2021-10-28 18:45:44 +02:00
Oreonan
483b196203 Fix small error 2021-10-28 18:30:05 +02:00
Oreonan
b512c69447 Remove old translations 2021-10-28 18:28:34 +02:00
2c1608322e Merge pull request #410 from Oreonan/fr_281021
Update french interface
2021-10-28 10:14:49 -05:00
c6bb851bce Merge pull request #411 from nidza07/SerbianTranslation
Updated Serbian translation
2021-10-28 10:14:25 -05:00
Nikola Jovic
66581f8b1c Clarify a string better 2021-10-28 17:03:52 +02:00
Nikola Jovic
c6a3a44c21 Updated Serbian translation 2021-10-28 16:58:11 +02:00
bd25cfa59b Merge branch 'next-gen' of github.com:manuelcortez/twblue into next-gen 2021-10-28 08:38:05 -05:00
Oreonan
39a02ea33a Update french interface 2021-10-28 12:33:52 +02:00
f672dca1cb Merge branch 'next-gen' of gitlab.com:twblue/twblue into next-gen 2021-10-27 21:47:37 -05:00
19c63b7b07 Merge branch 'next-gen' of github.com:manuelcortez/TWBlue into next-gen 2021-10-27 21:47:03 -05:00
e23a52e38f Changes in TWBlue keys 2021-10-27 15:29:15 -05:00
José Manuel Delicado Alcolea
d888563fda Updated Api keys 2021-10-27 22:00:58 +02:00
a5ba80feee Final touches 2021-10-26 16:18:53 -05:00
528ecc2a33 Updated NSI file 2021-10-26 16:16:03 -05:00
3519746078 Move installer Nsis file to a new name 2021-10-26 15:47:03 -05:00
ef79e0696e Move updated Nsis script to artifacts in build stage 2021-10-26 15:19:57 -05:00
b9ee0dae5b Fixed a typo in installer script 2021-10-26 14:48:58 -05:00
f31575a733 Merge pull request #408 from manuelcortez/calendar_versioning
Switch to Calendar versioning
2021-10-26 13:52:21 -05:00
e451bbd5e9 Merge pull request #407 from manuelcortez/alias_manager
Alias manager Dialog. Closes #401
2021-10-26 13:51:09 -05:00
f7f303929e Updated CI config 2021-10-26 13:41:22 -05:00
9f48784ce4 Added script to add next version in application.py and installer generation files 2021-10-26 13:39:50 -05:00
cb1312d0c9 Changed version in installer so it will be easier to replace it later by the authomatic script 2021-10-26 13:38:21 -05:00
a82efd4dcc Fixed a typo 2021-10-26 13:16:31 -05:00
72e6d030d5 Updater no longer will try to compare float numbers for updates 2021-10-26 13:10:57 -05:00
d222740887 Updated gitlab CI 2021-10-26 13:04:49 -05:00
2b059ee42e Modified Nsis scripts to remove references to old snapshots code 2021-10-26 13:02:24 -05:00
daac312658 Removes snapshot information from app info 2021-10-26 12:43:03 -05:00
b23be9c896 Started to remove stable and snapshot update information files 2021-10-26 12:40:57 -05:00
61b0dc34b8 Merge branch 'next-gen' into alias_manager 2021-10-26 10:48:43 -05:00
c5d13369eb Merge branch 'next-gen' of github.com:manuelcortez/twblue into next-gen 2021-10-26 10:47:55 -05:00
856ecf5eb9 Merge branch 'next-gen' of github.com:manuelcortez/twblue into alias_manager 2021-10-26 10:46:30 -05:00
e3e0ac9457 Added an alias manager dialog in the application menu 2021-10-26 10:45:11 -05:00
fccf02794c Merge branch 'next-gen' of gitlab.com:twblue/twblue into next-gen 2021-10-23 19:16:33 -05:00
34c1f69ec1 Merge pull request #404 from nidza07/SerbianTranslation
Updated Serbian translation
2021-10-22 12:57:58 -05:00
7326ff88f9 Merge pull request #405 from Oreonan/fr_211021
Update french interface
2021-10-22 12:56:55 -05:00
Oreonan
a8d876a7b7 Fix last-translator e-mail 2021-10-21 17:02:03 +02:00
Oreonan
89fa6435b4 Update french interface 2021-10-21 16:58:32 +02:00
Nikola Jovic
d1bd393be2 Updated Serbian translation 2021-10-21 16:30:46 +02:00
José Manuel Delicado Alcolea
a2f25bfbb5 Added charset-normalizer to requirements 2021-10-12 17:05:09 +02:00
24 changed files with 1404 additions and 1233 deletions

View File

@@ -1,6 +1,6 @@
variables:
GIT_SUBMODULE_STRATEGY: recursive
PYTHON: "C:\\python38\\python.exe"
PYTHON: "C:\\python37\\python.exe"
NSIS: "C:\\program files (x86)\\nsis\\makensis.exe"
stages:
@@ -8,7 +8,7 @@ stages:
- make_installer
- upload
snapshot32:
twblue32:
tags:
- shared-windows
- windows
@@ -17,11 +17,10 @@ snapshot32:
- Set-Variable -Name "time" -Value (date -Format "%H:%m")
- echo ${time}
- echo "started by ${GITLAB_USER_NAME}"
- choco install python --version 3.8.10 -y -ForceX86
- choco install python --version 3.7.9 -y -ForceX86
- '&$env:PYTHON -V'
- '&$env:PYTHON -m pip install --upgrade pip'
- '&$env:PYTHON -m pip install --upgrade -r requirements.txt'
- '&$env:PYTHON -m pip uninstall enum34 -y'
stage: build
interruptible: true
script:
@@ -30,6 +29,7 @@ snapshot32:
- '&$env:PYTHON documentation_importer.py'
- cd ..\src
- '&$env:PYTHON ..\doc\generator.py'
- '&$env:PYTHON write_version_data.py'
- '&$env:PYTHON setup.py build'
- cd ..
- mkdir artifacts
@@ -37,7 +37,9 @@ snapshot32:
- '&$env:PYTHON make_archive.py'
- cd ..
- mv src/dist artifacts/TWBlue
- move src/twblue.zip artifacts/twblue_snapshot_x86.zip
- move src/twblue.zip artifacts/twblue_x86.zip
# Move the generated script nsis file to artifacts, so we won't need python when generating the installer.
- move scripts/twblue.nsi artifacts/twblue.nsi
only:
- tags
artifacts:
@@ -45,7 +47,7 @@ snapshot32:
- artifacts
expire_in: 1 day
snapshot64:
twblue64:
tags:
- shared-windows
- windows
@@ -54,7 +56,7 @@ snapshot64:
- Set-Variable -Name "time" -Value (date -Format "%H:%m")
- echo ${time}
- echo "started by ${GITLAB_USER_NAME}"
- choco install python --version 3.8.10 -y
- choco install python --version 3.7.9 -y
- '&$env:PYTHON -V'
- '&$env:PYTHON -m pip install --upgrade pip'
- '&$env:PYTHON -m pip install --upgrade -r requirements.txt'
@@ -66,6 +68,7 @@ snapshot64:
- '&$env:PYTHON documentation_importer.py'
- cd ..\src
- '&$env:PYTHON ..\doc\generator.py'
- '&$env:PYTHON write_version_data.py'
- '&$env:PYTHON setup.py build'
- cd ..
- mkdir artifacts
@@ -73,7 +76,7 @@ snapshot64:
- '&$env:PYTHON make_archive.py'
- cd ..
- mv src/dist artifacts/TWBlue64
- move src/twblue.zip artifacts/twblue_snapshot_x64.zip
- move src/twblue.zip artifacts/twblue_x64.zip
only:
- tags
artifacts:
@@ -95,9 +98,10 @@ generate_versions:
script:
- move artifacts/TWBlue scripts/
- move artifacts/TWBlue64 scripts/
- move artifacts/twblue.nsi scripts/installer.nsi
- cd scripts
- '&$env:NSIS twblue_snapshot.nsi'
- move twblue_snapshot_setup.exe ../artifacts
- '&$env:NSIS installer.nsi'
- move twblue_setup.exe ../artifacts
only:
- tags
artifacts:

View File

@@ -2,6 +2,7 @@
## changes in this version
* Added an user alias manager, located in the application menu in the menu bar. From this dialog, it is possible to review, add, edit or remove user aliases for the current account. ([#401](https://github.com/manuelcortez/TWBlue/issues/401))
* TWBlue now closes the VLC player window automatically when a video reaches its end. ([#399](https://github.com/manuelcortez/TWBlue/issues/399))
* After a lot of time, TWBlue now uses a new default Soundpack, called FreakyBlue. This soundpack will be set by default in all new sessions created in the application. Thanks to [Andre Louis](https://twitter.com/FreakyFwoof) for the pack. ([#247](https://github.com/manuelcortez/TWBlue/issues/247))
* When reading a tweet, if the tweet contains more than 2 consecutive mentions, TWBlue will announce how many more users the tweet includes, as opposed to read every user in the conversation. You still can display the tweet to read all users.

View File

@@ -5,19 +5,6 @@ return "key\0";
char *get_api_secret(){
return "secret_key\0";
}
char *get_dropbox_api_key(){
return "key\0";
}
char *get_dropbox_api_secret(){
return "secret_key\0";
}
char *get_twishort_api_key(){
return "key\0";
}
char *get_bts_user(){
return "user\0";
}
char *get_bts_password(){
return "pass\0";
}

View File

@@ -3,10 +3,6 @@
char *get_api_key();
char *get_api_secret();
char *get_dropbox_api_key();
char *get_dropbox_api_secret();
char *get_twishort_api_key();
char *get_bts_user();
char *get_bts_password();
#endif

View File

@@ -47,6 +47,7 @@ attrs
importlib-metadata
numpy
pillow
charset-normalizer
git+https://github.com/accessibleapps/libloader
git+https://github.com/accessibleapps/platform_utils
git+https://github.com/accessibleapps/accessible_output2

View File

@@ -15,10 +15,10 @@ SetCompressor /solid lzma
SetDatablockOptimize on
VIAddVersionKey ProductName "TWBlue"
VIAddVersionKey LegalCopyright "Copyright 2014-2021 Manuel Cortéz."
VIAddVersionKey ProductVersion "0.95"
VIAddVersionKey FileVersion "0.95"
VIProductVersion "0.95.0.0"
VIFileVersion "0.95.0.0"
VIAddVersionKey ProductVersion "0.95.0"
VIAddVersionKey FileVersion "0.95.0"
VIProductVersion "0.95.0"
VIFileVersion "0.95.0"
!insertmacro MUI_PAGE_WELCOME
!define MUI_LICENSEPAGE_RADIOBUTTONS
!insertmacro MUI_PAGE_LICENSE "license.txt"
@@ -73,9 +73,9 @@ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "U
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.95"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "URLInfoAbout" "http://twblue.es"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "URLInfoAbout" "https://twblue.es"
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "VersionMajor" 0
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "VersionMinor" 95
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "VersionMinor" 0
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "NoModify" 1
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "NoRepair" 1
SectionEnd

View File

@@ -1,95 +0,0 @@
!include "MUI2.nsh"
!include "LogicLib.nsh"
!include "x64.nsh"
Unicode true
CRCCheck on
ManifestSupportedOS all
XPStyle on
Name "TWBlue"
OutFile "TWBlue_snapshot_setup.exe"
InstallDir "$PROGRAMFILES\twblue"
InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "InstallLocation"
RequestExecutionLevel admin
SetCompress auto
SetCompressor /solid lzma
SetDatablockOptimize on
VIAddVersionKey ProductName "TWBlue Snapshot version"
VIAddVersionKey LegalCopyright "Copyright 2014-2021 Manuel Cortéz."
VIAddVersionKey ProductVersion "11"
VIAddVersionKey FileVersion "11"
VIProductVersion "11.0.0.0"
VIFileVersion "11.0.0.0"
!insertmacro MUI_PAGE_WELCOME
!define MUI_LICENSEPAGE_RADIOBUTTONS
!insertmacro MUI_PAGE_LICENSE "license.txt"
!insertmacro MUI_PAGE_DIRECTORY
var StartMenuFolder
!insertmacro MUI_PAGE_STARTMENU startmenu $StartMenuFolder
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_LINK "Visit TWBlue website"
!define MUI_FINISHPAGE_LINK_LOCATION "https://twblue.es"
!define MUI_FINISHPAGE_RUN "$INSTDIR\TWBlue.exe"
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "French"
!insertmacro MUI_LANGUAGE "Spanish"
!insertmacro MUI_LANGUAGE "Italian"
!insertmacro MUI_LANGUAGE "Finnish"
!insertmacro MUI_LANGUAGE "Russian"
!insertmacro MUI_LANGUAGE "PortugueseBR"
!insertmacro MUI_LANGUAGE "Polish"
!insertmacro MUI_LANGUAGE "German"
!insertmacro MUI_LANGUAGE "Hungarian"
!insertmacro MUI_LANGUAGE "Turkish"
!insertmacro MUI_LANGUAGE "Arabic"
!insertmacro MUI_LANGUAGE "Galician"
!insertmacro MUI_LANGUAGE "Catalan"
!insertmacro MUI_LANGUAGE "Basque"
!insertmacro MUI_LANGUAGE "Croatian"
!insertmacro MUI_LANGUAGE "Japanese"
!insertmacro MUI_LANGUAGE "SerbianLatin"
!insertmacro MUI_LANGUAGE "Romanian"
!insertmacro MUI_RESERVEFILE_LANGDLL
Section
SetShellVarContext All
SetOutPath "$INSTDIR"
${If} ${RunningX64}
File /r TWBlue64\*
${Else}
File /r TWBlue\*
${EndIf}
CreateShortCut "$DESKTOP\TWBlue.lnk" "$INSTDIR\TWBlue.exe"
!insertmacro MUI_STARTMENU_WRITE_BEGIN startmenu
CreateDirectory "$SMPROGRAMS\$StartMenuFolder"
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\TWBlue.lnk" "$INSTDIR\TWBlue.exe"
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\TWBlue on the web.lnk" "http://twblue.es"
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
!insertmacro MUI_STARTMENU_WRITE_END
WriteUninstaller "$INSTDIR\Uninstall.exe"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "DisplayName" "TWBlue"
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" "11"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "URLInfoAbout" "https://twblue.es"
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "VersionMajor" 0
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "VersionMinor" 0
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "NoModify" 1
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "NoRepair" 1
SectionEnd
Section "Uninstall"
SetShellVarContext All
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue"
RMDir /r /REBOOTOK $INSTDIR
Delete "$DESKTOP\TWBlue.lnk"
!insertmacro MUI_STARTMENU_GETFOLDER startmenu $StartMenuFolder
RMDir /r "$SMPROGRAMS\$StartMenuFolder"
SectionEnd
Function .onInit
${If} ${RunningX64}
StrCpy $instdir "$programfiles64\twblue"
${EndIf}
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd

View File

@@ -3,15 +3,8 @@ import datetime
name = 'TWBlue'
short_name='twblue'
snapshot = True
if snapshot == False:
version = "0.95"
update_url = 'https://twblue.es/updates/stable.php'
mirror_update_url = 'https://raw.githubusercontent.com/manuelcortez/TWBlue/next-gen/updates/stable.json'
else:
version = "11"
update_url = 'https://twblue.es/updates/snapshot.php'
mirror_update_url = 'https://raw.githubusercontent.com/manuelcortez/TWBlue/next-gen/updates/snapshots.json'
update_url = 'https://twblue.es/updates/updates.php'
mirror_update_url = 'https://raw.githubusercontent.com/manuelcortez/TWBlue/next-gen/updates/updates.json'
authors = ["Manuel Cortéz", "José Manuel Delicado"]
authorEmail = "manuel@manuelcortez.net"
copyright = "Copyright (C) 2013-2021, Manuel cortéz."
@@ -20,3 +13,4 @@ translators = ["Manuel Cortéz (English)", "Mohammed Al Shara, Hatoun Felemban (
url = u"https://twblue.es"
report_bugs_url = "https://github.com/manuelcortez/twblue/issues"
supported_languages = []
version = "11"

View File

@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import time
import platform
import locale
if platform.system() == "Windows":
from wxUI import commonMessageDialogs
elif platform.system() == "Linux":
@@ -8,6 +9,7 @@ elif platform.system() == "Linux":
from gtkUI import commonMessageDialogs
import widgetUtils
import logging
from tweepy.errors import TweepyException
from . import base, people
log = logging.getLogger("controller.buffers.twitter.searchBuffer")
@@ -64,35 +66,11 @@ class SearchPeopleBuffer(people.PeopleBuffer):
class ConversationBuffer(SearchBuffer):
def start_stream(self, start=False, mandatory=False, play_sound=True, avoid_autoreading=False):
# starts stream every 3 minutes.
current_time = time.time()
if self.execution_time == 0 or current_time-self.execution_time >= 180 or mandatory == True:
self.execution_time = current_time
if start == True:
self.statuses = []
self.ids = []
self.statuses.append(self.tweet)
self.ids.append(self.tweet.id)
tweet = self.tweet
if not hasattr(tweet, "in_reply_to_status_id"):
tweet.in_reply_to_status_id = None
while tweet.in_reply_to_status_id != None:
try:
tweet = self.session.twitter.get_status(id=tweet.in_reply_to_status_id, tweet_mode="extended")
except TweepError as err:
break
self.statuses.insert(0, tweet)
self.ids.append(tweet.id)
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, 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)
self.ids.append(i.id)
tweet = i
number_of_items = self.session.order_buffer(self.name, self.statuses)
results = self.get_replies(self.tweet)
number_of_items = self.session.order_buffer(self.name, results)
log.debug("Number of items retrieved: %d" % (number_of_items,))
self.put_items_on_list(number_of_items)
if number_of_items > 0 and self.sound != None and self.session.settings["sound"]["session_mute"] == False and self.name not in self.session.settings["other_buffers"]["muted_buffers"] and play_sound == True:
@@ -113,3 +91,33 @@ class ConversationBuffer(SearchBuffer):
return True
elif dlg == widgetUtils.NO:
return False
def get_replies(self, tweet):
""" Try to retrieve the whole conversation for the passed object by using a mix between calls to API V1.1 and V2 """
results = []
# If the tweet that starts the conversation is a reply to something else, let's try to get the parent tweet first.
if hasattr(self, "in_reply_to_status_id") and self.tweet.in_reply_to_status_id != None:
try:
tweet2 = self.session.twitter_v2.get_tweet(id=self.tweet.in_reply_to_status_id, user_auth=True, tweet_fields=["conversation_id"])
results.append(tweet2)
except TweepyException as e:
log.exception("There was an error attempting to retrieve a parent tweet for the conversation for {}".format(self.name))
# Now, try to fetch the tweet initiating the conversation in V2 so we can get conversation_id
try:
tweet = self.session.twitter_v2.get_tweet(id=self.tweet.id, user_auth=True, tweet_fields=["conversation_id"])
results.append(tweet.data)
term = "conversation_id:{}".format(tweet.data.conversation_id)
tweets = self.session.twitter_v2.search_recent_tweets(term, user_auth=True, max_results=98)
if tweets.data != None:
results.extend(tweets.data)
except TweepyException as e:
log.exception("There was an error when attempting to retrieve the whole conversation for buffer {}".format(self.buffer.name))
new_results = []
ids = [tweet.id for tweet in results]
try:
results = self.session.twitter.lookup_statuses(ids, include_ext_alt_text=True, tweet_mode="extended")
results.sort(key=lambda x: x.id)
except TweepyException as e:
log.exception("There was an error attempting to retrieve tweets for Twitter API V1.1, in conversation buffer {}".format(self.name))
return []
return results

View File

@@ -2,6 +2,7 @@
import platform
system = platform.system()
import application
import wx
import requests
from audio_services import youtube_utils
import arrow
@@ -24,6 +25,7 @@ from sessions.twitter import utils, compose
from sessionmanager import manager, sessionManager
from controller import buffers
from . import messages
from . import userAliasController
import sessions
from sessions.twitter import session as session_
from pubsub import pub
@@ -189,6 +191,7 @@ class Controller(object):
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.add_to_list, self.view.addToList)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.remove_from_list, self.view.removeFromList)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.update_buffer, self.view.update_buffer)
widgetUtils.connect_event(self.view, widgetUtils.MENU, self.manage_aliases, self.view.manageAliases)
def set_systray_icon(self):
self.systrayIcon = sysTrayIcon.SysTrayIcon()
@@ -756,6 +759,11 @@ class Controller(object):
buff.session.settings["user-aliases"][str(user_id)] = alias
buff.session.settings.write()
output.speak(_("Alias has been set correctly for {}.").format(user))
pub.sendMessage("alias-added")
def manage_aliases(self, *args, **kwargs):
buff = self.get_best_buffer()
alias_controller = userAliasController.userAliasController(buff.session.settings)
def post_tweet(self, event=None):
buffer = self.get_best_buffer()

View File

@@ -0,0 +1,53 @@
# -*- coding: utf-8 -*-
import widgetUtils
from pubsub import pub
from wxUI.dialogs import userAliasDialogs
from extra import autocompletionUsers
class userAliasController(object):
def __init__(self, settings):
super(userAliasController, self).__init__()
self.settings = settings
self.dialog = userAliasDialogs.userAliasEditorDialog()
self.update_aliases_manager()
widgetUtils.connect_event(self.dialog.add, widgetUtils.BUTTON_PRESSED, self.on_add)
widgetUtils.connect_event(self.dialog.edit, widgetUtils.BUTTON_PRESSED, self.on_edit)
widgetUtils.connect_event(self.dialog.remove, widgetUtils.BUTTON_PRESSED, self.on_remove)
pub.subscribe(self.update_aliases_manager, "alias-added")
self.dialog.ShowModal()
def update_aliases_manager(self):
self.dialog.users.Clear()
aliases = [self.settings["user-aliases"].get(k) for k in self.settings["user-aliases"].keys()]
if len(aliases) > 0:
self.dialog.users.InsertItems(aliases, 0)
self.dialog.on_selection_changes()
def on_add(self, *args, **kwargs):
pub.sendMessage("execute-action", action="add_alias")
def on_edit(self, *args, **kwargs):
selection = self.dialog.get_selected_user()
if selection != "":
edited = self.dialog.edit_alias_dialog(_("Edit alias for {}").format(selection))
if edited == None or edited == "":
return
for user_key in self.settings["user-aliases"].keys():
if self.settings["user-aliases"][user_key] == selection:
self.settings["user-aliases"][user_key] = edited
self.settings.write()
self.update_aliases_manager()
break
def on_remove(self, *args, **kwargs):
selection = self.dialog.get_selected_user()
if selection == None or selection == "":
return
should_remove = self.dialog.remove_alias_dialog()
if should_remove:
for user_key in self.settings["user-aliases"].keys():
if self.settings["user-aliases"][user_key] == selection:
self.settings["user-aliases"].pop(user_key)
self.settings.write()
self.update_aliases_manager()
break

View File

@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
import widgetUtils
from tweepy.errors import TweepyException
from . import storage, wx_manage
from wxUI import commonMessageDialogs
@@ -27,8 +28,9 @@ class autocompletionManage(object):
if usr == False:
return
try:
data = self.session.twitter.twitter.get_user(screen_name=usr)
except:
data = self.session.twitter.get_user(screen_name=usr)
except TweepyException as e:
log.exception("Exception raised when attempting to add an user to the autocomplete database manually.")
self.dialog.show_invalid_user_error()
return
self.database.set_user(data.screen_name, data.name, 0)

View File

@@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: TW Blue 0.94\n"
"POT-Creation-Date: 2021-08-28 08:34+Paris, Madrid (heure d’été)\n"
"PO-Revision-Date: 2021-08-28 08:37+0200\n"
"Last-Translator: Corentin BACQUÉ-CAZENAVE <corentin@progaccess33.net>\n"
"POT-Creation-Date: 2021-10-28 12:29+Paris, Madrid (heure d’été)\n"
"PO-Revision-Date: 2021-10-28 18:29+0200\n"
"Last-Translator: Oreonan <corentin@progaccess.net>\n"
"Language-Team: Oreonan <corentin@progaccess.net>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
@@ -25,60 +25,59 @@ msgid "This action is not supported for this buffer"
msgstr "Cette action n'est pas supportée pour ce tampon"
#: ../src\controller\buffers\twitter\base.py:70
#: ../src\controller\mainController.py:309 ../src\controller\settings.py:286
#: ../src\controller\mainController.py:337 ../src\controller\settings.py:286
msgid "Home"
msgstr "Accueil"
#: ../src\controller\buffers\twitter\base.py:70
#: ../src\controller\mainController.py:313 ../src\controller\settings.py:287
#: ../src\controller\mainController.py:339 ../src\controller\settings.py:287
msgid "Mentions"
msgstr "Mentions"
#: ../src\controller\buffers\twitter\base.py:70
#: ../src\controller\mainController.py:317
#: ../src\controller\mainController.py:341
msgid "Direct messages"
msgstr "Messages privés"
#: ../src\controller\buffers\twitter\base.py:70
#: ../src\controller\mainController.py:321 ../src\controller\settings.py:289
#: ../src\controller\mainController.py:343 ../src\controller\settings.py:289
msgid "Sent direct messages"
msgstr "Messages privés envoyés"
#: ../src\controller\buffers\twitter\base.py:70
#: ../src\controller\mainController.py:325 ../src\controller\settings.py:290
#: ../src\controller\mainController.py:345 ../src\controller\settings.py:290
msgid "Sent tweets"
msgstr "Tweets envoyés"
#: ../src\controller\buffers\twitter\base.py:70
#: ../src\controller\mainController.py:329
#: ../src\controller\mainController.py:1400 ../src\controller\settings.py:291
#: ../src\controller\mainController.py:347
#: ../src\controller\mainController.py:1390 ../src\controller\settings.py:291
msgid "Likes"
msgstr "Favoris"
#: ../src\controller\buffers\twitter\base.py:70
#: ../src\controller\mainController.py:333
#: ../src\controller\mainController.py:1405 ../src\controller\settings.py:292
#: ../src\controller\mainController.py:349
#: ../src\controller\mainController.py:1395 ../src\controller\settings.py:292
msgid "Followers"
msgstr "Abonnés"
#: ../src\controller\buffers\twitter\base.py:70
#: ../src\controller\mainController.py:337
#: ../src\controller\mainController.py:1410 ../src\controller\settings.py:293
msgid "Friends"
msgstr "Abonnements"
#: ../src\controller\buffers\twitter\base.py:70
#: ../src\controller\mainController.py:341
#: ../src\controller\mainController.py:1415 ../src\controller\settings.py:294
#: ../src\controller\mainController.py:353
#: ../src\controller\mainController.py:1405 ../src\controller\settings.py:294
msgid "Blocked users"
msgstr "Utilisateurs bloqués"
#: ../src\controller\buffers\twitter\base.py:70
#: ../src\controller\mainController.py:345
#: ../src\controller\mainController.py:1420 ../src\controller\settings.py:295
#: ../src\controller\mainController.py:355
#: ../src\controller\mainController.py:1410 ../src\controller\settings.py:295
msgid "Muted users"
msgstr "Utilisateurs masqués"
#: ../src\controller\buffers\twitter\base.py:70
#: ../src\controller\mainController.py:1400 ../src\controller\settings.py:293
msgid "Friends"
msgstr "Abonnements"
#: ../src\controller\buffers\twitter\base.py:76
msgid "{username}'s timeline"
msgstr "Chronologie de {username}"
@@ -209,79 +208,84 @@ msgstr "{0} nouvel abonné"
msgid "This action is not supported in the buffer, yet."
msgstr "Cette action n'est pas supportée pour le tampon actuel"
#: ../src\controller\mainController.py:273
#: ../src\controller\mainController.py:277
msgid "Ready"
msgstr "Prêt"
#: ../src\controller\mainController.py:348
#: ../src\controller\mainController.py:351
msgid "Following"
msgstr "Abonnements"
#: ../src\controller\mainController.py:356
msgid "Timelines"
msgstr "Chronologies"
#: ../src\controller\mainController.py:352
#: ../src\controller\mainController.py:892
#: ../src\controller\mainController.py:1596
#: ../src\controller\mainController.py:359
#: ../src\controller\mainController.py:883
#: ../src\controller\mainController.py:1585
msgid "Timeline for {}"
msgstr "Chronologie de {}"
#: ../src\controller\mainController.py:355
#: ../src\controller\mainController.py:360
msgid "Likes timelines"
msgstr "Chronologies des favoris"
#: ../src\controller\mainController.py:359
#: ../src\controller\mainController.py:911
#: ../src\controller\mainController.py:1598
#: ../src\controller\mainController.py:363
#: ../src\controller\mainController.py:902
#: ../src\controller\mainController.py:1587
msgid "Likes for {}"
msgstr "Favoris de {}"
#: ../src\controller\mainController.py:362
msgid "Followers' Timelines"
#: ../src\controller\mainController.py:364
msgid "Followers timelines"
msgstr "Chronologies des abonnés"
#: ../src\controller\mainController.py:366
#: ../src\controller\mainController.py:930
#: ../src\controller\mainController.py:1600
#: ../src\controller\mainController.py:367
#: ../src\controller\mainController.py:921
#: ../src\controller\mainController.py:1589
msgid "Followers for {}"
msgstr "Abonnés de {}"
#: ../src\controller\mainController.py:369
msgid "Friends' Timelines"
#: ../src\controller\mainController.py:368
msgid "Following timelines"
msgstr "Chronologies des abonnements"
#: ../src\controller\mainController.py:373
#: ../src\controller\mainController.py:949
#: ../src\controller\mainController.py:1602
#: ../src\controller\mainController.py:371
#: ../src\controller\mainController.py:940
#: ../src\controller\mainController.py:1591
msgid "Friends for {}"
msgstr "Abonnements de {}"
#: ../src\controller\mainController.py:376 ../src\wxUI\dialogs\lists.py:13
#: ../src\controller\mainController.py:372 ../src\wxUI\dialogs\lists.py:13
msgid "Lists"
msgstr "Listes"
#: ../src\controller\mainController.py:381
#: ../src\controller\mainController.py:1432
#: ../src\controller\mainController.py:375
#: ../src\controller\mainController.py:1422
msgid "List for {}"
msgstr "Liste {}"
#: ../src\controller\mainController.py:384
#: ../src\controller\mainController.py:376
msgid "Searches"
msgstr "Recherches"
#: ../src\controller\mainController.py:388
#: ../src\controller\mainController.py:447
#: ../src\controller\mainController.py:379
#: ../src\controller\mainController.py:426
#: ../src\controller\mainController.py:431
msgid "Search for {}"
msgstr "Recherche de {}"
#: ../src\controller\mainController.py:394
#: ../src\controller\mainController.py:991
#: ../src\controller\mainController.py:381
#: ../src\controller\mainController.py:982
msgid "Trending topics for %s"
msgstr "Tendances pour %s"
#: ../src\controller\mainController.py:448
#: ../src\controller\mainController.py:464
#: ../src\controller\mainController.py:480
#: ../src\controller\mainController.py:1089
#: ../src\controller\mainController.py:1108
#: ../src\controller\mainController.py:1127
#: ../src\controller\mainController.py:1146
#: ../src\controller\mainController.py:1080
#: ../src\controller\mainController.py:1099
#: ../src\controller\mainController.py:1118
#: ../src\controller\mainController.py:1137
msgid ""
"No session is currently in focus. Focus a session with the next or previous "
"session shortcut."
@@ -289,152 +293,152 @@ msgstr ""
"Aucune session n'a actuellement le focus. Sélectionnez-en une avec le "
"raccourci pour la session précédente ou suivante."
#: ../src\controller\mainController.py:468
#: ../src\controller\mainController.py:452
msgid "Empty buffer."
msgstr "Tampon vide."
#: ../src\controller\mainController.py:475
#: ../src\controller\mainController.py:459
msgid "{0} not found."
msgstr "{0} introuvable."
#: ../src\controller\mainController.py:485
#: ../src\controller\mainController.py:469
msgid "Filters cannot be applied on this buffer"
msgstr "Les filtres ne peuvent pas s'appliquer à ce tampon"
#: ../src\controller\mainController.py:538
#: ../src\controller\mainController.py:555
#: ../src\controller\mainController.py:583
#: ../src\controller\mainController.py:522
#: ../src\controller\mainController.py:539
#: ../src\controller\mainController.py:568
msgid "Select the user"
msgstr "Sélectionnez l'utilisateur"
#: ../src\controller\mainController.py:767
#: ../src\controller\mainController.py:753
msgid "Add an user alias"
msgstr "Ajoute un alis pour l'utilisateur"
msgstr "Ajoute un alias pour l'utilisateur"
#: ../src\controller\mainController.py:775
#: ../src\controller\mainController.py:761
msgid "Alias has been set correctly for {}."
msgstr "L'alias pour {} a correctement été définie"
#: ../src\controller\mainController.py:838 ../src\controller\messages.py:245
#: ../src\controller\mainController.py:829 ../src\controller\messages.py:245
msgid "MMM D, YYYY. H:m"
msgstr "D MMM YYYY à H:m"
#: ../src\controller\mainController.py:966
#: ../src\controller\mainController.py:957
msgid "Conversation with {0}"
msgstr "Conversation avec {0}"
#: ../src\controller\mainController.py:1007
#: ../src\controller\mainController.py:1024
#: ../src\controller\mainController.py:998
#: ../src\controller\mainController.py:1015
msgid "There are no coordinates in this tweet"
msgstr "Il n'y a aucune coordonnée dans ce tweet"
#: ../src\controller\mainController.py:1009
#: ../src\controller\mainController.py:1028
#: ../src\controller\mainController.py:1000
#: ../src\controller\mainController.py:1019
msgid "Error decoding coordinates. Try again later."
msgstr "Erreur pendant le décodage des coordonnées. Réessayez plus tard."
#: ../src\controller\mainController.py:1013
#: ../src\controller\mainController.py:1004
msgid "Unable to find address in OpenStreetMap."
msgstr "Impossible de trouver l'adresse dans OpenStreetMap"
#: ../src\controller\mainController.py:1026
#: ../src\controller\mainController.py:1017
msgid "There are no results for the coordinates in this tweet"
msgstr "Il n'y a aucun résultat pour les coordonnées dans ce tweet"
#: ../src\controller\mainController.py:1137
#: ../src\controller\mainController.py:1156
#: ../src\controller\mainController.py:1128
#: ../src\controller\mainController.py:1147
msgid "%s, %s of %s"
msgstr "%s, %s de %s"
#: ../src\controller\mainController.py:1139
#: ../src\controller\mainController.py:1158
#: ../src\controller\mainController.py:1183
#: ../src\controller\mainController.py:1208
#: ../src\controller\mainController.py:1130
#: ../src\controller\mainController.py:1149
#: ../src\controller\mainController.py:1174
#: ../src\controller\mainController.py:1199
msgid "%s. Empty"
msgstr "%s. Vide"
#: ../src\controller\mainController.py:1171
#: ../src\controller\mainController.py:1175
#: ../src\controller\mainController.py:1196
#: ../src\controller\mainController.py:1162
#: ../src\controller\mainController.py:1166
#: ../src\controller\mainController.py:1187
msgid "{0}: This account is not logged into Twitter."
msgstr "{0}: Ce compte n'est pas connecté à twitter."
#: ../src\controller\mainController.py:1181
#: ../src\controller\mainController.py:1206
#: ../src\controller\mainController.py:1172
#: ../src\controller\mainController.py:1197
msgid "%s. %s, %s of %s"
msgstr "%s. %s, %s de %s"
#: ../src\controller\mainController.py:1200
#: ../src\controller\mainController.py:1191
msgid "{0}: This account is not logged into twitter."
msgstr "{0}: Ce compte n'est pas connecté à twitter."
#: ../src\controller\mainController.py:1426
#: ../src\controller\mainController.py:1416
msgid "This list is already opened"
msgstr "Cette liste est déjà ouverte"
#: ../src\controller\mainController.py:1456
#: ../src\controller\mainController.py:1472
#: ../src\controller\mainController.py:1446
#: ../src\controller\mainController.py:1462
msgid ""
"An error happened while trying to connect to the server. Please try later."
msgstr ""
"Une erreur s'est produite en essayant de se connecter au serveur. Veuillez "
"réessayer plus tard."
#: ../src\controller\mainController.py:1508
#: ../src\controller\mainController.py:1498
msgid "The auto-reading of new tweets is enabled for this buffer"
msgstr "La lecture automatique des nouveaux tweets est activée pour ce tampon"
#: ../src\controller\mainController.py:1511
#: ../src\controller\mainController.py:1501
msgid "The auto-reading of new tweets is disabled for this buffer"
msgstr ""
"La lecture automatique des nouveaux tweets est désactivée pour ce tampon"
#: ../src\controller\mainController.py:1518
#: ../src\controller\mainController.py:1508
msgid "Session mute on"
msgstr "Session muet"
#: ../src\controller\mainController.py:1521
#: ../src\controller\mainController.py:1511
msgid "Session mute off"
msgstr "Session non muet"
#: ../src\controller\mainController.py:1529
#: ../src\controller\mainController.py:1519
msgid "Buffer mute on"
msgstr "Tampon muet"
#: ../src\controller\mainController.py:1532
#: ../src\controller\mainController.py:1522
msgid "Buffer mute off"
msgstr "Tampon non muet"
#: ../src\controller\mainController.py:1555
#: ../src\controller\mainController.py:1545
msgid "Copied"
msgstr "Copié"
#: ../src\controller\mainController.py:1586
#: ../src\controller\mainController.py:1575
msgid "Unable to update this buffer."
msgstr "Impossible de mettre à jour ce tampon."
#: ../src\controller\mainController.py:1589
#: ../src\controller\mainController.py:1578
msgid "Updating buffer..."
msgstr "Actualisation..."
#: ../src\controller\mainController.py:1592
#: ../src\controller\mainController.py:1581
msgid "{0} items retrieved"
msgstr "{0} éléments récupérés"
#: ../src\controller\mainController.py:1609
#: ../src\controller\mainController.py:1629
#: ../src\controller\mainController.py:1598
#: ../src\controller\mainController.py:1618
msgid "Invalid buffer"
msgstr "Tampon invalide"
#: ../src\controller\mainController.py:1620
#: ../src\controller\mainController.py:1609
msgid "Picture {0}"
msgstr "Photo {0}"
#: ../src\controller\mainController.py:1621
#: ../src\controller\mainController.py:1610
msgid "Select the picture"
msgstr "Sélectionner la photo"
#: ../src\controller\mainController.py:1640
#: ../src\controller\mainController.py:1629
msgid "Unable to extract text"
msgstr "Impossible d'extraire le texte"
@@ -616,6 +620,10 @@ msgstr "Favoris: %s"
msgid "You can't ignore direct messages"
msgstr "Vous ne pouvez pas ignorer les messages privés"
#: ../src\controller\userAliasController.py:32
msgid "Edit alias for {}"
msgstr "Éditer l'alias pour {}"
#: ../src\extra\AudioUploader\audioUploader.py:57
msgid "Attaching..."
msgstr "Ajout en cours..."
@@ -657,7 +665,7 @@ msgstr "Arrêté"
msgid "&Record"
msgstr "&Enregistrer"
#: ../src\extra\AudioUploader\audioUploader.py:136 ../src\sound.py:146
#: ../src\extra\AudioUploader\audioUploader.py:136 ../src\sound.py:148
msgid "Playing..."
msgstr "Lecture..."
@@ -1773,7 +1781,7 @@ msgid "Action"
msgstr "Action"
#: ../src\keystrokeEditor\wx_ui.py:18 ../src\wxUI\dialogs\filterDialogs.py:131
#: ../src\wxUI\dialogs\lists.py:20
#: ../src\wxUI\dialogs\lists.py:20 ../src\wxUI\dialogs\userAliasDialogs.py:53
msgid "Edit"
msgstr "Modifier"
@@ -1786,7 +1794,7 @@ msgid "Execute action"
msgstr "Exécuter une action"
#: ../src\keystrokeEditor\wx_ui.py:22 ../src\wxUI\dialogs\configuration.py:396
#: ../src\wxUI\dialogs\utils.py:39 ../src\wxUI\dialogs\utils.py:71
#: ../src\wxUI\dialogs\userAliasDialogs.py:25 ../src\wxUI\dialogs\utils.py:39
msgid "Close"
msgstr "Fermer"
@@ -1823,8 +1831,8 @@ msgid "Key"
msgstr "Touche"
#: ../src\keystrokeEditor\wx_ui.py:71 ../src\wxUI\dialogs\filterDialogs.py:82
#: ../src\wxUI\dialogs\find.py:21 ../src\wxUI\dialogs\utils.py:36
#: ../src\wxUI\dialogs\utils.py:68
#: ../src\wxUI\dialogs\find.py:21 ../src\wxUI\dialogs\userAliasDialogs.py:23
#: ../src\wxUI\dialogs\utils.py:36
msgid "OK"
msgstr "OK"
@@ -1940,7 +1948,7 @@ msgstr ""
"ou après la réactivation d'un compte. Veuillez supprimer manuellement ce "
"compte depuis votre session Twitter pour ne plus voir ce message."
#: ../src\sessions\base.py:111
#: ../src\sessions\base.py:113
msgid ""
"An exception occurred while saving the {app} database. It will be deleted "
"and rebuilt automatically. If this error persists, send the error log to the "
@@ -1950,7 +1958,7 @@ msgstr ""
"{app}, elle va être détruite et recréée automatiquement. Si ce problème "
"perciste, veuillez envoyer le journal d'erreur aux développeurs de {app}."
#: ../src\sessions\base.py:151
#: ../src\sessions\base.py:153
msgid ""
"An exception occurred while loading the {app} database. It will be deleted "
"and rebuilt automatically. If this error persists, send the error log to the "
@@ -1999,16 +2007,16 @@ msgstr "privé"
msgid "public"
msgstr "public"
#: ../src\sessions\twitter\session.py:208
#: ../src\sessions\twitter\session.py:209
msgid "%s failed. Reason: %s"
msgstr "%s erreur. Raison: %s"
#: ../src\sessions\twitter\session.py:214
#: ../src\sessions\twitter\session.py:215
msgid "%s succeeded."
msgstr "%s réussi."
#: ../src\sessions\twitter\session.py:423
#: ../src\sessions\twitter\session.py:501
#: ../src\sessions\twitter\session.py:424
#: ../src\sessions\twitter\session.py:502
msgid "Deleted account"
msgstr "Compte supprimé"
@@ -2021,8 +2029,8 @@ msgid "No status found with that ID"
msgstr "Aucun Tweet trouvée avec cet ID"
#: ../src\sessions\twitter\utils.py:235
msgid "Error code {0}"
msgstr "Code d'erreur {0}"
msgid "Error {0}"
msgstr "Erreur {0}"
#: ../src\sessions\twitter\utils.py:262
msgid "{user_1}, {user_2} and {all_users} more: {text}"
@@ -2036,7 +2044,7 @@ msgstr "Compte en cours d'autorisation..."
msgid "Enter your PIN code here"
msgstr "Entrer votre code PIN ici"
#: ../src\sound.py:159
#: ../src\sound.py:161
msgid "Stopped."
msgstr "Arrêté."
@@ -2100,8 +2108,8 @@ msgstr "Date"
#: ../src\wxUI\buffers\base.py:12 ../src\wxUI\buffers\people.py:12
#: ../src\wxUI\buffers\user_searches.py:11
#: ../src\wxUI\dialogs\userAliasDialogs.py:14
#: ../src\wxUI\dialogs\userSelection.py:11 ../src\wxUI\dialogs\utils.py:32
#: ../src\wxUI\dialogs\utils.py:59
msgid "User"
msgstr "Utilisateur"
@@ -2750,7 +2758,7 @@ msgstr "Langue sélectionnée"
#: ../src\wxUI\dialogs\filterDialogs.py:75
#: ../src\wxUI\dialogs\filterDialogs.py:133 ../src\wxUI\dialogs\lists.py:21
#: ../src\wxUI\dialogs\lists.py:132
#: ../src\wxUI\dialogs\lists.py:132 ../src\wxUI\dialogs\userAliasDialogs.py:57
msgid "Remove"
msgstr "Effacer"
@@ -2959,7 +2967,7 @@ msgstr "&Rechercher"
msgid "Tweets"
msgstr "Tweets"
#: ../src\wxUI\dialogs\search.py:22
#: ../src\wxUI\dialogs\search.py:22 ../src\wxUI\dialogs\userAliasDialogs.py:43
msgid "Users"
msgstr "Utilisateurs"
@@ -3064,13 +3072,13 @@ msgstr "Ignorer la photo"
msgid "Select URL"
msgstr "Sélectionnez l'URL"
#: ../src\wxUI\dialogs\userActions.py:11 ../src\wxUI\view.py:86
#: ../src\wxUI\dialogs\userActions.py:11 ../src\wxUI\view.py:87
msgid "&User"
msgstr "&Utilisateur"
#: ../src\wxUI\dialogs\userActions.py:14
#: ../src\wxUI\dialogs\userAliasDialogs.py:13
#: ../src\wxUI\dialogs\userSelection.py:14 ../src\wxUI\dialogs\utils.py:31
#: ../src\wxUI\dialogs\utils.py:58
msgid "&Autocomplete users"
msgstr "&Saisie automatique utilisateurs"
@@ -3082,7 +3090,7 @@ msgstr "&Suivre"
msgid "U&nfollow"
msgstr "Ne pas su&ivre"
#: ../src\wxUI\dialogs\userActions.py:22 ../src\wxUI\view.py:62
#: ../src\wxUI\dialogs\userActions.py:22 ../src\wxUI\view.py:63
msgid "&Mute"
msgstr "&Masquer"
@@ -3106,6 +3114,46 @@ msgstr "&Signaler comme spam"
msgid "&Ignore tweets from this client"
msgstr "&Ignorer les tweets de ce client"
#: ../src\wxUI\dialogs\userAliasDialogs.py:18
msgid "Alias"
msgstr "Alias"
#: ../src\wxUI\dialogs\userAliasDialogs.py:41
msgid "Edit user aliases"
msgstr "Éditer les alias utilisateur"
#: ../src\wxUI\dialogs\userAliasDialogs.py:48
msgid "Actions"
msgstr "Actions"
#: ../src\wxUI\dialogs\userAliasDialogs.py:50
msgid "Add alias"
msgstr "Ajouter un alias"
#: ../src\wxUI\dialogs\userAliasDialogs.py:51
msgid "Adds a new user alias"
msgstr "Ajoute un nouvel alias utilisateur"
#: ../src\wxUI\dialogs\userAliasDialogs.py:54
msgid "Edit the currently focused user Alias."
msgstr "Éditer l'alias utilisateur ayant actuellement le focus."
#: ../src\wxUI\dialogs\userAliasDialogs.py:58
msgid "Remove the currently focused user alias."
msgstr "Supprimer l'alias utilisateur ayant actuellement le focus."
#: ../src\wxUI\dialogs\userAliasDialogs.py:82
msgid "Are you sure you want to delete this user alias?"
msgstr "Êtes-vous sûr de vouloir supprimer cet alias utilisateur ?"
#: ../src\wxUI\dialogs\userAliasDialogs.py:82
msgid "Remove user alias"
msgstr "Supprimer l'alias utilisateur"
#: ../src\wxUI\dialogs\userAliasDialogs.py:93
msgid "User alias"
msgstr "Alias utilisateur"
#: ../src\wxUI\dialogs\userSelection.py:10
msgid "Timeline for %s"
msgstr "Chronologie pour %s"
@@ -3130,23 +3178,19 @@ msgstr "&Abonnés"
msgid "F&riends"
msgstr "A&bonnements"
#: ../src\wxUI\dialogs\utils.py:63
msgid "Alias"
msgstr "Alias"
#: ../src\wxUI\menus.py:8 ../src\wxUI\view.py:32
#: ../src\wxUI\menus.py:8 ../src\wxUI\view.py:33
msgid "&Retweet"
msgstr "&Retweet"
#: ../src\wxUI\menus.py:10 ../src\wxUI\menus.py:34 ../src\wxUI\view.py:31
#: ../src\wxUI\menus.py:10 ../src\wxUI\menus.py:34 ../src\wxUI\view.py:32
msgid "Re&ply"
msgstr "Ré&pondre"
#: ../src\wxUI\menus.py:12 ../src\wxUI\view.py:33
#: ../src\wxUI\menus.py:12 ../src\wxUI\view.py:34
msgid "&Like"
msgstr "A&jouter aux favoris"
#: ../src\wxUI\menus.py:14 ../src\wxUI\view.py:34
#: ../src\wxUI\menus.py:14 ../src\wxUI\view.py:35
msgid "&Unlike"
msgstr "S&upprimer des favoris"
@@ -3162,7 +3206,7 @@ msgstr "Ou&vrir dans Twitter"
msgid "&Play audio"
msgstr "&Lire audio"
#: ../src\wxUI\menus.py:22 ../src\wxUI\menus.py:58 ../src\wxUI\view.py:35
#: ../src\wxUI\menus.py:22 ../src\wxUI\menus.py:58 ../src\wxUI\view.py:36
msgid "&Show tweet"
msgstr "A&fficher tweet"
@@ -3172,7 +3216,7 @@ msgid "&Copy to clipboard"
msgstr "&Copier dans le Presse-papiers"
#: ../src\wxUI\menus.py:26 ../src\wxUI\menus.py:44 ../src\wxUI\menus.py:62
#: ../src\wxUI\menus.py:72 ../src\wxUI\view.py:39
#: ../src\wxUI\menus.py:72 ../src\wxUI\view.py:40
msgid "&Delete"
msgstr "&Supprimer Tweet"
@@ -3192,11 +3236,11 @@ msgstr "&Afficher l'événement"
msgid "Direct &message"
msgstr "&Message privé"
#: ../src\wxUI\menus.py:80 ../src\wxUI\view.py:49
#: ../src\wxUI\menus.py:80 ../src\wxUI\view.py:50
msgid "&View lists"
msgstr "&Voir listes"
#: ../src\wxUI\menus.py:83 ../src\wxUI\view.py:50
#: ../src\wxUI\menus.py:83 ../src\wxUI\view.py:51
msgid "Show user &profile"
msgstr "Voir le &profil de l'utilisateur"
@@ -3212,11 +3256,11 @@ msgstr "&Tweet sur cette tendance"
msgid "&Show item"
msgstr "&Afficher l'élément"
#: ../src\wxUI\sysTrayIcon.py:36 ../src\wxUI\view.py:25
#: ../src\wxUI\sysTrayIcon.py:36 ../src\wxUI\view.py:26
msgid "&Global settings"
msgstr "Paramètres &globaux"
#: ../src\wxUI\sysTrayIcon.py:37 ../src\wxUI\view.py:24
#: ../src\wxUI\sysTrayIcon.py:37 ../src\wxUI\view.py:25
msgid "Account se&ttings"
msgstr "Paramètres du c&ompte"
@@ -3228,7 +3272,7 @@ msgstr "&Actualiser le profil"
msgid "&Show / hide"
msgstr "&Afficher / masquer"
#: ../src\wxUI\sysTrayIcon.py:40 ../src\wxUI\view.py:74
#: ../src\wxUI\sysTrayIcon.py:40 ../src\wxUI\view.py:75
msgid "&Documentation"
msgstr "&Documentation"
@@ -3253,265 +3297,157 @@ msgid "&Lists manager"
msgstr "Gérer les &listes"
#: ../src\wxUI\view.py:23
msgid "Manage user aliases"
msgstr "Gérer les alias utilisateur"
#: ../src\wxUI\view.py:24
msgid "&Edit keystrokes"
msgstr "&Éditer les raccourcis clavier"
#: ../src\wxUI\view.py:26
#: ../src\wxUI\view.py:27
msgid "E&xit"
msgstr "&Quitter"
#: ../src\wxUI\view.py:30 ../src\wxUI\view.py:85
#: ../src\wxUI\view.py:31 ../src\wxUI\view.py:86
msgid "&Tweet"
msgstr "&Tweet"
#: ../src\wxUI\view.py:36
#: ../src\wxUI\view.py:37
msgid "View &address"
msgstr "Voir &adresse"
#: ../src\wxUI\view.py:37
#: ../src\wxUI\view.py:38
msgid "View conversa&tion"
msgstr "Voir &conversation"
#: ../src\wxUI\view.py:38
#: ../src\wxUI\view.py:39
msgid "Read text in picture"
msgstr "Lire le texte dans l'&image"
#: ../src\wxUI\view.py:43
#: ../src\wxUI\view.py:44
msgid "&Actions..."
msgstr "&Actions..."
#: ../src\wxUI\view.py:44
#: ../src\wxUI\view.py:45
msgid "&View timeline..."
msgstr "Voir &chronologie..."
#: ../src\wxUI\view.py:45
#: ../src\wxUI\view.py:46
msgid "Direct me&ssage"
msgstr "&Message privé"
#: ../src\wxUI\view.py:46
#: ../src\wxUI\view.py:47
msgid "Add a&lias"
msgstr "Ajouter un a&lias"
#: ../src\wxUI\view.py:47
#: ../src\wxUI\view.py:48
msgid "&Add to list"
msgstr "A&jouter à la liste"
#: ../src\wxUI\view.py:48
#: ../src\wxUI\view.py:49
msgid "R&emove from list"
msgstr "S&upprimer de la liste"
#: ../src\wxUI\view.py:51
#: ../src\wxUI\view.py:52
msgid "V&iew likes"
msgstr "Voir &favoris"
#: ../src\wxUI\view.py:55
#: ../src\wxUI\view.py:56
msgid "&Update buffer"
msgstr "&Mise à jour du tampon"
#: ../src\wxUI\view.py:56
#: ../src\wxUI\view.py:57
msgid "New &trending topics buffer..."
msgstr "Nouveau tampon de &tendances..."
#: ../src\wxUI\view.py:57
#: ../src\wxUI\view.py:58
msgid "Create a &filter"
msgstr "Créer un &filtre"
#: ../src\wxUI\view.py:58
#: ../src\wxUI\view.py:59
msgid "&Manage filters"
msgstr "&Gérer les filtres"
#: ../src\wxUI\view.py:59
#: ../src\wxUI\view.py:60
msgid "Find a string in the currently focused buffer..."
msgstr "Trouver une chaîne dans le tampon ayant actuellement le f&ocus..."
#: ../src\wxUI\view.py:60
#: ../src\wxUI\view.py:61
msgid "&Load previous items"
msgstr "&Charger des éléments plus anciens"
#: ../src\wxUI\view.py:63
#: ../src\wxUI\view.py:64
msgid "&Autoread"
msgstr "&Lecture automatique"
#: ../src\wxUI\view.py:64
#: ../src\wxUI\view.py:65
msgid "&Clear buffer"
msgstr "&Effacer le tampon"
#: ../src\wxUI\view.py:65
#: ../src\wxUI\view.py:66
msgid "&Destroy"
msgstr "&Détruire"
#: ../src\wxUI\view.py:69
#: ../src\wxUI\view.py:70
msgid "&Seek back 5 seconds"
msgstr "&Reculer de 5 secondes"
#: ../src\wxUI\view.py:70
#: ../src\wxUI\view.py:71
msgid "&Seek forward 5 seconds"
msgstr "&Avancer de 5 secondes"
#: ../src\wxUI\view.py:75
#: ../src\wxUI\view.py:76
msgid "Sounds &tutorial"
msgstr "&Apprentissage des sons"
#: ../src\wxUI\view.py:76
#: ../src\wxUI\view.py:77
msgid "&What's new in this version?"
msgstr "&Quoi de neuf dans cette version ?"
#: ../src\wxUI\view.py:77
#: ../src\wxUI\view.py:78
msgid "&Check for updates"
msgstr "&Vérifier les mises à jour"
#: ../src\wxUI\view.py:78
#: ../src\wxUI\view.py:79
msgid "&Report an error"
msgstr "&Signaler une erreur"
#: ../src\wxUI\view.py:79
#: ../src\wxUI\view.py:80
msgid "{0}'s &website"
msgstr "Site &Web de {0}"
#: ../src\wxUI\view.py:80
#: ../src\wxUI\view.py:81
msgid "Get soundpacks for TWBlue"
msgstr "Obtenir des packs de son pour TWBlue"
#: ../src\wxUI\view.py:81
#: ../src\wxUI\view.py:82
msgid "About &{0}"
msgstr "À propos de &{0}"
#: ../src\wxUI\view.py:84
#: ../src\wxUI\view.py:85
msgid "&Application"
msgstr "&Application"
#: ../src\wxUI\view.py:87
#: ../src\wxUI\view.py:88
msgid "&Buffer"
msgstr "Ta&mpon"
#: ../src\wxUI\view.py:88
#: ../src\wxUI\view.py:89
msgid "&Audio"
msgstr "Au&dio"
#: ../src\wxUI\view.py:89
#: ../src\wxUI\view.py:90
msgid "&Help"
msgstr "A&ide"
#: ../src\wxUI\view.py:175
#: ../src\wxUI\view.py:176
msgid "Address"
msgstr "Adresse"
#: ../src\wxUI\view.py:206
#: ../src\wxUI\view.py:207
msgid "Update"
msgstr "Mise à jour"
#: ../src\wxUI\view.py:206
#: ../src\wxUI\view.py:207
msgid "Your {0} version is up to date"
msgstr "Votre version de {0} est à jour"
#~ msgid "Events"
#~ msgstr "Événements"
#~ msgid "This tweet doesn't contain images"
#~ msgstr "Ce tweet ne contient pas d'images"
#~ msgid "Direct connection"
#~ msgstr "Connexion directe"
#~ msgid "There are no more items to retrieve in this buffer."
#~ msgstr "Il n'y a aucun nouvel élément a récupéré dans ce tampon"
#~ msgid "Empty"
#~ msgstr "Vide"
#~ msgid "One mention from %s "
#~ msgstr "Une mention de %s"
#~ msgid "One tweet from %s"
#~ msgstr "Un tweet de %s"
#~ msgid "You've blocked %s"
#~ msgstr "Vous avez bloqué à %s"
#~ msgid "You've unblocked %s"
#~ msgstr "Vous avez débloqué à %s"
#~ msgid "%s(@%s) has followed you"
#~ msgstr "%s(@%s) vous suit"
#~ msgid "You've followed %s(@%s)"
#~ msgstr "Vous suivez %s(@%s)"
#~ msgid "You've unfollowed %s (@%s)"
#~ msgstr "Vous ne suivez plus %s(@%s)"
#~ msgid "You've liked: %s, %s"
#~ msgstr "Vous avez ajouté aux favoris: %s, %s"
#~ msgid "%s(@%s) has liked: %s"
#~ msgstr "%s(@%s) a ajouté aux favoris: %s"
#~ msgid "You've unliked: %s, %s"
#~ msgstr "Vous avez retiré des favoris: %s, %s"
#~ msgid "%s(@%s) has unliked: %s"
#~ msgstr "%s(@%s) a retiré des favoris: %s"
#~ msgid "You've created the list %s"
#~ msgstr "Vous avez créé la liste %s"
#~ msgid "You've deleted the list %s"
#~ msgstr "Vous avez supprimé la liste %s"
#~ msgid "You've updated the list %s"
#~ msgstr "Vous avez mis à jour la liste %s"
#~ msgid "You've added %s(@%s) to the list %s"
#~ msgstr "Vous avez ajouté %s(@%s) à la liste %s"
#~ msgid "%s(@%s) has added you to the list %s"
#~ msgstr "%s(@%s) vous a ajouté à la liste %s"
#~ msgid "You'be removed %s(@%s) from the list %s"
#~ msgstr "Vous avez supprimé à %s(@%s) de la liste %s"
#~ msgid "%s(@%s) has removed you from the list %s"
#~ msgstr "%s(@%s) vous a supprimé de la liste %s"
#~ msgid "You've subscribed to the list %s, which is owned by %s(@%s)"
#~ msgstr "Vous êtes abonné à la liste %s, qui est la propriété de %s(@%s)"
#~ msgid "%s(@%s) has subscribed you to the list %s"
#~ msgstr "%s(@%s) vous a abonné à la liste %s"
#~ msgid "You've unsubscribed from the list %s, which is owned by %s(@%s)"
#~ msgstr "Vous êtes désabonné de la liste %s, qui est la propriété de %s(@%s)"
#~ msgid "You've been unsubscribed from the list %s, which is owned by %s(@%s)"
#~ msgstr ""
#~ "Vous avez été désabonné de la liste %s, qui est la propriété de %s(@%s)"
#~ msgid "You have retweeted a retweet from %s(@%s): %s"
#~ msgstr "Vous avez retweeté un retweet de %s(@%s): %s"
#~ msgid "%s(@%s) has retweeted your retweet: %s"
#~ msgstr "%s(@%s) a retweeté votre retweet: %s"
#~ msgid ""
#~ "API calls (One API call = 200 tweets, two API calls = 400 tweets, etc):"
#~ msgstr ""
#~ "Appels à l'API (un appel à l'API équivaut à 200 tweets, 2 appels à l'API "
#~ "équivaut à 400 tweets, etc.):"
#~ msgid "Unable to upload the audio"
#~ msgstr "Impossible de charger l'audio"
#~ msgid "Waiting for account authorisation..."
#~ msgstr "En attente d'autorisation du compte..."
#~ msgid "Contains"
#~ msgstr "Contient"
#~ msgid "Doesn't contain"
#~ msgstr "Ne contient pas"
#~ msgid "Create a filter"
#~ msgstr "Créer un filtre"
#~ msgid "&Name (20 characters maximum)"
#~ msgstr "&Nom (maximum 20 caractères)"

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -8,6 +8,7 @@ import wx
import config
import output
import application
import appkeys
from pubsub import pub
import tweepy
from tweepy.errors import TweepyException, Forbidden, NotFound
@@ -135,9 +136,10 @@ class Session(base.baseSession):
if self.settings["twitter"]["user_key"] != None and self.settings["twitter"]["user_secret"] != None:
try:
log.debug("Logging in to twitter...")
self.auth = tweepy.OAuthHandler(keyring.get("api_key"), keyring.get("api_secret"))
self.auth = tweepy.OAuthHandler(appkeys.twitter_api_key, appkeys.twitter_api_secret)
self.auth.set_access_token(self.settings["twitter"]["user_key"], self.settings["twitter"]["user_secret"])
self.twitter = tweepy.API(self.auth)
self.twitter_v2 = tweepy.Client(consumer_key=appkeys.twitter_api_key, consumer_secret=appkeys.twitter_api_secret, access_token=self.settings["twitter"]["user_key"], access_token_secret=self.settings["twitter"]["user_secret"])
if verify_credentials == True:
self.credentials = self.twitter.verify_credentials()
self.logged = True
@@ -156,7 +158,7 @@ class Session(base.baseSession):
if self.logged == True:
raise Exceptions.AlreadyAuthorisedError("The authorisation process is not needed at this time.")
else:
self.auth = tweepy.OAuthHandler(keyring.get("api_key"), keyring.get("api_secret"))
self.auth = tweepy.OAuthHandler(appkeys.twitter_api_key, appkeys.twitter_api_secret)
redirect_url = self.auth.get_authorization_url()
webbrowser.open_new_tab(redirect_url)
self.authorisation_dialog = authorisationDialog()
@@ -523,7 +525,7 @@ class Session(base.baseSession):
def start_streaming(self):
if config.app["app-settings"]["no_streaming"]:
return
self.stream = streaming.Stream(twitter_api=self.twitter, user=self.db["user_name"], user_id=self.db["user_id"], muted_users=self.db["muted_users"], consumer_key=keyring.get("api_key"), consumer_secret=keyring.get("api_secret"), access_token=self.settings["twitter"]["user_key"], access_token_secret=self.settings["twitter"]["user_secret"], chunk_size=1025)
self.stream = streaming.Stream(twitter_api=self.twitter, user=self.db["user_name"], user_id=self.db["user_id"], muted_users=self.db["muted_users"], consumer_key=appkeys.twitter_api_key, consumer_secret=appkeys.twitter_api_secret, access_token=self.settings["twitter"]["user_key"], access_token_secret=self.settings["twitter"]["user_secret"], chunk_size=1025)
self.stream_thread = call_threaded(self.stream.filter, follow=self.stream.users, stall_warnings=True)
def stop_streaming(self):

View File

@@ -44,10 +44,11 @@ build_exe_options = dict(
replace_paths = [("*", "")],
include_files=["icon.ico", "conf.defaults", "app-configuration.defaults", "keymaps", "locales", "sounds", "documentation", ("keys/lib", "keys/lib"), find_sound_lib_datafiles(), find_accessible_output2_datafiles()]+get_architecture_files(),
packages=["wxUI"],
bin_path_excludes=["C:\\Program Files", "C:\Program Files (x86)"],
)
executables = [
Executable('main.py', base=base, targetName="twblue")
Executable('main.py', base=base, target_name="twblue")
]
winmsvcr.FILES = ()

View File

@@ -1,4 +1,3 @@
from __future__ import unicode_literals
from logging import getLogger
logger = getLogger('update')
@@ -24,8 +23,8 @@ def perform_update(endpoint, current_version, app_name='', password=None, update
if not available_update:
logger.debug("No update available")
return False
available_version = float(available_update['current_version'])
if not float(available_version) > float(current_version) or platform.system()+platform.architecture()[0][:2] not in available_update['downloads']:
available_version = available_update['current_version']
if available_version == current_version or platform.system()+platform.architecture()[0][:2] not in available_update['downloads']:
logger.debug("No update for this architecture")
return False
available_description = available_update.get('description', None)
@@ -42,10 +41,10 @@ def perform_update(endpoint, current_version, app_name='', password=None, update
downloaded = download_update(update_url, download_path, requests_session=requests_session, progress_callback=progress_callback)
extracted = extract_update(downloaded, update_path, password=password)
bootstrap_path = move_bootstrap(extracted)
execute_bootstrap(bootstrap_path, extracted)
logger.info("Update prepared for installation.")
if callable(update_complete_callback):
update_complete_callback()
execute_bootstrap(bootstrap_path, extracted)
logger.info("Update prepared for installation.")
def create_requests_session(app_name=None, version=None):
user_agent = ''

View File

@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import
from __future__ import unicode_literals
import application
from . import update
import platform

38
src/write_version_data.py Normal file
View File

@@ -0,0 +1,38 @@
#! /usr/bin/env python# -*- coding: iso-8859-1 -*-
""" Write version info (taken from the last commit) to application.py. This method has been implemented this way for running updates.
This file is not intended to be called by the user. It will be used only by the Gitlab CI runner."""
import os
import requests
from codecs import open
print("Writing version data for update...")
commit_info = requests.get("https://gitlab.com/api/v4/projects/23482196/repository/commits/next-gen")
commit_info = commit_info.json()
commit = commit_info["short_id"]
print("Got new version info: {commit}".format(commit=commit,))
file = open("application.py", "r", encoding="utf-8")
lines = file.readlines()
lines[-1] = 'version = "{}"'.format(commit_info["created_at"][:10].replace("-", "."))
file.close()
file2 = open("application.py", "w", encoding="utf-8")
file2.writelines(lines)
file2.close()
print("Wrote application.py with the new version info.")
print("Updating next version on installer setup...")
file = open("..\\scripts\\twblue.nsi", "r", encoding="utf-8")
contents = file.read()
contents = contents.replace("0.95", commit_info["created_at"][:10].replace("-", "."))
file.close()
file2 = open("..\\scripts\\twblue.nsi", "w", encoding="utf-8")
file2.write(contents)
file2.close()
print("done")
print("Writing keys to module...")
file3 = open("appkeys.py", "w")
keys = """twitter_api_key = "{}"
twitter_api_secret = "{}"
""".format(os.environ.get("TWITTER_API_KEY"), os.environ.get("TWITTER_API_SECRET"))
file3.write(keys)
file3.close()
print("Wrote set of keys for consumer of {}".format(os.environ.get("TWITTER_API_KEY")))

View File

@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
import wx
import gettext
from . import baseDialog
class addAliasDialog(baseDialog.BaseWXDialog):
@@ -34,3 +35,61 @@ class addAliasDialog(baseDialog.BaseWXDialog):
def get_user(self):
return (self.cb.GetValue(), self.alias.GetValue())
class userAliasEditorDialog(wx.Dialog):
def __init__(self, *args, **kwds):
super(userAliasEditorDialog, self).__init__(parent=None)
self.SetTitle(_("Edit user aliases"))
main_sizer = wx.BoxSizer(wx.VERTICAL)
userListSizer = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, _("Users")), wx.VERTICAL)
main_sizer.Add(userListSizer, 1, wx.EXPAND, 0)
self.users = wx.ListBox(self, wx.ID_ANY, choices=[])
self.users.Bind(wx.EVT_LISTBOX, self.on_selection_changes)
userListSizer.Add(self.users, 0, 0, 0)
actionsSizer = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, _("Actions")), wx.HORIZONTAL)
main_sizer.Add(actionsSizer, 1, wx.EXPAND, 0)
self.add = wx.Button(self, wx.ID_ANY, _("Add alias"))
self.add.SetToolTip(_("Adds a new user alias"))
actionsSizer.Add(self.add, 0, 0, 0)
self.edit = wx.Button(self, wx.ID_ANY, _("Edit"))
self.edit.SetToolTip(_("Edit the currently focused user Alias."))
self.edit.Enable(False)
actionsSizer.Add(self.edit, 0, 0, 0)
self.remove = wx.Button(self, wx.ID_ANY, _("Remove"))
self.remove.SetToolTip(_("Remove the currently focused user alias."))
self.remove.Enable(False)
actionsSizer.Add(self.remove, 0, 0, 0)
btnSizer = wx.StdDialogButtonSizer()
main_sizer.Add(btnSizer, 0, wx.ALIGN_RIGHT | wx.ALL, 4)
self.button_CLOSE = wx.Button(self, wx.ID_CLOSE, "")
btnSizer.AddButton(self.button_CLOSE)
btnSizer.Realize()
self.SetSizer(main_sizer)
main_sizer.Fit(self)
self.SetEscapeId(self.button_CLOSE.GetId())
self.Layout()
def on_selection_changes(self, *args, **kwargs):
selection = self.users.GetSelection()
if selection == -1:
self.enable_action_buttons(False)
else:
self.enable_action_buttons(True)
def get_selected_user(self):
return self.users.GetStringSelection()
def remove_alias_dialog(self, *args, **kwargs):
dlg = wx.MessageDialog(self, _("Are you sure you want to delete this user alias?"), _("Remove user alias"), wx.YES_NO)
if dlg.ShowModal() == wx.ID_YES:
return True
else:
return False
def enable_action_buttons(self, enabled=True):
self.edit.Enable(enabled)
self.remove.Enable(enabled)
def edit_alias_dialog(self, title):
dlg = wx.TextEntryDialog(self, title, _("User alias"))
if dlg.ShowModal() == wx.ID_OK:
return dlg.GetValue()

View File

@@ -20,6 +20,7 @@ class mainFrame(wx.Frame):
self.show_hide = app.Append(wx.ID_ANY, _(u"&Hide window"))
self.menuitem_search = app.Append(wx.ID_ANY, _(u"&Search"))
self.lists = app.Append(wx.ID_ANY, _(u"&Lists manager"))
self.manageAliases = app.Append(wx.ID_ANY, _("Manage user aliases"))
self.keystroke_editor = app.Append(wx.ID_ANY, _(u"&Edit keystrokes"))
self.account_settings = app.Append(wx.ID_ANY, _(u"Account se&ttings"))
self.prefs = app.Append(wx.ID_PREFERENCES, _(u"&Global settings"))

View File

@@ -1,6 +0,0 @@
{"current_version": "0.95",
"description": "The first version for the new generation of TWBlue.",
"date": "day_name_abr month day_numb, 2016",
"downloads":
{"Windows32": "http://twblue.es/pubs/twblue_ngen_0.80_x86.zip",
"Windows64": "http://twblue.es/pubs/twblue_ngen_0.80_x64.zip"}}