mirror of
https://github.com/Drop-OSS/drop.git
synced 2025-11-10 04:22:09 +10:00
feat: minimum support for unrefed object cleanup
This commit is contained in:
@ -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,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@ -47,7 +47,7 @@ export default defineEventHandler(async (h3) => {
|
||||
id: gameId,
|
||||
},
|
||||
data: {
|
||||
mImageLibrary: {
|
||||
mImageLibraryObjectIds: {
|
||||
push: id,
|
||||
},
|
||||
},
|
||||
|
||||
@ -42,7 +42,7 @@ export default defineEventHandler(async (h3) => {
|
||||
id: gameId,
|
||||
},
|
||||
data: {
|
||||
mIconId: id,
|
||||
mIconObjectId: id,
|
||||
mName: name,
|
||||
mShortDescription: description,
|
||||
},
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -73,7 +73,7 @@ class LibraryManager {
|
||||
metadataSource: true,
|
||||
mDevelopers: true,
|
||||
mPublishers: true,
|
||||
mIconId: true,
|
||||
mIconObjectId: true,
|
||||
libraryBasePath: true,
|
||||
},
|
||||
orderBy: {
|
||||
|
||||
@ -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,
|
||||
},
|
||||
|
||||
@ -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,
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user