diff --git a/adaptor-xmpp.js b/adaptor-xmpp.js index bbc113c..4b3b3ee 100644 --- a/adaptor-xmpp.js +++ b/adaptor-xmpp.js @@ -65,7 +65,7 @@ function onBuddy(jid, state, statusText, resource) { matrixUtil.updateBuddyState(jid, state, statusText, resource); } -function isPartnerOffline(partner) { +function _isPartnerOffline(partner) { if (!matrix) { return false; } if (!isAFriend(partner)) { @@ -89,6 +89,14 @@ function isPartnerOffline(partner) { return true; } +function isPartnerOffline(partner) { + if (!matrixUtil.isAFriend(partner)) { + addFriend(partner); + } + + return matrixUtil.isPartnerOffline(partner); +} + function init(_username, _password, _logger, _callbacks) { username = _username; password = _password; @@ -159,11 +167,7 @@ function addFriend(friend) { } function isAFriend(jid) { - if (!matrix) { return false; }; - if (!matrix.buddies) { return false; } - if (!matrix.buddies[jid]) { return false; } - - return true; + return matrixUtil.isAFriend(jid); } exports.init = init; diff --git a/matrix-util.js b/matrix-util.js index d0b2264..d87c3a8 100644 --- a/matrix-util.js +++ b/matrix-util.js @@ -54,3 +54,35 @@ MatrixUtil.prototype.updateBuddyState = function(jid, state, statusText, resourc catch(e) {}; } } + +MatrixUtil.prototype.isAFriend = function(jid) { + var 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) { + var matrix = this.matrix; + var logger = this.logger; + + if (!matrix) { return false; } + + if (!matrix.buddies[partner]) { return false; } + if (!matrix.buddies[partner].resources) { return false; }; + + var resources = matrix.buddies[partner].resources; + for (var key in resources) { + if (resources.hasOwnProperty(key)) { + var resource = resources[key]; + if (resources[key].state == 'online') { + return false; + } + } + } + logger.verbose('Offline partner detected: ' + partner); + return true; +}