mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-05-07 14:56:06 +02:00
Lots of SQLite fixes
This commit is contained in:
+82
-85
@@ -1755,21 +1755,6 @@ speechSynthesis.getVoices();
|
|||||||
|
|
||||||
// API: Friend
|
// API: Friend
|
||||||
|
|
||||||
API.friends200 = new Set();
|
|
||||||
API.friends404 = new Map();
|
|
||||||
API.isFriendsLoading = false;
|
|
||||||
|
|
||||||
API.$on('LOGIN', function () {
|
|
||||||
this.friends200.clear();
|
|
||||||
this.friends404.clear();
|
|
||||||
this.isFriendsLoading = false;
|
|
||||||
});
|
|
||||||
|
|
||||||
API.$on('USER', function (args) {
|
|
||||||
this.friends200.add(args.ref.id);
|
|
||||||
this.friends404.delete(args.ref.id);
|
|
||||||
});
|
|
||||||
|
|
||||||
API.$on('FRIEND:LIST', function (args) {
|
API.$on('FRIEND:LIST', function (args) {
|
||||||
for (var json of args.json) {
|
for (var json of args.json) {
|
||||||
this.$emit('USER', {
|
this.$emit('USER', {
|
||||||
@@ -1781,65 +1766,45 @@ speechSynthesis.getVoices();
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
API.isAllFriendsRetrived = function (flag) {
|
API.refreshFriends = async function () {
|
||||||
if (flag) {
|
var onlineFriends = await this.refreshOnlineFriends();
|
||||||
for (var id of this.currentUser.friends) {
|
var offlineFriends = await this.refreshOfflineFriends();
|
||||||
if (this.friends200.has(id) === false) {
|
return onlineFriends.concat(offlineFriends);
|
||||||
var n = this.friends404.get(id) || 0;
|
|
||||||
if (n < 2) {
|
|
||||||
this.friends404.set(id, n + 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (var id of this.currentUser.friends) {
|
|
||||||
if (this.friends200.has(id) === false ||
|
|
||||||
this.friends404.get(id) < 2) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
API.refreshFriends = function () {
|
API.refreshOnlineFriends = async function () {
|
||||||
|
var friends = [];
|
||||||
var params = {
|
var params = {
|
||||||
n: 50,
|
n: 50,
|
||||||
offset: 0,
|
offset: 0,
|
||||||
offline: false
|
offline: false
|
||||||
};
|
};
|
||||||
var N = this.currentUser.onlineFriends.length;
|
var N = this.currentUser.onlineFriends.length + this.currentUser.activeFriends.length;
|
||||||
if (N === 0) {
|
var count = Math.trunc(N / 50);
|
||||||
N = this.currentUser.friends.length;
|
for (var i = count; i > -1; i--) {
|
||||||
if (N === 0 ||
|
var args = await this.getFriends(params);
|
||||||
this.isAllFriendsRetrived(false)) {
|
friends = friends.concat(args.json);
|
||||||
return;
|
params.offset += 50;
|
||||||
}
|
|
||||||
params.offline = true;
|
|
||||||
}
|
}
|
||||||
if (this.isFriendsLoading) {
|
return friends;
|
||||||
return;
|
};
|
||||||
|
|
||||||
|
API.refreshOfflineFriends = async function () {
|
||||||
|
var friends = [];
|
||||||
|
var params = {
|
||||||
|
n: 50,
|
||||||
|
offset: 0,
|
||||||
|
offline: true
|
||||||
|
};
|
||||||
|
var onlineCount = this.currentUser.onlineFriends.length + this.currentUser.activeFriends.length;
|
||||||
|
var N = this.currentUser.friends.length - onlineCount;
|
||||||
|
var count = Math.trunc(N / 50);
|
||||||
|
for (var i = count; i > -1; i--) {
|
||||||
|
var args = await this.getFriends(params);
|
||||||
|
friends = friends.concat(args.json);
|
||||||
|
params.offset += 50;
|
||||||
}
|
}
|
||||||
this.isFriendsLoading = true;
|
return friends;
|
||||||
this.bulk({
|
|
||||||
fn: 'getFriends',
|
|
||||||
N,
|
|
||||||
params,
|
|
||||||
done(ok, options) {
|
|
||||||
if (this.isAllFriendsRetrived(params.offline)) {
|
|
||||||
this.isFriendsLoading = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var { length } = this.currentUser.friends;
|
|
||||||
options.N = length - params.offset;
|
|
||||||
if (options.N <= 0) {
|
|
||||||
options.N = length;
|
|
||||||
}
|
|
||||||
params.offset = 0;
|
|
||||||
params.offline = true;
|
|
||||||
this.bulk(options);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -5284,18 +5249,20 @@ speechSynthesis.getVoices();
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$app.methods.migrateMemos = function () {
|
$app.methods.migrateMemos = async function () {
|
||||||
var json = JSON.parse(VRCXStorage.GetAll());
|
var json = JSON.parse(VRCXStorage.GetAll());
|
||||||
|
database.begin();
|
||||||
for (var line in json) {
|
for (var line in json) {
|
||||||
if (line.substring(0, 8) === 'memo_usr') {
|
if (line.substring(0, 8) === 'memo_usr') {
|
||||||
var userId = line.substring(5);
|
var userId = line.substring(5);
|
||||||
var memo = json[line];
|
var memo = json[line];
|
||||||
if (memo) {
|
if (memo) {
|
||||||
this.saveMemo(userId, memo);
|
await this.saveMemo(userId, memo);
|
||||||
VRCXStorage.Remove(`memo_${userId}`);
|
VRCXStorage.Remove(`memo_${userId}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
database.commit();
|
||||||
};
|
};
|
||||||
|
|
||||||
$app.methods.loadMemo = async function (userId) {
|
$app.methods.loadMemo = async function (userId) {
|
||||||
@@ -6134,17 +6101,21 @@ speechSynthesis.getVoices();
|
|||||||
}
|
}
|
||||||
|
|
||||||
API.$on('LOGIN', async function (args) {
|
API.$on('LOGIN', async function (args) {
|
||||||
|
$app.friendLogInitStatus = false;
|
||||||
await database.init(args.json.id);
|
await database.init(args.json.id);
|
||||||
$app.feedTable.data = await database.getFeedDatabase();
|
$app.feedTable.data = await database.getFeedDatabase();
|
||||||
$app.sweepFeed();
|
$app.sweepFeed();
|
||||||
//remove old data from json file and migrate them to SQLite
|
if (configRepository.getBool(`friendLogInit_${args.json.id}`)) {
|
||||||
VRCXStorage.Remove(`${args.json.id}_feedTable`);
|
$app.getFriendLog();
|
||||||
$app.migrateMemos();
|
|
||||||
if (VRCXStorage.Get(`${args.json.id}_friendLogUpdatedAt`)) {
|
|
||||||
$app.migrateFriendLog(args.json.id);
|
|
||||||
} else {
|
} else {
|
||||||
$app.initFriendLog();
|
$app.initFriendLog();
|
||||||
}
|
}
|
||||||
|
//remove old data from json file and migrate them to SQLite
|
||||||
|
if (VRCXStorage.Get(`${args.json.id}_friendLogUpdatedAt`)) {
|
||||||
|
VRCXStorage.Remove(`${args.json.id}_feedTable`);
|
||||||
|
$app.migrateMemos();
|
||||||
|
$app.migrateFriendLog(args.json.id);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
API.$on('USER:UPDATE', async function (args) {
|
API.$on('USER:UPDATE', async function (args) {
|
||||||
@@ -7116,9 +7087,36 @@ speechSynthesis.getVoices();
|
|||||||
|
|
||||||
$app.data.friendLogInitStatus = false;
|
$app.data.friendLogInitStatus = false;
|
||||||
|
|
||||||
|
$app.methods.initFriendLog = async function () {
|
||||||
|
if (this.friendLogInitStatus) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (configRepository.getBool(`friendLogInit_${API.currentUser.id}`)) {
|
||||||
|
this.friendLogInitStatus = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var sqlValues = [];
|
||||||
|
var friends = await API.refreshFriends();
|
||||||
|
for (var friend of friends) {
|
||||||
|
var ref = API.applyUser(friend);
|
||||||
|
var row = {
|
||||||
|
userId: ref.id,
|
||||||
|
displayName: ref.displayName,
|
||||||
|
trustLevel: ref.$trustLevel
|
||||||
|
};
|
||||||
|
this.friendLog.set(friend.id, row);
|
||||||
|
sqlValues.unshift(row);
|
||||||
|
}
|
||||||
|
database.setFriendLogCurrentArray(sqlValues);
|
||||||
|
configRepository.setBool(`friendLogInit_${API.currentUser.id}`, true);
|
||||||
|
this.friendLogInitStatus = true;
|
||||||
|
};
|
||||||
|
|
||||||
$app.methods.migrateFriendLog = function (userId) {
|
$app.methods.migrateFriendLog = function (userId) {
|
||||||
|
VRCXStorage.Remove(`${userId}_friendLogUpdatedAt`);
|
||||||
this.friendLog = new Map();
|
this.friendLog = new Map();
|
||||||
var oldFriendLog = VRCXStorage.GetObject(`${userId}_friendLog`);
|
var oldFriendLog = VRCXStorage.GetObject(`${userId}_friendLog`);
|
||||||
|
var friendLogCurrentValues = [];
|
||||||
for (var i in oldFriendLog) {
|
for (var i in oldFriendLog) {
|
||||||
var friend = oldFriendLog[i];
|
var friend = oldFriendLog[i];
|
||||||
var row = {
|
var row = {
|
||||||
@@ -7127,19 +7125,18 @@ speechSynthesis.getVoices();
|
|||||||
trustLevel: friend.trustLevel
|
trustLevel: friend.trustLevel
|
||||||
};
|
};
|
||||||
this.friendLog.set(friend.id, row);
|
this.friendLog.set(friend.id, row);
|
||||||
database.setFriendLogCurrent(row);
|
friendLogCurrentValues.unshift(row);
|
||||||
}
|
}
|
||||||
|
database.setFriendLogCurrentArray(friendLogCurrentValues);
|
||||||
VRCXStorage.Remove(`${userId}_friendLog`);
|
VRCXStorage.Remove(`${userId}_friendLog`);
|
||||||
this.friendLogTable.data = VRCXStorage.GetArray(`${userId}_friendLogTable`);
|
this.friendLogTable.data = VRCXStorage.GetArray(`${userId}_friendLogTable`);
|
||||||
for (var line of this.friendLogTable.data) {
|
database.addFriendLogHistoryArray(this.friendLogTable.data);
|
||||||
database.addFriendLogHistory(line);
|
|
||||||
}
|
|
||||||
VRCXStorage.Remove(`${userId}_friendLogTable`);
|
VRCXStorage.Remove(`${userId}_friendLogTable`);
|
||||||
VRCXStorage.Remove(`${userId}_friendLogUpdatedAt`);
|
configRepository.setBool(`friendLogInit_${API.currentUser.id}`, true);
|
||||||
this.friendLogInitStatus = true;
|
this.friendLogInitStatus = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
$app.methods.initFriendLog = async function () {
|
$app.methods.getFriendLog = async function () {
|
||||||
this.friendLog = new Map();
|
this.friendLog = new Map();
|
||||||
var friendLogCurrentArray = await database.getFriendLogCurrent();
|
var friendLogCurrentArray = await database.getFriendLogCurrent();
|
||||||
for (var friend of friendLogCurrentArray) {
|
for (var friend of friendLogCurrentArray) {
|
||||||
@@ -7239,14 +7236,14 @@ speechSynthesis.getVoices();
|
|||||||
};
|
};
|
||||||
this.friendLogTable.data.push(friendLogHistory);
|
this.friendLogTable.data.push(friendLogHistory);
|
||||||
database.addFriendLogHistory(friendLogHistory);
|
database.addFriendLogHistory(friendLogHistory);
|
||||||
var friendLogCurrent = {
|
|
||||||
userId: ref.id,
|
|
||||||
displayName: ref.displayName,
|
|
||||||
trustLevel: ref.$trustLevel
|
|
||||||
};
|
|
||||||
this.friendLog.set(ref.id, friendLogCurrent);
|
|
||||||
database.setFriendLogCurrent(friendLogCurrent);
|
|
||||||
}
|
}
|
||||||
|
var friendLogCurrent = {
|
||||||
|
userId: ref.id,
|
||||||
|
displayName: ref.displayName,
|
||||||
|
trustLevel: ref.$trustLevel
|
||||||
|
};
|
||||||
|
this.friendLog.set(ref.id, friendLogCurrent);
|
||||||
|
database.setFriendLogCurrent(friendLogCurrent);
|
||||||
ctx.displayName = ref.displayName;
|
ctx.displayName = ref.displayName;
|
||||||
this.notifyMenu('friendLog');
|
this.notifyMenu('friendLog');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -103,6 +103,14 @@ class Database {
|
|||||||
return feedDatabase;
|
return feedDatabase;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
begin() {
|
||||||
|
sqliteService.executeNonQuery('BEGIN');
|
||||||
|
}
|
||||||
|
|
||||||
|
commit() {
|
||||||
|
sqliteService.executeNonQuery('COMMIT');
|
||||||
|
}
|
||||||
|
|
||||||
async getMemo(userId) {
|
async getMemo(userId) {
|
||||||
var row = {};
|
var row = {};
|
||||||
await sqliteService.execute((dbRow, userId) => {
|
await sqliteService.execute((dbRow, userId) => {
|
||||||
@@ -159,6 +167,25 @@ class Database {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setFriendLogCurrentArray(inputData) {
|
||||||
|
var sqlValues = '';
|
||||||
|
var items = ['userId', 'displayName', 'trustLevel'];
|
||||||
|
for (var line of inputData) {
|
||||||
|
for (var item of items) {
|
||||||
|
if (typeof line[item] !== 'undefined') {
|
||||||
|
line[item] = line[item].replace(/'/g, "\''");
|
||||||
|
} else {
|
||||||
|
line[item] = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sqlValues += `('${line.userId}', '${line.displayName}', '${line.trustLevel}'), `;
|
||||||
|
}
|
||||||
|
sqlValues = sqlValues.slice(0, -2);
|
||||||
|
sqliteService.executeNonQuery(
|
||||||
|
`INSERT OR REPLACE INTO ${Database.userId}_friend_log_current (user_id, display_name, trust_level) VALUES ${sqlValues}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
deleteFriendLogCurrent(userId) {
|
deleteFriendLogCurrent(userId) {
|
||||||
sqliteService.executeNonQuery(
|
sqliteService.executeNonQuery(
|
||||||
`DELETE FROM ${Database.userId}_friend_log_current WHERE user_id = @user_id`,
|
`DELETE FROM ${Database.userId}_friend_log_current WHERE user_id = @user_id`,
|
||||||
@@ -204,6 +231,36 @@ class Database {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
addFriendLogHistoryArray(inputData) {
|
||||||
|
var sqlValues = '';
|
||||||
|
var items = ['created_at', 'type', 'userId', 'displayName', 'previousDisplayName', 'trustLevel', 'previousTrustLevel'];
|
||||||
|
for (var i = 0; i < inputData.length; ++i) {
|
||||||
|
var line = inputData[i];
|
||||||
|
sqlValues += '(';
|
||||||
|
for (var k = 0; k < items.length; ++k) {
|
||||||
|
var item = items[k];
|
||||||
|
var field = '';
|
||||||
|
if (typeof line[item] !== 'undefined') {
|
||||||
|
field = `'${line[item].replace(/'/g, "\''")}'`;
|
||||||
|
} else {
|
||||||
|
field = null;
|
||||||
|
}
|
||||||
|
sqlValues += field;
|
||||||
|
if (k < items.length - 1) {
|
||||||
|
sqlValues += ', ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sqlValues += ')';
|
||||||
|
if (i < inputData.length - 1) {
|
||||||
|
sqlValues += ', ';
|
||||||
|
}
|
||||||
|
//sqlValues `('${line.created_at}', '${line.type}', '${line.userId}', '${line.displayName}', '${line.previousDisplayName}', '${line.trustLevel}', '${line.previousTrustLevel}'), `
|
||||||
|
}
|
||||||
|
sqliteService.executeNonQuery(
|
||||||
|
`INSERT OR IGNORE INTO ${Database.userId}_friend_log_history (created_at, type, user_id, display_name, previous_display_name, trust_level, previous_trust_level) VALUES ${sqlValues}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
deleteFriendLogHistory(rowId) {
|
deleteFriendLogHistory(rowId) {
|
||||||
sqliteService.executeNonQuery(
|
sqliteService.executeNonQuery(
|
||||||
`DELETE FROM ${Database.userId}_friend_log_history WHERE id = @row_id`,
|
`DELETE FROM ${Database.userId}_friend_log_history WHERE id = @row_id`,
|
||||||
|
|||||||
+2
-2
@@ -62,7 +62,7 @@ html
|
|||||||
.detail
|
.detail
|
||||||
span.extra
|
span.extra
|
||||||
span.time {{ feed.created_at | formatDate('HH:MI') }}
|
span.time {{ feed.created_at | formatDate('HH:MI') }}
|
||||||
| 📨 #[span.name(v-text="feed.senderUsername")] #[location(:location="feed.details.worldId")] #[span(v-text="feed.details.inviteMessage")]
|
| 📨 #[span.name(v-text="feed.senderUsername")] #[location(:location="feed.details.worldId" :hint="feed.details.worldName")] #[span(v-text="feed.details.inviteMessage")]
|
||||||
div(v-else-if="feed.type === 'requestInvite'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
|
div(v-else-if="feed.type === 'requestInvite'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
|
||||||
.detail
|
.detail
|
||||||
span.extra
|
span.extra
|
||||||
@@ -184,7 +184,7 @@ html
|
|||||||
.detail
|
.detail
|
||||||
span.extra
|
span.extra
|
||||||
span.time {{ feed.created_at | formatDate('HH:MI') }}
|
span.time {{ feed.created_at | formatDate('HH:MI') }}
|
||||||
| #[span.name(v-text="feed.senderUsername")] has invited you to #[location(:location="feed.details.worldId")] #[span(v-text="feed.details.inviteMessage")]
|
| #[span.name(v-text="feed.senderUsername")] has invited you to #[location(:location="feed.details.worldId" :hint="feed.details.worldName")] #[span(v-text="feed.details.inviteMessage")]
|
||||||
div(v-else-if="feed.type === 'requestInvite'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
|
div(v-else-if="feed.type === 'requestInvite'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }")
|
||||||
.detail
|
.detail
|
||||||
span.extra
|
span.extra
|
||||||
|
|||||||
Reference in New Issue
Block a user