diff options
| author | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-04-26 22:36:23 +1000 |
|---|---|---|
| committer | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-04-26 22:36:23 +1000 |
| commit | 3c579d0e275cdaf6f2c9589abade94bde7905c82 (patch) | |
| tree | 4b825dc642cb6eb9a060e54bf8d69288fbee4904 /src/services/wallpapers.ts | |
| parent | schemes: fix (diff) | |
| download | caelestia-shell-3c579d0e275cdaf6f2c9589abade94bde7905c82.tar.gz caelestia-shell-3c579d0e275cdaf6f2c9589abade94bde7905c82.tar.bz2 caelestia-shell-3c579d0e275cdaf6f2c9589abade94bde7905c82.zip | |
clean
Remove everything
Diffstat (limited to 'src/services/wallpapers.ts')
| -rw-r--r-- | src/services/wallpapers.ts | 127 |
1 files changed, 0 insertions, 127 deletions
diff --git a/src/services/wallpapers.ts b/src/services/wallpapers.ts deleted file mode 100644 index b5447c2..0000000 --- a/src/services/wallpapers.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { monitorDirectory } from "@/utils/system"; -import Thumbnailer from "@/utils/thumbnailer"; -import { execAsync, GObject, property, register } from "astal"; -import { wallpapers as config } from "config"; -import Monitors from "./monitors"; - -export interface IWallpaper { - path: string; - thumbnails: { - compact: string; - medium: string; - large: string; - }; -} - -export interface ICategory { - path: string; - wallpapers: IWallpaper[]; -} - -@register({ GTypeName: "Wallpapers" }) -export default class Wallpapers extends GObject.Object { - static instance: Wallpapers; - static get_default() { - if (!this.instance) this.instance = new Wallpapers(); - - return this.instance; - } - - #list: IWallpaper[] = []; - #categories: ICategory[] = []; - - @property(Object) - get list() { - return this.#list; - } - - @property(Object) - get categories() { - return this.#categories; - } - - async #listDir(path: { path: string; recursive: boolean; threshold: number }, type: "f" | "d") { - const absPath = path.path.replace("~", HOME); - const maxDepth = path.recursive ? "" : "-maxdepth 1"; - const files = await execAsync(`find ${absPath} ${maxDepth} -path '*/.*' -prune -o -type ${type} -print`); - - if (type === "f" && path.threshold > 0) { - const data = ( - await execAsync([ - "fish", - "-c", - `identify -ping -format '%i %w %h\n' ${files.replaceAll("\n", " ")} ; true`, - ]) - ).split("\n"); - - return data - .filter(l => l && this.#filterSize(l, path.threshold)) - .map(l => l.split(" ").slice(0, -2).join(" ")) - .join("\n"); - } - - return files; - } - - #filterSize(line: string, threshold: number) { - const [width, height] = line.split(" ").slice(-2).map(Number); - const mWidth = Math.max(...Monitors.get_default().list.map(m => m.width)); - const mHeight = Math.max(...Monitors.get_default().list.map(m => m.height)); - - return width >= mWidth * threshold && height >= mHeight * threshold; - } - - async update() { - const results = await Promise.allSettled( - config.paths.get().map(async p => ({ path: p, files: await this.#listDir(p, "f") })) - ); - const successes = results.filter(r => r.status === "fulfilled").map(r => r.value); - - if (!successes.length) { - this.#list = []; - this.notify("list"); - this.#categories = []; - this.notify("categories"); - return; - } - - const files = successes.map(r => r.files.replaceAll("\n", " ")).join(" "); - const list = (await execAsync(["fish", "-c", `identify -ping -format '%i\n' ${files} ; true`])).split("\n"); - - this.#list = await Promise.all( - list.map(async p => ({ - path: p, - thumbnails: { - compact: await Thumbnailer.thumbnail(p, { width: 60, height: 60, exact: true }), - medium: await Thumbnailer.thumbnail(p, { width: 400, height: 150, exact: true }), - large: await Thumbnailer.thumbnail(p, { width: 400, height: 200, exact: true }), - }, - })) - ); - this.#list.sort((a, b) => a.path.localeCompare(b.path)); - this.notify("list"); - - const categories = await Promise.all(successes.map(r => this.#listDir(r.path, "d"))); - this.#categories = categories - .flatMap(c => c.split("\n")) - .map(c => ({ path: c, wallpapers: this.#list.filter(w => w.path.startsWith(c)) })) - .filter(c => c.wallpapers.length > 0) - .sort((a, b) => a.path.localeCompare(b.path)); - this.notify("categories"); - } - - constructor() { - super(); - - this.update().catch(console.error); - - let monitors = config.paths - .get() - .map(p => monitorDirectory(p.path, () => this.update().catch(console.error), p.recursive)); - config.paths.subscribe(v => { - this.update().catch(console.error); - for (const m of monitors) m.cancel(); - monitors = v.map(p => monitorDirectory(p.path, () => this.update().catch(console.error), p.recursive)); - }); - } -} |