feat: minimum support for unrefed object cleanup

This commit is contained in:
Huskydog9988
2025-05-08 19:20:34 -04:00
committed by DecDuck
parent dbded55113
commit 52a7de0a8b
16 changed files with 100 additions and 76 deletions

View File

@ -21,27 +21,27 @@ export default defineEventHandler(async (h3) => {
id: gameId,
},
select: {
mBannerId: true,
mImageLibrary: true,
mCoverId: true,
mBannerObjectId: true,
mImageLibraryObjectIds: true,
mCoverObjectId: true,
},
});
if (!game)
throw createError({ statusCode: 400, statusMessage: "Invalid game ID" });
const imageIndex = game.mImageLibrary.findIndex((e) => e == imageId);
const imageIndex = game.mImageLibraryObjectIds.findIndex((e) => e == imageId);
if (imageIndex == -1)
throw createError({ statusCode: 400, statusMessage: "Image not found" });
game.mImageLibrary.splice(imageIndex, 1);
game.mImageLibraryObjectIds.splice(imageIndex, 1);
await objectHandler.deleteAsSystem(imageId);
if (game.mBannerId === imageId) {
game.mBannerId = game.mImageLibrary[0];
if (game.mBannerObjectId === imageId) {
game.mBannerObjectId = game.mImageLibraryObjectIds[0];
}
if (game.mCoverId === imageId) {
game.mCoverId = game.mImageLibrary[0];
if (game.mCoverObjectId === imageId) {
game.mCoverObjectId = game.mImageLibraryObjectIds[0];
}
const result = await prisma.game.update({
@ -49,14 +49,14 @@ export default defineEventHandler(async (h3) => {
id: gameId,
},
data: {
mBannerId: game.mBannerId,
mImageLibrary: game.mImageLibrary,
mCoverId: game.mCoverId,
mBannerObjectId: game.mBannerObjectId,
mImageLibraryObjectIds: game.mImageLibraryObjectIds,
mCoverObjectId: game.mCoverObjectId,
},
select: {
mBannerId: true,
mImageLibrary: true,
mCoverId: true,
mBannerObjectId: true,
mImageLibraryObjectIds: true,
mCoverObjectId: true,
},
});

View File

@ -47,7 +47,7 @@ export default defineEventHandler(async (h3) => {
id: gameId,
},
data: {
mImageLibrary: {
mImageLibraryObjectIds: {
push: id,
},
},

View File

@ -42,7 +42,7 @@ export default defineEventHandler(async (h3) => {
id: gameId,
},
data: {
mIconId: id,
mIconObjectId: id,
mName: name,
mShortDescription: description,
},

View File

@ -10,8 +10,8 @@ export default defineEventHandler(async (h3) => {
id: true,
mName: true,
mShortDescription: true,
mCoverId: true,
mBannerId: true,
mCoverObjectId: true,
mBannerObjectId: true,
mDevelopers: {
select: {
id: true,

View File

@ -73,7 +73,7 @@ class LibraryManager {
metadataSource: true,
mDevelopers: true,
mPublishers: true,
mIconId: true,
mIconObjectId: true,
libraryBasePath: true,
},
orderBy: {

View File

@ -174,10 +174,10 @@ export class MetadataHandler {
mReviewRating: metadata.reviewRating,
mReleased: metadata.released,
mIconId: metadata.icon,
mBannerId: metadata.bannerId,
mCoverId: metadata.coverId,
mImageLibrary: metadata.images,
mIconObjectId: metadata.icon,
mBannerObjectId: metadata.bannerId,
mCoverObjectId: metadata.coverId,
mImageLibraryObjectIds: metadata.images,
libraryBasePath,
},

View File

@ -77,7 +77,7 @@ class SaveManager {
},
},
data: {
history: {
historyObjectIds: {
push: newSaveObjectId,
},
historyChecksums: {
@ -88,12 +88,12 @@ class SaveManager {
});
const historyLimit = await applicationSettings.get("saveSlotHistoryLimit");
if (newSave.history.length > historyLimit) {
if (newSave.historyObjectIds.length > historyLimit) {
// Delete previous
const safeFromIndex = newSave.history.length - historyLimit;
const safeFromIndex = newSave.historyObjectIds.length - historyLimit;
const toDelete = newSave.history.slice(0, safeFromIndex);
const toKeepObjects = newSave.history.slice(safeFromIndex);
const toDelete = newSave.historyObjectIds.slice(0, safeFromIndex);
const toKeepObjects = newSave.historyObjectIds.slice(safeFromIndex);
const toKeepHashes = newSave.historyChecksums.slice(safeFromIndex);
// Delete objects first, so if we error out, we don't lose track of objects in backend
@ -110,7 +110,7 @@ class SaveManager {
},
},
data: {
history: toKeepObjects,
historyObjectIds: toKeepObjects,
historyChecksums: toKeepHashes,
},
});