mirror of
https://github.com/YunoHost-Apps/jappix_ynh.git
synced 2024-09-03 19:26:19 +02:00
195 lines
No EOL
5.9 KiB
JavaScript
195 lines
No EOL
5.9 KiB
JavaScript
/*
|
|
|
|
Jappix - An open social platform
|
|
These are the storage JS scripts for Jappix
|
|
|
|
-------------------------------------------------
|
|
|
|
License: AGPL
|
|
Author: Valérian Saliou
|
|
|
|
*/
|
|
|
|
// Bundle
|
|
var Storage = (function () {
|
|
|
|
/**
|
|
* Alias of this
|
|
* @private
|
|
*/
|
|
var self = {};
|
|
|
|
|
|
/**
|
|
* Gets the storage items of the user
|
|
* @public
|
|
* @param {string} type
|
|
* @return {undefined}
|
|
*/
|
|
self.get = function(type) {
|
|
|
|
/* REF: http://xmpp.org/extensions/xep-0049.html */
|
|
|
|
try {
|
|
var iq = new JSJaCIQ();
|
|
iq.setType('get');
|
|
|
|
var iqQuery = iq.setQuery(NS_PRIVATE);
|
|
iqQuery.appendChild(iq.buildNode('storage', {'xmlns': type}));
|
|
|
|
con.send(iq, self.handle);
|
|
} catch(e) {
|
|
Console.error('Storage.get', e);
|
|
}
|
|
|
|
};
|
|
|
|
|
|
/**
|
|
* Handles the storage items
|
|
* @public
|
|
* @param {object} iq
|
|
* @return {undefined}
|
|
*/
|
|
self.handle = function(iq) {
|
|
|
|
try {
|
|
var handleXML = iq.getQuery();
|
|
var handleFrom = Common.fullXID(Common.getStanzaFrom(iq));
|
|
|
|
// Define some vars
|
|
var options = $(handleXML).find('storage[xmlns="' + NS_OPTIONS + '"]');
|
|
var inbox = $(handleXML).find('storage[xmlns="' + NS_INBOX + '"]');
|
|
var bookmarks = $(handleXML).find('storage[xmlns="' + NS_BOOKMARKS + '"]');
|
|
var rosternotes = $(handleXML).find('storage[xmlns="' + NS_ROSTERNOTES + '"]');
|
|
|
|
// No options and node not yet configured
|
|
if(options.size() && !options.find('option').size() && (iq.getType() != 'error')) {
|
|
Welcome.open();
|
|
}
|
|
|
|
// Parse the options xml
|
|
options.find('option').each(function() {
|
|
var this_sel = $(this);
|
|
|
|
// We retrieve the informations
|
|
var type = this_sel.attr('type');
|
|
var value = this_sel.text();
|
|
|
|
// We display the storage
|
|
DataStore.setDB(Connection.desktop_hash, 'options', type, value);
|
|
|
|
// If this is the buddy list show status
|
|
if((type == 'roster-showall') && (value == '1')) {
|
|
Interface.showAllBuddies('storage');
|
|
}
|
|
});
|
|
|
|
// Parse the inbox xml
|
|
inbox.find('message').each(function() {
|
|
var this_sel = $(this);
|
|
|
|
Inbox.storeMessage(
|
|
this_sel.attr('from'),
|
|
this_sel.attr('subject'),
|
|
this_sel.text(),
|
|
this_sel.attr('status'),
|
|
this_sel.attr('id'),
|
|
this_sel.attr('date'),
|
|
[
|
|
this_sel.attr('file_title'),
|
|
this_sel.attr('file_href'),
|
|
this_sel.attr('file_type'),
|
|
this_sel.attr('file_length')
|
|
]
|
|
);
|
|
});
|
|
|
|
// Parse the bookmarks xml
|
|
bookmarks.find('conference').each(function() {
|
|
var this_sel = $(this);
|
|
|
|
// We retrieve the informations
|
|
var xid = this_sel.attr('jid');
|
|
var name = this_sel.attr('name');
|
|
var autojoin = this_sel.attr('autojoin');
|
|
var password = this_sel.find('password').text();
|
|
var nick = this_sel.find('nick').text();
|
|
|
|
// Filter autojoin (compatibility)
|
|
autojoin = ((autojoin == 'true') || (autojoin == '1')) ? 'true' : 'false';
|
|
|
|
// We display the storage
|
|
Favorites.display(xid, name, nick, autojoin, password);
|
|
|
|
// Join the chat if autojoin is enabled
|
|
if(autojoin == 'true') {
|
|
Chat.checkCreate(xid, 'groupchat', nick, password, name);
|
|
}
|
|
});
|
|
|
|
// Parse the roster notes xml
|
|
rosternotes.find('note').each(function() {
|
|
var this_sel = $(this);
|
|
|
|
DataStore.setDB(
|
|
Connection.desktop_hash,
|
|
'rosternotes',
|
|
this_sel.attr('jid'),
|
|
this_sel.text()
|
|
);
|
|
});
|
|
|
|
// Options received
|
|
if(options.size()) {
|
|
Console.log('Options received.');
|
|
|
|
// Now, get the inbox
|
|
self.get(NS_INBOX);
|
|
|
|
// Geolocate the user
|
|
PEP.geolocate();
|
|
|
|
$('.options-hidable').show();
|
|
}
|
|
|
|
// Inbox received
|
|
else if(inbox.size()) {
|
|
Console.log('Inbox received.');
|
|
|
|
// Send the first presence!
|
|
Presence.sendFirst(DataStore.getDB(Connection.desktop_hash, 'checksum', 1));
|
|
|
|
// Check we have new messages (play a sound if any unread messages)
|
|
if(Inbox.checkMessages()) {
|
|
Audio.play('notification');
|
|
}
|
|
|
|
$('.inbox-hidable').show();
|
|
}
|
|
|
|
// Bookmarks received
|
|
else if(bookmarks.size()) {
|
|
// Join the groupchats the admin defined (if any)
|
|
Groupchat.joinConf();
|
|
|
|
Console.log('Bookmarks received.');
|
|
}
|
|
|
|
// Roster notes received (for logger)
|
|
else if(rosternotes.size()) {
|
|
Console.log('Roster notes received.');
|
|
}
|
|
} catch(e) {
|
|
Console.error('Storage.handle', e);
|
|
}
|
|
|
|
};
|
|
|
|
|
|
/**
|
|
* Return class scope
|
|
*/
|
|
return self;
|
|
|
|
})(); |