Commit Graph
392 Commits
Author SHA1 Message Date
thePR0M3TH3AN 52d2488d17 Refactor nostr signer access 2026-01-18 09:15:18 -05:00
google-labs-jules[bot] 45b20bb58e refactor(ai): extract updateTorrentStatus from js/app.js (agent)
Moved torrent status update logic to `js/ui/torrentStatusController.js` to improve separation of concerns as per `AGENTS.md`. The controller accepts a `getVideoModal` accessor and an `onRemovePoster` callback to decouple it from direct `videoModal` or `Application` dependencies. Added unit tests in `tests/ui/torrentStatusController.test.mjs`.
2026-01-18 03:11:25 +00:00
google-labs-jules[bot] b83f5009e4 I have updated the zap dialog to display the "Done" button on success.
I modified `js/channelProfile.js` to implement the logic that toggles the "Send" button to "Done" and closes the dialog when clicked. Additionally, I updated `js/ui/zapController.js` to prevent the form from resetting entirely on success, which preserves receipts; instead, it now manually clears the comment and sets the completed state.

These changes ensure consistent "Done" button behavior across both the Channel Profile and Video Modal zap interfaces. I also included minor `package.json` updates for linting dependencies.
2026-01-18 01:58:56 +00:00
thePR0M3TH3AN 827e99be6e Merge pull request #1272 from PR0M3TH3AN/nip46-ui-refactor-6379694737496943219
Refactor NIP-46 Login UI
2026-01-16 16:15:08 -05:00
google-labs-jules[bot] cf4c9171bb feat: reconstruct raw content in Event Details modal fallback
- Updated `EventDetailsModal` to handle cases where fetching the raw event fails or returns null.
- Implemented `getRawEvent` logic to reconstruct the `content` JSON string from available video metadata (title, thumbnail, description, etc.) if the raw content is missing.
- Ensures the user can inspect key metadata (like thumbnail URLs) even when the original signed event payload is not available in memory or via network fetch.
- Explicitly marks the signature as "unavailable (cached)" in fallback scenarios.
2026-01-16 20:57:39 +00:00
google-labs-jules[bot] a82c41edb9 feat: reconstruct raw content in Event Details modal fallback
- Updated `EventDetailsModal` to handle cases where fetching the raw event fails or returns null.
- Implemented `getRawEvent` logic to reconstruct the `content` JSON string from available video metadata (title, thumbnail, description, etc.) if the raw content is missing.
- Ensures the user can inspect key metadata (like thumbnail URLs) even when the original signed event payload is not available in memory or via network fetch.
- Explicitly marks the signature as "unavailable (cached)" in fallback scenarios.
2026-01-16 19:41:15 +00:00
google-labs-jules[bot] 4196a6bb42 Refactor NIP-46 login UI to be cleaner and QR-first
- Simplified `components/login-modal.html` to center the QR code and use a "Copy Link" button instead of a large textarea.
- Updated `js/ui/loginModalController.js` to support the new DOM structure and error handling.
- Added `docs/nip46-roadmap.md` to document current state and future features.
2026-01-16 19:40:46 +00:00
thePR0M3TH3AN 5c3230074e Add moderation override tracking by author and content 2026-01-16 13:50:32 -05:00
thePR0M3TH3AN e6f1d54bdb Merge pull request #1267 from PR0M3TH3AN/generic-storage-upload-modal-9485376532964213761
Generic Storage Support for Upload Modal
2026-01-16 10:49:57 -05:00
google-labs-jules[bot] 2b446e8ddd Refactor upload modal for generic storage and read-only config
- Updates Upload Modal UI labels to be provider-agnostic (e.g., 'Storage Credentials', 'Endpoint').
- Implements a read-only 'Summary View' for configured storage connections, collapsing the editable form by default.
- Adds 'Manage Storage' button that navigates to the Profile Modal's storage pane.
- Updates `initUploadModal.js` to inject the navigation callback.
- Updates `r2Service.js` status messages to be generic.
- Fixes unlock flow to ensure UI updates after storage unlock.
2026-01-16 15:44:22 +00:00
thePR0M3TH3AN b983661b41 Add seed-only moderation indicator 2026-01-16 10:26:21 -05:00
thePR0M3TH3AN 24cea57581 Add moderation helper copy for trusted mute hides 2026-01-16 10:18:38 -05:00
thePR0M3TH3AN d2d55849b9 Add trusted moderation stats to profile modal 2026-01-16 09:55:10 -05:00
google-labs-jules[bot] 9ac3cbd07e Fix blur visuals by clearing backdrop and forcing inline filter on SimilarContentCard
- Clears the card backdrop image when blurring is active to prevent the sharp background from showing through the blurred thumbnail (ghosting effect).
- Adds inline `filter: blur(24px)` to the thumbnail image as a fallback to ensure the blur effect is applied even if the `blur-xl` class is overridden or missing.
- Updates `refreshModerationUi` to handle backdrop restoration when unblurring.
2026-01-16 14:16:29 +00:00
google-labs-jules[bot] f6f76e02fd Fix blur visuals by clearing backdrop and forcing inline filter on SimilarContentCard
- Clears the card backdrop image when blurring is active to prevent the sharp background from showing through the blurred thumbnail (ghosting effect).
- Adds inline `filter: blur(24px)` to the thumbnail image as a fallback to ensure the blur effect is applied even if the `blur-xl` class is overridden or missing.
- Updates `refreshModerationUi` to handle backdrop restoration when unblurring.
2026-01-16 14:01:40 +00:00
google-labs-jules[bot] e6ebbb8343 Fix blurred thumbnail visuals and add moderation buttons to SimilarContentCard
- Adds `blur-xl` class to `SimilarContentCard` thumbnails when blurred, ensuring visual consistency.
- Implements `createModerationOverrideButton`, `createModerationHideButton`, and `createModerationBlockButton` in `SimilarContentCard.js` to provide missing interactivity.
- Updates `VideoModal.js` to wire up moderation callbacks (`onModerationOverride`, `onModerationHide`, `onModerationBlock`) when initializing similar content cards, dispatching global moderation events.
- Ensures moderation actions in the similar content sidebar function identically to the main video player.
2026-01-16 13:34:29 +00:00
google-labs-jules[bot] eed0193d18 Fix stuck Create Account button after cancellation
- Fix a logic error where the `isSelectionInProgress` flag was not reset if the user cancelled the "Create Account" flow (or other flows with early returns).
- Wrapped the entire `handleProviderSelection` logic in a `try...finally` block to ensure the flag is always reset, preventing the button from becoming unresponsive.
- Verified with reproduction test that cancelling and re-opening the "Create Account" view now works correctly.
2026-01-16 12:58:55 +00:00
google-labs-jules[bot] a27dcd7a1e Fix double-click issue in LoginModal and add Generate Keys button
- Prevent race condition where double-clicking "Create Account" could stack multiple views, causing navigation issues on cancel.
- Implement "Generate Keys" button in the Create Account view to defer key generation until user action, as requested by the user.
- Ensure keys are not generated immediately upon opening the view.
- Fix memory leak in LoginModalController destroy method.
2026-01-16 12:53:25 +00:00
google-labs-jules[bot] 0e6bc392c6 Fix login modal create account cancellation and key persistence logic
- Always generate fresh keys when opening the Create Account view, as per user request.
- Fix issue where cancelling the Create Account view could trigger a re-entry or double-click behavior by adding event.stopPropagation() to the Cancel button.
- Fix memory leak in LoginModalController destroy method by properly clearing the modal close observer and interval.
2026-01-16 12:42:06 +00:00
google-labs-jules[bot] d04e64d713 feat: ensure storage keys clear on auth change and UI reflects provider
- Added `bitvid:auth-changed` listener in `js/app.js` to trigger `storageService.lock()` and refresh `UploadModal`.
- Implemented `refreshState()` in `js/ui/components/UploadModal.js` to manage secure storage unlocking, sensitive data clearing, and dynamic provider metadata loading.
- Updated `js/ui/profileModalController.js` to prioritize default storage connections and display the provider name (e.g., "Unlocked (R2)") in the status text.
- Ensured sensitive configuration data is nulled out when storage is locked.
2026-01-16 04:06:49 +00:00
google-labs-jules[bot] 35d3b0de73 Implement storage connection testing
Added `testConnection` to `StorageService` and `testS3Connection` to `r2-s3.js`.
Updated `ProfileModalController` to use the new `storageService.testAccess` method for verifying credentials before saving.
The test logic supports both specific bucket checks (via `HeadBucket`) and general credential checks (via `ListBuckets`).
2026-01-16 03:50:13 +00:00
google-labs-jules[bot] cf9d1c08be Refactor UploadModal to use StorageService for secure R2 credentials 2026-01-16 02:35:00 +00:00
google-labs-jules[bot] 621f0e4ce7 feat: implement storage tab in profile modal
- Add Storage tab to Profile Modal HTML with provider selector (R2 default) and connection form
- Wire ProfileModalController to handle tab switching, unlocking storage, and saving/testing connections
- Inject storageService into ProfileModalController via ApplicationBootstrap
- Repurpose Endpoint input as Account ID for R2 configurations
- Implement form validation and lock state handling
2026-01-16 02:05:44 +00:00
google-labs-jules[bot] f27d32758a fix(ui): force Event Details modal z-index via inline style
Applies `z-index: 140` directly to the Event Details modal element via inline styles in JS to guarantee it renders above the Video Player (z-index 130), bypassing potential CSS specificity or build pipeline issues. This resolves the reported regression where the details modal remained obscured.
2026-01-15 22:31:15 +00:00
google-labs-jules[bot] 8e3365682a fix(ui): ensure Event Details modal renders above video player
Assigns a specific ID `eventDetailsModal` to the Event Details modal component and applies explicit z-index rules (using `--z-modal-top-*` tokens) in the CSS to ensure it sits above the video player modal (z-index 130) in the stacking order. This resolves the issue where the details modal would open behind the active player.
2026-01-15 22:02:32 +00:00
thePR0M3TH3AN 6724166f9c Add comments for login modal generation guard 2026-01-15 14:58:20 -05:00
thePR0M3TH3AN 4da17853cd Guard generate key reuse until modal closes 2026-01-15 14:53:36 -05:00
thePR0M3TH3AN b186e216ed Avoid persisting generated keys without passphrase 2026-01-15 14:25:03 -05:00
thePR0M3TH3AN 877ef667bf Merge pull request #1237 from PR0M3TH3AN/feature/create-account-button-1146231712583042044
feat: Add client-side account generation flow
2026-01-15 13:29:46 -05:00
thePR0M3TH3AN c92da1adc3 Normalize playback magnets in video cards 2026-01-15 12:22:20 -05:00
google-labs-jules[bot] 5ee8ec614a feat: add 'Create Account' option to login modal
- Adds a new documentation page `content/nostr-keys.md` explaining Nostr keys.
- Updates the sidebar to include a link to the new documentation.
- Registers a new 'generate' auth provider in `js/services/authProviders/`.
- Updates `components/login-modal.html` with a new template for key generation.
- Implements `promptForGenerateOptions` in `js/ui/loginModalController.js` to handle client-side key generation using `NostrTools`.
- Allows users to generate keys, copy/download them, and log in directly with the new `nsec`.
2026-01-15 16:14:23 +00:00
thePR0M3TH3AN ebd825fb37 Add webseed-only status to WebTorrent probes 2026-01-15 09:37:25 -05:00
google-labs-jules[bot] 4e840c6159 feat: improve magnet link reliability with webseeds
- Update `UploadModal.js` to pre-calculate R2 keys and public URLs before upload.
- Update `torrentHash.js` to embed the calculated video URL as a webseed (`url-list`) in the `.torrent` file.
- Update `r2Service.js` to accept forced keys/URLs and append `&xs=` (pointing to the .torrent file) to the magnet link.
- Ensures magnet links work for peerless downloads via WebSeed (BEP19) and HTTP Seeding (BEP17).
2026-01-15 13:26:27 +00:00
thePR0M3TH3AN a3374f0569 Guard upload when info hash is unavailable 2026-01-14 21:38:27 -05:00
thePR0M3TH3AN 6262a3cb37 Add torrent metadata upload for R2 videos 2026-01-14 21:28:57 -05:00
thePR0M3TH3AN a52aed0a5d Fix event details channel navigation 2026-01-14 20:58:01 -05:00
google-labs-jules[bot] 7dc60c36ef Add playback source toggle (CDN/P2P) to video modal
- Added toggle buttons and stat counters to `video-modal.html`.
- Updated `VideoModal.js` to manage toggle visibility (show if either source exists, disable unavailable option) and dispatch `playback:switch-source` events.
- Updated `app.js` to handle source switching by restarting playback with a `forcedSource`.
- Updated `playbackService.js` to respect `forcedSource` by bypassing probe logic when a specific source is requested.
2026-01-15 01:06:56 +00:00
google-labs-jules[bot] 6c3ac4d49f Implement video source toggle (CDN vs P2P)
- Added source toggle UI in `components/video-modal.html`.
- Updated `VideoModal.js` to manage toggle visibility (only when both URL and Magnet exist), update peer/server counts, and dispatch `playback:switch-source` events.
- Updated `PlaybackService.js` to support a `forcedSource` option, allowing bypassing of the URL probe when "torrent" is forced.
- Updated `app.js` to listen for the toggle event and re-initialize playback with the forced source preference.
- Updated `tests/ui/helpers/jsdom-test-helpers.mjs` to expose necessary globals for JSDOM testing.
- Verified functionality with targeted updates and existing unit tests.
2026-01-14 21:18:46 +00:00
google-labs-jules[bot] 71a9eaf288 feat: add event details modal with edit history navigation
- Added `EventDetailsModal` to display raw JSON and metadata.
- Implemented `open-channel` action to navigate to creator profile.
- Fixed profile image loading by checking `creatorPicture` and `creator.picture`.
- Added `hideModal()` to `Application` class to fix crash in `openCreatorChannel`.
- Wired up "Event Details" menu option in video card menu.
- Ensured edit history is sorted Newest First for navigation.
2026-01-14 20:55:29 +00:00
google-labs-jules[bot] 6794a54fba Fix View Channel button functionality and styling in EventDetailsModal 2026-01-14 20:42:36 +00:00
google-labs-jules[bot] f1d74894f2 Fix View Channel button functionality and styling in EventDetailsModal 2026-01-14 20:28:26 +00:00
google-labs-jules[bot] 1c7daff733 Update Event Details Modal to use hydrateVideoHistory and improved layout 2026-01-14 19:54:38 +00:00
google-labs-jules[bot] 9a6efdc1b6 Add Event Details modal to video card menu 2026-01-14 19:47:23 +00:00
google-labs-jules[bot] 4b5a46c5bd Add Event Details modal to video card menu 2026-01-14 19:29:32 +00:00
google-labs-jules[bot] 4bf3605fd2 Fix: Ensure history pane refreshes on subsequent visits
This change ensures that the profile history pane refreshes its content when the user navigates back to it, addressing a bug where stale data could be displayed.

