UNPKG

podchat

Version:
357 lines (346 loc) 12.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _utility = _interopRequireDefault(require("../../utility/utility")); var _dataFormatters = require("../helpers/dataFormatters"); function MessageQueues(app) { function putInMessagesDeliveryQueue(threadId, messageId) { if (app.sdkParams.messagesDelivery.hasOwnProperty(threadId) && typeof app.sdkParams.messagesDelivery[threadId] === 'number' && !!app.sdkParams.messagesDelivery[threadId]) { if (app.sdkParams.messagesDelivery[threadId] < messageId) { app.sdkParams.messagesDelivery[threadId] = messageId; } } else { app.sdkParams.messagesDelivery[threadId] = messageId; } } function putInMessagesSeenQueue(threadId, messageId) { if (app.sdkParams.messagesSeen.hasOwnProperty(threadId) && typeof app.sdkParams.messagesSeen[threadId] === 'number' && !!app.sdkParams.messagesSeen[threadId]) { if (app.sdkParams.messagesSeen[threadId] < messageId) { app.sdkParams.messagesSeen[threadId] = messageId; } } else { app.sdkParams.messagesSeen[threadId] = messageId; } } /** * Get Chat Wait Queue * * This function checks if cache is enbled on client's * machine, and if it is, retrieves WaitQueue from * cache. Otherwise returns WaitQueue from RAM * After getting failed messages from cache or RAM * we should check them with server to be sure if * they have been sent already or not? * * @access private * * @return {array} An array of messages on Wait Queue */ function getChatWaitQueue(threadId, active, callback) { callback && callback([]); // if (active && threadId > 0) { // var uniqueIds = [], // queueToBeSent = []; // // for (var i = 0; i < chatWaitQueue.length; i++) { // if (chatWaitQueue[i].subjectId == threadId) { // queueToBeSent.push(chatWaitQueue[i]); // uniqueIds.push(chatWaitQueue[i].uniqueId); // } // } // // if (uniqueIds.length) { // app.messenger.sendMessage({ // chatMessageVOType: chatMessageVOTypes.GET_HISTORY, // content: { // uniqueIds: uniqueIds // }, // subjectId: threadId // }, { // onResult: function (result) { // if (!result.hasError) { // var messageContent = result.result; // // for (var i = 0; i < messageContent.length; i++) { // for (var j = 0; j < uniqueIds.length; j++) { // if (uniqueIds[j] === messageContent[i].uniqueId) { // uniqueIds.splice(j, 1); // queueToBeSent.splice(j, 1); // } // } // } // } // } // }); // callback && callback([]); // } else { // callback && callback([]); // } // } else { // callback && callback([]); // } } /** * Get Chat Upload Queue * * This function checks if cache is enabled on client's * machine, and if it is, retrieves uploadQueue from * cache. Otherwise returns uploadQueue from RAM * * @access private * * @return {array} An array of messages on uploadQueue */ function getChatUploadQueue(threadId, callback) { var uploadQ = []; for (var i = 0; i < app.store.chatUploadQueue.length; i++) { if (parseInt(app.store.chatUploadQueue[i].message.subjectId) === threadId) { uploadQ.push(app.store.chatUploadQueue[i]); } } callback && callback(uploadQ); } /** * Delete an Item from Chat Send Queue * * This function gets an item and deletes it * from Chat Send Queue * * @access private * * @return {undefined} */ function deleteFromChatSentQueue(item, callback) { for (var i = 0; i < app.store.chatSendQueue.length; i++) { if (app.store.chatSendQueue[i].message.uniqueId === item.message.uniqueId) { app.store.chatSendQueue.splice(i, 1); } } callback && callback(); } /** * Delete an Item from Chat Wait Queue * * This function gets an item and deletes it * from Chat Wait Queue, from either cached * queue or the queue on RAM memory * * @access private * * @return {undefined} */ function deleteFromChatWaitQueue(item, callback) { for (var i = 0; i < app.store.chatWaitQueue.length; i++) { if (app.store.chatWaitQueue[i].uniqueId === item.uniqueId) { app.store.chatWaitQueue.splice(i, 1); } } callback && callback(); } /** * Delete an Item from Chat Upload Queue * * This function gets an item and deletes it * from Chat Upload Queue * * @access private * * @return {undefined} */ function deleteFromChatUploadQueue(item, callback) { for (var i = 0; i < app.store.chatUploadQueue.length; i++) { if (app.store.chatUploadQueue[i].message.uniqueId === item.message.uniqueId) { app.store.chatUploadQueue.splice(i, 1); } } callback && callback(); } function deleteThreadFailedMessagesFromWaitQueue(threadId, callback) { for (var i = 0; i < app.store.chatWaitQueue.length; i++) { if (app.store.chatWaitQueue[i].uniqueId === item.uniqueId) { app.store.chatWaitQueue.splice(i, 1); } } callback && callback(); } /** * Push Message Into Send Queue * * This functions takes a message and puts it * into chat's send queue * * @access private * * @param {object} params The Message and its callbacks to be enqueued * * @return {undefined} */ function putInChatSendQueue(params, callback, skip) { app.store.chatSendQueue.push(params); if (!skip) { var time = new Date().getTime(); params.message.time = time; params.message.timeNanos = time % 1000 * 1000000; putInChatWaitQueue(params.message, function () { callback && callback(); }); } else { callback && callback(); } } /** * Put an Item inside Chat Wait Queue * * This function takes an item and puts it * inside Chat Wait Queue, either on cached * wait queue or the wait queue on RAM memory * * @access private * * @return {undefined} */ function putInChatWaitQueue(item, callback) { if (item.uniqueId !== '') { var waitQueueUniqueId = typeof item.uniqueId == 'string' ? item.uniqueId : Array.isArray(item.uniqueId) ? item.uniqueId[0] : null; if (waitQueueUniqueId != null) { app.sdkParams.consoleLogging && console.log('Forced to use in memory cache'); item.uniqueId = waitQueueUniqueId; app.store.chatWaitQueue.push(item); callback && callback(); } } } function getItemFromChatWaitQueue(uniqueId, callback) { for (var i = 0; i < app.store.chatWaitQueue.length; i++) { if (app.store.chatWaitQueue[i].uniqueId === uniqueId) { var decryptedEnqueuedMessage = app.store.chatWaitQueue[i]; var time = new Date().getTime(); var message = (0, _dataFormatters.formatDataToMakeMessage)(decryptedEnqueuedMessage.threadId, { uniqueId: decryptedEnqueuedMessage.uniqueId, ownerId: app.store.user.get().id, message: decryptedEnqueuedMessage.content, metadata: decryptedEnqueuedMessage.metadata, systemMetadata: decryptedEnqueuedMessage.systemMetadata, replyInfo: decryptedEnqueuedMessage.replyInfo, forwardInfo: decryptedEnqueuedMessage.forwardInfo, participant: app.store.user.get(), time: time, timeNanos: time % 1000 * 1000000 }); callback && callback(message); break; } } } /** * Put an Item inside Chat Upload Queue * * This function takes an item and puts it * inside Chat upload Queue * * @access private * * @return {undefined} */ function putInChatUploadQueue(params, callback) { app.store.chatUploadQueue.push(params); callback && callback(); } /** * Transfer an Item from uploadQueue to sendQueue * * This function takes an uniqueId, finds that item * inside uploadQ. takes it's uploaded metadata and * attaches them to the message. Finally removes item * from uploadQueue and pushes it inside sendQueue * * @access private * * @return {undefined} */ function transferFromUploadQToSendQ(threadId, uniqueId, metadata, callback) { app.messageQueues.getChatUploadQueue(threadId, function (uploadQueue) { for (var i = 0; i < uploadQueue.length; i++) { if (uploadQueue[i].message.uniqueId == uniqueId) { try { var message = uploadQueue[i].message, callbacks = uploadQueue[i].callbacks; var oldMetadata = JSON.parse(message.metadata), newMetadata = JSON.parse(metadata); var finalMetaData = _utility["default"].objectDeepMerger(newMetadata, oldMetadata); if (message && (0, _typeof2["default"])(message.content) === 'object' && typeof message.content.message !== 'undefined') { message.content.message['metadata'] = JSON.stringify(finalMetaData); } if (message && (0, _typeof2["default"])(message.content) === 'object' && typeof message.content.metadata !== 'undefined') { message.content['metadata'] = JSON.stringify(finalMetaData); } if (message.chatMessageVOType == 21) { app.fileMethods.getImageDownloadLinkFromPodspace({ hashCode: finalMetaData.fileHash }, function (result) { if (!result.hasError) { message.content.image = result.downloadUrl; } }); } message.metadata = JSON.stringify(finalMetaData); } catch (e) { console.log(e); } app.messageQueues.deleteFromChatUploadQueue(uploadQueue[i], function () { putInChatSendQueue({ message: message, callbacks: callbacks }, function () { callback && callback(); }); }); break; } } }); } /** * Get Chat Send Queue * * This function returns chat send queue * * @access private * * @return {array} An array of messages on sendQueue */ function getChatSendQueue(threadId, callback) { if (threadId) { var tempSendQueue = []; for (var i = 0; i < app.store.chatSendQueue.length; i++) { if (app.store.chatSendQueue[i].threadId === threadId) { tempSendQueue.push(app.store.chatSendQueue[i]); } } callback && callback(tempSendQueue); } else { callback && callback(app.store.chatSendQueue); } } return { putInMessagesDeliveryQueue: putInMessagesDeliveryQueue, putInMessagesSeenQueue: putInMessagesSeenQueue, putInChatSendQueue: putInChatSendQueue, putInChatUploadQueue: putInChatUploadQueue, getChatWaitQueue: getChatWaitQueue, deleteFromChatUploadQueue: deleteFromChatUploadQueue, deleteFromChatSentQueue: deleteFromChatSentQueue, deleteFromChatWaitQueue: deleteFromChatWaitQueue, deleteThreadFailedMessagesFromWaitQueue: deleteThreadFailedMessagesFromWaitQueue, getChatUploadQueue: getChatUploadQueue, getChatSendQueue: getChatSendQueue, getItemFromChatWaitQueue: getItemFromChatWaitQueue, transferFromUploadQToSendQ: transferFromUploadQToSendQ }; } var _default = MessageQueues; exports["default"] = _default;