# HG changeset patch # User Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> # Date 1545504162 -3600 # Node ID 07543f7f5e896753c8ddce3da66ad9e36f77d4b4 # Parent c3e2e0c624862c070f1749c5225ef9ba32641f6c Retrieve and change the default MAM prefs. diff --git a/client.js b/client.js --- a/client.js +++ b/client.js @@ -101,6 +101,7 @@ document.addEventListener('DOMContentLoa initPEP(connection); initNickname(connection); initAvatar(connection); + initMAM(connection); } function onDisconnected() diff --git a/index.xhtml b/index.xhtml --- a/index.xhtml +++ b/index.xhtml @@ -139,11 +139,12 @@ Enter your nickname, so people you know </div> <div class="col-sm-8"> <p> -<label>Which messages to store in your archive? <select id="mam-prefs" disabled=""> +<label>Which messages to store in your archive? <select id="mam-default"> <option value="always">All messages</option> <option value="never">No messages</option> <option value="roster">Messages from your contacts only</option> -</select></label><br/> +</select></label> +<img width="24" height="24" id="mam-prefs-spinner" hidden=""/><br/> <table> <tr> <th>Always:</th> @@ -186,6 +187,7 @@ Enter your nickname, so people you know <script src="avatar.js"/> <script src="pep.js"/> <script src="roster.js"/> +<script src="mam.js"/> </body> </html> diff --git a/mam.js b/mam.js new file mode 100644 --- /dev/null +++ b/mam.js @@ -0,0 +1,61 @@ +'use strict'; + +function initMAM(connection) { + const prefs_default = document.getElementById('mam-default'); + const prefs_spinner = document.getElementById('mam-prefs-spinner'); + + const iq = $iq({type: 'get'}) + .c('prefs', {xmlns: NS.mam}); + connection.sendIQ(iq, onMAMPrefs, onMAMPrefsError.bind(null, 'query failed.')); + + function onMAMPrefs(result_iq) + { + const prefs = parseXPath(result_iq, './mam:prefs'); + if (prefs == null) + return onMAMPrefsError('server error.'); + const default_ = prefs.getAttributeNS(null, 'default'); + prefs_default.value = default_; + const always = parseXPath(prefs, './mam:always/mam:jid', XPathResult.ORDERED_NODE_ITERATOR_TYPE); + while (true) { + const item = always.iterateNext(); + if (!item) + break; + const jid = item.textContent; + console.log(jid); + } + const never = parseXPath(prefs, './mam:never/mam:jid', XPathResult.ORDERED_NODE_ITERATOR_TYPE); + while (true) { + const item = never.iterateNext(); + if (!item) + break; + const jid = item.textContent; + console.log(jid); + } + } + + function onMAMPrefsError(string) + { + console.log('Failed to retrieve your message archiving preferences: ' + string); + } + + prefs_default.addEventListener('change', function (evt) { + const value = evt.target.value; + + const iq = $iq({type: 'set'}) + .c('prefs', {xmlns: NS.mam, 'default': prefs_default.value}); + connection.sendIQ(iq, onPrefsSet, onPrefsError); + displaySpinner(prefs_spinner); + }); + + function onPrefsSet(iq) + { + console.log('MAM preferences successfully updated.'); + spinnerOk(prefs_spinner); + } + + function onPrefsError(iq) + { + console.log('Error while changing MAM preferences.'); + spinnerError(prefs_spinner); + } +} diff --git a/util.js b/util.js --- a/util.js +++ b/util.js @@ -9,6 +9,7 @@ const NS = { avatar_metadata: 'urn:xmpp:avatar:metadata', avatar_data: 'urn:xmpp:avatar:data', nickname: 'http://jabber.org/protocol/nick', + mam: 'urn:xmpp:mam:2', }; function nsResolver(prefix) {