Use new DB API for logging status and errors
This commit is contained in:
parent
635ce52856
commit
608655deed
|
@ -1059,7 +1059,13 @@ class ConnectionHandlersBase:
|
|||
|
||||
if gajim.config.get('log_contact_status_changes') and \
|
||||
gajim.config.should_log(self.name, obj.jid):
|
||||
gajim.logger.write('status', obj.jid, obj.status, obj.show)
|
||||
show = gajim.logger.convert_show_values_to_db_api_values(obj.show)
|
||||
if show is not None:
|
||||
gajim.logger.insert_into_logs(nbxmpp.JID(obj.jid).getStripped(),
|
||||
time_time(),
|
||||
KindConstant.STATUS,
|
||||
message=obj.status,
|
||||
show=show)
|
||||
|
||||
def _nec_gc_presence_received(self, obj):
|
||||
if obj.conn.name != self.name:
|
||||
|
@ -1162,8 +1168,12 @@ class ConnectionHandlersBase:
|
|||
subject = msg.getSubject()
|
||||
|
||||
if session.is_loggable():
|
||||
gajim.logger.write('error', frm, error_msg, tim=tim,
|
||||
subject=subject)
|
||||
gajim.logger.insert_into_logs(nbxmpp.JID(frm).getStripped(),
|
||||
tim,
|
||||
KindConstant.ERROR,
|
||||
message=error_msg,
|
||||
subject=subject)
|
||||
|
||||
gajim.nec.push_incoming_event(MessageErrorEvent(None, conn=self,
|
||||
fjid=frm, error_code=msg.getErrorCode(), error_msg=error_msg,
|
||||
msg=msgtxt, time_=tim, session=session, stanza=msg))
|
||||
|
|
|
@ -932,7 +932,15 @@ class GcPresenceReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
|||
if jid:
|
||||
# we know real jid, save it in db
|
||||
st += ' (%s)' % jid
|
||||
gajim.logger.write('gcstatus', self.fjid, st, self.show)
|
||||
show = gajim.logger.convert_show_values_to_db_api_values(self.show)
|
||||
if show is not None:
|
||||
fjid = nbxmpp.JID(self.fjid)
|
||||
gajim.logger.insert_into_logs(fjid.getStripped(),
|
||||
time_time(),
|
||||
KindConstant.GCSTATUS,
|
||||
contact_name=fjid.getResource(),
|
||||
message=st,
|
||||
show=show)
|
||||
if self.avatar_sha == '':
|
||||
# contact has no avatar
|
||||
puny_nick = helpers.sanitize_filename(self.nick)
|
||||
|
|
|
@ -328,7 +328,7 @@ class Logger:
|
|||
self.jids_already_in.append(jid)
|
||||
return jid_id
|
||||
|
||||
def convert_human_values_to_db_api_values(self, kind, show):
|
||||
def convert_kind_values_to_db_api_values(self, kind):
|
||||
"""
|
||||
Convert from string style to constant ints for db
|
||||
"""
|
||||
|
@ -349,25 +349,30 @@ class Logger:
|
|||
elif kind == 'error':
|
||||
kind_col = KindConstant.ERROR
|
||||
|
||||
return kind_col
|
||||
|
||||
def convert_show_values_to_db_api_values(self, show):
|
||||
"""
|
||||
Convert from string style to constant ints for db
|
||||
"""
|
||||
|
||||
if show == 'online':
|
||||
show_col = ShowConstant.ONLINE
|
||||
return ShowConstant.ONLINE
|
||||
elif show == 'chat':
|
||||
show_col = ShowConstant.CHAT
|
||||
return ShowConstant.CHAT
|
||||
elif show == 'away':
|
||||
show_col = ShowConstant.AWAY
|
||||
return ShowConstant.AWAY
|
||||
elif show == 'xa':
|
||||
show_col = ShowConstant.XA
|
||||
return ShowConstant.XA
|
||||
elif show == 'dnd':
|
||||
show_col = ShowConstant.DND
|
||||
return ShowConstant.DND
|
||||
elif show == 'offline':
|
||||
show_col = ShowConstant.OFFLINE
|
||||
return ShowConstant.OFFLINE
|
||||
elif show is None:
|
||||
show_col = None
|
||||
return ShowConstant.ONLINE
|
||||
else: # invisible in GC when someone goes invisible
|
||||
# it's a RFC violation .... but we should not crash
|
||||
show_col = 'UNKNOWN'
|
||||
|
||||
return kind_col, show_col
|
||||
return None
|
||||
|
||||
def convert_human_transport_type_to_db_api_values(self, type_):
|
||||
"""
|
||||
|
@ -552,7 +557,7 @@ class Logger:
|
|||
all_messages.append((results, shown))
|
||||
return all_messages
|
||||
|
||||
def write(self, kind, jid, message=None, show=None, tim=None, subject=None,
|
||||
def write(self, kind, jid, message=None, tim=None, subject=None,
|
||||
additional_data=None, mam_query=False):
|
||||
"""
|
||||
Write a row (status, gcstatus, message etc) to logs database
|
||||
|
@ -583,29 +588,11 @@ class Logger:
|
|||
else:
|
||||
time_col = float(time.time())
|
||||
|
||||
kind_col, show_col = self.convert_human_values_to_db_api_values(kind,
|
||||
show)
|
||||
kind_col = self.convert_kind_values_to_db_api_values(kind)
|
||||
|
||||
write_unread = False
|
||||
try:
|
||||
# now we may have need to do extra care for some values in columns
|
||||
if kind == 'status': # we store (not None) time, jid, show, msg
|
||||
# status for roster items
|
||||
jid_id = self.get_jid_id(jid)
|
||||
if show is None: # show is None (xmpp), but we say that 'online'
|
||||
show_col = ShowConstant.ONLINE
|
||||
|
||||
elif kind == 'gcstatus':
|
||||
# status in ROOM (for pm status see status)
|
||||
if show is None: # show is None (xmpp), but we say that 'online'
|
||||
show_col = ShowConstant.ONLINE
|
||||
jid, nick = jid.split('/', 1)
|
||||
|
||||
# re-get jid_id for the new jid
|
||||
jid_id = self.get_jid_id(jid, 'ROOM')
|
||||
contact_name_col = nick
|
||||
|
||||
elif kind == 'gc_msg':
|
||||
if kind == 'gc_msg':
|
||||
if jid.find('/') != -1: # if it has a /
|
||||
jid, nick = jid.split('/', 1)
|
||||
else:
|
||||
|
@ -624,10 +611,8 @@ class Logger:
|
|||
# Save in unread table only if it's not a pm
|
||||
write_unread = True
|
||||
|
||||
if show_col == 'UNKNOWN': # unknown show, do not log
|
||||
return
|
||||
|
||||
values = (jid_id, contact_name_col, time_col, kind_col, show_col,
|
||||
values = (jid_id, contact_name_col, time_col, kind_col, None,
|
||||
message_col, subject_col, additional_data_col)
|
||||
return self.commit_to_db(values, write_unread)
|
||||
|
||||
|
@ -1181,7 +1166,7 @@ class Logger:
|
|||
|
||||
:param type_: A JIDConstant
|
||||
"""
|
||||
if kind == KindConstant.GC_MSG:
|
||||
if kind in (KindConstant.GC_MSG, KindConstant.GCSTATUS):
|
||||
type_ = JIDConstant.ROOM_TYPE
|
||||
sql = 'INSERT OR IGNORE INTO jids (jid, type) VALUES (?, ?)'
|
||||
self.con.execute(sql, (jid, type_))
|
||||
|
|
Loading…
Reference in New Issue