install scrpts and fiix ux
This commit is contained in:
@@ -104,6 +104,7 @@ JOBS_RETENTION_DAYS = _env_int("PYTORRENT_JOBS_RETENTION_DAYS", 30, 1)
|
||||
SMART_QUEUE_HISTORY_RETENTION_DAYS = _env_int("PYTORRENT_SMART_QUEUE_HISTORY_RETENTION_DAYS", 30, 1)
|
||||
LOG_RETENTION_DAYS = _env_int("PYTORRENT_LOG_RETENTION_DAYS", 1, 1)
|
||||
LOG_RETENTION_HOURS = _env_int("PYTORRENT_LOG_RETENTION_HOURS", 24, 1)
|
||||
LOG_ENABLE = _env_bool("PYTORRENT_LOG_ENABLE", True)
|
||||
LOG_DIR = Path(os.getenv("PYTORRENT_LOG_DIR", "data/logs"))
|
||||
if not LOG_DIR.is_absolute():
|
||||
LOG_DIR = BASE_DIR / LOG_DIR
|
||||
|
||||
@@ -8,7 +8,7 @@ from typing import Any
|
||||
|
||||
from flask import Flask, g, request
|
||||
|
||||
from .config import LOG_DIR, LOG_RETENTION_HOURS
|
||||
from .config import LOG_DIR, LOG_ENABLE, LOG_RETENTION_HOURS
|
||||
|
||||
_CONFIGURED = False
|
||||
|
||||
@@ -33,6 +33,9 @@ def _make_handler(path: Path, level: int) -> TimedRotatingFileHandler:
|
||||
def configure_logging(app: Flask | None = None) -> None:
|
||||
"""Route pyTorrent app, error and access logs to the configured data log directory."""
|
||||
global _CONFIGURED
|
||||
if not LOG_ENABLE:
|
||||
# Note: Installation can disable file logging while keeping normal service stdout/stderr available.
|
||||
return
|
||||
LOG_DIR.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
if not _CONFIGURED:
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+85
-42
@@ -4641,7 +4641,7 @@ body,
|
||||
}
|
||||
}
|
||||
|
||||
/* Note: Peers tables keep hostnames readable without letting the Host column dominate the layout. */
|
||||
/* Note: Peers tables keep hostnames readable and keep progress columns stable. */
|
||||
.peers-table {
|
||||
min-width: 960px;
|
||||
table-layout: fixed;
|
||||
@@ -4656,56 +4656,76 @@ body,
|
||||
}
|
||||
|
||||
.peers-table .peer-progress-wide {
|
||||
min-width: 108px;
|
||||
min-width: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.peers-table-hosts th:nth-child(1),
|
||||
.peers-table-hosts td:nth-child(1) {
|
||||
.peers-table:not(.mobile-details-peers-table):not(.peers-table-hosts) th:nth-child(1),
|
||||
.peers-table:not(.mobile-details-peers-table):not(.peers-table-hosts) td:nth-child(1),
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts th:nth-child(1),
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts td:nth-child(1) {
|
||||
width: 4%;
|
||||
}
|
||||
|
||||
.peers-table-hosts th:nth-child(2),
|
||||
.peers-table-hosts td:nth-child(2) {
|
||||
.peers-table:not(.mobile-details-peers-table):not(.peers-table-hosts) th:nth-child(2),
|
||||
.peers-table:not(.mobile-details-peers-table):not(.peers-table-hosts) td:nth-child(2),
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts th:nth-child(2),
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts td:nth-child(2) {
|
||||
width: 13%;
|
||||
}
|
||||
|
||||
.peers-table-hosts th:nth-child(3),
|
||||
.peers-table-hosts td:nth-child(3) {
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts th:nth-child(3),
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts td:nth-child(3) {
|
||||
width: 15%;
|
||||
}
|
||||
|
||||
.peers-table-hosts th:nth-child(4),
|
||||
.peers-table-hosts td:nth-child(4),
|
||||
.peers-table-hosts th:nth-child(5),
|
||||
.peers-table-hosts td:nth-child(5) {
|
||||
.peers-table:not(.mobile-details-peers-table):not(.peers-table-hosts) th:nth-child(3),
|
||||
.peers-table:not(.mobile-details-peers-table):not(.peers-table-hosts) td:nth-child(3),
|
||||
.peers-table:not(.mobile-details-peers-table):not(.peers-table-hosts) th:nth-child(4),
|
||||
.peers-table:not(.mobile-details-peers-table):not(.peers-table-hosts) td:nth-child(4),
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts th:nth-child(4),
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts td:nth-child(4),
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts th:nth-child(5),
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts td:nth-child(5) {
|
||||
width: 8%;
|
||||
}
|
||||
|
||||
.peers-table-hosts th:nth-child(6),
|
||||
.peers-table-hosts td:nth-child(6) {
|
||||
.peers-table:not(.mobile-details-peers-table):not(.peers-table-hosts) th:nth-child(5),
|
||||
.peers-table:not(.mobile-details-peers-table):not(.peers-table-hosts) td:nth-child(5),
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts th:nth-child(6),
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts td:nth-child(6) {
|
||||
width: 15%;
|
||||
}
|
||||
|
||||
.peers-table-hosts th:nth-child(7),
|
||||
.peers-table-hosts td:nth-child(7) {
|
||||
width: 10%;
|
||||
.peers-table:not(.mobile-details-peers-table):not(.peers-table-hosts) th:nth-child(6),
|
||||
.peers-table:not(.mobile-details-peers-table):not(.peers-table-hosts) td:nth-child(6),
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts th:nth-child(7),
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts td:nth-child(7) {
|
||||
width: 8rem;
|
||||
}
|
||||
|
||||
.peers-table-hosts th:nth-child(8),
|
||||
.peers-table-hosts td:nth-child(8),
|
||||
.peers-table-hosts th:nth-child(9),
|
||||
.peers-table-hosts td:nth-child(9) {
|
||||
.peers-table:not(.mobile-details-peers-table):not(.peers-table-hosts) th:nth-child(7),
|
||||
.peers-table:not(.mobile-details-peers-table):not(.peers-table-hosts) td:nth-child(7),
|
||||
.peers-table:not(.mobile-details-peers-table):not(.peers-table-hosts) th:nth-child(8),
|
||||
.peers-table:not(.mobile-details-peers-table):not(.peers-table-hosts) td:nth-child(8),
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts th:nth-child(8),
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts td:nth-child(8),
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts th:nth-child(9),
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts td:nth-child(9) {
|
||||
width: 6%;
|
||||
}
|
||||
|
||||
.peers-table-hosts th:nth-child(10),
|
||||
.peers-table-hosts td:nth-child(10) {
|
||||
.peers-table:not(.mobile-details-peers-table):not(.peers-table-hosts) th:nth-child(9),
|
||||
.peers-table:not(.mobile-details-peers-table):not(.peers-table-hosts) td:nth-child(9),
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts th:nth-child(10),
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts td:nth-child(10) {
|
||||
width: 5%;
|
||||
}
|
||||
|
||||
.peers-table-hosts th:nth-child(11),
|
||||
.peers-table-hosts td:nth-child(11) {
|
||||
.peers-table:not(.mobile-details-peers-table):not(.peers-table-hosts) th:nth-child(10),
|
||||
.peers-table:not(.mobile-details-peers-table):not(.peers-table-hosts) td:nth-child(10),
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts th:nth-child(11),
|
||||
.peers-table:not(.mobile-details-peers-table).peers-table-hosts td:nth-child(11) {
|
||||
width: 10%;
|
||||
}
|
||||
|
||||
@@ -4718,7 +4738,7 @@ body,
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* Note: Mobile torrent details use a narrower fixed table so long reverse-DNS names cannot stretch the modal. */
|
||||
/* Note: Mobile torrent details use a stable table so progress bars always render on a 0-100% track. */
|
||||
.mobile-details-modal .modal-body {
|
||||
overflow-x: hidden;
|
||||
}
|
||||
@@ -4728,36 +4748,54 @@ body,
|
||||
}
|
||||
|
||||
.mobile-details-peers-table {
|
||||
min-width: 720px;
|
||||
margin-bottom: 0;
|
||||
min-width: 780px;
|
||||
}
|
||||
|
||||
.mobile-details-peers-table:not(.peers-table-hosts) th:nth-child(1),
|
||||
.mobile-details-peers-table:not(.peers-table-hosts) td:nth-child(1),
|
||||
.mobile-details-peers-table.peers-table-hosts th:nth-child(1),
|
||||
.mobile-details-peers-table.peers-table-hosts td:nth-child(1) {
|
||||
width: 5%;
|
||||
}
|
||||
|
||||
.mobile-details-peers-table:not(.peers-table-hosts) th:nth-child(2),
|
||||
.mobile-details-peers-table:not(.peers-table-hosts) td:nth-child(2),
|
||||
.mobile-details-peers-table.peers-table-hosts th:nth-child(2),
|
||||
.mobile-details-peers-table.peers-table-hosts td:nth-child(2) {
|
||||
width: 14%;
|
||||
}
|
||||
|
||||
.mobile-details-peers-table.peers-table-hosts th:nth-child(3),
|
||||
.mobile-details-peers-table.peers-table-hosts td:nth-child(3),
|
||||
.mobile-details-peers-table.peers-table-hosts th:nth-child(4),
|
||||
.mobile-details-peers-table.peers-table-hosts td:nth-child(4) {
|
||||
width: 15%;
|
||||
}
|
||||
|
||||
.mobile-details-peers-table.peers-table-hosts th:nth-child(5),
|
||||
.mobile-details-peers-table.peers-table-hosts td:nth-child(5) {
|
||||
.mobile-details-peers-table.peers-table-hosts td:nth-child(3) {
|
||||
width: 16%;
|
||||
}
|
||||
|
||||
.mobile-details-peers-table.peers-table-hosts th:nth-child(6),
|
||||
.mobile-details-peers-table.peers-table-hosts td:nth-child(6) {
|
||||
width: 10%;
|
||||
.mobile-details-peers-table:not(.peers-table-hosts) th:nth-child(3),
|
||||
.mobile-details-peers-table:not(.peers-table-hosts) td:nth-child(3),
|
||||
.mobile-details-peers-table.peers-table-hosts th:nth-child(4),
|
||||
.mobile-details-peers-table.peers-table-hosts td:nth-child(4) {
|
||||
width: 16%;
|
||||
}
|
||||
|
||||
.mobile-details-peers-table:not(.peers-table-hosts) th:nth-child(4),
|
||||
.mobile-details-peers-table:not(.peers-table-hosts) td:nth-child(4),
|
||||
.mobile-details-peers-table.peers-table-hosts th:nth-child(5),
|
||||
.mobile-details-peers-table.peers-table-hosts td:nth-child(5) {
|
||||
width: 15%;
|
||||
}
|
||||
|
||||
.mobile-details-peers-table:not(.peers-table-hosts) th:nth-child(5),
|
||||
.mobile-details-peers-table:not(.peers-table-hosts) td:nth-child(5),
|
||||
.mobile-details-peers-table.peers-table-hosts th:nth-child(6),
|
||||
.mobile-details-peers-table.peers-table-hosts td:nth-child(6) {
|
||||
width: 8rem;
|
||||
}
|
||||
|
||||
.mobile-details-peers-table:not(.peers-table-hosts) th:nth-child(6),
|
||||
.mobile-details-peers-table:not(.peers-table-hosts) td:nth-child(6),
|
||||
.mobile-details-peers-table:not(.peers-table-hosts) th:nth-child(7),
|
||||
.mobile-details-peers-table:not(.peers-table-hosts) td:nth-child(7),
|
||||
.mobile-details-peers-table.peers-table-hosts th:nth-child(7),
|
||||
.mobile-details-peers-table.peers-table-hosts td:nth-child(7),
|
||||
.mobile-details-peers-table.peers-table-hosts th:nth-child(8),
|
||||
@@ -4765,13 +4803,19 @@ body,
|
||||
width: 7%;
|
||||
}
|
||||
|
||||
.mobile-details-peers-table:not(.peers-table-hosts) th:nth-child(8),
|
||||
.mobile-details-peers-table:not(.peers-table-hosts) td:nth-child(8),
|
||||
.mobile-details-peers-table.peers-table-hosts th:nth-child(9),
|
||||
.mobile-details-peers-table.peers-table-hosts td:nth-child(9),
|
||||
.mobile-details-peers-table.peers-table-hosts th:nth-child(10),
|
||||
.mobile-details-peers-table.peers-table-hosts td:nth-child(10) {
|
||||
.mobile-details-peers-table.peers-table-hosts td:nth-child(9) {
|
||||
width: 6%;
|
||||
}
|
||||
|
||||
.mobile-details-peers-table:not(.peers-table-hosts) th:nth-child(9),
|
||||
.mobile-details-peers-table:not(.peers-table-hosts) td:nth-child(9),
|
||||
.mobile-details-peers-table.peers-table-hosts th:nth-child(10),
|
||||
.mobile-details-peers-table.peers-table-hosts td:nth-child(10) {
|
||||
width: 8%;
|
||||
}
|
||||
|
||||
/* App modal widths stay consistent while Bootstrap still handles full-screen mobile breakpoints. */
|
||||
.app-modal-dialog,
|
||||
@@ -5237,7 +5281,6 @@ body,
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.mobile-details-peers-table,
|
||||
.mobile-details-files-table {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user