qBitrr2 5.8.7__py3-none-any.whl → 5.8.8__py3-none-any.whl
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.
- qBitrr/arss.py +61 -0
- qBitrr/bundled_data.py +2 -2
- qBitrr/config_version.py +1 -1
- qBitrr/database.py +28 -2
- qBitrr/gen_config.py +160 -0
- qBitrr/main.py +229 -0
- qBitrr/qbit_category_manager.py +293 -0
- qBitrr/static/assets/ArrView.js +1 -1
- qBitrr/static/assets/ArrView.js.map +1 -1
- qBitrr/static/assets/ConfigView.js +5 -5
- qBitrr/static/assets/ConfigView.js.map +1 -1
- qBitrr/static/assets/LogsView.js +9 -9
- qBitrr/static/assets/LogsView.js.map +1 -1
- qBitrr/static/assets/ProcessesView.js +1 -1
- qBitrr/static/assets/ProcessesView.js.map +1 -1
- qBitrr/static/assets/QbitCategoriesView.js +2 -0
- qBitrr/static/assets/QbitCategoriesView.js.map +1 -0
- qBitrr/static/assets/StableTable.js +2 -0
- qBitrr/static/assets/StableTable.js.map +1 -0
- qBitrr/static/assets/app.css +1 -1
- qBitrr/static/assets/app.js +23 -10
- qBitrr/static/assets/app.js.map +1 -1
- qBitrr/static/assets/table.js +1 -1
- qBitrr/static/assets/vendor.js +1 -1
- qBitrr/static/assets/vendor.js.map +1 -1
- qBitrr/webui.py +208 -2
- {qbitrr2-5.8.7.dist-info → qbitrr2-5.8.8.dist-info}/METADATA +3 -3
- {qbitrr2-5.8.7.dist-info → qbitrr2-5.8.8.dist-info}/RECORD +32 -27
- {qbitrr2-5.8.7.dist-info → qbitrr2-5.8.8.dist-info}/WHEEL +0 -0
- {qbitrr2-5.8.7.dist-info → qbitrr2-5.8.8.dist-info}/entry_points.txt +0 -0
- {qbitrr2-5.8.7.dist-info → qbitrr2-5.8.8.dist-info}/licenses/LICENSE +0 -0
- {qbitrr2-5.8.7.dist-info → qbitrr2-5.8.8.dist-info}/top_level.txt +0 -0
qBitrr/webui.py
CHANGED
|
@@ -1664,6 +1664,30 @@ class WebUI:
|
|
|
1664
1664
|
}
|
|
1665
1665
|
_populate_process_metadata(arr, kind, payload)
|
|
1666
1666
|
procs.append(payload)
|
|
1667
|
+
# qBit category manager processes
|
|
1668
|
+
for process, meta in list(self.manager._process_registry.items()):
|
|
1669
|
+
if meta.get("role") != "category_manager":
|
|
1670
|
+
continue
|
|
1671
|
+
instance_name = meta.get("instance", "")
|
|
1672
|
+
cat = meta.get("category", f"qbit-{instance_name}")
|
|
1673
|
+
manager = self.manager.qbit_category_managers.get(instance_name)
|
|
1674
|
+
category_count = len(manager.managed_categories) if manager else 0
|
|
1675
|
+
try:
|
|
1676
|
+
alive = bool(process.is_alive())
|
|
1677
|
+
pid = getattr(process, "pid", None)
|
|
1678
|
+
except Exception:
|
|
1679
|
+
alive = False
|
|
1680
|
+
pid = None
|
|
1681
|
+
procs.append(
|
|
1682
|
+
{
|
|
1683
|
+
"category": cat,
|
|
1684
|
+
"name": f"qBit-{instance_name}",
|
|
1685
|
+
"kind": "category",
|
|
1686
|
+
"pid": pid,
|
|
1687
|
+
"alive": alive,
|
|
1688
|
+
"categoryCount": category_count,
|
|
1689
|
+
}
|
|
1690
|
+
)
|
|
1667
1691
|
return {"processes": procs}
|
|
1668
1692
|
|
|
1669
1693
|
@app.get("/api/processes")
|
|
@@ -1679,8 +1703,56 @@ class WebUI:
|
|
|
1679
1703
|
|
|
1680
1704
|
def _restart_process(category: str, kind: str):
|
|
1681
1705
|
kind_normalized = kind.lower()
|
|
1682
|
-
if kind_normalized not in ("search", "torrent", "all"):
|
|
1683
|
-
return jsonify({"error": "kind must be search, torrent or all"}), 400
|
|
1706
|
+
if kind_normalized not in ("search", "torrent", "all", "category"):
|
|
1707
|
+
return jsonify({"error": "kind must be search, torrent, category or all"}), 400
|
|
1708
|
+
|
|
1709
|
+
# Handle category manager restart
|
|
1710
|
+
if kind_normalized == "category":
|
|
1711
|
+
target_proc = None
|
|
1712
|
+
target_meta = None
|
|
1713
|
+
for proc, meta in list(self.manager._process_registry.items()):
|
|
1714
|
+
if meta.get("role") == "category_manager" and meta.get("category") == category:
|
|
1715
|
+
target_proc = proc
|
|
1716
|
+
target_meta = meta
|
|
1717
|
+
break
|
|
1718
|
+
if target_proc is None:
|
|
1719
|
+
return jsonify({"error": f"Unknown category manager {category}"}), 404
|
|
1720
|
+
instance_name = target_meta.get("instance", "")
|
|
1721
|
+
try:
|
|
1722
|
+
target_proc.kill()
|
|
1723
|
+
except Exception:
|
|
1724
|
+
pass
|
|
1725
|
+
try:
|
|
1726
|
+
target_proc.terminate()
|
|
1727
|
+
except Exception:
|
|
1728
|
+
pass
|
|
1729
|
+
try:
|
|
1730
|
+
self.manager.child_processes.remove(target_proc)
|
|
1731
|
+
except Exception:
|
|
1732
|
+
pass
|
|
1733
|
+
self.manager._process_registry.pop(target_proc, None)
|
|
1734
|
+
manager = self.manager.qbit_category_managers.get(instance_name)
|
|
1735
|
+
if manager is None:
|
|
1736
|
+
return (
|
|
1737
|
+
jsonify({"error": f"No category manager for instance {instance_name}"}),
|
|
1738
|
+
404,
|
|
1739
|
+
)
|
|
1740
|
+
import pathos
|
|
1741
|
+
|
|
1742
|
+
new_proc = pathos.helpers.mp.Process(
|
|
1743
|
+
target=manager.run_processing_loop,
|
|
1744
|
+
name=f"qBitCategory-{instance_name}",
|
|
1745
|
+
daemon=False,
|
|
1746
|
+
)
|
|
1747
|
+
new_proc.start()
|
|
1748
|
+
self.manager.child_processes.append(new_proc)
|
|
1749
|
+
self.manager._process_registry[new_proc] = {
|
|
1750
|
+
"category": category,
|
|
1751
|
+
"role": "category_manager",
|
|
1752
|
+
"instance": instance_name,
|
|
1753
|
+
}
|
|
1754
|
+
return jsonify({"status": "ok", "restarted": ["category"]})
|
|
1755
|
+
|
|
1684
1756
|
managed = _managed_objects()
|
|
1685
1757
|
if not managed:
|
|
1686
1758
|
if not _ensure_arr_manager_ready():
|
|
@@ -2092,6 +2164,129 @@ class WebUI:
|
|
|
2092
2164
|
def web_arr_list():
|
|
2093
2165
|
return jsonify(_arr_list_payload())
|
|
2094
2166
|
|
|
2167
|
+
@app.get("/web/qbit/categories")
|
|
2168
|
+
def web_qbit_categories():
|
|
2169
|
+
"""Get all qBit-managed and Arr-managed categories with seeding statistics."""
|
|
2170
|
+
categories_data = []
|
|
2171
|
+
|
|
2172
|
+
# Add qBit-managed categories
|
|
2173
|
+
if self.manager.qbit_category_managers:
|
|
2174
|
+
for instance_name, manager in self.manager.qbit_category_managers.items():
|
|
2175
|
+
client = self.manager.get_client(instance_name)
|
|
2176
|
+
if not client:
|
|
2177
|
+
continue
|
|
2178
|
+
|
|
2179
|
+
for category in manager.managed_categories:
|
|
2180
|
+
try:
|
|
2181
|
+
torrents = client.torrents_info(category=category)
|
|
2182
|
+
|
|
2183
|
+
# Calculate statistics
|
|
2184
|
+
total_count = len(torrents)
|
|
2185
|
+
seeding_count = len(
|
|
2186
|
+
[t for t in torrents if t.state in ("uploading", "stalledUP")]
|
|
2187
|
+
)
|
|
2188
|
+
total_size = sum(t.size for t in torrents)
|
|
2189
|
+
avg_ratio = (
|
|
2190
|
+
sum(t.ratio for t in torrents) / total_count if total_count else 0
|
|
2191
|
+
)
|
|
2192
|
+
avg_seeding_time = (
|
|
2193
|
+
sum(t.seeding_time for t in torrents) / total_count
|
|
2194
|
+
if total_count
|
|
2195
|
+
else 0
|
|
2196
|
+
)
|
|
2197
|
+
|
|
2198
|
+
# Get seeding config for this category
|
|
2199
|
+
seeding_config = manager.get_seeding_config(category)
|
|
2200
|
+
|
|
2201
|
+
categories_data.append(
|
|
2202
|
+
{
|
|
2203
|
+
"category": category,
|
|
2204
|
+
"instance": instance_name,
|
|
2205
|
+
"managedBy": "qbit",
|
|
2206
|
+
"torrentCount": total_count,
|
|
2207
|
+
"seedingCount": seeding_count,
|
|
2208
|
+
"totalSize": total_size,
|
|
2209
|
+
"avgRatio": round(avg_ratio, 2),
|
|
2210
|
+
"avgSeedingTime": avg_seeding_time,
|
|
2211
|
+
"seedingConfig": {
|
|
2212
|
+
"maxRatio": seeding_config.get("MaxUploadRatio", -1),
|
|
2213
|
+
"maxTime": seeding_config.get("MaxSeedingTime", -1),
|
|
2214
|
+
"removeMode": seeding_config.get("RemoveTorrent", -1),
|
|
2215
|
+
"downloadLimit": seeding_config.get(
|
|
2216
|
+
"DownloadRateLimitPerTorrent", -1
|
|
2217
|
+
),
|
|
2218
|
+
"uploadLimit": seeding_config.get(
|
|
2219
|
+
"UploadRateLimitPerTorrent", -1
|
|
2220
|
+
),
|
|
2221
|
+
},
|
|
2222
|
+
}
|
|
2223
|
+
)
|
|
2224
|
+
except Exception as e:
|
|
2225
|
+
self.logger.debug(
|
|
2226
|
+
"Error fetching qBit category '%s' stats for instance '%s': %s",
|
|
2227
|
+
category,
|
|
2228
|
+
instance_name,
|
|
2229
|
+
e,
|
|
2230
|
+
)
|
|
2231
|
+
continue
|
|
2232
|
+
|
|
2233
|
+
# Add Arr-managed categories
|
|
2234
|
+
if hasattr(self.manager, "arr_manager") and self.manager.arr_manager:
|
|
2235
|
+
for arr in self.manager.arr_manager.managed_objects.values():
|
|
2236
|
+
try:
|
|
2237
|
+
# Get the qBit instance for this Arr (use default for now)
|
|
2238
|
+
client = self.manager.client
|
|
2239
|
+
if not client:
|
|
2240
|
+
continue
|
|
2241
|
+
|
|
2242
|
+
category = arr.category
|
|
2243
|
+
torrents = client.torrents_info(category=category)
|
|
2244
|
+
|
|
2245
|
+
# Calculate statistics
|
|
2246
|
+
total_count = len(torrents)
|
|
2247
|
+
seeding_count = len(
|
|
2248
|
+
[t for t in torrents if t.state in ("uploading", "stalledUP")]
|
|
2249
|
+
)
|
|
2250
|
+
total_size = sum(t.size for t in torrents)
|
|
2251
|
+
avg_ratio = (
|
|
2252
|
+
sum(t.ratio for t in torrents) / total_count if total_count else 0
|
|
2253
|
+
)
|
|
2254
|
+
avg_seeding_time = (
|
|
2255
|
+
sum(t.seeding_time for t in torrents) / total_count
|
|
2256
|
+
if total_count
|
|
2257
|
+
else 0
|
|
2258
|
+
)
|
|
2259
|
+
|
|
2260
|
+
categories_data.append(
|
|
2261
|
+
{
|
|
2262
|
+
"category": category,
|
|
2263
|
+
"instance": arr._name,
|
|
2264
|
+
"managedBy": "arr",
|
|
2265
|
+
"torrentCount": total_count,
|
|
2266
|
+
"seedingCount": seeding_count,
|
|
2267
|
+
"totalSize": total_size,
|
|
2268
|
+
"avgRatio": round(avg_ratio, 2),
|
|
2269
|
+
"avgSeedingTime": avg_seeding_time,
|
|
2270
|
+
"seedingConfig": {
|
|
2271
|
+
"maxRatio": arr.seeding_mode_global_max_upload_ratio,
|
|
2272
|
+
"maxTime": arr.seeding_mode_global_max_seeding_time,
|
|
2273
|
+
"removeMode": arr.seeding_mode_global_remove_torrent,
|
|
2274
|
+
"downloadLimit": arr.seeding_mode_global_download_limit,
|
|
2275
|
+
"uploadLimit": arr.seeding_mode_global_upload_limit,
|
|
2276
|
+
},
|
|
2277
|
+
}
|
|
2278
|
+
)
|
|
2279
|
+
except Exception as e:
|
|
2280
|
+
self.logger.debug(
|
|
2281
|
+
"Error fetching Arr category '%s' stats for instance '%s': %s",
|
|
2282
|
+
getattr(arr, "category", "unknown"),
|
|
2283
|
+
getattr(arr, "_name", "unknown"),
|
|
2284
|
+
e,
|
|
2285
|
+
)
|
|
2286
|
+
continue
|
|
2287
|
+
|
|
2288
|
+
return jsonify({"categories": categories_data, "ready": True})
|
|
2289
|
+
|
|
2095
2290
|
@app.get("/api/meta")
|
|
2096
2291
|
def api_meta():
|
|
2097
2292
|
if (resp := require_token()) is not None:
|
|
@@ -2221,11 +2416,21 @@ class WebUI:
|
|
|
2221
2416
|
name = getattr(arr, "_name", k)
|
|
2222
2417
|
category = getattr(arr, "category", k)
|
|
2223
2418
|
arrs.append({"category": category, "name": name, "type": t, "alive": alive})
|
|
2419
|
+
# WebUI settings
|
|
2420
|
+
webui_settings = {
|
|
2421
|
+
"LiveArr": CONFIG.get("WebUI.LiveArr", fallback=True),
|
|
2422
|
+
"GroupSonarr": CONFIG.get("WebUI.GroupSonarr", fallback=True),
|
|
2423
|
+
"GroupLidarr": CONFIG.get("WebUI.GroupLidarr", fallback=True),
|
|
2424
|
+
"Theme": CONFIG.get("WebUI.Theme", fallback="Dark"),
|
|
2425
|
+
"ViewDensity": CONFIG.get("WebUI.ViewDensity", fallback="Comfortable"),
|
|
2426
|
+
}
|
|
2427
|
+
|
|
2224
2428
|
return {
|
|
2225
2429
|
"qbit": qb, # Legacy single-instance (default) for backward compatibility
|
|
2226
2430
|
"qbitInstances": qbit_instances, # Multi-instance info
|
|
2227
2431
|
"arrs": arrs,
|
|
2228
2432
|
"ready": _ensure_arr_manager_ready(),
|
|
2433
|
+
"webui": webui_settings,
|
|
2229
2434
|
}
|
|
2230
2435
|
|
|
2231
2436
|
@app.get("/api/status")
|
|
@@ -2421,6 +2626,7 @@ class WebUI:
|
|
|
2421
2626
|
"WebUI.GroupSonarr",
|
|
2422
2627
|
"WebUI.GroupLidarr",
|
|
2423
2628
|
"WebUI.Theme",
|
|
2629
|
+
"WebUI.ViewDensity",
|
|
2424
2630
|
}
|
|
2425
2631
|
webui_restart_keys = {
|
|
2426
2632
|
"WebUI.Host",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: qBitrr2
|
|
3
|
-
Version: 5.8.
|
|
3
|
+
Version: 5.8.8
|
|
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
|
|
@@ -171,7 +171,7 @@ Access the WebUI at `http://<host>:6969/ui` after startup.
|
|
|
171
171
|
|
|
172
172
|
## ✨ Key Features
|
|
173
173
|
|
|
174
|
-
- **🚀 Multi-qBittorrent Support (
|
|
174
|
+
- **🚀 Multi-qBittorrent Support (v5.7.x+)** – Manage torrents across multiple qBittorrent instances for load balancing, redundancy, and VPN isolation
|
|
175
175
|
- **🚑 Torrent Health Monitoring** – Detect stalled/failed downloads, auto-blacklist, trigger re-searches
|
|
176
176
|
- **🔍 Automated Search** – Missing media, quality upgrades, custom format scoring
|
|
177
177
|
- **🎯 Request Integration** – Pull requests from Overseerr/Ombi, prioritize user-requested media
|
|
@@ -206,7 +206,7 @@ Access the WebUI at `http://<host>:6969/ui` after startup.
|
|
|
206
206
|
CompletedDownloadFolder = "/path/to/completed"
|
|
207
207
|
```
|
|
208
208
|
|
|
209
|
-
### 🆕 Multi-qBittorrent (
|
|
209
|
+
### 🆕 Multi-qBittorrent (v5.7.x+)
|
|
210
210
|
|
|
211
211
|
Manage torrents across multiple qBittorrent instances:
|
|
212
212
|
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
qBitrr/__init__.py,sha256=smiPIV7d2lMJ_KTtFdAVlxLEBobFTheILdgry1iqpjQ,405
|
|
2
|
-
qBitrr/arss.py,sha256=
|
|
2
|
+
qBitrr/arss.py,sha256=EUy9Sze2t4in9S918laDrSdYQgC_FjoBNyja6EiwBZY,363464
|
|
3
3
|
qBitrr/auto_update.py,sha256=3mqlKKGnaWR5dNI58LN5WbHOMFRDWBsOs0zIC79QzQk,13359
|
|
4
|
-
qBitrr/bundled_data.py,sha256=
|
|
4
|
+
qBitrr/bundled_data.py,sha256=3UB7Vl3cnyAfM08eB741MW0L5FTjJHpuenBU_wBv-hc,221
|
|
5
5
|
qBitrr/config.py,sha256=BtvzQCQnRHEGzNykEa-WsiWKPjwXCb7wMx994z3rWMs,6306
|
|
6
|
-
qBitrr/config_version.py,sha256=
|
|
7
|
-
qBitrr/database.py,sha256=
|
|
6
|
+
qBitrr/config_version.py,sha256=1u9qaBoRqnZk8Zxi4_d_j5VeRtJxSZDHLarVyokSqw4,4208
|
|
7
|
+
qBitrr/database.py,sha256=gv_X550XrHQ6tCKrpXxHL7xjVh0U1GP9Pk3_M_kRl-Q,5605
|
|
8
8
|
qBitrr/db_lock.py,sha256=ZM6TQagBOkcS7h9BDGsdxhCo5aJ5SMvtKSM_X7HLu8M,15375
|
|
9
9
|
qBitrr/db_recovery.py,sha256=4kS9mWKrBYE9135m7cxvCOriSxz6lz7Dw4MT6gz81SM,6438
|
|
10
10
|
qBitrr/env_config.py,sha256=299u_uEoyxlM_ceTD0Z_i41JdYjSHmqO6FKe7qGFgTM,2866
|
|
11
11
|
qBitrr/errors.py,sha256=5_n1x0XX4UvMlieC_J1Hc5pq5JD17orfjJy9KfxDXA4,1107
|
|
12
12
|
qBitrr/ffprobe.py,sha256=2IM0iuPPTEb0xHmN1OetQoBd80-Nmv5Oq7P6o-mjBd0,4019
|
|
13
|
-
qBitrr/gen_config.py,sha256=
|
|
13
|
+
qBitrr/gen_config.py,sha256=9jTc2HuMOsCYXuSBNuxobJiwvG5f04vZKHj7ZQv94o0,53855
|
|
14
14
|
qBitrr/home_path.py,sha256=zvBheAR2xvr8LBZRk1FyqfnALE-eFzsY9CyqyZDjxiE,626
|
|
15
15
|
qBitrr/logger.py,sha256=f3LNcvl4lizTxQMXjFzv5urpPbUYEkaSGVGFP39cNbk,9005
|
|
16
|
-
qBitrr/main.py,sha256=
|
|
16
|
+
qBitrr/main.py,sha256=Oc3DLf6-vgOwiebiJ5rqIdQPyIlJ0NScRUif68eelvM,60374
|
|
17
|
+
qBitrr/qbit_category_manager.py,sha256=iShzJKrg6TOvY1BeFJZONwOHVBIv919hoO-Mxa7RC6c,10047
|
|
17
18
|
qBitrr/search_activity_store.py,sha256=JuJ0PQxSPBguacyqus2I4_g3qEYReOhZbghOjJOoE7o,1770
|
|
18
19
|
qBitrr/tables.py,sha256=hAHYmpSjdbXyOXABUDXmQKFgf_TQLrgYlCQPZEZWN8o,6187
|
|
19
20
|
qBitrr/utils.py,sha256=T10win016yHwMMJlJ4yuPTRUI9m-AS_a_MouiAJAtC8,8190
|
|
20
21
|
qBitrr/versioning.py,sha256=vjQ55rMInuEte9PXQo29FLxF0ff643Ttm3_ri5ghXPM,4542
|
|
21
|
-
qBitrr/webui.py,sha256=
|
|
22
|
+
qBitrr/webui.py,sha256=f6XzljjJGtZdNh8AVV7RTah3RLLR5ASMeWJgGi88ll4,148742
|
|
22
23
|
qBitrr/static/favicon-16x16.png,sha256=LrsZjRNNIivd0M-6OEghkY0bCYQNz_88kh-A6DDUpC4,1063
|
|
23
24
|
qBitrr/static/favicon-32x32.png,sha256=n3S3d7McOUokBxHEItYH2lEPmrgU7z0z652jeRrFwVQ,3398
|
|
24
25
|
qBitrr/static/favicon-48x48.png,sha256=r-co_lnPpXOLIptGm8FNZ4kM7QQkanwz_7vRxUAeqi0,6808
|
|
@@ -31,17 +32,21 @@ qBitrr/static/logov2-clean.svg,sha256=7m2shg7Tdyee7RFKb9tYP35OiEN6TzoXVCBGSPYBjj
|
|
|
31
32
|
qBitrr/static/manifest.json,sha256=xg3ZiPDIhlZ2Wlaq4KKlcsoND-b9cA0-51cRf2rDYRQ,840
|
|
32
33
|
qBitrr/static/sw.js,sha256=7YrOxAFxZdfWk1IDtsSfApgQEwpnamipyEmMRcStp1I,3215
|
|
33
34
|
qBitrr/static/vite.svg,sha256=__cChi4Uw84Bm4HYbgegc0dkysIspdu-hULUpoLkgrI,1498
|
|
34
|
-
qBitrr/static/assets/ArrView.js,sha256=
|
|
35
|
-
qBitrr/static/assets/ArrView.js.map,sha256=
|
|
36
|
-
qBitrr/static/assets/ConfigView.js,sha256=
|
|
37
|
-
qBitrr/static/assets/ConfigView.js.map,sha256=
|
|
38
|
-
qBitrr/static/assets/LogsView.js,sha256=
|
|
39
|
-
qBitrr/static/assets/LogsView.js.map,sha256=
|
|
40
|
-
qBitrr/static/assets/ProcessesView.js,sha256=
|
|
41
|
-
qBitrr/static/assets/ProcessesView.js.map,sha256=
|
|
42
|
-
qBitrr/static/assets/
|
|
43
|
-
qBitrr/static/assets/
|
|
44
|
-
qBitrr/static/assets/
|
|
35
|
+
qBitrr/static/assets/ArrView.js,sha256=eugCRq3EciIMesT5lqWSGYJs_sWnY7Hx7Gf6AfjTWUM,67404
|
|
36
|
+
qBitrr/static/assets/ArrView.js.map,sha256=9OuWzKZUNIV0b44zFaVagOsYsnkXgFmWIaFLksKP_G8,261896
|
|
37
|
+
qBitrr/static/assets/ConfigView.js,sha256=5lldcn78FDXXFC33CUKI5pbfs8CWeOLAa1oTmyRRAdU,74836
|
|
38
|
+
qBitrr/static/assets/ConfigView.js.map,sha256=EfJGJ3wp5OO8-2gH4jl60TgDdOIit0Aa3iW36pqkfHg,300118
|
|
39
|
+
qBitrr/static/assets/LogsView.js,sha256=JWSiqhP8Sz3Q0uyqN1B-qjoxSlJYwALxamLPwc73lW8,120519
|
|
40
|
+
qBitrr/static/assets/LogsView.js.map,sha256=1Up1sUIdA3Z6GTdrQFaTVpxe4ZPWNGTXR0CW9eBfa8k,477954
|
|
41
|
+
qBitrr/static/assets/ProcessesView.js,sha256=vcDtCedEUb3QOJ2KPLTbiQh7HnZanhT606fxDmL7fXc,9739
|
|
42
|
+
qBitrr/static/assets/ProcessesView.js.map,sha256=nhB3Fh6UJ0nhZmPnjyZ7ePcbb-VXFV7C9gHVAXDmkiA,35009
|
|
43
|
+
qBitrr/static/assets/QbitCategoriesView.js,sha256=WlWzTYjwMaeU4jwp7je8CmLxkRDlKp8OI0BQWzq5kjU,4473
|
|
44
|
+
qBitrr/static/assets/QbitCategoriesView.js.map,sha256=POSCXYQmOJhWBgteC3KIYf3E7CZDkP0qJIK0Kjv7j6Q,14480
|
|
45
|
+
qBitrr/static/assets/StableTable.js,sha256=vR1UmKePzpsTqwPO_fd5hK88q1UUI4HgPi6ptU4NTow,865
|
|
46
|
+
qBitrr/static/assets/StableTable.js.map,sha256=OnLQZ5xLunOBgKFaDJ3bsYu3l5t9PwZq2__in7mfp8c,3209
|
|
47
|
+
qBitrr/static/assets/app.css,sha256=kcD6mLGMoB6eZr9YuPQpI-SVDOMB5U18wfJyaDDaVMQ,62273
|
|
48
|
+
qBitrr/static/assets/app.js,sha256=J0v1k8bef7FxE32ZPmPBMcI5Wfz6iBbl_IOrtwFfM0c,329861
|
|
49
|
+
qBitrr/static/assets/app.js.map,sha256=ocbIy2qFlOdez6qlVapYn_994VKQrDfzUbHLgiapMDc,1675897
|
|
45
50
|
qBitrr/static/assets/build.svg,sha256=27zJoFZFP0MMNjnviRKjOUbGLu2D-1EcIpiMAfOXnJA,46338
|
|
46
51
|
qBitrr/static/assets/check-mark.svg,sha256=P4sn_w6VKsXjhqzeFYoQmaPtUFJ_QwPWq-aD_dPJJqU,9198
|
|
47
52
|
qBitrr/static/assets/close.svg,sha256=au7m-xbkwpqz2ZLUi6kj4VzTqIX36eC3dKjPGMUVLnU,8697
|
|
@@ -56,18 +61,18 @@ qBitrr/static/assets/process.svg,sha256=MjYdVD-V2ppLmYkFxxdGZD2_vZoxkFXlknN4Lu3_
|
|
|
56
61
|
qBitrr/static/assets/react-select.esm.js,sha256=BBt1p7Jty3eEXT3eCJUjupm8ospqtunBLDe7VScnffw,87207
|
|
57
62
|
qBitrr/static/assets/react-select.esm.js.map,sha256=JylFlRCyyE4DQCRLxx3J_21hH_g1kaGWdTbo2Rrnl28,434216
|
|
58
63
|
qBitrr/static/assets/refresh-arrow.svg,sha256=OUoCjJcWftxZhuu_y55yaK5u-_yMJz8T3V1VW6OVpaE,42996
|
|
59
|
-
qBitrr/static/assets/table.js,sha256=
|
|
64
|
+
qBitrr/static/assets/table.js,sha256=65UYsWZTg1ImtPmj6VgOuS42Kzxev0b2iJNMiSNxyaw,51212
|
|
60
65
|
qBitrr/static/assets/table.js.map,sha256=nZBl5yvXF-Tai0DrQO2tRy8FNrKIrmbKW12No1kEp3Y,219738
|
|
61
66
|
qBitrr/static/assets/trash.svg,sha256=tLOjR43oeZbwF5q122mSjMCQ_1rn_HccGhHRZeV2IB0,15217
|
|
62
67
|
qBitrr/static/assets/up-arrow.svg,sha256=HyOwDB7w7lMiJQjM8TbkhUn0tYWAzp-MHg8c0wiVly0,34508
|
|
63
68
|
qBitrr/static/assets/useInterval.js,sha256=zm4pu9wHmALteKqv_vW7W3y4NA6hNpHFU2XhESsiolk,287
|
|
64
69
|
qBitrr/static/assets/useInterval.js.map,sha256=3KvsE2Do5LepkgpP-0XBHeGOprIQiDIdKJ6CgOwNCv0,1002
|
|
65
|
-
qBitrr/static/assets/vendor.js,sha256=
|
|
66
|
-
qBitrr/static/assets/vendor.js.map,sha256=
|
|
70
|
+
qBitrr/static/assets/vendor.js,sha256=a0DLsM2_pLLaGl-lrbiG4kFjmAaVonBGNZ-6PALexQ8,11357
|
|
71
|
+
qBitrr/static/assets/vendor.js.map,sha256=4J-X0n_bKs6iVl82Az1mqxCzNGMraUwYQ99x55buMOs,42253
|
|
67
72
|
qBitrr/static/assets/visibility.svg,sha256=258DiSuUKs2SH9dhhDDU88JQfLAlNQMvOGewc9uaTK4,9767
|
|
68
|
-
qbitrr2-5.8.
|
|
69
|
-
qbitrr2-5.8.
|
|
70
|
-
qbitrr2-5.8.
|
|
71
|
-
qbitrr2-5.8.
|
|
72
|
-
qbitrr2-5.8.
|
|
73
|
-
qbitrr2-5.8.
|
|
73
|
+
qbitrr2-5.8.8.dist-info/licenses/LICENSE,sha256=P978aVGi7dPbKz8lfvdiryOS5IjTAU7AA47XhBhVBlI,1066
|
|
74
|
+
qbitrr2-5.8.8.dist-info/METADATA,sha256=XcDjTb2VN76QZJZWKazN3t2EBYoAxtKBA9L5-IG9asg,11553
|
|
75
|
+
qbitrr2-5.8.8.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
76
|
+
qbitrr2-5.8.8.dist-info/entry_points.txt,sha256=MIR-l5s31VBs9qlv3HiAaMdpOOyy0MNGfM7Ib1-fKeQ,43
|
|
77
|
+
qbitrr2-5.8.8.dist-info/top_level.txt,sha256=jIINodarzsPcQeTf-vvK8-_g7cQ8CvxEg41ms14K97g,7
|
|
78
|
+
qbitrr2-5.8.8.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|