2020-01-12 22:17:02 +01:00
|
|
|
const away_user_ids = new Set();
|
2020-02-03 09:42:50 +01:00
|
|
|
const user_info = new Map();
|
2018-12-19 17:11:17 +01:00
|
|
|
|
2019-01-23 19:25:22 +01:00
|
|
|
exports.server_update = function (opts) {
|
2018-12-19 17:11:17 +01:00
|
|
|
channel.post({
|
2020-07-15 01:29:15 +02:00
|
|
|
url: "/json/users/me/status",
|
2019-01-23 19:25:22 +01:00
|
|
|
data: {
|
|
|
|
away: opts.away,
|
|
|
|
status_text: opts.status_text,
|
|
|
|
},
|
2018-12-19 17:11:17 +01:00
|
|
|
idempotent: true,
|
2020-07-20 22:18:43 +02:00
|
|
|
success() {
|
2019-01-26 21:14:33 +01:00
|
|
|
if (opts.success) {
|
|
|
|
opts.success();
|
|
|
|
}
|
|
|
|
},
|
2018-12-19 17:11:17 +01:00
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2019-01-23 19:25:22 +01:00
|
|
|
exports.server_set_away = function () {
|
|
|
|
exports.server_update({away: true});
|
|
|
|
};
|
|
|
|
|
2018-12-19 17:11:17 +01:00
|
|
|
exports.server_revoke_away = function () {
|
2019-01-23 19:25:22 +01:00
|
|
|
exports.server_update({away: false});
|
2018-12-19 17:11:17 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
exports.set_away = function (user_id) {
|
2020-07-15 01:29:15 +02:00
|
|
|
if (typeof user_id !== "number") {
|
|
|
|
blueslip.error("need ints for user_id");
|
2020-01-12 22:17:02 +01:00
|
|
|
}
|
|
|
|
away_user_ids.add(user_id);
|
2018-12-19 17:11:17 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
exports.revoke_away = function (user_id) {
|
2020-07-15 01:29:15 +02:00
|
|
|
if (typeof user_id !== "number") {
|
|
|
|
blueslip.error("need ints for user_id");
|
2020-01-12 22:17:02 +01:00
|
|
|
}
|
|
|
|
away_user_ids.delete(user_id);
|
2018-12-19 17:11:17 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
exports.is_away = function (user_id) {
|
|
|
|
return away_user_ids.has(user_id);
|
|
|
|
};
|
|
|
|
|
2019-01-23 19:25:22 +01:00
|
|
|
exports.get_status_text = function (user_id) {
|
|
|
|
return user_info.get(user_id);
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.set_status_text = function (opts) {
|
|
|
|
if (!opts.status_text) {
|
2020-02-03 07:41:38 +01:00
|
|
|
user_info.delete(opts.user_id);
|
2019-01-23 19:25:22 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
user_info.set(opts.user_id, opts.status_text);
|
|
|
|
};
|
|
|
|
|
2020-02-25 12:16:26 +01:00
|
|
|
exports.initialize = function (params) {
|
|
|
|
for (const [str_user_id, dct] of Object.entries(params.user_status)) {
|
2020-01-12 22:09:39 +01:00
|
|
|
// JSON does not allow integer keys, so we
|
|
|
|
// convert them here.
|
|
|
|
const user_id = parseInt(str_user_id, 10);
|
|
|
|
|
2019-01-21 19:06:03 +01:00
|
|
|
if (dct.away) {
|
2020-01-12 22:17:02 +01:00
|
|
|
away_user_ids.add(user_id);
|
2019-01-21 19:06:03 +01:00
|
|
|
}
|
2019-01-23 19:25:22 +01:00
|
|
|
|
|
|
|
if (dct.status_text) {
|
|
|
|
user_info.set(user_id, dct.status_text);
|
|
|
|
}
|
2020-02-06 04:31:32 +01:00
|
|
|
}
|
2018-12-19 17:11:17 +01:00
|
|
|
};
|
|
|
|
|
2019-10-25 09:45:13 +02:00
|
|
|
window.user_status = exports;
|