"use strict";
import {XMPPService} from "../XMPPService";
import {XMPPUTils} from "../../common/XMPPUtils";
import {getJsonFromXML, logEntryExit} from "../../common/Utils";
import {GenericHandler} from "./GenericHandler";
import { Core } from "../../Core";
import {ContactsService} from "../../services/ContactsService.js";
import {TaskInput, TasksService} from "../../services/TasksService.js";
export {};
const Utils = require("../../common/Utils");
const xml = require("@xmpp/xml");
const prettydata = require("../pretty-data").pd;
const LOG_ID = "XMPP/HNDL/TASKS - ";
@logEntryExit(LOG_ID)
class TasksEventHandler extends GenericHandler {
public MESSAGE: any;
public MESSAGE_MANAGEMENT: any;
public MESSAGE_ERROR: any;
public MESSAGE_HEADLINE: any;
public IQ_RESULT: any;
public IQ_ERROR: any;
private _core : Core;
public tasksService: TasksService;
public contactsService: ContactsService;
public xmppUtils: XMPPUTils;
static getClassName(){ return 'TasksEventHandler'; }
getClassName(){ return TasksEventHandler.getClassName(); }
static getAccessorName(){ return 'tasksevent'; }
getAccessorName(){ return TasksEventHandler.getAccessorName(); }
constructor(xmppService : XMPPService, core: Core) {
super(xmppService);
let that = this;
this.MESSAGE = "jabber:client.message";
this.IQ_RESULT = "jabber:client.iq.result";
this.IQ_ERROR = "jabber:client.iq.error";
this.MESSAGE_MANAGEMENT = "jabber:client.message.management";
this.MESSAGE_ERROR = "jabber:client.message.error";
this.xmppUtils = XMPPUTils.getXMPPUtils();
this._core = core;
this.contactsService = core.contacts;
}
onIqResultReceived (msg, stanza) {
let that = this;
let children = stanza.children;
children.forEach((node) => {
switch (node.getName()) {
case "default":
//that._logger.log(that.WARN, LOG_ID + "(handleXMPPConnection, onIqResultReceived) not managed - 'stanza'", node.getName());
break;
default:
//that
// .logger
//.log("warn", LOG_ID + "(handleXMPPConnection, onIqResultReceived) child not managed for iq - 'stanza'", node.getName());
}
});
};
onErrorMessageReceived (msg, stanzaTab) {
let that = this;
let stanza = stanzaTab[0];
let prettyStanza = stanzaTab[1];
let jsonStanza = stanzaTab[2];
try {
if (stanza.getChild('no-store') != undefined){
// // Treated in conversation handler that._logger.log(that.ERROR, LOG_ID + "(onErrorMessageReceived) The 'to' of the message can not received the message");
} else {
// that._logger.log(that.ERROR, LOG_ID + "(onErrorMessageReceived) something goes wrong...");
that._logger.log(that.ERROR, LOG_ID + "(onErrorMessageReceived) something goes wrong... : ", msg, "\n", prettyStanza);
that.eventEmitter.emit("evt_internal_xmpperror", msg);
}
} catch (err) {
// that._logger.log(that.ERROR, LOG_ID + "(onErrorMessageReceived) CATCH Error !!! ");
that._logger.log(that.ERROR, LOG_ID + "(onErrorMessageReceived) CATCH Error !!! : ", err);
}
};
async onMessageReceived(msg, stanzaTab) {
let that = this;
let stanza = stanzaTab[0];
let prettyStanza = stanzaTab[1];
let jsonStanza = stanzaTab[2];
return ;
that._logger.log(that.INTERNAL, LOG_ID + "(onMessageReceived) _entering_ : ", msg, stanza.root ? prettydata.xml(stanza.root().toString()):stanza);
try {
let stanzaElem = stanza;
//let that = this;
let xmlNodeStr = stanza ? stanza.toString():"";
let reqObj = await getJsonFromXML(xmlNodeStr);
that._logger.log(that.DEBUG, LOG_ID + "(onMessageReceived) reqObj : ", reqObj);
// Ignore "Offline" message
let delay = stanzaElem.getChild("delay");
if (delay && delay.text()==="Offline Storage") {
return true;
}
let from = stanza.attrs.from;
let to = stanza.attrs.to;
} catch (error) {
// that._logger.log(that.ERROR, LOG_ID + "(onMessageReceived) CATCH Error !!! -- failure -- ");
that._logger.log(that.ERROR, LOG_ID + "(onMessageReceived) CATCH Error !!! -- failure -- : ", error);
//return true;
}
that._logger.log(that.DEBUG, LOG_ID + "(onMessageReceived) _exiting_");
return true;
}
async onManagementMessageReceived(msg, stanzaTab) {
let that = this;
let stanza = stanzaTab[0];
let prettyStanza = stanzaTab[1];
let jsonStanza = stanzaTab[2];
that._logger.log(that.INTERNAL, LOG_ID + "(onManagementMessageReceived) _entering_ : ", msg, prettyStanza);
try {
let children = stanza.children;
children.forEach(function (node) {
switch (node.getName()) {
case "room":
// treated in conversationEventHandler
break;
case "usersettings":
// treated also in conversationEventHandler
// treated also in invitationEventHandler
break;
case "userinvite":
// treated in conversationEventHandler
break;
case "group":
// treated in conversationEventHandler
break;
case "conversation":
// treated in conversationEventHandler
break;
case "mute":
// treated in conversationEventHandler
break;
case "unmute":
// treated in conversationEventHandler
break;
case "file":
// treated in conversationEventHandler
break;
case "thumbnail":
// treated in conversationEventHandler
break;
case "channel-subscription":
case "channel":
// treated in channelEventHandler
break;
case "openinvite":
// treated in invitationEventHandler
break;
case "favorite":
// treated in favoriteEventHandler
break;
case "notification":
// treated in alertEventHandler
break;
case "roomscontainer":
// treated in conversationEventHandler
break;
case "webinar":
// treated in webinarEventHandler
break;
case "poll":
// treated in conversationEventHandler
break;
case "connectorcommand":
// treated in conversationEventHandler
break;
case "connectorconfig":
// treated in conversationEventHandler
break;
case "command_ended":
// treated in conversationEventHandler
break;
case "import_status":
// treated in conversationEventHandler
break;
case "joincompanyinvite":
// treated in invitationEventHandler
break;
case "joincompanyrequest":
// treated in invitationEventHandler
break;
case "logs":
// treated in conversationEventHandler
break;
case "todo":
that.onTodosManagementMessageReceived(stanza);
break;
case "no-store":
// treated in conversationEventHandler
break;
case "userpassword":
// treated in conversationEventHandler
break;
default:
that._logger.log(that.ERROR, LOG_ID + "(onManagementMessageReceived) unmanaged management message node " + node.getName());
break;
}
});
} catch (error) {
// that._logger.log(that.ERROR, LOG_ID + "(onManagementMessageReceived) CATCH Error !!! -- failure -- ");
that._logger.log(that.ERROR, LOG_ID + "(onManagementMessageReceived) CATCH Error !!! -- failure -- : ", error);
//return true;
}
that._logger.log(that.DEBUG, LOG_ID + "(onManagementMessageReceived) _exiting_");
return true;
}
async onTodosManagementMessageReceived(stanza) {
let that = this;
let stanzaElem = stanza;
//let that = this;
let xmlNodeStr = stanza ? stanza.toString():"";
let reqObj = await getJsonFromXML(xmlNodeStr);
that._logger.log(that.DEBUG, LOG_ID + "(onManagementMessageReceived) reqObj : ", reqObj);
/*let from = stanza.attrs.from;
let to = stanza.attrs.to; */
let message = reqObj?.message
if (message) {
let id = message?.todo?.$attrs?.id;
let action = message?.todo?.$attrs?.action; //"create" ;
let position = message?.todo?.$attrs?.position; //"0" ;
let type = message?.todo?.$attrs?.type; //"item" ;
let category = message?.todo?.$attrs?.category; //"high";
let content = message?.todo?.content?._;
let content2 = message?.todo2?.content?._;
let todo = {
id, position, type, category, content
};
if (action==="create") {
that._logger.log(that.DEBUG, LOG_ID + "(onTodosManagementMessageReceived) create id : ", id, ", todo received.");
that._logger.log(that.INTERNAL, LOG_ID + "(onTodosManagementMessageReceived) create id : ", id, ", todo received : ", todo);
that.eventEmitter.emit("evt_internal_hdle_taskcreated", todo);
}
if (action==="delete") {
that._logger.log(that.DEBUG, LOG_ID + "(onTodosManagementMessageReceived) delete id : ", id, ", todo received.");
that._logger.log(that.INTERNAL, LOG_ID + "(onTodosManagementMessageReceived) delete id : ", id, ", todo received : ", todo);
that.eventEmitter.emit("evt_internal_hdle_taskdeleted", todo);
}
if (action==="update") {
that._logger.log(that.DEBUG, LOG_ID + "(onTodosManagementMessageReceived) update id : ", id, ", todo received.");
that._logger.log(that.INTERNAL, LOG_ID + "(onTodosManagementMessageReceived) update id : ", id, ", todo received : ", todo);
that.eventEmitter.emit("evt_internal_hdle_taskupdated", todo);
}
}
}
}
module.exports.TasksEventHandler = TasksEventHandler;
export {TasksEventHandler};