comparison mam.js @ 20:46660687924b

Also set and get always and never lists from MAM prefs.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Sat, 22 Dec 2018 20:12:19 +0100
parents 3c02cbced2df
children 6c620e9f7d2c
comparison
equal deleted inserted replaced
19:bde4f0bbfe69 20:46660687924b
1 'use strict'; 1 'use strict';
2 2
3 function initMAM(connection) { 3 function initMAM(connection) {
4 const prefs_default = document.getElementById('mam-default'); 4 const prefs_default = document.getElementById('mam-prefs-default');
5 const prefs_always = document.getElementById('mam-prefs-always');
6 const prefs_never = document.getElementById('mam-prefs-never');
5 const prefs_spinner = document.getElementById('mam-prefs-spinner'); 7 const prefs_spinner = document.getElementById('mam-prefs-spinner');
6 8
7 const iq = $iq({type: 'get'}) 9 const iq = $iq({type: 'get'})
8 .c('prefs', {xmlns: NS.mam}); 10 .c('prefs', {xmlns: NS.mam});
9 connection.sendIQ(iq, onMAMPrefs, onMAMPrefsError.bind(null, 'query failed.')); 11 connection.sendIQ(iq, onMAMPrefs, onMAMPrefsError.bind(null, 'query failed.'));
17 const default_ = prefs.getAttributeNS(null, 'default'); 19 const default_ = prefs.getAttributeNS(null, 'default');
18 prefs_default.value = default_; 20 prefs_default.value = default_;
19 prefs_default.disabled = false; 21 prefs_default.disabled = false;
20 hideSpinner(prefs_spinner); 22 hideSpinner(prefs_spinner);
21 const always = parseXPath(prefs, './mam:always/mam:jid', XPathResult.ORDERED_NODE_ITERATOR_TYPE); 23 const always = parseXPath(prefs, './mam:always/mam:jid', XPathResult.ORDERED_NODE_ITERATOR_TYPE);
24 const always_array = [];
22 while (true) { 25 while (true) {
23 const item = always.iterateNext(); 26 const item = always.iterateNext();
24 if (!item) 27 if (!item)
25 break; 28 break;
26 const jid = item.textContent; 29 const jid = item.textContent;
27 console.log(jid); 30 always_array.push(jid);
28 } 31 }
32 prefs_always.value = always_array.join('\n');
29 const never = parseXPath(prefs, './mam:never/mam:jid', XPathResult.ORDERED_NODE_ITERATOR_TYPE); 33 const never = parseXPath(prefs, './mam:never/mam:jid', XPathResult.ORDERED_NODE_ITERATOR_TYPE);
34 const never_array = [];
30 while (true) { 35 while (true) {
31 const item = never.iterateNext(); 36 const item = never.iterateNext();
32 if (!item) 37 if (!item)
33 break; 38 break;
34 const jid = item.textContent; 39 const jid = item.textContent;
35 console.log(jid); 40 never_array.push(jid);
36 } 41 }
42 prefs_never.value = never_array.join('\n');
37 } 43 }
38 44
39 function onMAMPrefsError(string) 45 function onMAMPrefsError(string)
40 { 46 {
41 console.log('Failed to retrieve your message archiving preferences: ' + string); 47 console.log('Failed to retrieve your message archiving preferences: ' + string);
42 spinnerError(prefs_spinner); 48 spinnerError(prefs_spinner);
43 } 49 }
44 50
45 prefs_default.addEventListener('change', function (evt) { 51 function submitPrefs(evt) {
46 const value = evt.target.value;
47
48 const iq = $iq({type: 'set'}) 52 const iq = $iq({type: 'set'})
49 .c('prefs', {xmlns: NS.mam, 'default': prefs_default.value}); 53 .c('prefs', {xmlns: NS.mam, 'default': prefs_default.value})
54 .c('always');
55 const always_array = prefs_always.value.split('\n');
56 for (let line of always_array) {
57 iq.c('jid').t(line).up();
58 }
59 iq.up().c('never');
60 const never_array = prefs_never.value.split('\n');
61 for (let line of never_array) {
62 iq.c('jid').t(line).up();
63 }
50 connection.sendIQ(iq, onPrefsSet, onPrefsError); 64 connection.sendIQ(iq, onPrefsSet, onPrefsError);
51 displaySpinner(prefs_spinner); 65 displaySpinner(prefs_spinner);
52 }); 66 }
67
68 prefs_default.addEventListener('change', submitPrefs);
69 prefs_always.addEventListener('blur', submitPrefs);
70 prefs_never.addEventListener('blur', submitPrefs);
53 71
54 function onPrefsSet(iq) 72 function onPrefsSet(iq)
55 { 73 {
56 console.log('MAM preferences successfully updated.'); 74 console.log('MAM preferences successfully updated.');
57 spinnerOk(prefs_spinner); 75 spinnerOk(prefs_spinner);