diff --git a/html/src/app.js b/html/src/app.js
index d1d09e40..5c058463 100644
--- a/html/src/app.js
+++ b/html/src/app.js
@@ -1554,7 +1554,7 @@ speechSynthesis.getVoices();
console.error('API.$on(USER) invalid args', args);
return;
}
- $app.queueUpdateFriend({ id: args.json.id, state: args.json.state });
+ $app.updateFriend({ id: args.json.id, state: args.json.state });
args.ref = this.applyUser(args.json);
});
@@ -2888,12 +2888,45 @@ speechSynthesis.getVoices();
userId: json.id
}
});
- if (json.location === 'traveling') {
+
+ var state = 'offline';
+ if (json.platform === 'web') {
+ state = 'active';
+ } else if (json.platform) {
+ state = 'online';
+ }
+ var ref = $app.friends.get(json.id);
+ if (ref?.state !== state) {
+ if ($app.debugFriendState) {
+ console.log(
+ `Bulk friend fetch, friend state does not match ${json.displayName} from ${ref?.state} to ${state}`
+ );
+ }
this.getUser({
userId: json.id
});
- // console.log('Fetching traveling user', json.id);
- } // ?? hmm
+ } else if (json.location === 'traveling') {
+ if ($app.debugFriendState) {
+ console.log(
+ 'Bulk friend fetch, fetching traveling user',
+ json
+ );
+ }
+ this.getUser({
+ userId: json.id
+ });
+ }
+
+ // if (
+ // !args.params.offline &&
+ // json.platform !== 'web' &&
+ // json.location === 'offline'
+ // ) {
+ // console.log('Fetching offline user', json);
+ // this.getUser({
+ // userId: json.id
+ // });
+ // }
}
});
@@ -5111,15 +5144,16 @@ speechSynthesis.getVoices();
userId: content.userId
}
});
+ } else {
+ this.$emit('FRIEND:STATE', {
+ json: {
+ state: 'online'
+ },
+ params: {
+ userId: content.userId
+ }
+ });
}
- this.$emit('FRIEND:STATE', {
- json: {
- state: 'online'
- },
- params: {
- userId: content.userId
- }
- });
break;
case 'friend-active':
@@ -5133,15 +5167,16 @@ speechSynthesis.getVoices();
userId: content.userId
}
});
+ } else {
+ this.$emit('FRIEND:STATE', {
+ json: {
+ state: 'active'
+ },
+ params: {
+ userId: content.userId
+ }
+ });
}
- this.$emit('FRIEND:STATE', {
- json: {
- state: 'active'
- },
- params: {
- userId: content.userId
- }
- });
break;
case 'friend-offline':
@@ -5185,8 +5220,8 @@ speechSynthesis.getVoices();
json: {
location: content.location,
travelingToLocation: content.travelingToLocation,
- ...content.user,
- state: 'online'
+ ...content.user
+ // state: 'online'
},
params: {
userId: content.userId
@@ -9196,18 +9231,18 @@ speechSynthesis.getVoices();
});
API.$on('FRIEND:STATE', function (args) {
- $app.queueUpdateFriend({
+ $app.updateFriend({
id: args.params.userId,
state: args.json.state
});
});
API.$on('FAVORITE', function (args) {
- $app.queueUpdateFriend({ id: args.ref.favoriteId });
+ $app.updateFriend({ id: args.ref.favoriteId });
});
API.$on('FAVORITE:@DELETE', function (args) {
- $app.queueUpdateFriend({ id: args.ref.favoriteId });
+ $app.updateFriend({ id: args.ref.favoriteId });
});
API.$on('LOGIN', function () {
@@ -9243,7 +9278,7 @@ speechSynthesis.getVoices();
}
for (var [id, state] of map) {
if (this.friends.has(id)) {
- this.queueUpdateFriend({ id, state, origin });
+ this.updateFriend({ id, state, origin });
} else {
this.addFriend(id, state);
}
@@ -9363,28 +9398,6 @@ speechSynthesis.getVoices();
}
};
- $app.data.updateFriendQueue = [];
- $app.data.updateFriendTimer = null;
-
- $app.methods.queueUpdateFriend = function (ctx) {
- this.updateFriendQueue.push(ctx);
- if (this.updateFriendTimer !== null) {
- return;
- }
- this.updateFriendTimer = workerTimers.setTimeout(() => {
- var queue = [...this.updateFriendQueue];
- this.updateFriendQueue = [];
- this.updateFriendTimer = null;
- for (var i = 0; i < queue.length; ++i) {
- try {
- this.updateFriend(queue[i]);
- } catch (err) {
- console.error(err);
- }
- }
- }, 5);
- };
-
$app.data.updateFriendInProgress = new Map();
$app.methods.updateFriend = function (ctx) {
@@ -9394,24 +9407,6 @@ speechSynthesis.getVoices();
if (typeof ctx === 'undefined') {
return;
}
- var lastOnlineDate = this.APILastOnline.get(id);
- if (
- stateInput &&
- ctx.state !== stateInput &&
- lastOnlineDate &&
- lastOnlineDate > Date.now() - 1000
- ) {
- // crappy double online fix
- if (this.debugFriendState) {
- console.log(
- ctx.name,
- new Date().toJSON(),
- 'userAlreadyOnline',
- stateInput
- );
- }
- return;
- }
if (stateInput === 'online') {
this.APILastOnline.set(id, Date.now());
ctx.pendingOffline = false;
@@ -9500,7 +9495,8 @@ speechSynthesis.getVoices();
ctx.name,
new Date().toJSON(),
'pendingOfflineCheck',
- stateInput
+ stateInput,
+ ctx.state
);
}
return;
@@ -9538,35 +9534,28 @@ speechSynthesis.getVoices();
$app.methods.updateFriendDelayedCheck = async function (
id,
ctx,
- stateInput,
+ newState,
location,
$location_at
) {
var date = this.APILastOnline.get(id);
if (
ctx.state === 'online' &&
- (stateInput === 'active' || stateInput === 'offline') &&
+ (newState === 'active' || newState === 'offline') &&
date &&
date > Date.now() - 120000
) {
if (this.debugFriendState) {
console.log(
- `falsePositiveOffline ${ctx.name} currentState:${ctx.ref.state} expectedState:${stateInput}`
+ `falsePositiveOffline ${ctx.name} currentState:${ctx.ref.state} expectedState:${newState}`
);
}
return;
}
if (this.debugFriendState) {
- console.log(
- ctx.name,
- new Date().toJSON(),
- 'updateFriendState',
- stateInput,
- ctx.ref.state
- );
+ console.log(ctx.name, 'updateFriendState', newState, ctx.state);
}
var isVIP = this.localFavoriteFriends.has(id);
- var newState = stateInput;
var ref = ctx.ref;
if (ctx.state !== newState && typeof ctx.ref !== 'undefined') {
if (
@@ -9654,6 +9643,7 @@ speechSynthesis.getVoices();
this.updateOnlineFriendCoutner();
}
ctx.state = newState;
+ ctx.ref.state = newState;
ctx.name = ref.displayName;
ctx.isVIP = isVIP;
};
@@ -10761,7 +10751,7 @@ speechSynthesis.getVoices();
$app.addFeed(feed);
database.addStatusToDatabase(feed);
}
- if (props.bio) {
+ if (props.bio && props.bio[0] && props.bio[1]) {
var bio = '';
var previousBio = '';
if (props.bio[0]) {
diff --git a/html/src/index.pug b/html/src/index.pug
index 63519974..23fd6161 100644
--- a/html/src/index.pug
+++ b/html/src/index.pug
@@ -1770,7 +1770,7 @@ html
span {{ $t('dialog.vrcx_updater.latest_version') }}
template(#footer)
el-button(v-if="(VRCXUpdateDialog.updatePending && VRCXUpdateDialog.release !== pendingVRCXInstall) || VRCXUpdateDialog.release !== appVersion" type="primary" size="small" @click="installVRCXUpdate") {{ $t('dialog.vrcx_updater.download') }}
- el-button(v-if="VRCXUpdateDialog.updatePending" type="primary" size="small" @click="restartVRCX") {{ $t('dialog.vrcx_updater.install') }}
+ el-button(v-if="VRCXUpdateDialog.updatePending" type="primary" size="small" @click="restartVRCX(true)") {{ $t('dialog.vrcx_updater.install') }}
//- dialog: launch
el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="launchDialog" :visible.sync="launchDialog.visible" :title="$t('dialog.launch.header')" width="450px")
diff --git a/html/src/localization/en/en.json b/html/src/localization/en/en.json
index 94dadb32..28d4ae12 100644
--- a/html/src/localization/en/en.json
+++ b/html/src/localization/en/en.json
@@ -216,8 +216,8 @@
"application": {
"header": "Application",
"startup": "Start at Windows startup",
- "minimized": "Start as minimized state",
- "tray": "Close to tray",
+ "minimized": "Start minimized",
+ "tray": "Minimize to tray when closing",
"proxy": "Proxy settings"
},
"favorites": {