diff --git a/bun.lockb b/bun.lockb index 9dada2b..ff61caf 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/examples/31337-audio-track.json b/examples/31337-audio-track.json new file mode 100644 index 0000000..4f03843 --- /dev/null +++ b/examples/31337-audio-track.json @@ -0,0 +1,49 @@ +{ + "content": "PilotRedSun - Useful", + "created_at": 1711135644, + "id": "7fbc0371e5af6663d063c181dd93d3b71b12c749b46f9897f84e9208e2988ee1", + "kind": 31337, + "pubkey": "1ea10447aefec112de22860771f90e0243202ac121a72b2303a26ddbbb943637", + "sig": "c5a6a59519214fd12ca1b0db323e8e24e9a955d6c026a869c9d52991ab11051777c09a0f91f96d4b9aa0a51acbfb88b2c914a63c50cfb55fb920b28d36742e34", + "tags": [ + [ + "d", + "bc98fb9cn99fvxufigsof" + ], + [ + "title", + "Useful" + ], + [ + "c", + "IDM" + ], + [ + "creator", + "PilotRedSun" + ], + [ + "creator", + "PilotRedSun", + "Artist" + ], + [ + "imeta", + "url https://nostr.build/av/b057855ba5c38a598575e231a82175801d97a0a013d90c6b5761c05a40fecdf4.mp3", + "m audio/mpeg" + ], + [ + "version", + "1.0" + ], + [ + "media", + "https://nostr.build/av/b057855ba5c38a598575e231a82175801d97a0a013d90c6b5761c05a40fecdf4.mp3" + ], + [ + "subject", + "Useful" + ] + ] + } + \ No newline at end of file diff --git a/examples/34235-flare-video.json b/examples/34235-flare-video.json new file mode 100644 index 0000000..0030f25 --- /dev/null +++ b/examples/34235-flare-video.json @@ -0,0 +1,36 @@ +{ + "id": "7e39b40bf2155a7b8e5f60bfae4e46c8b0fb36fefaa8639164ad22830897137b", + "pubkey": "7dd040804955e939e63c9dd6b60aedf6c29b6ce7d3dcc91f37f06c3836f6813d", + "created_at": 1713306006, + "kind": 34235, + "tags": [ + ["d", "dmVyc3VzODM0ODQ3NzQx"], + [ + "url", + "https://player.vimeo.com/progressive_redirect/playback/834847741/rendition/240p/file.mp4?loc=external&oauth2_token_id=1749830961&signature=e946680feb43b5f6975c7c6f9748c84944dff8f0d99539864c644494bb5eff8f" + ], + ["title", "Scoville Unit - Firepit"], + [ + "summary", + "Starring Valentina Isleib and Scoville Unit\n\nDirected by Tarana Parekh\nProduced by HIP Video Productions" + ], + ["published_at", "1713306006"], + ["client", "versusmedia"], + ["m", "video/mp4"], + ["size", "15571944"], + ["duration", "238"], + [ + "thumb", + "https://i.vimeocdn.com/video/1681906723-f59a373300f9996597487112c75d32e8794ac5540bde895cc015dc5df788ff9d-d_1280x720" + ], + [ + "image", + "https://i.vimeocdn.com/video/1681906723-f59a373300f9996597487112c75d32e8794ac5540bde895cc015dc5df788ff9d-d_1280x720" + ], + ["t", "Alternative"], + ["t", "4291231"], + ["t", "versusmedia"] + ], + "content": "Scoville Unit - Firepit", + "sig": "95c90aafa24b5d8fbf00e65581d5b6fc542aef87a0238c7ccd8ec75ffc347f1cbea34ed82a57588fa32e2021d77cd8930fbf2991d2c9898796f0d653f30989d0" +} diff --git a/package.json b/package.json index d0588e2..0f03404 100644 --- a/package.json +++ b/package.json @@ -12,44 +12,44 @@ "analyze": "vite-bundle-visualizer" }, "dependencies": { - "@headlessui/react": "^1.7.18", + "@headlessui/react": "^1.7.19", "@heroicons/react": "^2.1.3", "@noble/hashes": "^1.4.0", - "@nostr-dev-kit/ndk": "^2.7.1", - "@nostr-dev-kit/ndk-cache-dexie": "^2.3.1", - "@tanstack/react-query": "^5.29.0", - "@tanstack/react-query-devtools": "^5.29.0", + "@nostr-dev-kit/ndk": "^2.8.1", + "@nostr-dev-kit/ndk-cache-dexie": "^2.4.1", + "@tanstack/react-query": "^5.32.0", + "@tanstack/react-query-devtools": "^5.32.0", "add": "^2.0.6", "axios": "^1.6.8", "blossom-client-sdk": "^0.4.0", "dayjs": "^1.11.10", "id3js": "^2.1.1", "lodash": "^4.17.21", - "nostr-tools": "^2.4.0", + "nostr-tools": "^2.5.0", "p-limit": "^5.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-pdf": "^7.7.1", - "react-router-dom": "^6.22.3" + "react-router-dom": "^6.23.0" }, "devDependencies": { - "@tanstack/eslint-plugin-query": "^5.28.6", + "@tanstack/eslint-plugin-query": "^5.28.11", "@types/lodash": "^4.17.0", - "@types/react": "^18.2.74", - "@types/react-dom": "^18.2.24", - "@typescript-eslint/eslint-plugin": "^7.2.0", - "@typescript-eslint/parser": "^7.2.0", + "@types/react": "^18.2.79", + "@types/react-dom": "^18.2.25", + "@typescript-eslint/eslint-plugin": "^7.7.1", + "@typescript-eslint/parser": "^7.7.1", "@vitejs/plugin-react-swc": "^3.6.0", "autoprefixer": "^10.4.19", "daisyui": "latest", - "eslint": "^8.57.0", + "eslint": "^9.1.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.6", "postcss": "^8.4.38", "prettier": "^3.2.5", "tailwindcss": "^3.4.3", - "typescript": "^5.4.4", - "vite": "^5.2.8", + "typescript": "^5.4.5", + "vite": "^5.2.10", "vite-bundle-visualizer": "^1.1.0" } } diff --git a/src/components/ServerList/Server.tsx b/src/components/ServerList/Server.tsx index 15c1e02..c2eda11 100644 --- a/src/components/ServerList/Server.tsx +++ b/src/components/ServerList/Server.tsx @@ -1,5 +1,4 @@ import { - ArrowPathIcon, ArrowUpOnSquareStackIcon, CheckBadgeIcon, ClockIcon, @@ -10,7 +9,7 @@ import { ShieldExclamationIcon, XMarkIcon, } from '@heroicons/react/24/outline'; -import { Server as ServerType } from '../../utils/useServers'; +import { Server as ServerType } from '../../utils/useUserServers'; import { ServerInfo } from '../../utils/useServerInfo'; import { formatDate, formatFileSize } from '../../utils'; @@ -51,7 +50,7 @@ const Server = ({
{server.name} - {serverInfo.isLoading && } + {serverInfo.isLoading && }
{serverInfo.isError ? (
diff --git a/src/components/ServerList/ServerList.css b/src/components/ServerList/ServerList.css index 5a8c0d4..230ba33 100644 --- a/src/components/ServerList/ServerList.css +++ b/src/components/ServerList/ServerList.css @@ -44,21 +44,6 @@ @apply cursor-pointer text-center flex flex-col items-center hover:text-white opacity-80 hover:opacity-100 gap-1; } -@keyframes spin { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } -} - -.loading { - @apply w-6 ml-2 inline align-text-bottom; - transform-origin: center; - animation: spin 3s linear infinite; -} - .server-list-header { @apply flex flex-row py-4; } diff --git a/src/components/ServerList/ServerList.tsx b/src/components/ServerList/ServerList.tsx index 5618300..452a145 100644 --- a/src/components/ServerList/ServerList.tsx +++ b/src/components/ServerList/ServerList.tsx @@ -1,6 +1,6 @@ import { PlusIcon, ServerIcon } from '@heroicons/react/24/outline'; import { useServerInfo } from '../../utils/useServerInfo'; -import { Server as ServerType } from '../../utils/useServers'; +import { Server as ServerType } from '../../utils/useUserServers'; import Server from './Server'; import './ServerList.css'; diff --git a/src/pages/Upload.tsx b/src/pages/Upload.tsx index 6b88c6f..1453e50 100644 --- a/src/pages/Upload.tsx +++ b/src/pages/Upload.tsx @@ -1,5 +1,4 @@ -import { ChangeEvent, DragEvent, useEffect, useMemo, useState } from 'react'; -import { Server, useServers } from '../utils/useServers'; +import { ChangeEvent, DragEvent, useEffect, useMemo, useRef, useState } from 'react'; import { BlobDescriptor, BlossomClient, SignedEvent } from 'blossom-client-sdk'; import { useNDK } from '../ndk'; import { useServerInfo } from '../utils/useServerInfo'; @@ -12,6 +11,8 @@ import ProgressBar from '../components/ProgressBar/ProgressBar'; import { formatFileSize } from '../utils'; import FileEventEditor, { FileEventData } from '../components/FileEventEditor/FileEventEditor'; import pLimit from 'p-limit'; +import { Server, useUserServers } from '../utils/useUserServers'; +import useBlossomServerEvents from '../utils/useBlossomServerEvents'; type TransferStats = { enabled: boolean; @@ -31,12 +32,10 @@ steps - upload - server slection, progress bars, upload speed - - - */ function Upload() { - const servers = useServers(); + const servers = useUserServers(); const { signEventTemplate } = useNDK(); const { serverInfo } = useServerInfo(); const queryClient = useQueryClient(); @@ -44,9 +43,10 @@ function Upload() { const [files, setFiles] = useState([]); const [cleanPrivateData, setCleanPrivateData] = useState(true); const limit = pLimit(3); - + const fileInputRef = useRef(null); + const bs = useBlossomServerEvents(); const [fileEventsToPublish, setFileEventsToPublish] = useState([]); - +console.log(bs); // const [resizeImages, setResizeImages] = useState(false); // const [publishToNostr, setPublishToNostr] = useState(false); @@ -173,7 +173,19 @@ function Upload() { }; const clearTransfers = () => { - setTransfers(servers.reduce((acc, s) => ({ ...acc, [s.name]: { enabled: true, size: 0, transferred: 0 } }), {})); + setTransfers(tfs => + servers.reduce( + (acc, s) => ({ + ...acc, + [s.name]: { + enabled: !serverInfo[s.name].isError && (tfs[s.name] !== undefined ? tfs[s.name].enabled : true), + size: 0, + transferred: 0, + }, + }), + {} + ) + ); setFileEventsToPublish([]); }; @@ -222,7 +234,7 @@ function Upload() { <>

Upload

- +