From d5904d4ee0534de88b8a1e948b87cf2084ff295b Mon Sep 17 00:00:00 2001 From: kieran Date: Mon, 16 Dec 2024 15:49:09 +0000 Subject: [PATCH] feat: larger UI --- src/bin/void_cat_forced_migrate.rs | 8 ++++---- ui_src/src/App.tsx | 2 +- ui_src/src/components/button.tsx | 2 +- ui_src/src/views/files.tsx | 21 ++++++++++++--------- ui_src/src/views/upload.tsx | 27 +++++++++++++++++++++++++-- 5 files changed, 43 insertions(+), 17 deletions(-) diff --git a/src/bin/void_cat_forced_migrate.rs b/src/bin/void_cat_forced_migrate.rs index 3ec0d86..4d2ec2e 100644 --- a/src/bin/void_cat_forced_migrate.rs +++ b/src/bin/void_cat_forced_migrate.rs @@ -28,7 +28,7 @@ async fn main() -> Result<(), anyhow::Error> { let args: ProgramArgs = ProgramArgs::parse(); - let mut report: HashMap> = HashMap::new(); + let mut report: HashMap> = HashMap::new(); let mut binding = NostrCursor::new(args.archive); let mut cursor = Box::pin(binding.walk()); @@ -44,7 +44,7 @@ async fn main() -> Result<(), anyhow::Error> { warn!("Invalid base58 id {}", g); continue; }; - let uuid = if let Ok(u) = Uuid::from_slice_le(base58.as_slice()) { + let _uuid = if let Ok(u) = Uuid::from_slice_le(base58.as_slice()) { u } else { warn!("Invalid uuid {}", g); @@ -52,9 +52,9 @@ async fn main() -> Result<(), anyhow::Error> { }; info!("Got link: {} => {}", g, e.pubkey); if let Some(ur) = report.get_mut(&e.pubkey) { - ur.insert(uuid); + ur.insert(g.to_string()); } else { - report.insert(e.pubkey.clone(), HashSet::from([uuid])); + report.insert(e.pubkey.clone(), HashSet::from([g.to_string()])); } } } diff --git a/ui_src/src/App.tsx b/ui_src/src/App.tsx index 733d289..a2af150 100644 --- a/ui_src/src/App.tsx +++ b/ui_src/src/App.tsx @@ -3,7 +3,7 @@ import Upload from "./views/upload"; function App() { return ( -
+
diff --git a/ui_src/src/components/button.tsx b/ui_src/src/components/button.tsx index d67b47e..2f441f9 100644 --- a/ui_src/src/components/button.tsx +++ b/ui_src/src/components/button.tsx @@ -5,7 +5,7 @@ export default function Button({ className, onClick, ...props -}: { onClick?: (e: React.MouseEvent) => Promise } & Omit< +}: { onClick?: (e: React.MouseEvent) => Promise | void } & Omit< HTMLProps, "type" | "onClick" >) { diff --git a/ui_src/src/views/files.tsx b/ui_src/src/views/files.tsx index 6361bb5..9915d6f 100644 --- a/ui_src/src/views/files.tsx +++ b/ui_src/src/views/files.tsx @@ -18,7 +18,7 @@ export default function FileList({ onPage, onDelete, }: { - files: Array; + files: Array; pages?: number; page?: number; onPage?: (n: number) => void; @@ -30,9 +30,9 @@ export default function FileList({ } function renderInner(f: FileInfo) { - if (f.type?.startsWith("image/")) { + if (f.type?.startsWith("image/") || !f.type) { return ( - + ); } else if (f.type?.startsWith("video/")) { return ( @@ -43,7 +43,10 @@ export default function FileList({ } } - function getInfo(f: File | NostrEvent): FileInfo { + function getInfo(f: File | NostrEvent | FileInfo): FileInfo { + if ("url" in f) { + return f; + } if ("created_at" in f) { return { id: f.tags.find((a) => a[0] === "x")![1], @@ -88,7 +91,7 @@ export default function FileList({ function showGrid() { return ( -
+
{files.map((a) => { const info = getInfo(a); @@ -110,12 +113,12 @@ export default function FileList({ Link - { + {onDelete && { e.preventDefault(); onDelete?.(info.id) }} className="underline"> Delete - + }
{renderInner(info)} @@ -166,12 +169,12 @@ export default function FileList({ Link - { + {onDelete && { e.preventDefault(); onDelete?.(info.id) }} className="underline"> Delete - + }
diff --git a/ui_src/src/views/upload.tsx b/ui_src/src/views/upload.tsx index 7f08da3..84d91ee 100644 --- a/ui_src/src/views/upload.tsx +++ b/ui_src/src/views/upload.tsx @@ -8,10 +8,12 @@ import usePublisher from "../hooks/publisher"; import { Nip96, Nip96FileList } from "../upload/nip96"; import { AdminSelf, Route96 } from "../upload/admin"; import { FormatBytes } from "../const"; +import Report from "../report.json"; export default function Upload() { const [type, setType] = useState<"blossom" | "nip96">("blossom"); const [noCompress, setNoCompress] = useState(false); + const [showLegacy, setShowLegacy] = useState(false); const [toUpload, setToUpload] = useState(); const [self, setSelf] = useState(); const [error, setError] = useState(); @@ -24,6 +26,8 @@ export default function Upload() { const login = useLogin(); const pub = usePublisher(); + const myLegacyFiles = login ? (Report as Record>)[login.pubkey] : []; + const url = import.meta.env.VITE_API_URL || `${location.protocol}//${location.host}`; async function doUpload() { if (!pub) return; @@ -58,7 +62,7 @@ export default function Upload() { setError(undefined); const uploader = new Nip96(url, pub); await uploader.loadInfo(); - const result = await uploader.listFiles(n, 12); + const result = await uploader.listFiles(n, 50); setListedFiles(result); } catch (e) { if (e instanceof Error) { @@ -76,7 +80,7 @@ export default function Upload() { try { setError(undefined); const uploader = new Route96(url, pub); - const result = await uploader.listFiles(n, 12); + const result = await uploader.listFiles(n, 50); setAdminListedFiles(result); } catch (e) { if (e instanceof Error) { @@ -176,11 +180,30 @@ export default function Upload() { List Uploads } + {self &&
Uploads: {self.file_count.toLocaleString()}
Total Size: {FormatBytes(self.total_size)}
} + {login && myLegacyFiles.length > 0 && ( +
+ You have {myLegacyFiles.length.toLocaleString()} files which can be migrated from void.cat +
+ + +
+
+ )} + {showLegacy && ( + ({ id: f, url: `https://void.cat/d/${f}` }))} + /> + )} {listedFiles && (