diff options
author | mrDoctorWho <mrdoctorwho@gmail.com> | 2014-09-17 22:28:56 +0400 |
---|---|---|
committer | mrDoctorWho <mrdoctorwho@gmail.com> | 2014-09-17 22:28:56 +0400 |
commit | d595ca24e8f315fda6c13d37b128ba354c512603 (patch) | |
tree | e2fea55834b6f13c0821ce962ed1c37c903b1e0d | |
parent | d83b8f4bd1c611c15c7d4c2859e5a76cd7ef8979 (diff) |
Couple fixes in groupchats (exterminateChat())
Added sqlite3.OperationalError ignoring
Fixed disconnect when building errors
Added Semaphore into initializeUser() func
Fixed crashLog() arguments overflow
-rw-r--r-- | README.md | 3 | ||||
-rw-r--r-- | extensions/groupchats.py | 2 | ||||
-rw-r--r-- | gateway.py | 19 | ||||
-rw-r--r-- | library/utils.py | 5 | ||||
-rw-r--r-- | modules/mod_iq_register.py | 12 | ||||
-rw-r--r-- | modules/mod_prs_main.py | 4 |
6 files changed, 28 insertions, 17 deletions
@@ -1,5 +1,8 @@ [![VK4XMPP on Ohloh](https://www.openhub.net/p/vk4xmpp/widgets/project_partner_badge.gif)](https://www.openhub.net/p/vk4xmpp) +[Donate](http://simpleapps.ru/index/0-2) + + VK4XMPP Transport ====== diff --git a/extensions/groupchats.py b/extensions/groupchats.py index efc5364..52f954c 100644 --- a/extensions/groupchats.py +++ b/extensions/groupchats.py @@ -147,7 +147,7 @@ def incomingChatMessageHandler(msg): user.vk.sendMessage(body, Node.split("#")[1], "chat_id") -def exterminateChat(user, chats): +def exterminateChat(user): chats = user.vk.method("execute.getChats") for chat in chats: setChatConfig("%s_chat#%s@%s" % (user.vk.userID, chat["chat_id"], ConferenceServer), TransportID, True) @@ -13,6 +13,7 @@ import re import select import socket import signal +import sqlite3 import sys import threading import time @@ -266,7 +267,7 @@ class Settings(object): """ self.filename = "%s/%s/settings.txt" % (settingsDir, source) self.settings = deepcopy(GLOBAL_USER_SETTINGS) - self.settings.update(eval(rFile(self.filename))) + self.settings.update(eval(rFile(self.filename))) ## better use json.load() instead self.keys = self.settings.keys self.items = self.settings.items self.source = source @@ -726,13 +727,17 @@ class User(object): if init: date = message["date"] sendMessage(Component, self.source, fromjid, escape("", body), date) - if messages: - self.lastMsgID = messages[-1]["mid"] - with Database(DatabaseFile, Semaphore) as db: - db("update users set lastMsgID=? where jid=?", (self.lastMsgID, self.source)) + if messages: + self.lastMsgID = messages[-1]["mid"] + try: + self.updateLastMsgID(Semaphore) + except sqlite3.OperationalError, e: + logger.error("User:sendmessages error %s occurred while updating last message id (jid: %s)" % (str(e), self.source)) + if not self.vk.userID: self.vk.getUserID() + def processPollResult(self, opener): """ Processes poll result @@ -780,6 +785,10 @@ class User(object): self.typing[evt[0]] = time.time() return 1 + def updateLastMsgID(self, semph=Semaphore): + with Database(DatabaseFile, semph) as db: + db("update users set lastMsgID=? where jid=?", (self.lastMsgID, self.source)) + def updateTypingUsers(self, cTime): """ Sends "paused" message event to stop user from composing a message diff --git a/library/utils.py b/library/utils.py index e6daf2b..9d8f6ad 100644 --- a/library/utils.py +++ b/library/utils.py @@ -50,8 +50,9 @@ def buildIQError(stanza, error=xmpp.ERR_FEATURE_NOT_IMPLEMENTED, text=None): """ error = xmpp.Error(stanza, error, True) if text: - eTag = error.getTag("error") - eTag.setTagData("text", text) + tag = error.getTag("error") + if tag: + tag.setTagData("text", text) return error def normalizeValue(value): diff --git a/modules/mod_iq_register.py b/modules/mod_iq_register.py index 164bf9d..0dedcda 100644 --- a/modules/mod_iq_register.py +++ b/modules/mod_iq_register.py @@ -57,9 +57,8 @@ def register_handler(cl, iq): "and then paste url to password field."), "value": URL_ACCEPT_APP}, {"var": "phone", "type": "text-single", "desc": _("Enter phone number in format +71234567890"), "value": "+"}, {"var": "use_password", "type": "boolean", "label": _("Get access-token automatically"), "desc": _("Try to get access-token automatically. (NOT recommended, password required!)")}, #"value": "0"},#, "0"} - {"var": "password", "type": "text-private", "label": _("Password/Access-token"), "desc": _("Type password, access-token or url (recommended)")} - - ], data = [_("Type data in fields")]) + {"var": "password", "type": "text-private", "label": _("Password/Access-token"), "desc": _("Type password, access-token or url (recommended)")}], + data = [_("Type data in fields")]) result.setQueryPayload([form]) elif iType == "set" and queryChildren: @@ -68,10 +67,9 @@ def register_handler(cl, iq): data = query.getTag("x", namespace=xmpp.NS_DATA) if data: form = xmpp.DataForm(node=data).asDict() - print form - phone = form.get("phone") - password = form.get("password") - use_password = utils.normalizeValue(form.get("use_password")) + phone = form.get("phone", "") + password = form.get("password", "") + use_password = utils.normalizeValue(form.get("use_password", "")) if not password: result = utils.buildIQError(iq, xmpp.ERR_BAD_REQUEST, _("Empty password/token field")) diff --git a/modules/mod_prs_main.py b/modules/mod_prs_main.py index f2c6d32..8c6a4cc 100644 --- a/modules/mod_prs_main.py +++ b/modules/mod_prs_main.py @@ -8,7 +8,7 @@ from __main__ import _ def initializeUser(source, resource, prs): logger.debug("User not in the transport, but presence received. Searching in database (jid: %s)" % source) - with Database(DatabaseFile) as db: + with Database(DatabaseFile, Semaphore) as db: db("select jid,username from users where jid=?", (source,)) data = db.fetchone() if data: @@ -20,7 +20,7 @@ def initializeUser(source, resource, prs): user.initialize(False, True, resource) runThread(executeHandlers, ("prs01", (source, prs))) else: - crashLog("user.connect", 0, False) + crashLog("user.connect", False) sendMessage(Component, jid, TransportID, _("Auth failed! If this error repeated, please register again. This incident will be reported.")) except Exception: crashLog("prs.init") |