Compare commits

...

9 Commits
v0.86 ... v0.87

51 changed files with 24250 additions and 37073 deletions

View File

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

View File

@@ -5,8 +5,8 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: TW Blue documentation 0.46\n" "Project-Id-Version: TW Blue documentation 0.46\n"
"POT-Creation-Date: 2016-08-05 08:33+Hora de verano central (México)\n" "POT-Creation-Date: 2016-10-02 21:05+Hora de verano romance\n"
"PO-Revision-Date: 2016-09-17 14:53+0400\n" "PO-Revision-Date: 2016-10-03 11:52+0400\n"
"Last-Translator: Valeria <luciana.lu3a@gmail.com>\n" "Last-Translator: Valeria <luciana.lu3a@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
"Language: ru\n" "Language: ru\n"
@@ -601,9 +601,9 @@ msgstr ""
"пользователю, нажав эту кнопку. Откроется диалог, подобный окну создания " "пользователю, нажав эту кнопку. Откроется диалог, подобный окну создания "
"твита, но с уже заполненным именем пользователя (например, @user), и вам " "твита, но с уже заполненным именем пользователя (например, @user), и вам "
"останется только написать свое сообщение. Если твит относится к нескольким " "останется только написать свое сообщение. Если твит относится к нескольким "
"пользователям, можно нажать Шифт-Таб и активировать кнопку Упомянуть всех. " "пользователям, можно нажать Шифт-Таб и отметить флажок Упомянуть всех. Если "
"Если вы находитесь в списке друзей или читателей, эта кнопка будет " "вы находитесь в списке друзей или читателей, этот флажок будет называться "
"называться Упомянуть." "Упомянуть."
#: ../doc\strings.py:68 #: ../doc\strings.py:68
msgid "" msgid ""
@@ -615,10 +615,10 @@ msgid ""
msgstr "" msgstr ""
"* Личное сообщение: тоже, что и отправка твита, но это приватное сообщение, " "* Личное сообщение: тоже, что и отправка твита, но это приватное сообщение, "
"которое может быть просмотрено только тем пользователем, которому вы его " "которое может быть просмотрено только тем пользователем, которому вы его "
"отправляете. Чтобы посмотреть получателя, нажмите Шифт-таб. Если в твите, " "отправляете. Чтобы посмотреть получателя, нажмите Шифт-таб. Если в "
"который вы читаете, упомянуто несколько пользователей,стрелками вверх и вниз " "сообщении, которое вы читаете, упомянуто несколько пользователей, стрелками "
"можно выбрать получателя сообщения, или ввести имя вручную, без знака " "вверх и вниз можно выбрать получателя сообщения, или ввести имя вручную, без "
"собаки." "знака собаки."
#: ../doc\strings.py:69 #: ../doc\strings.py:69
msgid "" msgid ""

View File

@@ -20,8 +20,8 @@ CommercialUse=true
EULAVersion=2 EULAVersion=2
[Version] [Version]
PackageVersion=0.86.0.0 PackageVersion=0.87.0.0
DisplayVersion=0.86 DisplayVersion=0.87
[Control] [Control]
Icons=1 Icons=1

View File

@@ -13,9 +13,9 @@ SetCompressor /solid lzma
SetDatablockOptimize on SetDatablockOptimize on
VIAddVersionKey ProductName "TWBlue" VIAddVersionKey ProductName "TWBlue"
VIAddVersionKey LegalCopyright "Copyright 2016 Manuel Cortéz." VIAddVersionKey LegalCopyright "Copyright 2016 Manuel Cortéz."
VIAddVersionKey ProductVersion "0.86" VIAddVersionKey ProductVersion "0.87"
VIAddVersionKey FileVersion "0.86" VIAddVersionKey FileVersion "0.87"
VIProductVersion "0.86.0.0" VIProductVersion "0.87.0.0"
!insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_WELCOME
!define MUI_LICENSEPAGE_RADIOBUTTONS !define MUI_LICENSEPAGE_RADIOBUTTONS
!insertmacro MUI_PAGE_LICENSE "license.txt" !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\twblue" "UninstallString" '"$INSTDIR\uninstall.exe"'
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall" "InstallLocation" $INSTDIR 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" "Publisher" "Manuel Cortéz"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "DisplayVersion" "0.86" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "DisplayVersion" "0.87"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "URLInfoAbout" "http://twblue.es" 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" "VersionMajor" 0
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "VersionMinor" 86 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" "NoModify" 1
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "NoRepair" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\twblue" "NoRepair" 1
SectionEnd SectionEnd

