viewpoint
Version:
the exchange email API for nodejs module
222 lines (197 loc) • 5.75 kB
JavaScript
var ItemAccessor, Mixin, _,
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
hasProp = {}.hasOwnProperty;
Mixin = require('mixto');
_ = require('underscore');
module.exports = ItemAccessor = (function(superClass) {
extend(ItemAccessor, superClass);
function ItemAccessor() {
return ItemAccessor.__super__.constructor.apply(this, arguments);
}
ItemAccessor.prototype.getItem = function(itemId, opts) {
var args;
if (opts == null) {
opts = {};
}
args = this._getItemArgs(itemId, opts);
return this.ews.getItem(args).then(function(res) {
return res.items()[0];
});
};
ItemAccessor.prototype.getItems = function(itemIds, opts) {
var args;
if (opts == null) {
opts = {};
}
args = this._getItemArgs(itemIds, opts);
return this.ews.getItem(args).then(function(res) {
return res.items();
});
};
ItemAccessor.prototype.findItems = function(opts) {
if (opts == null) {
opts = {};
}
return this.ews.findItem(this._findItemsArgs(opts));
};
ItemAccessor.prototype.copyItems = function(items, folder) {
var args;
args = this._moveCopyItemsArgs(items, folder);
return this.ews.copyItem(args).then(function(res) {
return res.items();
});
};
ItemAccessor.prototype.moveItems = function(items, folder) {
var args;
args = this._moveCopyItemsArgs(items, folder);
return this.ews.moveItem(args).then(function(res) {
return res.items();
});
};
ItemAccessor.prototype.deleteItems = function(items, deleteType) {
var opts;
opts = {
deleteType: deleteType != null ? deleteType : 'HardDelete',
itemIds: this._getItemIds(items)
};
return this.ews.deleteItem(opts);
};
ItemAccessor.prototype.markRead = function(items) {
var args;
args = this._markReadArgs(items);
return this.ews.updateItem(args).then(function(res) {
return res.items();
});
};
ItemAccessor.prototype.saveItems = function(opts) {
var params;
params = _.clone(opts);
if (opts.folderId) {
params.savedItemFolderId = this._getItemId(opts.folderId);
}
return this.ews.createItem(params).then(function(res) {
return res.items();
});
};
ItemAccessor.prototype.sendItems = function(opts) {
if (opts.itemIds) {
return this.ews.sendItem({
itemIds: this._getItemIds(opts.itemIds)
});
} else if (opts.items) {
return this.ews.createItem(_.extend(opts, {
messageDisposition: 'SendOnly'
}));
}
};
ItemAccessor.prototype.sendAndSaveItems = function(opts) {
var params;
params = {
savedItemFolderId: this._getItemId(opts.folderId)
};
if (opts.itemIds) {
return this.ews.sendItem(_.extend(params, {
itemIds: this._getItemIds(opts.itemIds)
}));
} else if (opts.items) {
_.extend(params, {
items: opts.items,
messageDisposition: 'SendAndSaveCopy'
});
return this.ews.createItem(_.extend(params));
}
};
ItemAccessor.prototype.syncItems = function(opts) {
return this.ews.syncFolderItems(this._syncItemsArgs(opts));
};
ItemAccessor.prototype._getItemId = function(id) {
if (_.isString(id)) {
return {
id: id
};
} else {
return id;
}
};
ItemAccessor.prototype._getItemIds = function(itemIds) {
var i, itemId, len, results;
if (!Array.isArray(itemIds)) {
itemIds = [itemIds];
}
results = [];
for (i = 0, len = itemIds.length; i < len; i++) {
itemId = itemIds[i];
results.push(this._getItemId(itemId));
}
return results;
};
ItemAccessor.prototype._getItemArgs = function(itemIds, opts) {
var args, ref;
args = {
itemShape: {
baseShape: (ref = opts.shape) != null ? ref : 'Default'
}
};
args.itemIds = this._getItemIds(itemIds);
return _.extend(args, opts);
};
ItemAccessor.prototype._findItemsArgs = function(opts) {
var args, ref;
args = {
traversal: 'Shallow',
itemShape: {
baseShape: (ref = opts.shape) != null ? ref : 'Default'
}
};
args.parentFolderIds = this._getItemId(opts.folderId);
return _.extend(args, opts);
};
ItemAccessor.prototype._moveCopyItemsArgs = function(items, folder) {
return {
toFolderId: this._getItemId(folder),
itemIds: this._getItemIds(items),
returnNewItemIds: true
};
};
ItemAccessor.prototype._markReadArgs = function(items) {
var itemChanges, itemId;
itemChanges = [];
if (!Array.isArray(items)) {
items = [items];
}
itemChanges = (function() {
var i, len, results;
results = [];
for (i = 0, len = items.length; i < len; i++) {
itemId = items[i];
results.push({
itemId: itemId,
setFields: {
fieldURI: 'message:IsRead',
message: {
isRead: true
}
}
});
}
return results;
})();
return {
itemChanges: itemChanges
};
};
ItemAccessor.prototype._syncItemsArgs = function(opts) {
var params, ref;
params = {
itemShape: {
baseShape: (ref = opts.shape) != null ? ref : 'Default'
},
syncFolderId: this._getItemId(opts.folderId)
};
if (opts.maxReturned) {
params.maxChangesReturned = opts.maxReturned;
}
return _.extend(params, opts);
};
return ItemAccessor;
})(Mixin);