diff --git a/html/src/app.js b/html/src/app.js
index 52364baa..b876fa59 100644
--- a/html/src/app.js
+++ b/html/src/app.js
@@ -3972,8 +3972,6 @@ speechSynthesis.getVoices();
$app.data.debugWebRequests = false;
$app.data.debugWebSocket = false;
- $app.data.APILastOnline = new Map();
-
$app.data.sharedFeed = {
gameLog: {
wrist: [],
@@ -5979,9 +5977,6 @@ speechSynthesis.getVoices();
});
API.$on('FRIEND:STATE', function (args) {
- if (args.json.state === 'online') {
- $app.APILastOnline.set(args.params.userId, Date.now());
- }
$app.updateFriend(args.params.userId, args.json.state);
});
@@ -6094,7 +6089,7 @@ speechSynthesis.getVoices();
$app.data.updateFriendInProgress = new Set();
- $app.methods.updateFriend = async function (id, newState, origin) {
+ $app.methods.updateFriend = async function (id, stateInput, origin) {
var ctx = this.friends.get(id);
if (typeof ctx === 'undefined') {
return;
@@ -6105,7 +6100,7 @@ speechSynthesis.getVoices();
this.updateFriendInProgress.add(id);
var ref = API.cachedUsers.get(id);
var isVIP = API.cachedFavoritesByObjectId.has(id);
- if (typeof newState === 'undefined' || ctx.state === newState) {
+ if (typeof stateInput === 'undefined' || ctx.state === stateInput) {
// this is should be: undefined -> user
if (ctx.ref !== ref) {
ctx.ref = ref;
@@ -6176,27 +6171,10 @@ speechSynthesis.getVoices();
) {
API.getUser({
userId: id
- }).catch(() => {
- this.updateFriendInProgress.delete(id);
});
}
} else {
- // prevent status flapping
- if (
- ctx.state === 'online' &&
- (newState === 'active' || newState === 'offline')
- ) {
- this.updateFriendInProgress.delete(id);
- await new Promise((resolve) => {
- setTimeout(resolve, 50000);
- });
- if (this.APILastOnline.has(id)) {
- var date = this.APILastOnline.get(id);
- if (date > Date.now() - 60000) {
- return;
- }
- }
- }
+ var newState = stateInput;
var location = '';
var $location_at = '';
if (
@@ -6205,18 +6183,19 @@ speechSynthesis.getVoices();
) {
var {location, $location_at} = ref;
}
- var args = await API.getUser({
- userId: id
- }).catch(() => {
- this.updateFriendInProgress.delete(id);
- });
- if (
- typeof args !== 'undefined' &&
- typeof args.ref !== 'undefined'
- ) {
- // eslint-disable-next-line no-param-reassign
- newState = args.ref.state;
- ctx.ref = args.ref;
+ try {
+ var args = await API.getUser({
+ userId: id
+ });
+ if (
+ typeof args !== 'undefined' &&
+ typeof args.ref !== 'undefined'
+ ) {
+ newState = args.ref.state;
+ ctx.ref = args.ref;
+ }
+ } catch (err) {
+ console.error(err);
}
if (ctx.state !== newState) {
if (
@@ -6227,26 +6206,30 @@ speechSynthesis.getVoices();
) {
ctx.ref.$online_for = '';
ctx.ref.$offline_for = Date.now();
- if (ctx.state === 'online') {
- var ts = Date.now();
- var time = ts - $location_at;
- var worldName = await this.getWorldName(location);
- var feed = {
- created_at: new Date().toJSON(),
- type: 'Offline',
- userId: ctx.ref.id,
- displayName: ctx.ref.displayName,
- location,
- worldName,
- time
- };
- this.addFeed(feed);
- database.addOnlineOfflineToDatabase(feed);
- }
+ var ts = Date.now();
+ var time = ts - $location_at;
+ var worldName = await this.getWorldName(location);
+ var feed = {
+ created_at: new Date().toJSON(),
+ type: 'Offline',
+ userId: ctx.ref.id,
+ displayName: ctx.ref.displayName,
+ location,
+ worldName,
+ time
+ };
+ this.addFeed(feed);
+ database.addOnlineOfflineToDatabase(feed);
} else if (newState === 'online') {
ctx.ref.$location_at = Date.now();
ctx.ref.$online_for = Date.now();
ctx.ref.$offline_for = '';
+ if (
+ typeof ctx.ref.location !== 'undefined' &&
+ ctx.ref.location !== 'offline'
+ ) {
+ var {location} = ctx.ref;
+ }
var worldName = await this.getWorldName(ctx.ref.location);
var feed = {
created_at: new Date().toJSON(),
@@ -6295,17 +6278,9 @@ speechSynthesis.getVoices();
this.friendsGroup3_.push(ctx);
this.friendsGroupD_.unshift(ctx);
}
- // changing property triggers Vue
- // so, we need compare and set
- if (ctx.state !== newState) {
- ctx.state = newState;
- }
- if (ctx.name !== ctx.ref.displayName) {
- ctx.name = ctx.ref.displayName;
- }
- if (ctx.isVIP !== isVIP) {
- ctx.isVIP = isVIP;
- }
+ ctx.state = newState;
+ ctx.name = ctx.ref.displayName;
+ ctx.isVIP = isVIP;
}
this.updateFriendInProgress.delete(id);
};