Restore friend order

This commit is contained in:
Natsumi
2024-12-13 23:21:08 +13:00
parent fa2644a6fe
commit 28609102a4
5 changed files with 378 additions and 76 deletions

View File

@@ -52,6 +52,7 @@ import _memos from './classes/memos.js';
import _languages from './classes/languages.js';
import _groups from './classes/groups.js';
import _vrcRegistry from './classes/vrcRegistry.js';
import _restoreFriendOrder from './classes/restoreFriendOrder.js';
// API classes
import _config from './classes/API/config.js';
@@ -116,7 +117,8 @@ speechSynthesis.getVoices();
config: new _config($app, API, $t),
languages: new _languages($app, API, $t),
groups: new _groups($app, API, $t),
vrcRegistry: new _vrcRegistry($app, API, $t)
vrcRegistry: new _vrcRegistry($app, API, $t),
restoreFriendOrder: new _restoreFriendOrder($app, API, $t)
};
await configRepository.init();
@@ -570,6 +572,7 @@ speechSynthesis.getVoices();
$previousLocation: '',
$customTag: '',
$customTagColour: '',
$friendNumber: 0,
//
...json
};
@@ -4144,7 +4147,7 @@ speechSynthesis.getVoices();
$app.data.friends = new Map();
$app.data.pendingActiveFriends = new Set();
$app.data.friendsNo = 0;
$app.data.friendNumber = 0;
$app.data.isFriendsGroupMe = true;
$app.data.isVIPFriends = true;
$app.data.isOnlineFriends = true;
@@ -4251,7 +4254,7 @@ speechSynthesis.getVoices();
API.$on('LOGIN', function () {
$app.friends.clear();
$app.pendingActiveFriends.clear();
$app.friendsNo = 0;
$app.friendNumber = 0;
$app.isVIPFriends = true;
$app.isOnlineFriends = true;
$app.isActiveFriends = true;
@@ -4342,40 +4345,6 @@ speechSynthesis.getVoices();
this.deleteFriend(id);
}
}
this.saveFriendOrder();
};
$app.methods.saveFriendOrder = async function () {
var currentTime = Date.now();
var lastStoreTime = await configRepository.getString(
`VRCX_lastStoreTime_${API.currentUser.id}`,
''
);
// store once every week
if (lastStoreTime && currentTime - lastStoreTime < 604800000) {
return;
}
var storedData = {};
try {
var data = await configRepository.getString(
`VRCX_friendOrder_${API.currentUser.id}`
);
if (data) {
var storedData = JSON.parse(data);
}
} catch (err) {
console.error(err);
}
storedData[currentTime] = Array.from(this.friends.keys());
await configRepository.setString(
`VRCX_friendOrder_${API.currentUser.id}`,
JSON.stringify(storedData)
);
await configRepository.setString(
`VRCX_lastStoreTime_${API.currentUser.id}`,
currentTime
);
};
$app.methods.addFriend = function (id, state) {
@@ -4395,7 +4364,6 @@ speechSynthesis.getVoices();
isVIP,
ref,
name,
no: ++this.friendsNo,
memo: '',
pendingOffline: false,
pendingOfflineTime: '',
@@ -7088,7 +7056,8 @@ speechSynthesis.getVoices();
var row = {
userId: ref.id,
displayName: ref.displayName,
trustLevel: ref.$trustLevel
trustLevel: ref.$trustLevel,
friendNumber: 0
};
this.friendLog.set(friend.id, row);
sqlValues.unshift(row);
@@ -7110,6 +7079,11 @@ speechSynthesis.getVoices();
};
$app.methods.getFriendLog = async function (currentUser) {
this.friendNumber = await configRepository.getInt(
`VRCX_friendNumber_${currentUser.id}`,
0
);
var friendLogCurrentArray = await database.getFriendLogCurrent();
for (var friend of friendLogCurrentArray) {
this.friendLog.set(friend.userId, friend);
@@ -7118,7 +7092,9 @@ speechSynthesis.getVoices();
this.friendLogTable.data = await database.getFriendLogHistory();
this.refreshFriends(currentUser, true);
await API.refreshFriends();
await this.tryRestoreFriendNumber();
this.friendLogInitStatus = true;
// check for friend/name/rank change AFTER friendLogInitStatus is set
for (var friend of friendLogCurrentArray) {
var ref = API.cachedUsers.get(friend.userId);
@@ -7154,12 +7130,21 @@ speechSynthesis.getVoices();
userId: id
}).then((args) => {
if (args.json.isFriend && !this.friendLog.has(id)) {
if (this.friendNumber === 0) {
this.friendNumber = this.friends.size;
}
ref.$friendNumber = ++this.friendNumber;
configRepository.setInt(
`VRCX_friendNumber_${API.currentUser.id}`,
this.friendNumber
);
this.addFriend(id, ref.state);
var friendLogHistory = {
created_at: new Date().toJSON(),
type: 'Friend',
userId: id,
displayName: ref.displayName
displayName: ref.displayName,
friendNumber: ref.$friendNumber
};
this.friendLogTable.data.push(friendLogHistory);
database.addFriendLogHistory(friendLogHistory);
@@ -7167,7 +7152,8 @@ speechSynthesis.getVoices();
var friendLogCurrent = {
userId: id,
displayName: ref.displayName,
trustLevel: ref.$trustLevel
trustLevel: ref.$trustLevel,
friendNumber: ref.$friendNumber
};
this.friendLog.set(id, friendLogCurrent);
database.setFriendLogCurrent(friendLogCurrent);
@@ -7255,7 +7241,8 @@ speechSynthesis.getVoices();
type: 'DisplayName',
userId: ref.id,
displayName: ref.displayName,
previousDisplayName: ctx.displayName
previousDisplayName: ctx.displayName,
friendNumber: ref.$friendNumber
};
this.friendLogTable.data.push(friendLogHistoryDisplayName);
database.addFriendLogHistory(friendLogHistoryDisplayName);
@@ -7263,7 +7250,8 @@ speechSynthesis.getVoices();
var friendLogCurrent = {
userId: ref.id,
displayName: ref.displayName,
trustLevel: ref.$trustLevel
trustLevel: ref.$trustLevel,
friendNumber: ref.$friendNumber
};
this.friendLog.set(ref.id, friendLogCurrent);
database.setFriendLogCurrent(friendLogCurrent);
@@ -7286,7 +7274,8 @@ speechSynthesis.getVoices();
var friendLogCurrent3 = {
userId: ref.id,
displayName: ref.displayName,
trustLevel: ref.$trustLevel
trustLevel: ref.$trustLevel,
friendNumber: ref.$friendNumber
};
this.friendLog.set(ref.id, friendLogCurrent3);
database.setFriendLogCurrent(friendLogCurrent3);
@@ -7298,7 +7287,8 @@ speechSynthesis.getVoices();
userId: ref.id,
displayName: ref.displayName,
trustLevel: ref.$trustLevel,
previousTrustLevel: ctx.trustLevel
previousTrustLevel: ctx.trustLevel,
friendNumber: ref.$friendNumber
};
this.friendLogTable.data.push(friendLogHistoryTrustLevel);
database.addFriendLogHistory(friendLogHistoryTrustLevel);
@@ -7306,7 +7296,8 @@ speechSynthesis.getVoices();
var friendLogCurrent2 = {
userId: ref.id,
displayName: ref.displayName,
trustLevel: ref.$trustLevel
trustLevel: ref.$trustLevel,
friendNumber: ref.$friendNumber
};
this.friendLog.set(ref.id, friendLogCurrent2);
database.setFriendLogCurrent(friendLogCurrent2);
@@ -7314,6 +7305,9 @@ speechSynthesis.getVoices();
this.updateSharedFeed(true);
}
ctx.trustLevel = ref.$trustLevel;
if (ctx.friendNumber) {
ref.$friendNumber = ctx.friendNumber;
}
};
$app.methods.deleteFriendLog = function (row) {
@@ -7787,7 +7781,7 @@ speechSynthesis.getVoices();
stripe: true,
size: 'mini',
defaultSort: {
prop: '$friendNum',
prop: '$friendNumber',
order: 'descending'
}
},
@@ -14828,7 +14822,7 @@ speechSynthesis.getVoices();
this.stringComparer
);
}
if (!match && filters.includes('Rank') && ctx.ref.$friendNum) {
if (!match && filters.includes('Rank')) {
match = String(ctx.ref.$trustLevel)
.toUpperCase()
.includes(query.toUpperCase());
@@ -14837,7 +14831,6 @@ speechSynthesis.getVoices();
continue;
}
}
ctx.ref.$friendNum = ctx.no;
results.push(ctx.ref);
}
this.getAllUserStats();
@@ -19429,7 +19422,7 @@ speechSynthesis.getVoices();
);
$app.methods.updateDatabaseVersion = async function () {
var databaseVersion = 10;
var databaseVersion = 11;
if (this.databaseVersion < databaseVersion) {
if (this.databaseVersion) {
var msgBox = this.$message({
@@ -19448,11 +19441,11 @@ speechSynthesis.getVoices();
await database.fixNegativeGPS(); // fix GPS being a negative value due to VRCX bug with traveling
await database.fixBrokenLeaveEntries(); // fix user instance timer being higher than current user location timer
await database.fixBrokenGroupInvites(); // fix notification v2 in wrong table
await database.updateTableForGroupNames(); // alter tables to include group name
await database.fixBrokenNotifications(); // fix notifications being null
await database.fixBrokenGroupChange(); // fix spam group left & name change
await database.fixCancelFriendRequestTypo(); // fix CancelFriendRequst typo
await database.fixBrokenGameLogDisplayNames(); // fix gameLog display names "DisplayName (userId)"
await database.upgradeDatabaseVersion(); // update database version
await database.vacuum(); // succ
await configRepository.setInt(
'VRCX_databaseVersion',