mirror of
https://github.com/Drop-OSS/drop.git
synced 2025-11-13 08:12:40 +10:00
more client routes to support Drop app update
This commit is contained in:
@ -1,4 +1,5 @@
|
|||||||
import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
|
import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
|
||||||
|
import manifestGenerator from "~/server/internal/downloads/manifest";
|
||||||
|
|
||||||
export default defineClientEventHandler(async (h3) => {
|
export default defineClientEventHandler(async (h3) => {
|
||||||
const query = getQuery(h3);
|
const query = getQuery(h3);
|
||||||
@ -9,4 +10,7 @@ export default defineClientEventHandler(async (h3) => {
|
|||||||
statusCode: 400,
|
statusCode: 400,
|
||||||
statusMessage: "Missing id or version in query",
|
statusMessage: "Missing id or version in query",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const manifest = await manifestGenerator.generateManifest(id, version);
|
||||||
|
return manifest;
|
||||||
});
|
});
|
||||||
|
|||||||
15
server/api/v1/client/object/[id]/index.get.ts
Normal file
15
server/api/v1/client/object/[id]/index.get.ts
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
|
||||||
|
|
||||||
|
export default defineClientEventHandler(async (h3, utils) => {
|
||||||
|
const id = getRouterParam(h3, "id");
|
||||||
|
if (!id) throw createError({ statusCode: 400, statusMessage: "Invalid ID" });
|
||||||
|
|
||||||
|
const user = await utils.fetchUser();
|
||||||
|
|
||||||
|
const object = await h3.context.objects.fetchWithPermissions(id, user.id);
|
||||||
|
if (!object)
|
||||||
|
throw createError({ statusCode: 404, statusMessage: "Object not found" });
|
||||||
|
|
||||||
|
setHeader(h3, "Content-Type", object.mime);
|
||||||
|
return object.data;
|
||||||
|
});
|
||||||
8
server/api/v1/client/user/library.get.ts
Normal file
8
server/api/v1/client/user/library.get.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import { defineClientEventHandler } from "~/server/internal/clients/event-handler";
|
||||||
|
import prisma from "~/server/internal/db/database";
|
||||||
|
|
||||||
|
export default defineClientEventHandler(async (h3) => {
|
||||||
|
// TODO return the user's library
|
||||||
|
const games = await prisma.game.findMany({});
|
||||||
|
return games;
|
||||||
|
});
|
||||||
@ -1,3 +1,6 @@
|
|||||||
|
import { GameVersion } from "@prisma/client";
|
||||||
|
import prisma from "../db/database";
|
||||||
|
|
||||||
export type DropChunk = {
|
export type DropChunk = {
|
||||||
permissions: number;
|
permissions: number;
|
||||||
ids: string[];
|
ids: string[];
|
||||||
@ -19,7 +22,7 @@ export type DropGeneratedManifest = DropManifest & {
|
|||||||
};
|
};
|
||||||
|
|
||||||
class ManifestGenerator {
|
class ManifestGenerator {
|
||||||
static generateManifest(
|
private static generateManifestFromMetadata(
|
||||||
rootManifest: DropManifestMetadata,
|
rootManifest: DropManifestMetadata,
|
||||||
...overlays: DropManifestMetadata[]
|
...overlays: DropManifestMetadata[]
|
||||||
): DropGeneratedManifest {
|
): DropGeneratedManifest {
|
||||||
@ -46,6 +49,44 @@ class ManifestGenerator {
|
|||||||
|
|
||||||
return manifest;
|
return manifest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Local function because eventual caching
|
||||||
|
async generateManifest(gameId: string, versionName: string) {
|
||||||
|
const versions: GameVersion[] = [];
|
||||||
|
|
||||||
|
for (let i = 0; true; i++) {
|
||||||
|
const currentVersion = (
|
||||||
|
await prisma.gameVersion.findMany({
|
||||||
|
where: {
|
||||||
|
gameId: gameId,
|
||||||
|
versionName: versionName,
|
||||||
|
},
|
||||||
|
orderBy: {
|
||||||
|
versionIndex: "desc", // Get highest priority first
|
||||||
|
},
|
||||||
|
skip: i,
|
||||||
|
take: 1,
|
||||||
|
})
|
||||||
|
)[0];
|
||||||
|
versions.push(currentVersion);
|
||||||
|
if (!currentVersion.delta) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
const leastToMost = versions.reverse();
|
||||||
|
const metadata: DropManifestMetadata[] = leastToMost.map((e) => {
|
||||||
|
return {
|
||||||
|
manifest: e.dropletManifest as DropManifest,
|
||||||
|
versionName: e.versionName,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
const manifest = ManifestGenerator.generateManifestFromMetadata(
|
||||||
|
metadata[0],
|
||||||
|
...metadata.slice(1)
|
||||||
|
);
|
||||||
|
|
||||||
|
return manifest;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const manifestGenerator = new ManifestGenerator();
|
export const manifestGenerator = new ManifestGenerator();
|
||||||
|
|||||||
Reference in New Issue
Block a user