aboutsummaryrefslogtreecommitdiffstats
path: root/packages/shared
diff options
context:
space:
mode:
Diffstat (limited to 'packages/shared')
-rw-r--r--packages/shared/assetdb.ts33
-rw-r--r--packages/shared/queues.ts8
-rw-r--r--packages/shared/types/bookmarks.ts2
3 files changed, 43 insertions, 0 deletions
diff --git a/packages/shared/assetdb.ts b/packages/shared/assetdb.ts
index 89738fcf..974f7893 100644
--- a/packages/shared/assetdb.ts
+++ b/packages/shared/assetdb.ts
@@ -4,6 +4,7 @@ import { Glob } from "glob";
import { z } from "zod";
import serverConfig from "./config";
+import logger from "./logger";
const ROOT_PATH = path.join(serverConfig.dataDir, "assets");
@@ -241,3 +242,35 @@ export async function* getAllAssets() {
};
}
}
+
+export async function storeScreenshot(
+ screenshot: Buffer | undefined,
+ userId: string,
+ jobId: string,
+) {
+ if (!serverConfig.crawler.storeScreenshot) {
+ logger.info(
+ `[Crawler][${jobId}] Skipping storing the screenshot as per the config.`,
+ );
+ return null;
+ }
+ if (!screenshot) {
+ logger.info(
+ `[Crawler][${jobId}] Skipping storing the screenshot as it's empty.`,
+ );
+ return null;
+ }
+ const assetId = newAssetId();
+ const contentType = "image/png";
+ const fileName = "screenshot.png";
+ await saveAsset({
+ userId,
+ assetId,
+ metadata: { contentType, fileName },
+ asset: screenshot,
+ });
+ logger.info(
+ `[Crawler][${jobId}] Stored the screenshot as assetId: ${assetId}`,
+ );
+ return { assetId, contentType, fileName, size: screenshot.byteLength };
+}
diff --git a/packages/shared/queues.ts b/packages/shared/queues.ts
index cbe58f8d..5484ffb2 100644
--- a/packages/shared/queues.ts
+++ b/packages/shared/queues.ts
@@ -98,6 +98,13 @@ export async function triggerSearchDeletion(bookmarkId: string) {
});
}
+export async function triggerReprocessingFixMode(bookmarkId: string) {
+ await AssetPreprocessingQueue.enqueue({
+ bookmarkId,
+ fixMode: true,
+ });
+}
+
export const zvideoRequestSchema = z.object({
bookmarkId: z.string(),
url: z.string(),
@@ -143,6 +150,7 @@ export const FeedQueue = new SqliteQueue<ZFeedRequestSchema>(
// Preprocess Assets
export const zAssetPreprocessingRequestSchema = z.object({
bookmarkId: z.string(),
+ fixMode: z.boolean().optional().default(false),
});
export type AssetPreprocessingRequest = z.infer<
typeof zAssetPreprocessingRequestSchema
diff --git a/packages/shared/types/bookmarks.ts b/packages/shared/types/bookmarks.ts
index b6a74474..9644095c 100644
--- a/packages/shared/types/bookmarks.ts
+++ b/packages/shared/types/bookmarks.ts
@@ -17,6 +17,7 @@ export type ZSortOrder = z.infer<typeof zSortOrder>;
export const zAssetTypesSchema = z.enum([
"screenshot",
+ "assetScreenshot",
"bannerImage",
"fullPageArchive",
"video",
@@ -61,6 +62,7 @@ export const zBookmarkedAssetSchema = z.object({
assetId: z.string(),
fileName: z.string().nullish(),
sourceUrl: z.string().nullish(),
+ size: z.number().nullish(),
});
export type ZBookmarkedAsset = z.infer<typeof zBookmarkedAssetSchema>;