From 20a8ce9cba83d3de1ad880cbdec904936dbdd4fa Mon Sep 17 00:00:00 2001 From: Ren Amamiya <123083837+reyamir@users.noreply.github.com> Date: Sat, 22 Jul 2023 15:32:34 +0700 Subject: [PATCH] update composer with image upload --- package.json | 2 + pnpm-lock.yaml | 53 +++++++++++++++ src-tauri/Cargo.lock | 37 +++++++++-- src-tauri/Cargo.toml | 1 + src-tauri/src/main.rs | 1 + src/app/auth/unlock.tsx | 2 +- src/index.css | 10 ++- src/libs/storage.tsx | 1 + src/main.tsx | 2 - src/shared/composer/composer.tsx | 96 ++++++++++++++++++++++------ src/shared/composer/mention/item.tsx | 2 +- src/shared/composer/user.tsx | 4 +- src/utils/createBlobFromFile.tsx | 4 +- src/utils/hooks/useUploader.tsx | 82 ++++++++++++++++++++++++ 14 files changed, 261 insertions(+), 36 deletions(-) create mode 100644 src/utils/hooks/useUploader.tsx diff --git a/package.json b/package.json index ed6e8787..ff1fad1e 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "destr": "^1.2.2", "framer-motion": "^10.13.0", "get-urls": "^11.0.0", + "html-to-text": "^9.0.5", "immer": "^10.0.2", "light-bolt11-decoder": "^3.0.0", "nostr-fetch": "^0.12.1", @@ -55,6 +56,7 @@ "tauri-plugin-autostart-api": "github:tauri-apps/tauri-plugin-autostart#v1", "tauri-plugin-sql-api": "github:tauri-apps/tauri-plugin-sql", "tauri-plugin-stronghold-api": "github:tauri-apps/tauri-plugin-stronghold#v1", + "tauri-plugin-upload-api": "github:tauri-apps/tauri-plugin-upload#v1", "tippy.js": "^6.3.7", "zustand": "^4.3.9" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1c3e3262..d55c3a0a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,6 +64,9 @@ dependencies: get-urls: specifier: ^11.0.0 version: 11.0.0 + html-to-text: + specifier: ^9.0.5 + version: 9.0.5 immer: specifier: ^10.0.2 version: 10.0.2 @@ -118,6 +121,9 @@ dependencies: tauri-plugin-stronghold-api: specifier: github:tauri-apps/tauri-plugin-stronghold#v1 version: github.com/tauri-apps/tauri-plugin-stronghold/a2dbe1f937f2f2a1fd27d5a4a7a87ec7b7d1f5d4 + tauri-plugin-upload-api: + specifier: github:tauri-apps/tauri-plugin-upload#v1 + version: github.com/tauri-apps/tauri-plugin-upload/6db7f623b4ba1cd6d25cf7dddb3ec8c442c349c8 tippy.js: specifier: ^6.3.7 version: 6.3.7 @@ -1702,6 +1708,13 @@ packages: '@scure/base': 1.1.1 dev: false + /@selderee/plugin-htmlparser2@0.11.0: + resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} + dependencies: + domhandler: 5.0.3 + selderee: 0.11.0 + dev: false + /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: false @@ -4161,6 +4174,17 @@ packages: lru-cache: 6.0.0 dev: false + /html-to-text@9.0.5: + resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} + engines: {node: '>=14'} + dependencies: + '@selderee/plugin-htmlparser2': 0.11.0 + deepmerge: 4.3.1 + dom-serializer: 2.0.0 + htmlparser2: 8.0.2 + selderee: 0.11.0 + dev: false + /htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} dependencies: @@ -4571,6 +4595,10 @@ packages: language-subtag-registry: 0.3.22 dev: true + /leac@0.6.0: + resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} + dev: false + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -5685,6 +5713,13 @@ packages: entities: 4.5.0 dev: false + /parseley@0.12.1: + resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==} + dependencies: + leac: 0.6.0 + peberminta: 0.9.0 + dev: false + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -5729,6 +5764,10 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + /peberminta@0.9.0: + resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} + dev: false + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -6499,6 +6538,12 @@ packages: loose-envify: 1.4.0 dev: false + /selderee@0.11.0: + resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} + dependencies: + parseley: 0.12.1 + dev: false + /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -7505,3 +7550,11 @@ packages: dependencies: '@tauri-apps/api': 1.4.0 dev: false + + github.com/tauri-apps/tauri-plugin-upload/6db7f623b4ba1cd6d25cf7dddb3ec8c442c349c8: + resolution: {tarball: https://codeload.github.com/tauri-apps/tauri-plugin-upload/tar.gz/6db7f623b4ba1cd6d25cf7dddb3ec8c442c349c8} + name: tauri-plugin-upload-api + version: 0.0.0 + dependencies: + '@tauri-apps/api': 1.4.0 + dev: false diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index a2899fec..5c6480a9 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -2546,6 +2546,7 @@ dependencies = [ "tauri-plugin-single-instance", "tauri-plugin-sql", "tauri-plugin-stronghold", + "tauri-plugin-upload", ] [[package]] @@ -3594,6 +3595,17 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "read-progress-stream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6435842fc2fea44b528719eb8c32203bbc1bb2f5b619fbe0c0a3d8350fd8d2a8" +dependencies = [ + "bytes", + "futures", + "pin-project-lite", +] + [[package]] name = "redox_syscall" version = "0.2.16" @@ -4912,7 +4924,7 @@ dependencies = [ [[package]] name = "tauri-plugin-autostart" version = "0.0.0" -source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#51f20b438e42050cdbfd6c6dc72dbc985a31bbc1" +source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#0863f800b81925884a6a37c042f3d92d433d4a37" dependencies = [ "auto-launch", "log", @@ -4925,7 +4937,7 @@ dependencies = [ [[package]] name = "tauri-plugin-single-instance" version = "0.0.0" -source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#51f20b438e42050cdbfd6c6dc72dbc985a31bbc1" +source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#0863f800b81925884a6a37c042f3d92d433d4a37" dependencies = [ "log", "serde", @@ -4939,7 +4951,7 @@ dependencies = [ [[package]] name = "tauri-plugin-sql" version = "0.0.0" -source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#51f20b438e42050cdbfd6c6dc72dbc985a31bbc1" +source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#0863f800b81925884a6a37c042f3d92d433d4a37" dependencies = [ "futures-core", "log", @@ -4955,7 +4967,7 @@ dependencies = [ [[package]] name = "tauri-plugin-stronghold" version = "0.0.0" -source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#51f20b438e42050cdbfd6c6dc72dbc985a31bbc1" +source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#0863f800b81925884a6a37c042f3d92d433d4a37" dependencies = [ "hex", "iota-crypto 0.23.0", @@ -4968,6 +4980,23 @@ dependencies = [ "zeroize", ] +[[package]] +name = "tauri-plugin-upload" +version = "0.0.0" +source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#0863f800b81925884a6a37c042f3d92d433d4a37" +dependencies = [ + "futures-util", + "log", + "read-progress-stream", + "reqwest", + "serde", + "serde_json", + "tauri", + "thiserror", + "tokio", + "tokio-util", +] + [[package]] name = "tauri-runtime" version = "0.14.0" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index c3735a48..4e74410a 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -20,6 +20,7 @@ tauri = { version = "1.2", features = [ "fs-write-file", "window-create", "path- tauri-plugin-single-instance = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" } tauri-plugin-autostart = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" } tauri-plugin-stronghold = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" } +tauri-plugin-upload = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" } sqlx-cli = {version = "0.7.0", default-features = false, features = ["sqlite"] } rust-argon2 = "1.0" rand = "0.8.5" diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index a1487dd9..9389d67d 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -150,6 +150,7 @@ fn main() { .emit_all("single-instance", Payload { args: argv, cwd }) .unwrap(); })) + .plugin(tauri_plugin_upload::init()) .run(tauri::generate_context!()) .expect("error while running tauri application"); } diff --git a/src/app/auth/unlock.tsx b/src/app/auth/unlock.tsx index 914a4fe5..7867c7da 100644 --- a/src/app/auth/unlock.tsx +++ b/src/app/auth/unlock.tsx @@ -93,7 +93,7 @@ export function UnlockScreen() {