improve sweeping logic

This commit is contained in:
pa
2025-12-20 04:06:02 +09:00
committed by Natsumi
parent f4e1c745e8
commit d23f33d053
4 changed files with 52 additions and 25 deletions

View File

@@ -22,7 +22,7 @@ const feed = {
groupName: dbRow[8] groupName: dbRow[8]
}; };
feedDatabase.push(row); feedDatabase.push(row);
}, `SELECT * FROM ${dbVars.userPrefix}_feed_gps WHERE created_at >= date('${dateOffset}') ORDER BY id DESC`); }, `SELECT * FROM ${dbVars.userPrefix}_feed_gps WHERE created_at >= date('${dateOffset}') ORDER BY id DESC LIMIT ${dbVars.maxTableSize}`);
await sqliteService.execute((dbRow) => { await sqliteService.execute((dbRow) => {
var row = { var row = {
rowId: dbRow[0], rowId: dbRow[0],
@@ -36,7 +36,7 @@ const feed = {
previousStatusDescription: dbRow[7] previousStatusDescription: dbRow[7]
}; };
feedDatabase.push(row); feedDatabase.push(row);
}, `SELECT * FROM ${dbVars.userPrefix}_feed_status WHERE created_at >= date('${dateOffset}') ORDER BY id DESC`); }, `SELECT * FROM ${dbVars.userPrefix}_feed_status WHERE created_at >= date('${dateOffset}') ORDER BY id DESC LIMIT ${dbVars.maxTableSize}`);
await sqliteService.execute((dbRow) => { await sqliteService.execute((dbRow) => {
var row = { var row = {
rowId: dbRow[0], rowId: dbRow[0],
@@ -48,7 +48,7 @@ const feed = {
previousBio: dbRow[5] previousBio: dbRow[5]
}; };
feedDatabase.push(row); feedDatabase.push(row);
}, `SELECT * FROM ${dbVars.userPrefix}_feed_bio WHERE created_at >= date('${dateOffset}') ORDER BY id DESC`); }, `SELECT * FROM ${dbVars.userPrefix}_feed_bio WHERE created_at >= date('${dateOffset}') ORDER BY id DESC LIMIT ${dbVars.maxTableSize}`);
await sqliteService.execute((dbRow) => { await sqliteService.execute((dbRow) => {
var row = { var row = {
rowId: dbRow[0], rowId: dbRow[0],
@@ -64,7 +64,7 @@ const feed = {
previousCurrentAvatarThumbnailImageUrl: dbRow[9] previousCurrentAvatarThumbnailImageUrl: dbRow[9]
}; };
feedDatabase.push(row); feedDatabase.push(row);
}, `SELECT * FROM ${dbVars.userPrefix}_feed_avatar WHERE created_at >= date('${dateOffset}') ORDER BY id DESC`); }, `SELECT * FROM ${dbVars.userPrefix}_feed_avatar WHERE created_at >= date('${dateOffset}') ORDER BY id DESC LIMIT ${dbVars.maxTableSize}`);
await sqliteService.execute((dbRow) => { await sqliteService.execute((dbRow) => {
var row = { var row = {
rowId: dbRow[0], rowId: dbRow[0],
@@ -78,7 +78,7 @@ const feed = {
groupName: dbRow[8] groupName: dbRow[8]
}; };
feedDatabase.push(row); feedDatabase.push(row);
}, `SELECT * FROM ${dbVars.userPrefix}_feed_online_offline WHERE created_at >= date('${dateOffset}') ORDER BY id DESC`); }, `SELECT * FROM ${dbVars.userPrefix}_feed_online_offline WHERE created_at >= date('${dateOffset}') ORDER BY id DESC LIMIT ${dbVars.maxTableSize}`);
var compareByCreatedAt = function (a, b) { var compareByCreatedAt = function (a, b) {
var A = a.created_at; var A = a.created_at;
var B = b.created_at; var B = b.created_at;
@@ -91,6 +91,9 @@ const feed = {
return 0; return 0;
}; };
feedDatabase.sort(compareByCreatedAt); feedDatabase.sort(compareByCreatedAt);
if (feedDatabase.length > dbVars.maxTableSize) {
feedDatabase.splice(0, feedDatabase.length - dbVars.maxTableSize);
}
return feedDatabase; return feedDatabase;
}, },

View File

@@ -103,6 +103,12 @@ const gameLog = {
return 0; return 0;
}; };
gamelogDatabase.sort(compareByCreatedAt); gamelogDatabase.sort(compareByCreatedAt);
if (gamelogDatabase.length > dbVars.maxTableSize) {
gamelogDatabase.splice(
0,
gamelogDatabase.length - dbVars.maxTableSize
);
}
return gamelogDatabase; return gamelogDatabase;
}, },

