node-nicovideo-api
Version:
nicovideo api (video, live, etc..) wrapper package for node.js
111 lines (93 loc) • 2.6 kB
JavaScript
// Generated by CoffeeScript 1.10.0
(function() {
var APIEndpoints, NicoException, NicoUser, __, deepFreeze;
__ = require("lodash-deep");
deepFreeze = require("deep-freeze");
APIEndpoints = require("../APIEndpoints");
NicoException = require("../NicoException");
module.exports = NicoUser = (function() {
/**
* @return {Promise}
*/
NicoUser.instance = function(userId, session) {
if (userId === 0) {
return Promise.resolve(this.makeAnonymousUser());
}
return APIEndpoints.user.info(session, {
userId: userId
}).then((function(_this) {
return function(res) {
var data, e, error, props, result, user;
try {
result = JSON.parse(res.body);
data = result.nicovideo_user_response;
} catch (error) {
e = error;
Promise.reject(new NicoException({
message: "Failed to parse user info response.",
response: res,
previous: e
}));
}
if (data["@status"] !== "ok") {
return Promise.reject(new NicoException({
message: data.error.description,
code: data.error.code,
response: result
}));
}
props = deepFreeze(_this.parseResponse(result));
user = new NicoUser(props);
return Promise.resolve(user);
};
})(this));
};
/**
* @param {Object} res
*/
NicoUser.parseResponse = function(res) {
var data, user;
data = res.nicovideo_user_response;
user = data.user;
return {
id: user.id | 0,
name: user.nickname,
thumbnailURL: user.thumbnail_url,
additionals: data.additionals,
vita: {
userSecret: data.vita_option.user_secret | 0
}
};
};
NicoUser.makeAnonymousUser = function() {
var props, user;
props = deepFreeze({
id: 0,
name: "",
thumbnailURL: "http://uni.res.nimg.jp/img/user/thumb/blank.jpg",
additionals: "",
vita: {
userSecret: 0
}
});
return user = new NicoUser(props);
};
/**
* @param {Object} props
*/
function NicoUser(props) {
Object.defineProperties(this, {
id: {
value: props.id
},
_props: {
value: props
}
});
}
NicoUser.prototype.get = function(key) {
return __.deepGet(this._props, key);
};
return NicoUser;
})();
}).call(this);