diff --git a/lib/imap.js b/lib/imap.js index 2f7cbc3..ebec556 100644 --- a/lib/imap.js +++ b/lib/imap.js @@ -95,7 +95,7 @@ ImapConnection.prototype.connect = function(loginCb) { return; } // Next, get the list of available namespaces if supported (RFC2342) - if (!reentry && self.capabilities.indexOf('NAMESPACE') > -1) { + if (!reentry && self._supports('NAMESPACE')) { var fnMe = arguments.callee; // Re-enter this function after we've obtained the available // namespaces @@ -513,8 +513,7 @@ ImapConnection.prototype.connect = function(loginCb) { self._state.requests.shift(); if (self._state.requests.length === 0 && recentCmd !== 'LOGOUT') { - if (self._state.status === STATES.BOXSELECTED && - self.capabilities.indexOf('IDLE') > -1) { + if (self._state.status === STATES.BOXSELECTED && self._supports('IDLE')) { // According to RFC 2177, we should re-IDLE at least every 29 // minutes to avoid disconnection by the server self._send('IDLE', undefined, true); @@ -525,7 +524,7 @@ ImapConnection.prototype.connect = function(loginCb) { self._state.ext.idle.timeWaited += self._state.tmoKeepalive; if (self._state.ext.idle.timeWaited >= self._state.ext.idle.MAX_WAIT) self._send('IDLE', undefined, true); // restart IDLE - } else if (self.capabilities.indexOf('IDLE') === -1) + } else if (!self._supports('IDLE')) self._noop(); } }, self._state.tmoKeepalive); @@ -602,7 +601,7 @@ ImapConnection.prototype.getBoxes = function(namespace, cb) { cb = arguments[arguments.length - 1]; if (arguments.length !== 2) namespace = ''; - this._send(((this.capabilities.indexOf('XLIST') == -1) ? 'LIST' : 'XLIST') + this._send((!this._supports('XLIST') ? 'LIST' : 'XLIST') + ' "' + utils.escape(namespace) + '" "*"', cb); }; @@ -765,7 +764,7 @@ ImapConnection.prototype._fetch = function(which, uids, options) { var extensions = ''; // always fetch GMail-specific bits of information when on GMail - if (this.capabilities.indexOf('X-GM-EXT-1') > -1) + if (this._supports('X-GM-EXT-1')) extensions = 'X-GM-THRID X-GM-MSGID X-GM-LABELS '; this._send(which + 'FETCH ' + uids.join(',') + ' (' + extensions @@ -922,7 +921,11 @@ ImapConnection.prototype.__defineGetter__('seq', function() { ImapConnection.prototype._fnTmrConn = function(loginCb) { loginCb(new Error('Connection timed out')); this._state.conn.destroy(); -} +}; + +ImapConnection.prototype._supports = function(capability) { + return (this.capabilities.indexOf(capability) > -1); +}; ImapConnection.prototype._store = function(which, uids, flags, isAdding, cb) { var isKeywords = (arguments.callee.caller === this.addKeywords @@ -982,11 +985,10 @@ ImapConnection.prototype._login = function(cb) { }; if (this._state.status === STATES.NOAUTH) { - if (this.capabilities.indexOf('LOGINDISABLED') !== -1) + if (this._supports('LOGINDISABLED')) return cb(new Error('Logging in is disabled on this server')); - if (this.capabilities.indexOf('AUTH=XOAUTH') !== -1 - && 'xoauth' in this._options) { + if (this._supports('AUTH=XOAUTH') && 'xoauth' in this._options) { this._send('AUTHENTICATE XOAUTH ' + utils.escape(this._options.xoauth), fnReturn); } else if (this._options.username !== undefined