{
  "url": "https://api.github.com/repos/luall0/jellynext/releases/289892034",
  "assets_url": "https://api.github.com/repos/luall0/jellynext/releases/289892034/assets",
  "upload_url": "https://uploads.github.com/repos/luall0/jellynext/releases/289892034/assets{?name,label}",
  "html_url": "https://github.com/luall0/jellynext/releases/tag/v1.3.0.0",
  "id": 289892034,
  "author": {
    "login": "github-actions[bot]",
    "id": 41898282,
    "node_id": "MDM6Qm90NDE4OTgyODI=",
    "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
    "gravatar_id": "",
    "url": "https://api.github.com/users/github-actions%5Bbot%5D",
    "html_url": "https://github.com/apps/github-actions",
    "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
    "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
    "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
    "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
    "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
    "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
    "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
    "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
    "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
    "type": "Bot",
    "user_view_type": "public",
    "site_admin": false
  },
  "node_id": "RE_kwDOQNxjas4RR2bC",
  "tag_name": "v1.3.0.0",
  "target_commitish": "main",
  "name": "Jellynext 1.3.0.0",
  "draft": false,
  "immutable": false,
  "prerelease": false,
  "created_at": "2026-02-24T14:38:52Z",
  "updated_at": "2026-02-24T14:39:31Z",
  "published_at": "2026-02-24T14:39:31Z",
  "assets": [
    {
      "url": "https://api.github.com/repos/luall0/jellynext/releases/assets/361496839",
      "id": 361496839,
      "node_id": "RA_kwDOQNxjas4VjAEH",
      "name": "jellynext-v1.3.0.0.zip",
      "label": "",
      "uploader": {
        "login": "github-actions[bot]",
        "id": 41898282,
        "node_id": "MDM6Qm90NDE4OTgyODI=",
        "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/github-actions%5Bbot%5D",
        "html_url": "https://github.com/apps/github-actions",
        "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
        "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
        "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
        "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
        "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
        "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
        "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
        "type": "Bot",
        "user_view_type": "public",
        "site_admin": false
      },
      "content_type": "application/zip",
      "state": "uploaded",
      "size": 263173,
      "digest": "sha256:8e8896b88beed0170bd67f8fc37d1c0613624d16882934dd52c589da05f226f1",
      "download_count": 1432,
      "created_at": "2026-02-24T14:39:30Z",
      "updated_at": "2026-02-24T14:39:30Z",
      "browser_download_url": "https://github.com/luall0/jellynext/releases/download/v1.3.0.0/jellynext-v1.3.0.0.zip"
    }
  ],
  "tarball_url": "https://api.github.com/repos/luall0/jellynext/tarball/v1.3.0.0",
  "zipball_url": "https://api.github.com/repos/luall0/jellynext/zipball/v1.3.0.0",
  "body": "\n### Features\n\n- **Watchlist Sync**: Automatically add Trakt watchlisted items to download systems (Radarr/Sonarr/Jellyseerr)\n  - New per-user settings: `SyncWatchlistMovies` and `SyncWatchlistShows` toggles in Trakt user configuration\n  - Fetches movies via `/sync/watchlist/movies` and shows via `/sync/watchlist/shows` with `extended=full` for genre metadata\n  - Filters out items already in local Jellyfin library and previously processed items\n  - Routes downloads through existing `DownloadProviderFactory` (supports Native, Jellyseerr, and Webhook modes)\n  - Shows default to Season 1 download (Trakt watchlist doesn't specify seasons)\n  - 1-second throttle between downloads to avoid overwhelming download systems\n  - Individual item failures logged without stopping the sync process\n\n- **Watchlist Sync Scheduled Task**: Background task running every 1 hour\n  - More frequent than content sync (6hr) to respond quickly to watchlist changes\n  - Also triggered on startup via `StartupSyncService`\n\n### Improvements\n\n- **State Tracking**: Persistent tracking of processed watchlist items to prevent re-adding\n  - `ProcessedWatchlistMovieIds` (TMDB IDs) and `ProcessedWatchlistShowIds` (TVDB IDs) persisted in configuration\n  - Reset manually by clearing IDs from config to re-trigger downloads\n\n- **Local Library Deduplication**: New `DoesMovieExist()` method in `LocalLibraryService` to check movie existence by TMDB ID (excludes virtual items)\n\n- **Trakt API**: New watchlist endpoints\n  - `GetMovieWatchlist()`: Fetch user's movie watchlist\n  - `GetShowWatchlist()`: Fetch user's show watchlist\n\n- **Configuration UI**: Added watchlist sync toggles to Trakt user settings tab\n\n### Acknowledgments\n\n- Thanks to [@medallyon](https://github.com/medallyon) for implementing the watchlist sync feature"
}