[misterX] update MAM implementation to V0.3
This commit is contained in:
parent
09bf2fbd64
commit
44dc946d82
|
@ -316,7 +316,6 @@ class Config:
|
||||||
'ignore_incoming_attention': [opt_bool, False, _('If True, Gajim will ignore incoming attention requestd ("wizz").')],
|
'ignore_incoming_attention': [opt_bool, False, _('If True, Gajim will ignore incoming attention requestd ("wizz").')],
|
||||||
'remember_opened_chat_controls': [ opt_bool, True, _('If enabled, Gajim will reopen chat windows that were opened last time Gajim was closed.')],
|
'remember_opened_chat_controls': [ opt_bool, True, _('If enabled, Gajim will reopen chat windows that were opened last time Gajim was closed.')],
|
||||||
'positive_184_ack': [ opt_bool, False, _('If enabled, Gajim will show an icon to show that sent message has been received by your contact')],
|
'positive_184_ack': [ opt_bool, False, _('If enabled, Gajim will show an icon to show that sent message has been received by your contact')],
|
||||||
'last_mam_id': [opt_str, '', _('Last MAM id we are syncronized with')],
|
|
||||||
}, {})
|
}, {})
|
||||||
|
|
||||||
__options_per_key = {
|
__options_per_key = {
|
||||||
|
@ -418,6 +417,7 @@ class Config:
|
||||||
'oauth2_client_id': [ opt_str, '0000000044077801', _('client_id for Oauth2 authentication.')],
|
'oauth2_client_id': [ opt_str, '0000000044077801', _('client_id for Oauth2 authentication.')],
|
||||||
'oauth2_redirect_url': [ opt_str, 'https%3A%2F%2Fgajim.org%2Fmsnauth%2Findex.cgi', _('redirect_url for Oauth2 authentication.')],
|
'oauth2_redirect_url': [ opt_str, 'https%3A%2F%2Fgajim.org%2Fmsnauth%2Findex.cgi', _('redirect_url for Oauth2 authentication.')],
|
||||||
'opened_chat_controls': [opt_str, '', _('Space separated list of JIDs for which we want to re-open a chat window on next startup.')],
|
'opened_chat_controls': [opt_str, '', _('Space separated list of JIDs for which we want to re-open a chat window on next startup.')],
|
||||||
|
'last_mam_id': [opt_str, '', _('Last MAM id we are syncronized with')],
|
||||||
}, {}),
|
}, {}),
|
||||||
'statusmsg': ({
|
'statusmsg': ({
|
||||||
'message': [ opt_str, '' ],
|
'message': [ opt_str, '' ],
|
||||||
|
|
|
@ -27,7 +27,7 @@ docdir = '../'
|
||||||
basedir = '../'
|
basedir = '../'
|
||||||
localedir = '../po'
|
localedir = '../po'
|
||||||
|
|
||||||
version = '0.16'
|
version = '0.16.0.1'
|
||||||
import subprocess
|
import subprocess
|
||||||
try:
|
try:
|
||||||
node = subprocess.Popen('hg tip --template "{node|short}"', shell=True,
|
node = subprocess.Popen('hg tip --template "{node|short}"', shell=True,
|
||||||
|
|
|
@ -41,16 +41,16 @@ class ConnectionArchive313(ConnectionArchive):
|
||||||
ConnectionArchive.__init__(self)
|
ConnectionArchive.__init__(self)
|
||||||
self.archiving_313_supported = False
|
self.archiving_313_supported = False
|
||||||
self.mam_awaiting_disco_result = {}
|
self.mam_awaiting_disco_result = {}
|
||||||
gajim.ged.register_event_handler('raw-iq-received', ged.CORE,
|
gajim.ged.register_event_handler('raw-message-received', ged.CORE,
|
||||||
self._nec_raw_iq_313_received)
|
self._nec_raw_message_313_received)
|
||||||
gajim.ged.register_event_handler('agent-info-error-received', ged.CORE,
|
gajim.ged.register_event_handler('agent-info-error-received', ged.CORE,
|
||||||
self._nec_agent_info_error)
|
self._nec_agent_info_error)
|
||||||
gajim.ged.register_event_handler('agent-info-received', ged.CORE,
|
gajim.ged.register_event_handler('agent-info-received', ged.CORE,
|
||||||
self._nec_agent_info)
|
self._nec_agent_info)
|
||||||
|
|
||||||
def cleanup(self):
|
def cleanup(self):
|
||||||
gajim.ged.remove_event_handler('raw-iq-received', ged.CORE,
|
gajim.ged.remove_event_handler('raw-message-received', ged.CORE,
|
||||||
self._nec_raw_iq_313_received)
|
self._nec_raw_message_313_received)
|
||||||
|
|
||||||
def _nec_agent_info_error(self, obj):
|
def _nec_agent_info_error(self, obj):
|
||||||
if obj.jid in self.mam_awaiting_disco_result:
|
if obj.jid in self.mam_awaiting_disco_result:
|
||||||
|
@ -77,42 +77,49 @@ class ConnectionArchive313(ConnectionArchive):
|
||||||
msg=msg_txt)
|
msg=msg_txt)
|
||||||
del self.mam_awaiting_disco_result[obj.jid]
|
del self.mam_awaiting_disco_result[obj.jid]
|
||||||
|
|
||||||
def _nec_raw_iq_313_received(self, obj):
|
def _nec_raw_message_313_received(self, obj):
|
||||||
if obj.conn.name != self.name:
|
if obj.conn.name != self.name:
|
||||||
return
|
return
|
||||||
|
|
||||||
id_ = obj.stanza.getID()
|
fin_ = obj.stanza.getTag('fin', namespace=nbxmpp.NS_MAM)
|
||||||
if id_ not in self.awaiting_answers:
|
if fin_:
|
||||||
|
queryid_ = fin_.getAttr('queryid')
|
||||||
|
if queryid_ not in self.awaiting_answers:
|
||||||
|
return
|
||||||
|
else:
|
||||||
return
|
return
|
||||||
|
|
||||||
if self.awaiting_answers[id_][0] == MAM_RESULTS_ARRIVED:
|
if self.awaiting_answers[queryid_][0] == MAM_RESULTS_ARRIVED:
|
||||||
query = obj.stanza.getTag('query', namespace=nbxmpp.NS_MAM)
|
set_ = fin_.getTag('set', namespace=nbxmpp.NS_RSM)
|
||||||
if query:
|
if set_:
|
||||||
set_ = query.getTag('set', namespace=nbxmpp.NS_RSM)
|
last = set_.getTagData('last')
|
||||||
if set_:
|
if last:
|
||||||
last = set_.getTagData('last')
|
gajim.config.set_per('accounts', self.name, 'last_mam_id', last)
|
||||||
if last:
|
self.request_archive(after=last)
|
||||||
gajim.config.set('last_mam_id', last)
|
|
||||||
self.request_archive(after=last)
|
del self.awaiting_answers[queryid_]
|
||||||
del self.awaiting_answers[id_]
|
|
||||||
|
|
||||||
def request_archive(self, start=None, end=None, with_=None, after=None,
|
def request_archive(self, start=None, end=None, with_=None, after=None,
|
||||||
max=30):
|
max=30):
|
||||||
iq_ = nbxmpp.Iq('get')
|
iq_ = nbxmpp.Iq('set')
|
||||||
query = iq_.setTag('query', namespace=nbxmpp.NS_MAM)
|
query = iq_.addChild('query', namespace=nbxmpp.NS_MAM)
|
||||||
|
x = query.addChild('x', namespace=nbxmpp.NS_DATA)
|
||||||
|
x.addChild(node=nbxmpp.DataField(typ='hidden', name='FORM_TYPE', value=nbxmpp.NS_MAM))
|
||||||
if start:
|
if start:
|
||||||
query.addChild('start', payload=start)
|
x.addChild(node=nbxmpp.DataField(typ='text-single', name='start', value=start))
|
||||||
if end:
|
if end:
|
||||||
query.addChild('end', payload=end)
|
x.addChild(node=nbxmpp.DataField(typ='text-single', name='end', value=end))
|
||||||
if with_:
|
if with_:
|
||||||
query.addChild('with', payload=with_)
|
x.addChild(node=nbxmpp.DataField(typ='jid-single', name='with', value=with_))
|
||||||
set_ = query.setTag('set', namespace=nbxmpp.NS_RSM)
|
set_ = query.setTag('set', namespace=nbxmpp.NS_RSM)
|
||||||
set_.setTagData('max', max)
|
set_.setTagData('max', max)
|
||||||
if after:
|
if after:
|
||||||
set_.setTagData('after', after)
|
set_.setTagData('after', after)
|
||||||
|
queryid_ = self.connection.getAnID()
|
||||||
|
query.setAttr('queryid', queryid_)
|
||||||
id_ = self.connection.getAnID()
|
id_ = self.connection.getAnID()
|
||||||
iq_.setID(id_)
|
iq_.setID(id_)
|
||||||
self.awaiting_answers[id_] = (MAM_RESULTS_ARRIVED, )
|
self.awaiting_answers[queryid_] = (MAM_RESULTS_ARRIVED, )
|
||||||
self.connection.send(iq_)
|
self.connection.send(iq_)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -215,6 +215,8 @@ class OptionsParser:
|
||||||
self.update_config_to_01401()
|
self.update_config_to_01401()
|
||||||
if old < [0, 14, 90, 0] and new >= [0, 14, 90, 0]:
|
if old < [0, 14, 90, 0] and new >= [0, 14, 90, 0]:
|
||||||
self.update_config_to_014900()
|
self.update_config_to_014900()
|
||||||
|
if old < [0, 16, 0, 1] and new >= [0, 16, 0, 1]:
|
||||||
|
self.update_config_to_01601()
|
||||||
|
|
||||||
gajim.logger.init_vars()
|
gajim.logger.init_vars()
|
||||||
gajim.logger.attach_cache_database()
|
gajim.logger.attach_cache_database()
|
||||||
|
@ -902,3 +904,11 @@ class OptionsParser:
|
||||||
gajim.config.set('use_stun_server', False)
|
gajim.config.set('use_stun_server', False)
|
||||||
if os.name == 'nt':
|
if os.name == 'nt':
|
||||||
gajim.config.set('autodetect_browser_mailer', True)
|
gajim.config.set('autodetect_browser_mailer', True)
|
||||||
|
|
||||||
|
def update_config_to_01601(self):
|
||||||
|
if 'last_mam_id' in self.old_values:
|
||||||
|
last_mam_id = self.old_values['last_mam_id']
|
||||||
|
for account in gajim.config.get_per('accounts'):
|
||||||
|
gajim.config.set_per('accounts', account, 'last_mam_id',
|
||||||
|
last_mam_id)
|
||||||
|
gajim.config.set('version', '0.16.0.1')
|
||||||
|
|
|
@ -69,7 +69,7 @@ if os.name == 'nt':
|
||||||
pass
|
pass
|
||||||
|
|
||||||
HAS_NBXMPP=True
|
HAS_NBXMPP=True
|
||||||
MIN_NBXMPP_VER = "0.5.1"
|
MIN_NBXMPP_VER = "0.5.2"
|
||||||
try:
|
try:
|
||||||
import nbxmpp
|
import nbxmpp
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
|
|
@ -1141,7 +1141,7 @@ class Interface:
|
||||||
gajim.config.set_per('accounts', account, 'last_archiving_time',
|
gajim.config.set_per('accounts', account, 'last_archiving_time',
|
||||||
time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime()))
|
time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime()))
|
||||||
if obj.conn.archiving_313_supported:
|
if obj.conn.archiving_313_supported:
|
||||||
mam_id = gajim.config.get('last_mam_id')
|
mam_id = gajim.config.get_per('accounts', account, 'last_mam_id')
|
||||||
if mam_id:
|
if mam_id:
|
||||||
obj.conn.request_archive(after=mam_id)
|
obj.conn.request_archive(after=mam_id)
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in New Issue