summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-04-05 18:17:42 +1100
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-04-05 18:17:42 +1100
commitded52a0f1d980bb9d9ef82866ab57e1b117ac8cc (patch)
treebf88ca1ef02fab96f27c5b51718a6334632c4a46 /src
parentthumbnailer: use sha1sum for caching (diff)
downloadcaelestia-shell-ded52a0f1d980bb9d9ef82866ab57e1b117ac8cc.tar.gz
caelestia-shell-ded52a0f1d980bb9d9ef82866ab57e1b117ac8cc.tar.bz2
caelestia-shell-ded52a0f1d980bb9d9ef82866ab57e1b117ac8cc.zip
thumbnailer: add configs
Diffstat (limited to 'src')
-rw-r--r--src/config/defaults.ts9
-rw-r--r--src/config/index.ts2
-rw-r--r--src/config/types.ts5
-rw-r--r--src/utils/thumbnailer.ts21
4 files changed, 20 insertions, 17 deletions
diff --git a/src/config/defaults.ts b/src/config/defaults.ts
index e3fe68d..f375620 100644
--- a/src/config/defaults.ts
+++ b/src/config/defaults.ts
@@ -147,4 +147,13 @@ export default {
upcomingDays: 7, // Number of days which count as upcoming
notify: true,
},
+ thumbnailer: {
+ maxAttempts: 5,
+ timeBetweenAttempts: 300,
+ defaults: {
+ width: 100,
+ height: 100,
+ exact: true,
+ },
+ },
};
diff --git a/src/config/index.ts b/src/config/index.ts
index 0cb8a60..631aa1d 100644
--- a/src/config/index.ts
+++ b/src/config/index.ts
@@ -10,7 +10,6 @@ export const {
notifpopups,
osds,
sidebar,
- sideleft,
math,
updates,
weather,
@@ -20,5 +19,6 @@ export const {
storage,
wallpapers,
calendar,
+ thumbnailer,
} = config;
export default config;
diff --git a/src/config/types.ts b/src/config/types.ts
index 8936937..226b2dd 100644
--- a/src/config/types.ts
+++ b/src/config/types.ts
@@ -82,4 +82,9 @@ export default {
"calendar.webcals": ARR(STR),
"calendar.upcomingDays": NUM,
"calendar.notify": BOOL,
+ "thumbnailer.maxAttempts": NUM,
+ "thumbnailer.timeBetweenAttempts": NUM,
+ "thumbnailer.defaults.width": NUM,
+ "thumbnailer.defaults.height": NUM,
+ "thumbnailer.defaults.exact": BOOL,
} as { [k: string]: string | string[] | number[] };
diff --git a/src/utils/thumbnailer.ts b/src/utils/thumbnailer.ts
index 8a879b0..0f9448c 100644
--- a/src/utils/thumbnailer.ts
+++ b/src/utils/thumbnailer.ts
@@ -1,4 +1,5 @@
-import { execAsync, Gio, GLib } from "astal";
+import { execAsync, GLib, type Variable } from "astal";
+import { thumbnailer as config } from "config";
export interface ThumbOpts {
width?: number;
@@ -9,19 +10,10 @@ export interface ThumbOpts {
export default class Thumbnailer {
static readonly thumbnailDir = `${CACHE}/thumbnails`;
- static lazy: boolean = true;
- static maxAttempts: number = 5;
- static timeBetweenAttempts: number = 300;
- static defaults: Required<ThumbOpts> = {
- width: 100,
- height: 100,
- exact: true,
- };
-
static readonly #running = new Set<string>();
static getOpt<T extends keyof ThumbOpts>(opt: T, opts: ThumbOpts) {
- return opts[opt] ?? this.defaults[opt];
+ return opts[opt] ?? (config.defaults[opt] as Variable<NonNullable<ThumbOpts[T]>>).get();
}
static async getThumbPath(path: string, opts: ThumbOpts) {
@@ -45,12 +37,12 @@ export default class Thumbnailer {
const cropCmd = this.getOpt("exact", opts) ? `-gravity Center -extent ${width}x${height}` : "";
await execAsync(`magick ${path} -thumbnail ${width}x${height}^ ${cropCmd} -unsharp 0x.5 ${thumbPath}`);
} catch {
- if (attempts >= this.maxAttempts) {
+ if (attempts >= config.maxAttempts.get()) {
console.error(`Failed to generate thumbnail for ${path}`);
return path;
}
- await new Promise(r => setTimeout(r, this.timeBetweenAttempts));
+ await new Promise(r => setTimeout(r, config.timeBetweenAttempts.get()));
return this.#thumbnail(path, opts, attempts + 1);
}
@@ -62,9 +54,6 @@ export default class Thumbnailer {
let thumbPath = await this.getThumbPath(path, opts);
- // If not lazy (i.e. force gen), delete existing thumbnail
- if (!this.lazy) Gio.File.new_for_path(thumbPath).delete(null);
-
// Wait for existing thumbnail for path to finish
while (this.#running.has(path)) await new Promise(r => setTimeout(r, 100));