install scrpts and fiix ux

This commit is contained in:
Mateusz Gruszczyński
2026-05-31 06:42:00 +02:00
parent 3256ae34fe
commit 6f2c266e7c
11 changed files with 849 additions and 48 deletions
+1
View File
@@ -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
+4 -1
View File
@@ -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
View File
@@ -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;
}