2019-07-11 10:48:52 +02:00
|
|
|
/**
|
|
|
|
* @module converse-mam-views
|
|
|
|
* @description
|
|
|
|
* Views for XEP-0313 Message Archive Management
|
2020-01-26 16:21:20 +01:00
|
|
|
* @copyright 2020, the Converse.js contributors
|
|
|
|
* @license Mozilla Public License (MPLv2)
|
2019-07-11 10:48:52 +02:00
|
|
|
*/
|
2020-10-13 04:32:44 +02:00
|
|
|
import { _converse, api, converse } from "@converse/headless/converse-core";
|
2019-03-15 10:00:08 +01:00
|
|
|
|
|
|
|
|
|
|
|
converse.plugins.add('converse-mam-views', {
|
|
|
|
|
2019-05-22 14:03:13 +02:00
|
|
|
dependencies: ['converse-mam', 'converse-chatview', 'converse-muc-views'],
|
2019-03-15 10:00:08 +01:00
|
|
|
|
2020-07-09 22:44:53 +02:00
|
|
|
initialize () {
|
|
|
|
api.listen.on('chatBoxScrolledUp', async view => {
|
|
|
|
if (view.model.messages.length) {
|
2020-10-13 04:32:44 +02:00
|
|
|
const is_groupchat = view.model.get('type') === _converse.CHATROOMS_TYPE;
|
2020-07-09 22:44:53 +02:00
|
|
|
const oldest_message = view.model.getOldestMessage();
|
|
|
|
if (oldest_message) {
|
2020-10-13 04:32:44 +02:00
|
|
|
const by_jid = is_groupchat ? view.model.get('jid') : _converse.bare_jid;
|
2020-07-09 22:44:53 +02:00
|
|
|
const stanza_id = oldest_message && oldest_message.get(`stanza_id ${by_jid}`);
|
|
|
|
view.addSpinner();
|
|
|
|
if (stanza_id) {
|
|
|
|
await view.model.fetchArchivedMessages({'before': stanza_id});
|
|
|
|
} else {
|
|
|
|
await view.model.fetchArchivedMessages({'end': oldest_message.get('time')});
|
2019-03-15 10:00:08 +01:00
|
|
|
}
|
2020-07-09 22:44:53 +02:00
|
|
|
view.clearSpinner();
|
2020-10-13 05:57:27 +02:00
|
|
|
_converse.router.history.navigate(`#${oldest_message.get('msgid')}`);
|
2019-03-15 10:00:08 +01:00
|
|
|
}
|
2019-05-16 11:41:24 +02:00
|
|
|
}
|
2020-07-09 22:44:53 +02:00
|
|
|
});
|
2019-03-15 10:00:08 +01:00
|
|
|
}
|
|
|
|
});
|