diff --git a/GlazeWM.Bar/Components/MusicComponentViewModel.cs b/GlazeWM.Bar/Components/MusicComponentViewModel.cs index 39bc76c76..77b0ea1f3 100644 --- a/GlazeWM.Bar/Components/MusicComponentViewModel.cs +++ b/GlazeWM.Bar/Components/MusicComponentViewModel.cs @@ -91,17 +91,19 @@ private LabelViewModel CreateLabel() foreach (var session in songSessionDict) { - if(GetLabel(session.Value.MusicStatus) == _config.LabelPaused && label != _config.LabelPlaying) + var title = Truncate(session.Value.SongTitle, _config.MaxTitleLength); + var artist = Truncate(session.Value.ArtistName, _config.MaxArtistLength); + if (GetLabel(session.Value.MusicStatus) == _config.LabelPaused && label != _config.LabelPlaying) { label = _config.LabelPaused; - variableDictionary["song_title"] = () => session.Value.SongTitle; - variableDictionary["artist_name"] = () => session.Value.ArtistName; + variableDictionary["song_title"] = () => title; + variableDictionary["artist_name"] = () => artist; } else if (GetLabel(session.Value.MusicStatus) == _config.LabelPlaying) { label = _config.LabelPlaying; - variableDictionary["song_title"] = () => session.Value.SongTitle; - variableDictionary["artist_name"] = () => session.Value.ArtistName; + variableDictionary["song_title"] = () => title; + variableDictionary["artist_name"] = () => artist; } } return XamlHelper.ParseLabel( @@ -110,5 +112,11 @@ private LabelViewModel CreateLabel() this ); } + public static string Truncate(string value, int maxLength, string truncationSuffix = "…") + { + return value?.Length > maxLength && maxLength >= 0 + ? string.Concat(value.AsSpan(0, maxLength), truncationSuffix) + : value; + } } } diff --git a/GlazeWM.Domain/UserConfigs/MusicComponentConfig.cs b/GlazeWM.Domain/UserConfigs/MusicComponentConfig.cs index 962b2db24..c7164ebe4 100644 --- a/GlazeWM.Domain/UserConfigs/MusicComponentConfig.cs +++ b/GlazeWM.Domain/UserConfigs/MusicComponentConfig.cs @@ -14,5 +14,13 @@ public class MusicComponentConfig : BarComponentConfig /// Formatted text to display when music is playing. /// public string LabelPlaying { get; set; } = "{song_title} - {artist_name}"; + /// + /// The maximum length after which the song title will be truncated; if set to -1, the title will not be truncated. + /// + public int MaxTitleLength { get; set; } = -1; + /// + /// The maximum length after which the artist name will be truncated; if set to -1, the name will not be truncated. + /// + public int MaxArtistLength { get; set; } = -1; } } diff --git a/README.md b/README.md index 3ee8b2131..394bc7bac 100644 --- a/README.md +++ b/README.md @@ -453,6 +453,8 @@ Displays currently playing music. label_not_playing: "" label_paused: "{song_title} - {artist_name}" label_playing: "{song_title} - {artist_name} ▶" + max_title_length: 20 + max_artist_length: 20 ``` ## Mixing font properties within a label