]> git.mxchange.org Git - friendica-addons.git/blobdiff - jappixmini/jappix/js/oob.js
jappixmini: include jappix source
[friendica-addons.git] / jappixmini / jappix / js / oob.js
diff --git a/jappixmini/jappix/js/oob.js b/jappixmini/jappix/js/oob.js
new file mode 100644 (file)
index 0000000..7242261
--- /dev/null
@@ -0,0 +1,184 @@
+/*
+
+Jappix - An open social platform
+These are the Out of Band Data JS scripts for Jappix
+
+-------------------------------------------------
+
+License: AGPL
+Author: Vanaryon
+Last revision: 27/08/11
+
+*/
+
+// Sends an OOB request to someone
+function sendOOB(to, type, url, desc) {
+       // IQ stanza?
+       if(type == 'iq') {
+               // Get some values
+               var id = hex_md5(genID() + to + url + desc);
+               to = getHighestResource(to);
+               
+               // IQs cannot be sent to offline users
+               if(!to)
+                       return;
+               
+               // Register the ID
+               setDB('send/url', id, url);
+               setDB('send/desc', id, desc);
+               
+               var aIQ = new JSJaCIQ();
+               aIQ.setTo(fullXID(to));
+               aIQ.setType('set');
+               aIQ.setID(id);
+               
+               // Append the query content
+               var aQuery = aIQ.setQuery(NS_IQOOB);
+               aQuery.appendChild(aIQ.buildNode('url', {'xmlns': NS_IQOOB}, url));
+               aQuery.appendChild(aIQ.buildNode('desc', {'xmlns': NS_IQOOB}, desc));
+               
+               con.send(aIQ);
+       }
+       
+       // Message stanza?
+       else {
+               var aMsg = new JSJaCMessage();
+               aMsg.setTo(bareXID(to));
+               
+               // Append the content
+               aMsg.setBody(desc);
+               var aX = aMsg.appendNode('x', {'xmlns': NS_XOOB});
+               aX.appendChild(aMsg.buildNode('url', {'xmlns': NS_XOOB}, url));
+               
+               con.send(aMsg);
+       }
+       
+       logThis('Sent OOB request to: ' + to + ' (' + desc + ')');
+}
+
+// Handles an OOB request
+function handleOOB(from, id, type, node) {
+       var xid = url = desc = '';
+       
+       // IQ stanza?
+       if(type == 'iq') {
+               xid = fullXID(from);
+               url = $(node).find('url').text();
+               desc = $(node).find('desc').text();
+       }
+       
+       // Message stanza?
+       else {
+               xid = bareXID(from);
+               url = $(node).find('url').text();
+               desc = $(node).find('body').text();
+       }
+       
+       // No desc?
+       if(!desc)
+               desc = url;
+       
+       // Open a new notification
+       if(type && xid && url && desc)
+               newNotification('send', xid, [xid, url, type, id, node], desc, hex_md5(xid + url + desc + id));
+}
+
+// Replies to an OOB request
+function replyOOB(to, id, choice, type, node) {
+       // Not IQ type?
+       if(type != 'iq')
+               return;
+       
+       // New IQ
+       var aIQ = new JSJaCIQ();
+       aIQ.setTo(to);
+       aIQ.setID(id);
+       
+       // OOB request accepted
+       if(choice == 'accept') {
+               aIQ.setType('result');
+               
+               logThis('Accepted file request from: ' + to, 3);
+       }
+       
+       // OOB request rejected
+       else {
+               aIQ.setType('error');
+               
+               // Append stanza content
+               for(var i = 0; i < node.childNodes.length; i++)
+                       aIQ.getNode().appendChild(node.childNodes.item(i).cloneNode(true));
+               
+               // Append error content
+               var aError = aIQ.appendNode('error', {'xmlns': NS_CLIENT, 'code': '406', 'type': 'modify'});
+               aError.appendChild(aIQ.buildNode('not-acceptable', {'xmlns': NS_STANZAS}));
+               
+               logThis('Rejected file request from: ' + to, 3);
+       }
+       
+       con.send(aIQ);
+}
+
+// Wait event for OOB upload
+function waitUploadOOB() {
+       // Append the wait icon
+       $('#page-engine .chat-tools-file:not(.mini) .tooltip-subitem *').hide();
+       $('#page-engine .chat-tools-file:not(.mini) .tooltip-subitem').append('<div class="wait wait-medium"></div>');
+       
+       // Lock the bubble
+       $('#page-engine .chat-tools-file:not(.mini)').addClass('mini');
+}
+
+// Success event for OOB upload
+function handleUploadOOB(responseXML) {
+       // Data selector
+       var dData = $(responseXML).find('jappix');
+       
+       // Get the values
+       var fID = dData.find('id').text();
+       var fURL = dData.find('url').text();
+       var fDesc = dData.find('desc').text();
+       
+       // Get the OOB values
+       var oob_has;
+       
+       // No ID provided?
+       if(!fID)
+               oob_has = ':has(.wait)';
+       else
+               oob_has = ':has(#oob-upload input[value=' + fID + '])';
+       
+       var xid = $('#page-engine .page-engine-chan' + oob_has).attr('data-xid');
+       var oob_type = $('#page-engine .chat-tools-file' + oob_has).attr('data-oob');
+       
+       // Reset the file send tool
+       $('#page-engine .chat-tools-file' + oob_has).removeClass('mini');
+       $('#page-engine .bubble-file' + oob_has).remove();
+       
+       // Not available?
+       if($('#page-engine .chat-tools-file' + oob_has).is(':hidden') && (oob_type == 'iq')) {
+               openThisError(4);
+               
+               // Remove the file we sent
+               if(fURL)
+                       $.get(fURL + '&action=remove');
+       }
+       
+       // Everything okay?
+       else if(fURL && fDesc && !dData.find('error').size()) {
+               // Send the OOB request
+               sendOOB(xid, oob_type, fURL, fDesc);
+               
+               // Notify the sender
+               newNotification('send_pending', xid, [xid, fURL, oob_type, '', ''], fDesc, hex_md5(fURL + fDesc + fID));
+               
+               logThis('File request sent.', 3);
+       }
+       
+       // Upload error?
+       else {
+               openThisError(4);
+               
+               logThis('Error while sending the file: ' + dData.find('error').text(), 1);
+       }
+}