View File

@@ -173,9 +173,7 @@ export const useFeedStore = defineStore('Feed', () => {
function addFeed(feed) { function addFeed(feed) {
notificationStore.queueFeedNoty(feed); notificationStore.queueFeedNoty(feed);
feedSessionTable.value.push(feed); feedSessionTable.value.push(feed);
if (feedSessionTable.value.length > vrcxStore.maxTableSize + 50) { sweepFeedSessionTable();
feedSessionTable.value.splice(0, 50);
}
sharedFeedStore.updateSharedFeed(false); sharedFeedStore.updateSharedFeed(false);
if ( if (
feedTable.value.filter.length > 0 && feedTable.value.filter.length > 0 &&
@@ -197,29 +195,48 @@ export const useFeedStore = defineStore('Feed', () => {
UiStore.notifyMenu('feed'); UiStore.notifyMenu('feed');
} }
function sweepFeed() { function sweepFeedSessionTable() {
let limit; const data = feedSessionTable.value;
const { data } = feedTable.value; const k = data.length;
const j = data.length; if (!k) {
if (j > vrcxStore.maxTableSize) { return;
data.splice(0, j - vrcxStore.maxTableSize);
} }
// 24 hour limit
const date = new Date(); const date = new Date();
date.setDate(date.getDate() - 1); // 24 hour limit date.setDate(date.getDate() - 1);
limit = date.toJSON(); const limit = date.toJSON();
let i = 0;
const k = feedSessionTable.value.length; if (data[0].created_at < limit) {
while (i < k && feedSessionTable.value[i].created_at < limit) { let i = 0;
++i; while (i < k && data[i].created_at < limit) {
++i;
}
if (i === k) {
feedSessionTable.value = [];
return;
}
if (i) {
data.splice(0, i);
}
} }
if (i === k) {
feedSessionTable.value = []; const maxLen = Math.floor(vrcxStore.maxTableSize * 1.5);
} else if (i) { if (maxLen > 0 && data.length > maxLen + 100) {
feedSessionTable.value.splice(0, i); data.splice(0, 100);
} }
} }
function sweepFeed() {
const { data } = feedTable.value;
const j = data.length;
if (j > vrcxStore.maxTableSize + 50) {
data.splice(0, 50);
}
sweepFeedSessionTable();
}
async function initFeedTable() { async function initFeedTable() {
feedTable.value.loading = true; feedTable.value.loading = true;

View File

@@ -430,7 +430,7 @@ export const useGameLogStore = defineStore('GameLog', () => {
const maxLen = Math.floor(vrcxStore.maxTableSize * 1.5); const maxLen = Math.floor(vrcxStore.maxTableSize * 1.5);
if (maxLen > 0 && data.length > maxLen + 100) { if (maxLen > 0 && data.length > maxLen + 100) {
data.splice(0, data.length - maxLen); data.splice(0, 100);
} }
} }
@@ -1369,6 +1369,7 @@ export const useGameLogStore = defineStore('GameLog', () => {
async function getGameLogTable() { async function getGameLogTable() {
await database.initTables(); await database.initTables();
gameLogSessionTable.value = await database.getGamelogDatabase(); gameLogSessionTable.value = await database.getGamelogDatabase();
sweepGameLogSessionTable();
const dateTill = await database.getLastDateGameLogDatabase(); const dateTill = await database.getLastDateGameLogDatabase();
updateGameLog(dateTill); updateGameLog(dateTill);
} }