qBitrr2 5.7.0__tar.gz → 5.8.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. {qbitrr2-5.7.0/qBitrr2.egg-info → qbitrr2-5.8.0}/PKG-INFO +19 -1
  2. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/README.md +18 -0
  3. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/config.example.toml +13 -17
  4. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/pyproject.toml +1 -1
  5. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/arss.py +432 -202
  6. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/bundled_data.py +2 -2
  7. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/config.py +1 -1
  8. qbitrr2-5.8.0/qBitrr/database.py +79 -0
  9. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/gen_config.py +84 -41
  10. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/main.py +230 -14
  11. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/search_activity_store.py +9 -39
  12. qbitrr2-5.8.0/qBitrr/static/assets/ConfigView.js +6 -0
  13. qbitrr2-5.8.0/qBitrr/static/assets/ConfigView.js.map +1 -0
  14. qbitrr2-5.8.0/qBitrr/static/assets/LogsView.js +208 -0
  15. qbitrr2-5.8.0/qBitrr/static/assets/LogsView.js.map +1 -0
  16. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/tables.py +11 -0
  17. {qbitrr2-5.7.0 → qbitrr2-5.8.0/qBitrr2.egg-info}/PKG-INFO +19 -1
  18. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr2.egg-info/SOURCES.txt +1 -0
  19. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/setup.cfg +1 -1
  20. qbitrr2-5.7.0/qBitrr/static/assets/ConfigView.js +0 -6
  21. qbitrr2-5.7.0/qBitrr/static/assets/ConfigView.js.map +0 -1
  22. qbitrr2-5.7.0/qBitrr/static/assets/LogsView.js +0 -208
  23. qbitrr2-5.7.0/qBitrr/static/assets/LogsView.js.map +0 -1
  24. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/LICENSE +0 -0
  25. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/MANIFEST.in +0 -0
  26. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/__init__.py +0 -0
  27. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/auto_update.py +0 -0
  28. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/config_version.py +0 -0
  29. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/db_lock.py +0 -0
  30. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/db_recovery.py +0 -0
  31. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/env_config.py +0 -0
  32. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/errors.py +0 -0
  33. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/ffprobe.py +0 -0
  34. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/home_path.py +0 -0
  35. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/logger.py +0 -0
  36. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/ArrView.js +0 -0
  37. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/ArrView.js.map +0 -0
  38. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/ProcessesView.js +0 -0
  39. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/ProcessesView.js.map +0 -0
  40. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/app.css +0 -0
  41. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/app.js +0 -0
  42. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/app.js.map +0 -0
  43. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/build.svg +0 -0
  44. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/check-mark.svg +0 -0
  45. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/close.svg +0 -0
  46. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/download.svg +0 -0
  47. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/gear.svg +0 -0
  48. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/lidarr.svg +0 -0
  49. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/live-streaming.svg +0 -0
  50. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/log.svg +0 -0
  51. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/logo.svg +0 -0
  52. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/plus.svg +0 -0
  53. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/process.svg +0 -0
  54. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/react-select.esm.js +0 -0
  55. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/react-select.esm.js.map +0 -0
  56. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/refresh-arrow.svg +0 -0
  57. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/table.js +0 -0
  58. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/table.js.map +0 -0
  59. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/trash.svg +0 -0
  60. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/up-arrow.svg +0 -0
  61. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/useInterval.js +0 -0
  62. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/useInterval.js.map +0 -0
  63. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/vendor.js +0 -0
  64. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/vendor.js.map +0 -0
  65. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/assets/visibility.svg +0 -0
  66. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/favicon-16x16.png +0 -0
  67. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/favicon-32x32.png +0 -0
  68. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/favicon-48x48.png +0 -0
  69. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/favicon.ico +0 -0
  70. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/icon-192.png +0 -0
  71. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/icon-512.png +0 -0
  72. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/index.html +0 -0
  73. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/logov2-clean.png +0 -0
  74. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/logov2-clean.svg +0 -0
  75. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/manifest.json +0 -0
  76. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/sw.js +0 -0
  77. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/static/vite.svg +0 -0
  78. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/utils.py +0 -0
  79. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/versioning.py +0 -0
  80. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr/webui.py +0 -0
  81. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr2.egg-info/dependency_links.txt +0 -0
  82. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr2.egg-info/entry_points.txt +0 -0
  83. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr2.egg-info/requires.txt +0 -0
  84. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/qBitrr2.egg-info/top_level.txt +0 -0
  85. {qbitrr2-5.7.0 → qbitrr2-5.8.0}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qBitrr2