It implements an optimized strategy:
- On the first load, `ensureInitialLoad` is called, which handles the initial fetch internally.
- On subsequent visits (when the renderer is already initialized), `refresh({ force: true })` is called explicitly to update the list.

The unit test `history pane lazily initializes the watch history renderer` was updated to reflect this behavior, verifying that `ensureInitialLoad` is called once and `refresh` is called on subsequent opens.
2026-01-14 04:05:23 +00:00
thePR0M3TH3AN 06c3d9a978 Add breakpoint token helpers for media queries 2026-01-13 21:26:53 -05:00
thePR0M3TH3AN b48edbb055 Refactor inline styles to CSS rules 2026-01-13 21:13:32 -05:00
google-labs-jules[bot] d6882fb5bb Fix CI, environment, linting, and unit test issues
- Fix circular dependency in `js/adminListStore.js` by importing from `js/nostrClientRegistry.js`.
- Update `js/services/hashtagPreferencesService.js` to include legacy kind 30005 in filters.
- Fix JSDOM mocking in `tests/modal-accessibility.test.mjs` (navigator getter) and `UploadModal` selectors.
- Add `getRoot()` to `js/ui/components/UploadModal.js` for API consistency.
- Update `tests/magnet-utils.test.mjs` expectations to reflect removed default tracker.
- Mock `ensureActiveSignerForPubkey` in `tests/moderation/submit-report.test.mjs`.
- Fix mock loader path in `tests/moderation/trust-seeds.test.mjs` to target `trustBootstrap.js`.
- Fix duplicate pointer tags in `js/nostrEventSchemas.js`'s `buildCommentEvent`.
- Update `tests/nostr/comment-events.test.mjs` and `tests/comment-event-builder.test.mjs` to match current code behavior (legacy kinds, unique tags).
2026-01-13 20:32:06 +00:00
google-labs-jules[bot] 81e8b2ed40 Refine Video Modal moderation UI styles: blur creator avatar and fix text contrast. 2026-01-13 14:28:42 +00:00
google-labs-jules[bot] 0772d2fa09 Refactor Video Modal moderation UI to a persistent bar above the player. 2026-01-13 14:12:14 +00:00