View File

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

View File

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

View File

@@ -479,11 +479,14 @@ class baseBufferController(bufferController):
tweet = self.get_right_tweet() tweet = self.get_right_tweet()
screen_name = tweet["user"]["screen_name"] screen_name = tweet["user"]["screen_name"]
id = tweet["id"] id = tweet["id"]
users = len(utils.get_all_mentioned(tweet, self.session.db)) 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) 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: if message.message.get_response() == widgetUtils.OK:
self.session.settings["mysc"]["twishort_enabled"] = message.message.long_tweet.GetValue() 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() 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 len(text) > 140 and message.message.get("long_tweet") == True:
if message.image == None: if message.image == None:
text = twishort.create_tweet(self.session.settings["twitter"]["user_key"], self.session.settings["twitter"]["user_secret"], text) text = twishort.create_tweet(self.session.settings["twitter"]["user_key"], self.session.settings["twitter"]["user_secret"], text)

View File

@@ -148,10 +148,10 @@ class reply(tweet):
def __init__(self, session, title, caption, text, twishort_enabled, users=None): def __init__(self, session, title, caption, text, twishort_enabled, users=None):
super(reply, self).__init__(session, title, caption, text, twishort_enabled, messageType="reply") super(reply, self).__init__(session, title, caption, text, twishort_enabled, messageType="reply")
self.message.mentionAll.SetValue(True) self.message.mentionAll.SetValue(True)
if users > 1: if len(users) > 1:
# widgetUtils.connect_event(self.message.mentionAll, widgetUtils.CHECKBOX, self.mention_all) # widgetUtils.connect_event(self.message.mentionAll, widgetUtils.CHECKBOX, self.mention_all)
self.message.enable_button("mentionAll") self.message.enable_button("mentionAll")
self.message.mentionAll.SetValue(False) self.message.mentionAll.SetValue(self.session.settings["mysc"]["mention_all"])
self.message.set_cursor_at_end() self.message.set_cursor_at_end()
self.text_processor() self.text_processor()

View File

