-
Notifications
You must be signed in to change notification settings - Fork 0
feat(catalog): browse peer catalogs and request titles into *arr #50
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
27 commits
Select commit
Hold shift + click to select a range
cb783cb
feat(catalog): browse a peer's catalog on a dedicated page
roziscoding 0f5897a
feat(catalog): add TMDB config and connection status
roziscoding 92ba226
feat(catalog): enrich peer catalog with TMDB metadata
roziscoding 3adeaab
feat(catalog): add *arr request options modal
roziscoding 2404be3
feat(catalog): request a peer title into Radarr/Sonarr
roziscoding 4867c75
feat(torznab): tag Jack releases with the Internal indexer flag
roziscoding ac8a50e
feat(arr): register a Jack-only custom format and quality profile
roziscoding 6031c41
fix(torznab): embed the requester's key in download URLs
roziscoding 8b37bcd
perf(catalog): enrich peer titles lazily from the client
roziscoding 831c4ea
feat(catalog): direct-download peer movies and ManualImport into *arr
roziscoding 35e0aa0
feat(catalog): direct-download whole TV series per episode
roziscoding 4bd51f8
refactor(arr): drop the now-dead Jack custom format and quality profile
roziscoding 79e673b
fix(catalog): surface failed direct-download starts in requestDownload
roziscoding f5fe87f
feat(ui): added image fallback for TMDB poster cards
roziscoding 58fde90
feat(catalog): aggregated GET /catalog with cross-peer grouping
roziscoding 0db27b9
feat(ui): unified Peer Catalog page with peer picker
roziscoding c2e9676
refactor(ui): remove per-peer catalog page and dead type
roziscoding b5cd7c5
feat(ui): add View in Logflix button to catalog title detail
roziscoding d24199b
feat(ui): add About section with TMDB attribution and app version
roziscoding 02c4c97
feat(ui): stable per-peer colors and plug-style connection status
roziscoding 8c65f9a
feat(ui): shared settings store with adaptive polling
roziscoding a9dc73a
feat(catalog): instant-load skeletons and per-peer download picker
roziscoding f4ef958
chore(ui): reorder package metadata
roziscoding 9645f3f
fix(catalog): report duplicate direct downloads accurately
roziscoding 5f3d75c
fix(catalog): avoid ambiguous grouping and retry metadata
roziscoding a134d65
fix(downloads): track manual import completion
roziscoding 4a67231
fix(arr): fail rows on pruned manual-import commands
roziscoding File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| ALTER TABLE `downloads` ADD `import_mode` text;--> statement-breakpoint | ||
| ALTER TABLE `downloads` ADD `import_target` text; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| ALTER TABLE `downloads` ADD `source_server_id` text;--> statement-breakpoint | ||
|
greptile-apps[bot] marked this conversation as resolved.
|
||
| ALTER TABLE `downloads` ADD `manual_import_command_id` integer; | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,336 @@ | ||
| { | ||
| "version": "6", | ||
| "dialect": "sqlite", | ||
| "id": "364866ab-f386-439e-af39-505eada0b51e", | ||
| "prevId": "db1b9834-4df7-4b99-a413-be6d9a0f5428", | ||
| "tables": { | ||
| "api_keys": { | ||
| "name": "api_keys", | ||
| "columns": { | ||
| "id": { | ||
| "name": "id", | ||
| "type": "integer", | ||
| "primaryKey": true, | ||
| "notNull": true, | ||
| "autoincrement": true | ||
| }, | ||
| "key_hash": { | ||
| "name": "key_hash", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": true, | ||
| "autoincrement": false | ||
| }, | ||
| "name": { | ||
| "name": "name", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": false, | ||
| "autoincrement": false | ||
| }, | ||
| "description": { | ||
| "name": "description", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": false, | ||
| "autoincrement": false | ||
| }, | ||
| "expires_at": { | ||
| "name": "expires_at", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": false, | ||
| "autoincrement": false | ||
| }, | ||
| "created_at": { | ||
| "name": "created_at", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": true, | ||
| "autoincrement": false | ||
| }, | ||
| "updated_at": { | ||
| "name": "updated_at", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": true, | ||
| "autoincrement": false | ||
| } | ||
| }, | ||
| "indexes": { | ||
| "api_keys_key_hash_unique": { | ||
| "name": "api_keys_key_hash_unique", | ||
| "columns": [ | ||
| "key_hash" | ||
| ], | ||
| "isUnique": true | ||
| } | ||
| }, | ||
| "foreignKeys": {}, | ||
| "compositePrimaryKeys": {}, | ||
| "uniqueConstraints": {}, | ||
| "checkConstraints": {} | ||
| }, | ||
| "downloads": { | ||
| "name": "downloads", | ||
| "columns": { | ||
| "id": { | ||
| "name": "id", | ||
| "type": "integer", | ||
| "primaryKey": true, | ||
| "notNull": true, | ||
| "autoincrement": true | ||
| }, | ||
| "torrent_filename": { | ||
| "name": "torrent_filename", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": true, | ||
| "autoincrement": false | ||
| }, | ||
| "peer_id": { | ||
| "name": "peer_id", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": true, | ||
| "autoincrement": false | ||
| }, | ||
| "peer_name": { | ||
| "name": "peer_name", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": true, | ||
| "autoincrement": false | ||
| }, | ||
| "item_id": { | ||
| "name": "item_id", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": true, | ||
| "autoincrement": false | ||
| }, | ||
| "filename": { | ||
| "name": "filename", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": true, | ||
| "autoincrement": false | ||
| }, | ||
| "dest_path": { | ||
| "name": "dest_path", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": true, | ||
| "autoincrement": false | ||
| }, | ||
| "part_path": { | ||
| "name": "part_path", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": true, | ||
| "autoincrement": false | ||
| }, | ||
| "release_size": { | ||
| "name": "release_size", | ||
| "type": "integer", | ||
| "primaryKey": false, | ||
| "notNull": true, | ||
| "autoincrement": false | ||
| }, | ||
| "release_json": { | ||
| "name": "release_json", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": true, | ||
| "autoincrement": false | ||
| }, | ||
| "expected_bytes": { | ||
| "name": "expected_bytes", | ||
| "type": "integer", | ||
| "primaryKey": false, | ||
| "notNull": false, | ||
| "autoincrement": false | ||
| }, | ||
| "expected_bytes_source": { | ||
| "name": "expected_bytes_source", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": false, | ||
| "autoincrement": false | ||
| }, | ||
| "expected_bytes_mismatch": { | ||
| "name": "expected_bytes_mismatch", | ||
| "type": "integer", | ||
| "primaryKey": false, | ||
| "notNull": true, | ||
| "autoincrement": false, | ||
| "default": false | ||
| }, | ||
| "downloaded_bytes": { | ||
| "name": "downloaded_bytes", | ||
| "type": "integer", | ||
| "primaryKey": false, | ||
| "notNull": true, | ||
| "autoincrement": false, | ||
| "default": 0 | ||
| }, | ||
| "attempts": { | ||
| "name": "attempts", | ||
| "type": "integer", | ||
| "primaryKey": false, | ||
| "notNull": true, | ||
| "autoincrement": false, | ||
| "default": 0 | ||
| }, | ||
| "status": { | ||
| "name": "status", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": true, | ||
| "autoincrement": false | ||
| }, | ||
| "started_at": { | ||
| "name": "started_at", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": true, | ||
| "autoincrement": false | ||
| }, | ||
| "updated_at": { | ||
| "name": "updated_at", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": true, | ||
| "autoincrement": false | ||
| }, | ||
| "completed_at": { | ||
| "name": "completed_at", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": false, | ||
| "autoincrement": false | ||
| }, | ||
| "error": { | ||
| "name": "error", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": false, | ||
| "autoincrement": false | ||
| }, | ||
| "qb_category": { | ||
| "name": "qb_category", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": false, | ||
| "autoincrement": false | ||
| }, | ||
| "qb_source_server": { | ||
| "name": "qb_source_server", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": false, | ||
| "autoincrement": false | ||
| }, | ||
| "import_mode": { | ||
| "name": "import_mode", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": false, | ||
| "autoincrement": false | ||
| }, | ||
| "import_target": { | ||
| "name": "import_target", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": false, | ||
| "autoincrement": false | ||
| } | ||
| }, | ||
| "indexes": { | ||
| "downloads_status_idx": { | ||
| "name": "downloads_status_idx", | ||
| "columns": [ | ||
| "status" | ||
| ], | ||
| "isUnique": false | ||
| }, | ||
| "downloads_updated_at_idx": { | ||
| "name": "downloads_updated_at_idx", | ||
| "columns": [ | ||
| "updated_at" | ||
| ], | ||
| "isUnique": false | ||
| } | ||
| }, | ||
| "foreignKeys": {}, | ||
| "compositePrimaryKeys": {}, | ||
| "uniqueConstraints": {}, | ||
| "checkConstraints": { | ||
| "downloads_status_check": { | ||
| "name": "downloads_status_check", | ||
| "value": "\"downloads\".\"status\" in ('downloading', 'import_queued', 'imported', 'failed')" | ||
| }, | ||
| "downloads_expected_bytes_source_check": { | ||
| "name": "downloads_expected_bytes_source_check", | ||
| "value": "\"downloads\".\"expected_bytes_source\" is null or \"downloads\".\"expected_bytes_source\" in ('content_length', 'content_range', 'release_size')" | ||
| } | ||
| } | ||
| }, | ||
| "managed_keys": { | ||
| "name": "managed_keys", | ||
| "columns": { | ||
| "id": { | ||
| "name": "id", | ||
| "type": "integer", | ||
| "primaryKey": true, | ||
| "notNull": true, | ||
| "autoincrement": true | ||
| }, | ||
| "key_hash": { | ||
| "name": "key_hash", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": true, | ||
| "autoincrement": false | ||
| }, | ||
| "server_id": { | ||
| "name": "server_id", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": true, | ||
| "autoincrement": false | ||
| }, | ||
| "created_at": { | ||
| "name": "created_at", | ||
| "type": "text", | ||
| "primaryKey": false, | ||
| "notNull": true, | ||
| "autoincrement": false | ||
| } | ||
| }, | ||
| "indexes": { | ||
| "managed_keys_key_hash_unique": { | ||
| "name": "managed_keys_key_hash_unique", | ||
| "columns": [ | ||
| "key_hash" | ||
| ], | ||
| "isUnique": true | ||
| } | ||
| }, | ||
| "foreignKeys": {}, | ||
| "compositePrimaryKeys": {}, | ||
| "uniqueConstraints": {}, | ||
| "checkConstraints": {} | ||
| } | ||
| }, | ||
| "views": {}, | ||
| "enums": {}, | ||
| "_meta": { | ||
| "schemas": {}, | ||
| "tables": {}, | ||
| "columns": {} | ||
| }, | ||
| "internal": { | ||
| "indexes": {} | ||
| } | ||
| } |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.