aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-hub/src/meshbay_hub/static/style.css
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-08-26 17:18:37 +0200
committerChristophe Besson <cbesson@gmail.com>2026-08-26 17:18:37 +0200
commit80cb6c4dc5f22336387f2ac74ef2cb85cf2cf7d4 (patch)
tree590e2daf81b2feef674f1bd580b9bf40f83addad /packages/meshbay-hub/src/meshbay_hub/static/style.css
parentca62b4123b854fc9ece258e14c84c895aaa275cd (diff)
parent59289b82dc8af08c605fd247c90a5c5ec92c6db3 (diff)
downloadmeshbay-80cb6c4dc5f22336387f2ac74ef2cb85cf2cf7d4.tar.gz
Merge branch 'feat/video-type-filter'
Videos app grouping and TMDB matching fixes, plus a new toolbar filter: - A season-like ancestor folder (numbered season, or Specials/Bonus/Extras -> season 0) now names the show from its own root folder, unconditionally — never a per-file guessit title, which cannot tell a show's real name from an individual episode's own one-off name when the filename carries no reliable ShowName/SxxExx structure. Fixes a real show's episodes and Specials folder alike showing up as dozens of individual "movies", each matched against TMDB by its own one-off title. - The ancestor walk continues past every consecutive season-like folder, not just the first — a per-season Bonus folder is nested two levels inside the show, and stopping at the first would name the season as the show. - A season spanning more than one folder (a per-book Bonus folder nested inside every numbered season) no longer hands out colliding episode numbers independently in each one. - guessit's own episode number is not trusted when it comes from a bare 3-digit leading number ("100" parses as season=1/episode=0, not episode=100) — read directly via regex instead. - Recognizes "S1"/"S2"-style abbreviated season folders, not just full words ("Season"/"Saison"/"Livre") — a real show organized its later seasons this way and they never got the ancestor-based grouping fix at all. - The TMDB match cache is no longer trusted across a movie<->show reclassification it doesn't know happened. - New: an All/Movies/Series filter in the Videos toolbar, to the left of the search field, defaulting to "All"; wraps correctly on mobile. Verified live against the real libraries these were found on throughout — not synthetic reproduction alone. 430 hub tests + 667 node tests passing.
Diffstat (limited to 'packages/meshbay-hub/src/meshbay_hub/static/style.css')
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/style.css39
1 files changed, 39 insertions, 0 deletions
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/style.css b/packages/meshbay-hub/src/meshbay_hub/static/style.css
index f426f8d..975f47c 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/style.css
+++ b/packages/meshbay-hub/src/meshbay_hub/static/style.css
@@ -1859,6 +1859,13 @@ a.transfer-name {
/* The actions sit on their own line under the toggle, and wrap within it. */
.tb-actions { width: 100%; }
+ /* video-app.js's toolbar isn't built from .toolbar-group (nothing else in
+ it needs a right-hand group), so it never got the row-per-group
+ treatment above — mode buttons + the All/Movies/Series control left no
+ room at all for the filter field once both were on the same line. */
+ .video-toolbar { flex-wrap: wrap; }
+ .video-toolbar .tb-search { flex-basis: 100%; margin-left: 0; }
+
/* Every pixel here is one the conversation does not get. */
.group-header { margin-bottom: 10px; gap: 8px; }
.group-tabs { margin-bottom: 10px; }
@@ -2563,6 +2570,38 @@ a.transfer-name {
}
.video-toolbar .tb-search { margin-left: auto; }
+/* All/Movies/Series — a segmented control, not three separate .tb-btn: the
+ three are mutually exclusive (unlike the view-mode buttons, which read
+ fine standalone), and grouping them under one shared border is what says
+ so at a glance. */
+.tb-typefilter {
+ display: inline-flex;
+ height: 32px;
+ border: 1px solid var(--border);
+ border-radius: 6px;
+ overflow: hidden;
+ flex-shrink: 0;
+}
+.tb-typefilter button {
+ display: inline-flex;
+ align-items: center;
+ height: 100%;
+ padding: 0 12px;
+ border: none;
+ background: var(--bg-surface);
+ color: var(--text-dim);
+ font-size: 0.83em;
+ white-space: nowrap;
+ cursor: pointer;
+ transition: background 0.12s, color 0.12s;
+}
+.tb-typefilter button + button { border-left: 1px solid var(--border); }
+.tb-typefilter button:hover { color: var(--accent); }
+.tb-typefilter button.active {
+ background: var(--accent);
+ color: var(--accent-text);
+}
+
/* Mode A — poster grid */
.video-grid {