mirror of
https://git.friendi.ca/friendica/friendica-addons.git
synced 2025-07-07 08:58:49 +00:00
jappixmini: include jappix source
This commit is contained in:
parent
61eb1f0d18
commit
302b2820d1
231 changed files with 96082 additions and 2 deletions
205
jappixmini/jappix/js/avatar.js
Normal file
205
jappixmini/jappix/js/avatar.js
Normal file
|
@ -0,0 +1,205 @@
|
|||
/*
|
||||
|
||||
Jappix - An open social platform
|
||||
These are the avatar JS scripts for Jappix
|
||||
|
||||
-------------------------------------------------
|
||||
|
||||
License: AGPL
|
||||
Author: Vanaryon
|
||||
Last revision: 01/03/11
|
||||
|
||||
*/
|
||||
|
||||
// Requests the avatar of a given user
|
||||
var AVATAR_PENDING = [];
|
||||
|
||||
function getAvatar(xid, mode, enabled, photo) {
|
||||
/* REF: http://xmpp.org/extensions/xep-0153.html */
|
||||
|
||||
// No need to get the avatar, another process is yet running
|
||||
if(existArrayValue(AVATAR_PENDING, xid))
|
||||
return false;
|
||||
|
||||
// Initialize: XML data is in one SQL entry, because some browser are sloooow with SQL requests
|
||||
var xml = XMLFromString(getPersistent('avatar', xid));
|
||||
var forced = false;
|
||||
|
||||
// Retrieving forced?
|
||||
if($(xml).find('forced').text() == 'true')
|
||||
forced = true;
|
||||
|
||||
// No avatar in presence
|
||||
if(!photo && !forced && (enabled == 'true')) {
|
||||
// Pending marker
|
||||
AVATAR_PENDING.push(xid);
|
||||
|
||||
// Reset the avatar
|
||||
resetAvatar(xid, hex_md5(xid));
|
||||
|
||||
logThis('No avatar for: ' + xid, 2);
|
||||
}
|
||||
|
||||
// Try to catch the avatar
|
||||
else {
|
||||
// Define some stuffs
|
||||
var type = $(xml).find('type').text();
|
||||
var binval = $(xml).find('binval').text();
|
||||
var checksum = $(xml).find('checksum').text();
|
||||
var updated = false;
|
||||
|
||||
// Process the checksum of the avatar
|
||||
if((checksum == photo) || (photo == 'forget') || forced)
|
||||
updated = true;
|
||||
|
||||
// If the avatar is yet stored and a new retrieving is not needed
|
||||
if((mode == 'cache') && type && binval && checksum && updated) {
|
||||
// Pending marker
|
||||
AVATAR_PENDING.push(xid);
|
||||
|
||||
// Display the cache avatar
|
||||
displayAvatar(xid, hex_md5(xid), type, binval);
|
||||
|
||||
logThis('Read avatar from cache: ' + xid, 3);
|
||||
}
|
||||
|
||||
// Else if the request has not yet been fired, we get it
|
||||
else if((!updated || (mode == 'cache' && !updated) || (mode == 'force') || (photo = 'forget')) && (enabled != 'false')) {
|
||||
// Pending marker
|
||||
AVATAR_PENDING.push(xid);
|
||||
|
||||
// Get the latest avatar
|
||||
var iq = new JSJaCIQ();
|
||||
iq.setType('get');
|
||||
iq.setTo(xid);
|
||||
|
||||
iq.appendNode('vCard', {'xmlns': NS_VCARD});
|
||||
|
||||
con.send(iq, handleAvatar);
|
||||
|
||||
logThis('Get avatar from server: ' + xid, 3);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Handles the avatar
|
||||
function handleAvatar(iq) {
|
||||
// Extract the XML values
|
||||
var handleXML = iq.getNode();
|
||||
var handleFrom = fullXID(getStanzaFrom(iq));
|
||||
|
||||
// Is this me? Remove the resource!
|
||||
if(bareXID(handleFrom) == getXID())
|
||||
handleFrom = bareXID(handleFrom);
|
||||
|
||||
// Get some other values
|
||||
var hash = hex_md5(handleFrom);
|
||||
var find = $(handleXML).find('vCard');
|
||||
var aChecksum = 'none';
|
||||
var oChecksum = null;
|
||||
|
||||
// Read our own checksum
|
||||
if(handleFrom == getXID()) {
|
||||
oChecksum = getDB('checksum', 1);
|
||||
|
||||
// Avoid the "null" value
|
||||
if(!oChecksum)
|
||||
oChecksum = '';
|
||||
}
|
||||
|
||||
// vCard not empty?
|
||||
if(find.size()) {
|
||||
// We get our profile details
|
||||
if(handleFrom == getXID()) {
|
||||
// Get the names
|
||||
var names = generateBuddyName(iq);
|
||||
|
||||
// Write the values to the database
|
||||
setDB('profile', 'name', names[0]);
|
||||
setDB('profile', 'nick', names[1]);
|
||||
}
|
||||
|
||||
// We get the avatar
|
||||
var aType = find.find('TYPE:first').text();
|
||||
var aBinval = find.find('BINVAL:first').text();
|
||||
|
||||
// No binval?
|
||||
if(!aBinval) {
|
||||
aType = 'none';
|
||||
aBinval = 'none';
|
||||
}
|
||||
|
||||
// Enough data
|
||||
else {
|
||||
// No type?
|
||||
if(!aType)
|
||||
aType = 'image/png';
|
||||
|
||||
// Process the checksum
|
||||
else
|
||||
aChecksum = hex_sha1(Base64.decode(aBinval));
|
||||
}
|
||||
|
||||
// We display the user avatar
|
||||
displayAvatar(handleFrom, hash, aType, aBinval);
|
||||
|
||||
// Store the avatar
|
||||
setPersistent('avatar', handleFrom, '<avatar><type>' + aType + '</type><binval>' + aBinval + '</binval><checksum>' + aChecksum + '</checksum><forced>false</forced></avatar>');
|
||||
|
||||
logThis('Avatar retrieved from server: ' + handleFrom, 3);
|
||||
}
|
||||
|
||||
// vCard is empty
|
||||
else
|
||||
resetAvatar(handleFrom);
|
||||
|
||||
// We got a new checksum for us?
|
||||
if(((oChecksum != null) && (oChecksum != aChecksum)) || !FIRST_PRESENCE_SENT) {
|
||||
// Define a proper checksum
|
||||
var pChecksum = aChecksum;
|
||||
|
||||
if(pChecksum == 'none')
|
||||
pChecksum = '';
|
||||
|
||||
// Update our temp. checksum
|
||||
setDB('checksum', 1, pChecksum);
|
||||
|
||||
// Send the stanza
|
||||
if(FIRST_PRESENCE_SENT)
|
||||
presenceSend(pChecksum);
|
||||
else
|
||||
getStorage(NS_OPTIONS);
|
||||
}
|
||||
}
|
||||
|
||||
// Reset the avatar of an user
|
||||
function resetAvatar(xid, hash) {
|
||||
// Store the empty avatar
|
||||
setPersistent('avatar', xid, '<avatar><type>none</type><binval>none</binval><checksum>none</checksum><forced>false</forced></avatar>');
|
||||
|
||||
// Display the empty avatar
|
||||
displayAvatar(xid, hash, 'none', 'none');
|
||||
}
|
||||
|
||||
// Displays the avatar of an user
|
||||
function displayAvatar(xid, hash, type, binval) {
|
||||
// Initialize the vars
|
||||
var container = hash + ' .avatar-container';
|
||||
var code = '<img class="avatar" src="';
|
||||
|
||||
// If the avatar exists
|
||||
if((type != 'none') && (binval != 'none'))
|
||||
code += 'data:' + type + ';base64,' + binval;
|
||||
else
|
||||
code += './img/others/default-avatar.png';
|
||||
|
||||
code += '" alt="" />';
|
||||
|
||||
// Replace with the new avatar (in the roster and in the chat)
|
||||
$('.' + container).html(code);
|
||||
|
||||
// We can remove the pending marker
|
||||
removeArrayValue(AVATAR_PENDING, xid);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue