From 4f339272b7a17a693a1ec59ac68e55744b20760e Mon Sep 17 00:00:00 2001 From: souliane Date: Wed, 24 Sep 2014 13:49:43 +0200 Subject: [PATCH] memory: add Parameter "Chat history limit" --- frontends/src/quick_frontend/quick_chat.py | 12 ++++++------ src/core/constants.py | 7 +++++++ src/memory/memory.py | 19 ++++++++++++++++++- src/memory/params.py | 17 ++++++++++------- src/memory/sqlite.py | 13 +++++++++---- 5 files changed, 50 insertions(+), 18 deletions(-) diff --git a/frontends/src/quick_frontend/quick_chat.py b/frontends/src/quick_frontend/quick_chat.py index b940d8b4..fc8a96db 100644 --- a/frontends/src/quick_frontend/quick_chat.py +++ b/frontends/src/quick_frontend/quick_chat.py @@ -22,7 +22,7 @@ from sat.core.log import getLogger log = getLogger(__name__) from sat_frontends.tools.jid import JID from sat_frontends.quick_frontend.quick_utils import unescapePrivate -from sat_frontends.quick_frontend.constants import Const +from sat_frontends.quick_frontend.constants import Const as C class QuickChat(object): @@ -100,7 +100,7 @@ class QuickChat(object): """Refresh or scroll down the focus after the history is printed""" pass - def historyPrint(self, size=20, profile='@NONE@'): + def historyPrint(self, size=C.HISTORY_LIMIT_DEFAULT, profile='@NONE@'): """Print the current history @param size (int): number of messages @param profile (str): %(doc_profile)s @@ -119,7 +119,7 @@ class QuickChat(object): def onHistoryError(err): log.error(_("Can't get history")) - if self.target.startswith(Const.PRIVATE_PREFIX): + if self.target.startswith(C.PRIVATE_PREFIX): target = unescapePrivate(self.target) else: target = self.target.bare @@ -128,9 +128,9 @@ class QuickChat(object): def _get_nick(self, jid): """Return nick of this jid when possible""" - if self.target.startswith(Const.PRIVATE_PREFIX): + if self.target.startswith(C.PRIVATE_PREFIX): unescaped = unescapePrivate(self.target) - if jid.startswith(Const.PRIVATE_PREFIX) or unescaped.bare == jid.bare: + if jid.startswith(C.PRIVATE_PREFIX) or unescaped.bare == jid.bare: return unescaped.resource return jid.resource if self.type == "group" else (self.host.contact_list.getCache(jid,'nick') or self.host.contact_list.getCache(jid,'name') or jid.node) @@ -166,7 +166,7 @@ class QuickChat(object): def updateChatState(self, state, nick=None): """Set the chat state (XEP-0085) of the contact. Leave nick to None to set the state for a one2one conversation, or give a nickname or - Const.ALL_OCCUPANTS to set the state of a participant within a MUC. + C.ALL_OCCUPANTS to set the state of a participant within a MUC. @param state: the new chat state @param nick: None for one2one, the MUC user nick or ALL_OCCUPANTS """ diff --git a/src/core/constants.py b/src/core/constants.py index 3189b229..2e1eaab5 100644 --- a/src/core/constants.py +++ b/src/core/constants.py @@ -44,6 +44,8 @@ class Const(object): NO_SECURITY_LIMIT = -1 INDIVIDUAL = "individual" GENERAL = "general" + # General parameters + HISTORY_LIMIT = "History" # Parameters related to connection FORCE_SERVER_PARAM = "Force server" FORCE_PORT_PARAM = "Force port" @@ -169,6 +171,11 @@ class Const(object): BOOL_FALSE = "false" + ## Special values used in bridge methods calls ## + HISTORY_LIMIT_DEFAULT = -1 + HISTORY_LIMIT_NONE = -2 + + ## Misc ## SAVEFILE_DATABASE = APP_NAME_FILE + ".db" IQ_SET = '/iq[@type="set"]' diff --git a/src/memory/memory.py b/src/memory/memory.py index cc5fbf75..3ccd30db 100644 --- a/src/memory/memory.py +++ b/src/memory/memory.py @@ -350,8 +350,25 @@ class Memory(object): extra = {} return self.storage.addToHistory(from_jid, to_jid, message, type_, extra, timestamp, profile) - def getHistory(self, from_jid, to_jid, limit=None, between=True, profile=C.PROF_KEY_NONE): + def getHistory(self, from_jid, to_jid, limit=C.HISTORY_LIMIT_NONE, between=True, profile=C.PROF_KEY_NONE): + """Retrieve messages in history + @param from_jid (JID): source JID (full, or bare for catchall) + @param to_jid (JID): dest JID (full, or bare for catchall) + @param limit (int): maximum number of messages to get: + - 0 for no message (returns the empty list) + - C.HISTORY_LIMIT_NONE or None for unlimited + - C.HISTORY_LIMIT_DEFAULT to use the HISTORY_LIMIT parameter value + @param between (bool): confound source and dest (ignore the direction) + @param profile (str): %(doc_profile)s + @return: list of tuple as in http://wiki.goffi.org/wiki/Bridge_API#getHistory + """ assert profile != C.PROF_KEY_NONE + if limit == C.HISTORY_LIMIT_DEFAULT: + limit = int(self.getParamA(C.HISTORY_LIMIT, 'General', profile_key=profile)) + elif limit == C.HISTORY_LIMIT_NONE: + limit = None + if limit == 0: + return defer.succeed([]) return self.storage.getHistory(jid.JID(from_jid), jid.JID(to_jid), limit, between, profile) def _getLastResource(self, jid_s, profile_key): diff --git a/src/memory/params.py b/src/memory/params.py index b48cf6dd..a8354634 100644 --- a/src/memory/params.py +++ b/src/memory/params.py @@ -17,7 +17,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from sat.core.i18n import _ +from sat.core.i18n import _, D_ from sat.core import exceptions from sat.core.constants import Const as C @@ -44,6 +44,7 @@ class Params(object): + @@ -61,12 +62,14 @@ class Params(object): """ % { - 'category_general': _("General"), - 'category_connection': _("Connection"), - 'label_NewAccount': _("Register new account"), - 'label_autoconnect': _('Connect on frontend startup'), - 'label_autodisconnect': _('Disconnect on frontend closure'), - 'category_misc': _("Misc"), + 'category_general': D_("General"), + 'category_connection': D_("Connection"), + 'history_param': C.HISTORY_LIMIT, + 'label_history': D_('Chat history limit'), + 'label_NewAccount': D_("Register new account"), + 'label_autoconnect': D_('Connect on frontend startup'), + 'label_autodisconnect': D_('Disconnect on frontend closure'), + 'category_misc': D_("Misc"), 'force_server_param': C.FORCE_SERVER_PARAM, 'force_port_param': C.FORCE_PORT_PARAM, } diff --git a/src/memory/sqlite.py b/src/memory/sqlite.py index fa860faf..24c765b9 100644 --- a/src/memory/sqlite.py +++ b/src/memory/sqlite.py @@ -265,10 +265,15 @@ class SqliteStorage(object): return d def getHistory(self, from_jid, to_jid, limit=None, between=True, profile=None): - """Store a new message in history - @param from_jid: source JID (full, or bare for catchall - @param to_jid: dest JID (full, or bare for catchall - @param size: maximum number of messages to get, or None for unlimited + """Retrieve messages in history + @param from_jid (JID): source JID (full, or bare for catchall) + @param to_jid (JID): dest JID (full, or bare for catchall) + @param limit (int): maximum number of messages to get: + - 0 for no message (returns the empty list) + - None for unlimited + @param between (bool): confound source and dest (ignore the direction) + @param profile (str): %(doc_profile)s + @return: list of tuple as in http://wiki.goffi.org/wiki/Bridge_API#getHistory """ assert(profile) if limit == 0: