Commit Graph
49 Commits
Author SHA1 Message Date
thePR0M3TH3AN 7a29a0b807 Consolidate tag preference filtering stage 2026-01-18 13:38:34 -05:00
thePR0M3TH3AN 0ac64867da Add shared hashtag normalization helper 2026-01-18 13:35:34 -05:00
thePR0M3TH3AN 3a3339a57a Add per-category trusted mute thresholds 2026-01-16 10:49:32 -05:00
google-labs-jules[bot] 8a61acb09c Add debug logging to trace subscription loading hang 2026-01-12 00:10:04 +00:00
google-labs-jules[bot] b07332395b Fix subscription feed hydration and infinite loading state 2026-01-08 19:24:10 +00:00
google-labs-jules[bot] 7d274bc331 feat: incorporate tag preferences into blacklist filter stage
- Implements `hasDisinterestedTag` helper in `js/feedEngine/utils.js` to check for disinterested tags in both raw Nostr tags and NIP-71 metadata.
- Updates `createBlacklistFilterStage` in `js/feedEngine/stages.js` to filter out videos matching `context.runtime.tagPreferences` disinterests.
- Ensures existing blacklist logic remains undisturbed.
- Verified with new unit test `tests/feed-engine-tag-pref.test.mjs` and existing feed engine tests.
2026-01-08 00:52:57 +00:00
google-labs-jules[bot] f2c87051ce feat: add profile hydration to watch history feed
This change introduces `createWatchHistoryProfileHydrationStage` to the
watch history feed pipeline. The stage resolves author profiles for
hydrated videos by:
1. Checking the global `getProfileCacheEntry` for cached profiles.
2. Batching missing profiles into a single Kind 0 relay request.
3. Updating the global cache (`setProfileCacheEntry`) with fetched data.
4. Attaching the resolved profile to `item.metadata.profile`.

This ensures that channel images populate correctly in the watch history
UI (both sidebar and profile modal).
2026-01-07 20:28:44 +00:00
google-labs-jules[bot] c322fcee14 fix(watch-history): add manual refresh and fix dynamic pulling
This commit addresses issues with the watch history not updating dynamically and adds a manual refresh mechanism.

Changes:
- Added a "Refresh" button to the watch history view in `views/history.html` and `js/historyView.js`.
- Updated `watchHistoryService.js` to accept a `forceRefresh` option in `loadLatest`, which bypasses the cache freshness check and triggers a relay fetch.
- Updated `js/feedEngine/watchHistoryFeed.js` to propagate the `forceRefresh` flag from the runtime context to the service.
- Added user feedback (toast messages and logs) for "Clear Local History" and "Republish Now" actions.
- Updated `tests/watch-history.test.mjs` to align with the new `fetchHistory` signature.
2026-01-07 14:05:21 +00:00
google-labs-jules[bot] f2f55830e8 fix: ensure watch history is sorted by most recent first
- Enforce descending month order in `js/nostr/watchHistory.js` by explicitly sorting keys before flattening buckets.
- Update `js/feedEngine/watchHistoryFeed.js` and `js/historyView.js` to use `video.created_at` as a fallback sort key when `watchedAt` is missing or equal.
- Verified logic with `tests/verify_sort.mjs`.
2026-01-07 00:28:39 +00:00
google-labs-jules[bot] 386ddea44a Enhance watch history hydration with relay hints and verbose logging
The watch history hydration process was sometimes failing to retrieve video metadata, resulting in "Untitled video" cards. This was primarily due to only querying the generic relay list and potentially missing content hosted on specific relays.

This commit improves the robustness of `createWatchHistoryHydrationStage` in `js/feedEngine/watchHistoryFeed.js` by:
1.  Collecting unique relay hints from the pointer objects (`item.pointer.relay`) of items needing hydration.
2.  Merging these hints with the user's `readRelays` (or fallback `relays`) list. This ensures that if a specific video is known to exist on a niche relay, that relay is queried during the metadata fetch.
3.  Replacing conditional debug logging with `devLogger.info` and `devLogger.warn` to provide detailed insights into the hydration process (item counts, selected relays, generated filters, and fetch results), aiding in future diagnosis.

These changes ensure the application attempts to fetch metadata from all relevant sources indicated by the history data itself.
2026-01-06 13:30:51 +00:00
google-labs-jules[bot] b03d96f041 Add verbose logging and fix relay selection for watch history hydration
The watch history hydration stage was failing silently when relay connections were unstable or misconfigured. This commit:
1. Replaces the conditional debug logger with `devLogger.info` and `devLogger.warn` to ensure visibility of critical hydration steps.
2. Adds detailed logging for item counts, missing ID/address lists, filter generation, and fetch results.
3. Updates the relay selection logic to prioritize `nostrClient.readRelays` over `nostrClient.relays`. This ensures that hydration attempts query the user's specific read-configured relays, which is crucial for fetching metadata when generic relays may be write-only or restricted.

These changes aid in diagnosing "Untitled video" issues and improve the robustness of the metadata fetch process.
2026-01-06 13:18:32 +00:00
google-labs-jules[bot] 93c88704e0 Fix watch history hydration by prioritizing readRelays
The `createWatchHistoryHydrationStage` in the feed engine was incorrectly relying solely on `nostrClient.relays` for network fetches. This could cause hydration failures if `relays` contained write-only servers or was otherwise restricted. This commit updates the logic to prioritize `nostrClient.readRelays` if available, falling back to `nostrClient.relays`. This ensures that hydration attempts query the correct relays configured for reading data.

Fixes an issue where watch history items would display as "Untitled video" due to failed metadata resolution.
2026-01-06 13:11:39 +00:00
google-labs-jules[bot] 7312fa4fa4 Fix watch history hydration using local cache and address support
Updated `createWatchHistoryHydrationStage` in `js/feedEngine/watchHistoryFeed.js` to first check `nostrClient.allEvents` for video data before querying relays. This ensures that recently watched videos (which are already in memory) are instantly hydrated in the watch history list, fixing the "Untitled video" issue.

Additionally, implemented robust support for hydrating address pointers (`type: 'a'`) by scanning the cache and constructing proper relay filters for missing items. This covers cases where history items reference videos by `kind:pubkey:d-tag` rather than ID.
2026-01-06 04:06:44 +00:00
google-labs-jules[bot] 914e0abc58 Fix watch history hydration for address pointers with colons
Updated `createWatchHistoryHydrationStage` in `js/feedEngine/watchHistoryFeed.js` to properly handle and hydrate watch history items that use address pointers (type 'a'), specifically fixing a bug where d-tags containing colons were being ignored.

Previously, only event ID pointers (type 'e') were being hydrated, and an initial fix for addresses failed for d-tags with colons. This change robustly parses address pointers, constructs appropriate filters, fetches the events, and correctly maps them back to the history items using a `normalizeAddressKey` utility that handles mixed-case pubkeys and complex d-tags.
2026-01-06 03:43:08 +00:00
google-labs-jules[bot] 1f54745840 Fix watch history hydration for address pointers
Updated `createWatchHistoryHydrationStage` in `js/feedEngine/watchHistoryFeed.js` to properly handle and hydrate watch history items that use address pointers (type 'a').

Previously, only event ID pointers (type 'e') were being hydrated, causing videos watched via address pointers to display as "Untitled video" with missing metadata. This change parses the address pointers, constructs appropriate filters (normalizing pubkeys to lowercase while preserving d-tag case), fetches the events, and correctly maps them back to the history items using a robust `normalizeAddressKey` utility.
2026-01-06 03:23:45 +00:00
google-labs-jules[bot] 5724ec4e1e Fix watch history hydration for address pointers
Updated `createWatchHistoryHydrationStage` in `js/feedEngine/watchHistoryFeed.js` to properly handle and hydrate watch history items that use address pointers (type 'a').

Previously, only event ID pointers (type 'e') were being hydrated, causing videos watched via address pointers to display as "Untitled video" with missing metadata. This change parses the address pointers, constructs appropriate filters, fetches the events, and correctly maps them back to the history items.
2026-01-06 02:51:18 +00:00
google-labs-jules[bot] 99c3f60a23 feat: implement video hydration stage for watch history feed
This introduces a new stage in the watch history feed pipeline that fetches missing video metadata from relays. Since watch history storage was optimized to store only event IDs, this hydration step ensures that the UI can display titles and thumbnails without requiring them to be persisted in the history payload itself.

- Implemented `createWatchHistoryHydrationStage` in `js/feedEngine/watchHistoryFeed.js`.
- Integrated `convertEventToVideo` to transform fetched events into usable video objects.
- Added a comprehensive integration test in `tests/watch-history.test.mjs` verifying the full flow from ID-only storage to hydrated feed items.
2026-01-05 20:22:34 +00:00
google-labs-jules[bot] 4c7230f540 Remove metadata storage and handling from watch history
Removes the metadata argument from `WatchHistoryService.publishView` and cleans up the associated caching and resolution logic in `watchHistory.js` and `watchHistoryFeed.js`. Deletes `js/watchHistoryMetadata.js` as it is no longer used.

This simplification ensures watch history strictly manages pointers and timestamps, leaving metadata resolution to higher-level consumers. It also reduces the payload size and complexity of persisted history records.

Tests have been updated to reflect the API changes.
2026-01-05 16:58:59 +00:00
thePR0M3TH3AN e9ce494ccd Remove watch history metadata caching 2026-01-03 09:11:26 -05:00
thePR0M3TH3AN 9dfe7ef20e Fix viewer mute blur regression and update modal overrides 2025-10-26 16:06:40 -04:00
thePR0M3TH3AN b744524521 Hydrate feed timestamps before sorting 2025-10-26 12:05:03 -04:00
thePR0M3TH3AN 89de704336 Use original publish timestamp when sorting feeds 2025-10-26 11:51:49 -04:00
thePR0M3TH3AN 010439998e Sort recent feed by original posting time 2025-10-26 11:34:36 -04:00
thePR0M3TH3AN 91404af8ad Make moderation thresholds resolve at runtime 2025-10-26 10:19:34 -04:00
thePR0M3TH3AN ad01cf852f Propagate tag preferences through feed runtimes 2025-10-25 17:38:31 -04:00
thePR0M3TH3AN 25f190aa90 Extend trusted mute moderation controls 2025-10-25 17:03:29 -04:00
thePR0M3TH3AN fd54cc72fe Refine trusted mute moderation badge 2025-10-25 16:39:15 -04:00
thePR0M3TH3AN 0b34a59516 Blur muted and hidden thumbnails 2025-10-25 16:08:02 -04:00
thePR0M3TH3AN ca56590ce1 Remove admin whitelist hide bypass 2025-10-25 15:04:04 -04:00
thePR0M3TH3AN c575f48a81 Align moderation defaults with instance config 2025-10-24 21:36:10 -04:00
thePR0M3TH3AN a5562b4707 Refactor watch history helpers to new module 2025-10-22 14:08:47 -04:00
thePR0M3TH3AN c1d8a8b9dc Normalize subscription authors to fix empty feed 2025-10-20 21:15:47 -04:00
thePR0M3TH3AN e49483d34d Optimize subscription feed retrieval and rendering 2025-10-20 21:04:52 -04:00
thePR0M3TH3AN 37f291529e Add trusted hide gating to moderation stage 2025-10-20 19:35:48 -04:00
thePR0M3TH3AN dfbda08ec5 Ensure admin whitelist respects moderation thresholds 2025-10-20 17:17:46 -04:00
thePR0M3TH3AN e442b9d31c Add moderation threshold logging 2025-10-20 11:51:53 -04:00
thePR0M3TH3AN bf908c3b05 Optimize subscription author lookup 2025-10-18 21:46:27 -04:00
thePR0M3TH3AN 8492091780 Track trusted mute lists and surface UI signals 2025-10-17 22:09:02 -04:00
thePR0M3TH3AN 397ed7c8ce Harden moderation trust handling 2025-10-17 16:48:07 -04:00
thePR0M3TH3AN 0ec7c5e76c Add moderation overrides to video cards 2025-10-17 16:24:42 -04:00
thePR0M3TH3AN 071a8a3671 Add moderation service and reporting flow 2025-10-17 15:33:09 -04:00
thePR0M3TH3AN 7ae07b1369 refactor: migrate console usage to shared loggers 2025-10-15 14:37:25 -04:00
thePR0M3TH3AN d705cf176b Revert "Refactor logging to centralized logger" 2025-10-15 11:14:10 -04:00
thePR0M3TH3AN 37ba57aa37 Refactor logging to centralized logger 2025-10-15 11:11:14 -04:00
thePR0M3TH3AN 614ff3b1f1 Enable runtime watch history debug logging 2025-10-09 16:18:31 -04:00
thePR0M3TH3AN 507f09dff5 Preserve video metadata in watch history payloads 2025-10-09 11:31:47 -04:00
thePR0M3TH3AN 94eb750854 Fix watch history feed dropping older entries 2025-10-04 17:42:34 -04:00
thePR0M3TH3AN 7c3af36003 Add watch history feed adapter and update renderer 2025-10-04 17:25:43 -04:00
thePR0M3TH3AN f81c97e5a8 feat: introduce feed engine module 2025-10-04 16:21:23 -04:00