@@ -11,7 +11,7 @@ right = string(default="alt+win+right")
next_account = string(default="alt+win+shift+right") next_account = string(default="alt+win+shift+right")
previous_account = string(default="alt+win+shift+left") previous_account = string(default="alt+win+shift+left")
open_conversation = string(default="alt+win+c") 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_tweet = string(default="alt+win+n")
post_reply = string(default="control+win+r") post_reply = string(default="control+win+r")
post_retweet = string(default="alt+win+shift+r") post_retweet = string(default="alt+win+shift+r")

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

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

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -24,7 +24,11 @@ def is_long(tweet):
return False return False
def clear_url(tweet): def clear_url(tweet):
urls = utils.find_urls_in_text(tweet["full_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], "") try: tweet["message"] = tweet["message"].replace(urls[-1], "")
except IndexError: pass except IndexError: pass
return tweet return tweet

View File

@@ -30,8 +30,11 @@ def get_twishort_uri(url):
def is_long(tweet): def is_long(tweet):
long = False long = False
for url in range(0, len(tweet["entities"]["urls"])): for url in range(0, len(tweet["entities"]["urls"])):
if "twishort.com" in tweet["entities"]["urls"][url]["expanded_url"]: try:
long = get_twishort_uri(tweet["entities"]["urls"][url]["expanded_url"]) 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 return long
def get_full_text(uri): def get_full_text(uri):

View File

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

View File

@@ -432,9 +432,13 @@ class Session(object):
def get_quoted_tweet(self, tweet): def get_quoted_tweet(self, tweet):
quoted_tweet = tweet quoted_tweet = tweet
urls = utils.find_urls_in_text(quoted_tweet["full_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)): for url in range(0, len(urls)):
try: quoted_tweet["full_text"] = quoted_tweet["full_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 except IndexError: pass
id = tweets.is_long(quoted_tweet) id = tweets.is_long(quoted_tweet)
try: original_tweet = self.twitter.twitter.show_status(id=id, tweet_mode="extended") try: original_tweet = self.twitter.twitter.show_status(id=id, tweet_mode="extended")

View File

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

View File

@@ -71,7 +71,7 @@ class timelinesStreamer(TwythonStreamer):
if "text" in data and utils.is_allowed(data, self.session.settings["twitter"]["ignored_clients"]) == True: if "text" in data and utils.is_allowed(data, self.session.settings["twitter"]["ignored_clients"]) == True:
if data.has_key("extended_tweet"): if data.has_key("extended_tweet"):
data["full_text"] = data["extended_tweet"]["full_text"] data["full_text"] = data["extended_tweet"]["full_text"]
data["entities"] = data["extended_tweet"]["entities"] # data["entities"] = data["extended_tweet"]["entities"]
# log.error(data["extended_entities"]) # log.error(data["extended_entities"])
self.check_tls(data) self.check_tls(data)
# except: # except:

View File

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

View File

@@ -59,8 +59,11 @@ def compose_tweet(tweet, db, relative_times):
if tweet.has_key("message") == False: if tweet.has_key("message") == False:
urls = utils.find_urls_in_text(text) urls = utils.find_urls_in_text(text)
for url in range(0, len(urls)): for url in range(0, len(urls)):
try: text = text.replace(urls[url], tweet["entities"]["urls"][url]["expanded_url"]) try:
except IndexError: pass 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 if config.app['app-settings']['handle_longtweets']: pass
# return [user+", ", text, ts+", ", source] # return [user+", ", text, ts+", ", source]
return [user+", ", text, ts+", ", source] return [user+", ", text, ts+", ", source]
@@ -88,18 +91,24 @@ def compose_dm(tweet, db, relative_times):
def compose_quoted_tweet(quoted_tweet, original_tweet): 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.""" """ 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["full_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"] quoting_user = quoted_tweet["user"]["name"]
source = re.sub(r"(?s)<.*?>", "", quoted_tweet["source"]) 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"]["full_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["full_text"])) except KeyError: text = "%s" % (StripChars(quoted_tweet[value]))
if text[-1] in chars: text=text+"." if text[-1] in chars: text=text+"."
original_user = original_tweet["user"]["screen_name"] original_user = original_tweet["user"]["screen_name"]
if original_tweet.has_key("message"): if original_tweet.has_key("message"):
original_text = StripChars(original_tweet["message"]) original_text = StripChars(original_tweet["message"])
else: elif original_tweet.has_key("full_text"):
original_text = StripChars(original_tweet["full_text"]) original_text = StripChars(original_tweet["full_text"])
quoted_tweet["message"] = _(u"{0}. Quoted tweet from @{1}: {2}").format( quoted_tweet["full_text"], original_user, original_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) quoted_tweet = tweets.clear_url(quoted_tweet)
return quoted_tweet return quoted_tweet

View File

@@ -71,8 +71,8 @@ def get_all_mentioned(tweet, conf):
string = [] string = []
for i in tweet["entities"]["user_mentions"]: 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"] != conf["user_name"] and i["screen_name"] != tweet["user"]["screen_name"]:
if "@"+i["screen_name"] not in string: if i["id"] not in string:
string.append("@"+i["screen_name"]) string.append(i["id_str"])
return " ".join(string)+" " return " ".join(string)+" "
def get_all_users(tweet, conf): def get_all_users(tweet, conf):

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

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