viewpoint
Version:
the exchange email API for nodejs module
205 lines (181 loc) • 5.36 kB
JavaScript
var FolderAccessor, Mixin, _, pascalCase,
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');
pascalCase = require('./ews-util').pascalCase;
module.exports = FolderAccessor = (function(superClass) {
var ROOT_FOLDER_ID;
extend(FolderAccessor, superClass);
function FolderAccessor() {
return FolderAccessor.__super__.constructor.apply(this, arguments);
}
FolderAccessor.prototype.getFolder = function(folderId, opts) {
var args;
if (opts == null) {
opts = {};
}
args = this._getFolderArgs(folderId, opts);
return this.ews.getFolder(args).then(function(res) {
var ref;
return (ref = res.folders()) != null ? ref[0] : void 0;
});
};
FolderAccessor.prototype.getFolders = function(folderIds, opts) {
var args;
if (opts == null) {
opts = {};
}
args = this._getFolderArgs(folderIds, opts);
return this.ews.getFolder(args).then(function(res) {
return res.folders();
});
};
FolderAccessor.prototype.findFolders = function(opts) {
if (opts == null) {
opts = {};
}
return this.ews.findFolder(this._findFoldersArgs(opts));
};
FolderAccessor.prototype.createFolders = function(names, opts) {
var args;
if (opts == null) {
opts = {};
}
args = this._createFoldersArgs(names, opts);
return this.ews.createFolder(args).then(function(res) {
return res.folders();
});
};
FolderAccessor.prototype.deleteFolders = function(folderIds, deleteType) {
if (deleteType == null) {
deleteType = 'HardDelete';
}
folderIds = this._getItemIds(folderIds);
return this.ews.deleteFolder({
deleteType: deleteType,
folderIds: folderIds
});
};
FolderAccessor.prototype.moveFolders = function(folderIds, opts) {
var params;
if (opts == null) {
opts = {};
}
params = {
toFolderId: this._getItemId(opts.parent),
folderIds: this._getItemIds(folderIds)
};
return this.ews.moveFolder(params).then(function(res) {
return res.folders();
});
};
FolderAccessor.prototype.updateFolder = function(folderId, changes) {
var params;
params = this._updateFolderArgs(folderId, changes);
return this.ews.updateFolder(params).then(function(res) {
var ref;
return (ref = res.folders()) != null ? ref[0] : void 0;
});
};
FolderAccessor.prototype.syncFolders = function(opts) {
if (opts == null) {
opts = {};
}
return this.ews.syncFolderHierarchy(this._syncFoldersArgs(opts));
};
FolderAccessor.prototype.syncFoldersWithParent = function(syncState) {
var opts;
opts = {
syncState: syncState,
folderShape: {
baseShape: 'Default',
additionalProperties: 'folder:ParentFolderId'
}
};
return this.ews.syncFolderHierarchy(opts);
};
FolderAccessor.prototype._getFolderArgs = function(folderId, opts) {
var params, ref;
params = {
folderShape: {
baseShape: (ref = opts.shape) != null ? ref : 'Default'
},
folderIds: this._getItemIds(folderId)
};
return _.extend(params, opts);
};
ROOT_FOLDER_ID = {
id: 'msgfolderroot',
type: 'distinguished'
};
FolderAccessor.prototype._findFoldersArgs = function(opts) {
var params, ref;
params = {
folderShape: {
baseShape: (ref = opts.shape) != null ? ref : 'Default'
},
parentFolderIds: ROOT_FOLDER_ID
};
if (opts.parent) {
params.parentFolderIds = this._getItemIds(opts.parent);
}
return _.extend(params, opts);
};
FolderAccessor.prototype._createFoldersArgs = function(names, opts) {
var name, params;
params = {
parentFolderId: ROOT_FOLDER_ID
};
if (opts.parent) {
params.parentFolderId = this._getItemId(opts.parent);
}
if (!Array.isArray(names)) {
names = [names];
}
params.folders = (function() {
var i, len, results;
results = [];
for (i = 0, len = names.length; i < len; i++) {
name = names[i];
results.push({
displayName: name
});
}
return results;
})();
return _.extend(params, opts);
};
FolderAccessor.prototype._syncFoldersArgs = function(opts) {
var params, ref;
params = {
folderShape: {
baseShape: (ref = opts.shape) != null ? ref : 'Default'
}
};
if (opts.parent) {
params.syncFolderId = this._getItemId(opts.parent);
}
return _.extend(params, opts);
};
FolderAccessor.prototype._updateFolderArgs = function(folderId, changes) {
var name, obj, params, val;
params = {
folderId: this._getItemId(folderId),
setFolderFields: []
};
for (name in changes) {
val = changes[name];
params.setFolderFields.push({
fieldURI: "folder:" + (pascalCase(name)),
folder: (
obj = {},
obj["" + name] = val,
obj
)
});
}
return params;
};
return FolderAccessor;
})(Mixin);