From d83ba1145b2a969c472229db09fd03de616aadb2 Mon Sep 17 00:00:00 2001 From: ericek111 Date: Fri, 25 Sep 2026 14:21:51 +0000 Subject: [PATCH] Make a parsed spacer a value So a frontend comparing snapshots of the tree sees an unchanged spacer as unchanged. Co-Authored-By: Claude Opus 5.5 --- .../main/java/com/ts3client/net/Spacers.java | 23 ++++++++----------- .../com/ts3client/ui/ServerTreeSearch.java | 2 +- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/ts3-client/core/src/main/java/com/ts3client/net/Spacers.java b/ts3-client/core/src/main/java/com/ts3client/net/Spacers.java index fd0ef43..2534bef 100644 --- a/ts3-client/core/src/main/java/com/ts3client/net/Spacers.java +++ b/ts3-client/core/src/main/java/com/ts3client/net/Spacers.java @@ -14,15 +14,12 @@ import java.util.regex.Pattern; */ public final class Spacers { - /** Result of parsing a spacer name. */ - public static final class Spacer { - public final char align; // 'l', 'c', 'r', or '*' (repeat/fill) - public final String caption; - - Spacer(char align, String caption) { - this.align = align; - this.caption = caption; - } + /** + * A parsed spacer name. + * + * @param align 'l', 'c', 'r', or '*' (repeat the caption to fill) + */ + public record Spacer(char align, String caption) { } /** The tag's identifying part, which is what keeps two spacers' names apart. */ @@ -66,18 +63,18 @@ public final class Spacers { /** Builds the visible label for a spacer at roughly the given character width. */ public static String render(Spacer s, int width) { - String caption = s.caption == null ? "" : s.caption; - if (s.align == '*') { + String caption = s.caption() == null ? "" : s.caption(); + if (s.align() == '*') { if (caption.isEmpty()) return ""; StringBuilder sb = new StringBuilder(); while (sb.length() < width) sb.append(caption); return sb.substring(0, Math.max(caption.length(), Math.min(sb.length(), width))); } - if (s.align == 'c') { + if (s.align() == 'c') { int pad = Math.max(0, (width - caption.length()) / 2); return " ".repeat(pad) + caption; } - if (s.align == 'r') { + if (s.align() == 'r') { int pad = Math.max(0, width - caption.length()); return " ".repeat(pad) + caption; } diff --git a/ts3-client/swing/src/main/java/com/ts3client/ui/ServerTreeSearch.java b/ts3-client/swing/src/main/java/com/ts3client/ui/ServerTreeSearch.java index eca15e9..dc3ee9a 100644 --- a/ts3-client/swing/src/main/java/com/ts3client/ui/ServerTreeSearch.java +++ b/ts3-client/swing/src/main/java/com/ts3client/ui/ServerTreeSearch.java @@ -108,7 +108,7 @@ final class ServerTreeSearch implements FindBar.Listener { if (!searchChannels) return false; Spacers.Spacer spacer = Spacers.parse(ch.name); if (spacer == null) return query.matches(ch.name); - return spacer.align != '*' && query.matches(spacer.caption); + return spacer.align() != '*' && query.matches(spacer.caption()); } return false; }