aboutsummaryrefslogtreecommitdiffstats
path: root/packages/shared
diff options
context:
space:
mode:
authorAhmad Mujahid <55625580+AhmadMuj@users.noreply.github.com>2025-02-17 13:25:16 +0400
committerGitHub <noreply@github.com>2025-02-17 09:25:16 +0000
commite5cb9aa848009ea22c1385e4d33b7edf372979fb (patch)
tree89470d8da8aab10f30bbfccea8d1b0cea08a1408 /packages/shared
parenta14be108736133535e2828b6bbdc8d0a69accd63 (diff)
downloadkarakeep-e5cb9aa848009ea22c1385e4d33b7edf372979fb.tar.zst
feat: Add PDF screenshot generation and display (#995)
* Updated pdf2json to 3.1.5 * Extract and store a screenshot from PDF files using pdf2pic * Installing graphicsmagick and ghostscript * Generate Missing PDF screenshot with tidyAssets worker for backward support * Display PDF screenshot instead of the PDF in web if it exists. * Display PDF screenshot in mobile app if exists. * Updated pnpm-lock.yaml * Removed console.log * Revert the unnecessary changes in package.json * Revert pnpm-lock changes * Prevent rendering PDF files if the screenshot is not generated * refactor: replace useEffect with useMemo for section initialization * feat: show PDF file download button and handle large PDFs by defaulting to screenshot view * feat: add file size to openapi spec * feature: Add Assets preprocessing in fix mode to admin actions * i18n: add reprocess_assets_fix_mode translation * i18n: Add missing ar translations * A bunch of fixes * Fix openspec schema --------- Co-authored-by: Mohamed Bassem <me@mbassem.com>
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>;