3
- Version: 5.7.0
3
+ Version: 5.8.0
4
4
  Summary: Intelligent automation for qBittorrent and *Arr apps (Radarr/Sonarr/Lidarr) - health monitoring, instant imports, quality upgrades, request integration
5
5
  Home-page: https://github.com/Feramance/qBitrr
6
6
  Author: Feramance
@@ -169,6 +169,24 @@ services:
169
169
 
170
170
  Access the WebUI at `http://<host>:6969/ui` after startup.
171
171
 
172
+ ## 🆕 What's New in v5.8.0
173
+
174
+ ### Single Consolidated Database
175
+ qBitrr now uses a **single `qbitrr.db` file** for all Arr instances, replacing the previous per-instance database approach.
176
+
177
+ **Benefits:**
178
+ - ✅ Single file to backup instead of 9+ separate databases
179
+ - ✅ 78% code reduction in database initialization
180
+ - ✅ Better performance with shared connection pool
181
+ - ✅ Simplified database management
182
+
183
+ **Migration:**
184
+ - Automatic on first upgrade (5-30 minutes re-sync from Arr APIs)
185
+ - Old databases deleted automatically
186
+ - No manual intervention required
187
+
188
+ [Full Migration Guide →](https://feramance.github.io/qBitrr/getting-started/migration/)
189
+
172
190
  ## ✨ Key Features
173
191
 
174
192
  - **🚀 Multi-qBittorrent Support (v3.0+)** – Manage torrents across multiple qBittorrent instances for load balancing, redundancy, and VPN isolation
@@ -65,6 +65,24 @@ services:
65
65
 
66
66
  Access the WebUI at `http://<host>:6969/ui` after startup.
67
67
 
68
+ ## 🆕 What's New in v5.8.0
69
+
70
+ ### Single Consolidated Database
71
+ qBitrr now uses a **single `qbitrr.db` file** for all Arr instances, replacing the previous per-instance database approach.
72
+
73
+ **Benefits:**
74
+ - ✅ Single file to backup instead of 9+ separate databases
75
+ - ✅ 78% code reduction in database initialization
76
+ - ✅ Better performance with shared connection pool
77
+ - ✅ Simplified database management
78
+
79
+ **Migration:**
80
+ - Automatic on first upgrade (5-30 minutes re-sync from Arr APIs)
81
+ - Old databases deleted automatically
82
+ - No manual intervention required
83
+
84
+ [Full Migration Guide →](https://feramance.github.io/qBitrr/getting-started/migration/)
85
+
68
86
  ## ✨ Key Features
69
87
 
70
88
  - **🚀 Multi-qBittorrent Support (v3.0+)** – Manage torrents across multiple qBittorrent instances for load balancing, redundancy, and VPN isolation
@@ -159,7 +159,7 @@ Password = "CHANGE_ME"
159
159
  # UserName = "admin"
160
160
  # Password = "remotepass"
161
161
  #
162
- # For more information, see: MULTI_QBIT_V3_USER_GUIDE.md
162
+ # For more information, see: docs/advanced/multi-qbittorrent.md
163
163
  # ============================================================
164
164
 
165
165
 
@@ -216,10 +216,10 @@ SearchByYear = true
216
216
  # Reverse search order (Start searching oldest to newest)
217
217
  SearchInReverse = false
218
218
 
219
- # Delay between request searches in seconds
219
+ # Delay (in seconds) between checking for new Overseerr/Ombi requests. Does NOT affect delay between individual search commands (use Settings.SearchLoopDelay for that).
220
220
  SearchRequestsEvery = 300
221
221
 
222
- # Search movies which already have a file in hopes of finding a better quality version.
222
+ # Search media which already have a file in hopes of finding a better quality version.
223
223
  DoUpgradeSearch = false
224
224
 
225
225
  # Do a quality unmet search for existing entries.
@@ -462,10 +462,10 @@ SearchByYear = true
462
462
  # Reverse search order (Start searching oldest to newest)
463
463
  SearchInReverse = false
464
464
 
465
- # Delay between request searches in seconds
465
+ # Delay (in seconds) between checking for new Overseerr/Ombi requests. Does NOT affect delay between individual search commands (use Settings.SearchLoopDelay for that).
466
466
  SearchRequestsEvery = 300
467
467
 
468
- # Search movies which already have a file in hopes of finding a better quality version.
468
+ # Search media which already have a file in hopes of finding a better quality version.
469
469
  DoUpgradeSearch = false
470
470
 
471
471
  # Do a quality unmet search for existing entries.
@@ -687,8 +687,6 @@ ArrErrorCodesToBlocklist = ["Not an upgrade for existing movie file(s)", "Not a
687
687
 
688
688
 
689
689
  [Radarr-1080.EntrySearch]
690
- # All these settings depends on SearchMissing being True
691
-
692
690
  # Should search for Missing files?
693
691
  SearchMissing = true
694
692
 
@@ -701,16 +699,16 @@ Unmonitored = false
701
699
  # That being said I've been daily driving 10 simultaneous tasks for quite a while now with no issues.
702
700
  SearchLimit = 5
703
701
 
704
- # It will order searches by the year the EPISODE was first aired
702
+ # It will order searches by the year the movie was released
705
703
  SearchByYear = true
706
704
 
707
705
  # Reverse search order (Start searching oldest to newest)
708
706
  SearchInReverse = false
709
707
 
710
- # Delay between request searches in seconds
708
+ # Delay (in seconds) between checking for new Overseerr/Ombi requests. Does NOT affect delay between individual search commands (use Settings.SearchLoopDelay for that).
711
709
  SearchRequestsEvery = 300
712
710
 
713
- # Search movies which already have a file in hopes of finding a better quality version.
711
+ # Search media which already have a file in hopes of finding a better quality version.
714
712
  DoUpgradeSearch = false
715
713
 
716
714
  # Do a quality unmet search for existing entries.
@@ -963,8 +961,6 @@ ArrErrorCodesToBlocklist = ["Not an upgrade for existing movie file(s)", "Not a
963
961
 
964
962
 
965
963
  [Radarr-4K.EntrySearch]
966
- # All these settings depends on SearchMissing being True
967
-
968
964
  # Should search for Missing files?
969
965
  SearchMissing = true
970
966
 
@@ -977,16 +973,16 @@ Unmonitored = false
977
973
  # That being said I've been daily driving 10 simultaneous tasks for quite a while now with no issues.
978
974
  SearchLimit = 5
979
975
 
980
- # It will order searches by the year the EPISODE was first aired
976
+ # It will order searches by the year the movie was released
981
977
  SearchByYear = true
982
978
 
983
979
  # Reverse search order (Start searching oldest to newest)
984
980
  SearchInReverse = false
985
981
 
986
- # Delay between request searches in seconds
982
+ # Delay (in seconds) between checking for new Overseerr/Ombi requests. Does NOT affect delay between individual search commands (use Settings.SearchLoopDelay for that).
987
983
  SearchRequestsEvery = 300
988
984
 
989
- # Search movies which already have a file in hopes of finding a better quality version.
985
+ # Search media which already have a file in hopes of finding a better quality version.
990
986
  DoUpgradeSearch = false
991
987
 
992
988
  # Do a quality unmet search for existing entries.
@@ -1248,10 +1244,10 @@ SearchMissing = true
1248
1244
  # Reverse search order (Start searching oldest to newest)
1249
1245
  SearchInReverse = false
1250
1246
 
1251
- # Delay between request searches in seconds
1247
+ # Delay (in seconds) between checking for new Overseerr/Ombi requests. Does NOT affect delay between individual search commands (use Settings.SearchLoopDelay for that).
1252
1248
  SearchRequestsEvery = 300
1253
1249
 
1254
- # Search movies which already have a file in the database in hopes of finding a better quality version.
1250
+ # Search media which already have a file in hopes of finding a better quality version.
1255
1251
  DoUpgradeSearch = false
1256
1252
 
1257
1253
  # Do a quality unmet search for existing entries.
@@ -28,7 +28,7 @@ target-version = ['py311']
28
28
 
29
29
  [tool.poetry]
30
30
  name = "pypi-public"
31
- version = "5.7.0"
31
+ version = "5.8.0"
32
32
  description = "Intelligent automation for qBittorrent and *Arr apps (Radarr/Sonarr/Lidarr) - health monitoring, instant imports, quality upgrades, request integration"
33
33
  authors = ["Drapersniper", "Feramance"]
34
34
  readme = "README.md"