mirror of
https://github.com/YunoHost-Apps/jappix_ynh.git
synced 2024-09-03 19:26:19 +02:00
216 lines
No EOL
5 KiB
JavaScript
216 lines
No EOL
5 KiB
JavaScript
/*
|
|
|
|
Jappix - An open social platform
|
|
Implementation of XEP-0224: Attention
|
|
|
|
-------------------------------------------------
|
|
|
|
License: AGPL
|
|
Author: Valérian Saliou
|
|
|
|
*/
|
|
|
|
// Bundle
|
|
var Attention = (function () {
|
|
|
|
/**
|
|
* Alias of this
|
|
* @private
|
|
*/
|
|
var self = {};
|
|
|
|
|
|
/**
|
|
* Displays attention message
|
|
* @private
|
|
* @param {string} xid
|
|
* @param {string} body
|
|
* @return {undefined}
|
|
*/
|
|
self._display = function(xid, body, mode) {
|
|
|
|
try {
|
|
var name = Name.getBuddy(xid).htmlEnc();
|
|
var hash = hex_md5(xid);
|
|
|
|
// Compute some variables
|
|
var message = Common._e(Common.printf("You requested %s's attention to the conversation", name));
|
|
|
|
if(mode == 'him') {
|
|
message = Common._e(Common.printf("%s requested your attention to the conversation", name));
|
|
}
|
|
|
|
if(body) {
|
|
message += ' (' + body + ')';
|
|
}
|
|
|
|
// Display notification
|
|
Message.display(
|
|
'chat',
|
|
xid,
|
|
hash,
|
|
name,
|
|
message,
|
|
DateUtils.getCompleteTime(),
|
|
DateUtils.getTimeStamp(),
|
|
'system-message',
|
|
true,
|
|
undefined,
|
|
mode
|
|
);
|
|
|
|
// Add a marker to displayed message
|
|
$('#' + hash + ' .content .one-line.system-message:last').addClass('attention-notice');
|
|
} catch(e) {
|
|
Console.error('Attention._display', e);
|
|
}
|
|
|
|
};
|
|
|
|
|
|
/**
|
|
* Sends attention stanza
|
|
* @private
|
|
* @param {string} xid
|
|
* @param {string} body
|
|
* @return {object}
|
|
*/
|
|
self._stanza = function(xid, body) {
|
|
|
|
try {
|
|
var message = new JSJaCMessage();
|
|
message.setType('headline');
|
|
message.setTo(xid);
|
|
|
|
if(body) {
|
|
message.setBody(body);
|
|
}
|
|
|
|
// Attention node
|
|
message.appendNode('attention', {
|
|
'xmlns': NS_URN_ATTENTION
|
|
});
|
|
|
|
con.send(message);
|
|
|
|
return message;
|
|
} catch(e) {
|
|
Console.error('Attention._stanza', e);
|
|
}
|
|
|
|
};
|
|
|
|
|
|
/**
|
|
* Returns whether last attention message exists or not
|
|
* @private
|
|
* @param {string} xid
|
|
* @return {boolean}
|
|
*/
|
|
self._lastExists = function(xid, mode) {
|
|
|
|
var last_exists = false;
|
|
|
|
try {
|
|
var line_sel = $('#' + hex_md5(xid) + ' .content .one-line[data-mode="' + mode + '"]:last');
|
|
last_exists = line_sel.is('.system-message.attention-notice') ? true : false;
|
|
} catch(e) {
|
|
Console.error('Attention._lastExists', e);
|
|
} finally {
|
|
return last_exists;
|
|
}
|
|
|
|
};
|
|
|
|
|
|
/**
|
|
* Return whether entity supports attention notifications
|
|
* @public
|
|
* @param {string} xid
|
|
* @return {boolean}
|
|
*/
|
|
self.hasSupport = function(xid) {
|
|
|
|
var has_support = false;
|
|
|
|
try {
|
|
has_support = true ? $('#' + hex_md5(xid)).attr('data-attention') == 'true' : false;
|
|
} catch(e) {
|
|
Console.error('Attention.hasSupport', e);
|
|
} finally {
|
|
return has_support;
|
|
}
|
|
|
|
};
|
|
|
|
|
|
/**
|
|
* Send an attention message
|
|
* @public
|
|
* @param {string} xid
|
|
* @param {string} body
|
|
* @return {undefined}
|
|
*/
|
|
self.send = function(xid, body) {
|
|
|
|
try {
|
|
var mode = 'me';
|
|
|
|
// Don't send attention message twice
|
|
if(self._lastExists(xid, mode) === false) {
|
|
// Send message stanza
|
|
self._stanza(xid, body);
|
|
|
|
// Display attention notification
|
|
self._display(xid, body, mode);
|
|
} else {
|
|
Console.debug('Attention.send', 'Not sending attention message to: ' + xid + ' because already sent.');
|
|
}
|
|
} catch(e) {
|
|
Console.error('Attention.send', e);
|
|
}
|
|
|
|
};
|
|
|
|
|
|
/**
|
|
* Receive an attention notification
|
|
* @public
|
|
* @param {string} xid
|
|
* @return {undefined}
|
|
*/
|
|
self.receive = function(xid, body) {
|
|
|
|
try {
|
|
var mode = 'him';
|
|
var hash = hex_md5(xid);
|
|
|
|
// Don't receive attention message twice
|
|
if((self._lastExists(xid, mode) === false) && Common.exists('#' + hash)) {
|
|
// Display attention notification
|
|
self._display(xid, body, mode);
|
|
|
|
// Show a notification
|
|
Interface.messageNotify(hash, 'personal');
|
|
Audio.play('catch-attention');
|
|
|
|
Board.quick(
|
|
xid,
|
|
'chat',
|
|
Common._e("Attention to conversation requested."),
|
|
Name.getBuddy(xid)
|
|
);
|
|
}
|
|
} catch(e) {
|
|
Console.error('Attention.receive', e);
|
|
}
|
|
|
|
};
|
|
|
|
|
|
/**
|
|
* Return class scope
|
|
*/
|
|
return self;
|
|
|
|
})(); |