web_lib

Common web application libraries
git clone https://radroots.dev/git/web_lib.git
Log | Files | Refs | LICENSE

commit dbf96d227ac269e7c4958f1ceae75bd6d6cd2267
parent 63813081fc00aa98de5f2207aa1331e4c4fb8c6a
Author: triesap <137732411+triesap@users.noreply.github.com>
Date:   Sat, 26 Oct 2024 21:40:57 +0000

client: add client dialog open photos method. add client fs read binary method, edit imports

Diffstat:
Mclient/src/dialog/tauri.ts | 23+++++++++++++++++++++--
Mclient/src/dialog/types.ts | 5+++++
Mclient/src/fs/tauri.ts | 16+++++++++++++---
Mclient/src/fs/types.ts | 1+
4 files changed, 40 insertions(+), 5 deletions(-)

diff --git a/client/src/dialog/tauri.ts b/client/src/dialog/tauri.ts @@ -1,5 +1,5 @@ -import { confirm, type ConfirmDialogOptions, message } from '@tauri-apps/plugin-dialog'; -import type { IClientDialog, IClientDialogConfirmOpts, IClientDialogKind } from "./types"; +import { confirm, type ConfirmDialogOptions, message, open, type OpenDialogOptions } from '@tauri-apps/plugin-dialog'; +import type { IClientDialog, IClientDialogConfirmOpts, IClientDialogKind, IClientDialogResolve } from "./types"; export class TauriClientDialog implements IClientDialog { public async alert(msg: string, title?: string, kind?: IClientDialogKind): Promise<boolean> { @@ -27,4 +27,23 @@ export class TauriClientDialog implements IClientDialog { return false; }; } + + public async open_photos(): Promise<IClientDialogResolve | undefined> { + try { + const options: OpenDialogOptions = { + multiple: true, + directory: false, + filters: [{ + name: `Image`, + extensions: ['png'] + }] + }; + const res = await open(options) as any; + if (Array.isArray(res)) return { results: res.map(i => String(i)) }; + else if (typeof res === `string`) return { results: [res] }; + return undefined; + } catch (e) { + return undefined; + }; + } } diff --git a/client/src/dialog/types.ts b/client/src/dialog/types.ts @@ -1,3 +1,5 @@ +import type { ResultsList } from "@radroots/utils"; + export type IClientDialogPrompt = { title?: string; message: string; @@ -11,8 +13,11 @@ export type IClientDialogKind = "info" | "warning" | "error"; export type IClientDialogConfirmOpts = string | { title?: string, kind?: IClientDialogKind; message: string; cancel_label?: string; ok_label?: string; }; +export type IClientDialogResolve = ResultsList<string>; + export type IClientDialog = { alert(message: string): Promise<boolean>; confirm(opts: IClientDialogConfirmOpts): Promise<boolean>; + open_photos(): Promise<IClientDialogResolve | undefined>; //prompt(opts: IClientDialogPrompt): Promise<string | false>; }; \ No newline at end of file diff --git a/client/src/fs/tauri.ts b/client/src/fs/tauri.ts @@ -1,10 +1,10 @@ -import { BaseDirectory, exists as fs_exists, open as fs_open } from '@tauri-apps/plugin-fs'; +import { BaseDirectory, exists, open, readFile } from '@tauri-apps/plugin-fs'; import type { IClientFs, IClientFsOpenResult } from "./types"; export class TauriClientFs implements IClientFs { public async exists(path: string): Promise<boolean> { try { - const res = await fs_exists(path, { baseDir: BaseDirectory.AppData }); + const res = await exists(path, { baseDir: BaseDirectory.AppData }); return res; } catch (e) { console.log(`e exists`, e) @@ -14,11 +14,21 @@ export class TauriClientFs implements IClientFs { public async open(path: string): Promise<IClientFsOpenResult | undefined> { try { - const res = await fs_open(path, { read: true, baseDir: BaseDirectory.AppData }); + const res = await open(path, { read: true, baseDir: BaseDirectory.AppData }); return res; } catch (e) { console.log(`e open`, e) return undefined; }; } + + public async read_bin(path: string): Promise<Uint8Array | undefined> { + try { + const res = await readFile(path, { baseDir: BaseDirectory.AppData }); + return res; + } catch (e) { + console.log(`e read_bin`, e) + return undefined; + }; + } } diff --git a/client/src/fs/types.ts b/client/src/fs/types.ts @@ -5,4 +5,5 @@ export type IClientFsOpenResult = FileHandle; export type IClientFs = { exists(path: string): Promise<boolean>; open(path: string): Promise<IClientFsOpenResult | undefined>; + read_bin(path: string): Promise<Uint8Array | undefined>; }; \ No newline at end of file