Files
VRCX/src/service/database/tableFixes.js
2025-10-15 12:24:14 +11:00

158 lines
5.8 KiB
JavaScript

import { dbVars } from '../database';
import sqliteService from '../sqlite.js';
const tableFixes = {
async cleanLegendFromFriendLog() {
await sqliteService.executeNonQuery(
`DELETE FROM ${dbVars.userPrefix}_friend_log_history
WHERE type = 'TrustLevel' AND created_at > '2022-05-04T01:00:00.000Z'
AND ((trust_level = 'Veteran User' AND previous_trust_level = 'Trusted User') OR (trust_level = 'Trusted User' AND previous_trust_level = 'Veteran User'))`
);
},
async fixGameLogTraveling() {
var travelingList = [];
await sqliteService.execute((dbRow) => {
var row = {
rowId: dbRow[0],
created_at: dbRow[1],
type: dbRow[2],
displayName: dbRow[3],
location: dbRow[4],
userId: dbRow[5],
time: dbRow[6]
};
travelingList.unshift(row);
}, "SELECT * FROM gamelog_join_leave WHERE type = 'OnPlayerLeft' AND location = 'traveling'");
travelingList.forEach(async (travelingEntry) => {
await sqliteService.execute(
(dbRow) => {
var onPlayingJoin = {
rowId: dbRow[0],
created_at: dbRow[1],
type: dbRow[2],
displayName: dbRow[3],
location: dbRow[4],
userId: dbRow[5],
time: dbRow[6]
};
sqliteService.executeNonQuery(
`UPDATE gamelog_join_leave SET location = @location WHERE id = @rowId`,
{
'@rowId': travelingEntry.rowId,
'@location': onPlayingJoin.location
}
);
},
"SELECT * FROM gamelog_join_leave WHERE type = 'OnPlayerJoined' AND display_name = @displayName AND created_at <= @created_at ORDER BY created_at DESC LIMIT 1",
{
'@displayName': travelingEntry.displayName,
'@created_at': travelingEntry.created_at
}
);
});
},
async fixNegativeGPS() {
var gpsTables = [];
await sqliteService.execute((dbRow) => {
gpsTables.push(dbRow[0]);
}, `SELECT name FROM sqlite_schema WHERE type='table' AND name LIKE '%_gps'`);
gpsTables.forEach((tableName) => {
sqliteService.executeNonQuery(
`UPDATE ${tableName} SET time = 0 WHERE time < 0`
);
});
},
async getBrokenLeaveEntries() {
var instances = await this.getGameLogInstancesTime();
var badEntries = [];
await sqliteService.execute((dbRow) => {
if (typeof dbRow[1] === 'number') {
var ref = instances.get(dbRow[0]);
if (typeof ref !== 'undefined' && dbRow[1] > ref) {
badEntries.push(dbRow[2]);
}
}
}, `SELECT location, time, id FROM gamelog_join_leave WHERE type = 'OnPlayerLeft' AND time > 0`);
return badEntries;
},
async fixBrokenLeaveEntries() {
var badEntries = await this.getBrokenLeaveEntries();
var badEntriesList = '';
var count = badEntries.length;
badEntries.forEach((entry) => {
count--;
if (count === 0) {
badEntriesList = badEntriesList.concat(entry);
} else {
badEntriesList = badEntriesList.concat(`${entry}, `);
}
});
sqliteService.executeNonQuery(
`UPDATE gamelog_join_leave SET time = 0 WHERE id IN (${badEntriesList})`
);
},
async fixBrokenGroupInvites() {
var notificationTables = [];
await sqliteService.execute((dbRow) => {
notificationTables.push(dbRow[0]);
}, `SELECT name FROM sqlite_schema WHERE type='table' AND name LIKE '%_notifications'`);
notificationTables.forEach((tableName) => {
sqliteService.executeNonQuery(
`DELETE FROM ${tableName} WHERE type LIKE '%.%'`
);
});
},
async fixBrokenNotifications() {
await sqliteService.executeNonQuery(
`DELETE FROM ${dbVars.userPrefix}_notifications WHERE (created_at is null or created_at = '')`
);
},
async fixBrokenGroupChange() {
await sqliteService.executeNonQuery(
`DELETE FROM ${dbVars.userPrefix}_notifications WHERE type = 'groupChange' AND created_at < '2024-04-23T03:00:00.000Z'`
);
},
async fixCancelFriendRequestTypo() {
await sqliteService.executeNonQuery(
`UPDATE ${dbVars.userPrefix}_friend_log_history SET type = 'CancelFriendRequest' WHERE type = 'CancelFriendRequst'`
);
},
async getBrokenGameLogDisplayNames() {
var badEntries = [];
await sqliteService.execute((dbRow) => {
badEntries.push({
id: dbRow[0],
displayName: dbRow[1]
});
}, "SELECT id, display_name FROM gamelog_join_leave WHERE display_name LIKE '% (%'");
return badEntries;
},
async fixBrokenGameLogDisplayNames() {
var badEntries = await this.getBrokenGameLogDisplayNames();
badEntries.forEach((entry) => {
var newDisplayName = entry.displayName.split(' (')[0];
sqliteService.executeNonQuery(
`UPDATE gamelog_join_leave SET display_name = @new_display_name WHERE id = @id`,
{
'@new_display_name': newDisplayName,
'@id': entry.id
}
);
});
}
};
export { tableFixes };