matrix-util.js 3.17 KB
'use strict';

var moment = require('moment');

module.exports = MatrixUtil;

function MatrixUtil(options) {
    if (!options) {
        console.trace('Undefined options');
        process.exit(1);
    }

    this.matrix = options.matrix;
    if (!this.matrix) {
        console.trace("Matrix not set");
        process.exit(1);
    }

    this.logger = options.logger;
    if (!this.logger) {
        console.trace("Logger not set");
        process.exit(1);
    }
}

MatrixUtil.prototype.updateBuddyState = function(jid, state, statusText, resource) {
    if (jid == 'undefined') {return; }

    let logger = this.logger;
    let matrix = this.matrix;

    logger.verbose('Buddy state change', {jid: jid, state: state, statusText: statusText, resource: resource});

    if (!matrix) {
        return;
    }

    if (!matrix.buddies) {
        matrix.buddies = {};
    }

    if (!matrix.buddies[jid]) {
        matrix.buddies[jid] = {resources: {}};
    }

    try {
        matrix.buddies[jid]['resources'][resource] = {
            state: state,
            statusText: statusText,
            lastUpdate: moment().format('YYYY-MM-DD HH:mm:ss')
        }
    }
    catch(e) {
        logger.warn('MatrixUtil: Exception on update resources on matrix', {jid: jid, state: state, statusText: statusText, resource: resource});
    }



    if (resource != 'undefined' && matrix.buddies[jid].resources['undefined']) {
        try {
            delete matrix.buddies[jid].resources['undefined'];
        }
        catch(e) {};
        }
}

MatrixUtil.prototype.isAFriend = function(jid) {
    let matrix = this.matrix;

    if (!matrix) { return false; };
    if (!matrix.buddies) { return false; }
    if (!matrix.buddies[jid]) { return false; }

    return true;
}

MatrixUtil.prototype.isPartnerOffline = function(partner) {
    let matrix = this.matrix;
    let logger = this.logger;

    if (!matrix) { return false; }

    if (!matrix.buddies[partner]) { return false; }
    if (!matrix.buddies[partner].resources) { return false; };

    let resources = matrix.buddies[partner].resources;
    for (let key in resources) {
        if (resources.hasOwnProperty(key)) {
            let resource = resources[key];
            if (resources[key].state == 'online') {
                return false;
            }
        }
    }
    logger.verbose('Offline partner detected: ' + partner);
    return true;
}

MatrixUtil.prototype.updateLastIncoming = function(sender, msg) {
    let matrix = this.matrix;

    if (!matrix) {
        return;
    }

    if (!matrix.buddies) {
        matrix.buddies = {};
    }

    if (!matrix.buddies[sender]) {
        matrix.buddies[sender] = {};
    }

    matrix.buddies[sender].lastIncoming = {
        msg: msg,
        lastUpdate: moment().format('YYYY-MM-DD HH:mm:ss')
    }
}

MatrixUtil.prototype.updateLastOutgoing = function(destination, msg) {
    let matrix = this.matrix;

    if (!matrix) {
        return;
    }

    if (!matrix.buddies) {
        matrix.buddies = {};
    }

    if (!matrix.buddies[destination]) {
        matrix.buddies[destination] = {};
    }

    matrix.buddies[destination].lastOutgoing = {
        msg: msg,
        lastUpdate: moment().format('YYYY-MM-DD HH:mm:ss')
    }
}