forked from SpoTUI/SpoTUI
feat(lyrics): Add a command to customize lyric colors
This commit is contained in:
@@ -76,6 +76,8 @@ Type `help` in the SpoTUI command bar to see a list of available commands.
|
|||||||
| `tui -wp <url> [-o <opacity>]` | Set wallpaper (opacity 0-1) |
|
| `tui -wp <url> [-o <opacity>]` | Set wallpaper (opacity 0-1) |
|
||||||
| `tui -t pull <theme_id>` | Apply a theme by its ID (you can find the id on our website) |
|
| `tui -t pull <theme_id>` | Apply a theme by its ID (you can find the id on our website) |
|
||||||
| `tui -wp off` | Remove wallpaper |
|
| `tui -wp off` | Remove wallpaper |
|
||||||
|
| `tui -ly -cp <active> <inactive> <light_inactive>` | Set lyrics colors (hex) |
|
||||||
|
| `tui -ly -cp off` | Reset lyrics colors |
|
||||||
| `playlist` / `list` | Open playlist viewer |
|
| `playlist` / `list` | Open playlist viewer |
|
||||||
| `play` / `pause` / `p` | Toggle playback |
|
| `play` / `pause` / `p` | Toggle playback |
|
||||||
| `skip` | Next track |
|
| `skip` | Next track |
|
||||||
|
|||||||
@@ -281,7 +281,7 @@ body.spotui-lyrics-panel #spotui-lyrics.spotui-lyrics-active {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.spotui-lyrics-line {
|
.spotui-lyrics-line {
|
||||||
color: #777;
|
color: var(--lyrics-color-inactive, #777);
|
||||||
font-size: 17px;
|
font-size: 17px;
|
||||||
line-height: 1.45;
|
line-height: 1.45;
|
||||||
padding: 10px 8px;
|
padding: 10px 8px;
|
||||||
@@ -295,13 +295,13 @@ body.spotui-lyrics-panel #spotui-lyrics.spotui-lyrics-active {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.spotui-lyrics-line.near {
|
.spotui-lyrics-line.near {
|
||||||
color: #b3b3b3;
|
color: var(--lyrics-color-light-inactive, #b3b3b3);
|
||||||
opacity: 0.72;
|
opacity: 0.72;
|
||||||
transform: scale(0.98);
|
transform: scale(0.98);
|
||||||
}
|
}
|
||||||
|
|
||||||
.spotui-lyrics-line.active {
|
.spotui-lyrics-line.active {
|
||||||
color: #ff8c42;
|
color: var(--lyrics-color-active, #ff8c42);
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
transform: scale(1.06);
|
transform: scale(1.06);
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
@@ -1009,6 +1009,26 @@ function setWallpaper(url, opacity, save = true) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function applyLyricColors() {
|
||||||
|
try {
|
||||||
|
const activeColor = localStorage.getItem(LYRICS_COLOR_ACTIVE);
|
||||||
|
const inactiveColor = localStorage.getItem(LYRICS_COLOR_INACTIVE);
|
||||||
|
const lightInactiveColor = localStorage.getItem(LYRICS_COLOR_LIGHT_INACTIVE);
|
||||||
|
|
||||||
|
const root = document.documentElement;
|
||||||
|
if (activeColor) root.style.setProperty("--lyrics-color-active", activeColor);
|
||||||
|
else root.style.removeProperty("--lyrics-color-active");
|
||||||
|
|
||||||
|
if (inactiveColor) root.style.setProperty("--lyrics-color-inactive", inactiveColor);
|
||||||
|
else root.style.removeProperty("--lyrics-color-inactive");
|
||||||
|
|
||||||
|
if (lightInactiveColor) root.style.setProperty("--lyrics-color-light-inactive", lightInactiveColor);
|
||||||
|
else root.style.removeProperty("--lyrics-color-light-inactive");
|
||||||
|
} catch (e) {
|
||||||
|
console.error("SpoTUI: Failed to apply lyric colors", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function setTuiMode(mode) {
|
function setTuiMode(mode) {
|
||||||
tuiMode = mode === "cli" ? "cli" : "command";
|
tuiMode = mode === "cli" ? "cli" : "command";
|
||||||
document.body.classList.toggle("spotui-cli-mode", tuiMode === "cli");
|
document.body.classList.toggle("spotui-cli-mode", tuiMode === "cli");
|
||||||
@@ -1241,6 +1261,24 @@ async function execute(cmd) {
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (args.includes("-ly") && args.includes("-cp")) {
|
||||||
|
const cpIndex = args.indexOf("-cp");
|
||||||
|
if (args[cpIndex + 1] === "off") {
|
||||||
|
localStorage.removeItem(LYRICS_COLOR_ACTIVE);
|
||||||
|
localStorage.removeItem(LYRICS_COLOR_INACTIVE);
|
||||||
|
localStorage.removeItem(LYRICS_COLOR_LIGHT_INACTIVE);
|
||||||
|
} else {
|
||||||
|
const colorActive = args[cpIndex + 1];
|
||||||
|
const colorInactive = args[cpIndex + 2];
|
||||||
|
const colorLightInactive = args[cpIndex + 3];
|
||||||
|
|
||||||
|
if (colorActive) localStorage.setItem(LYRICS_COLOR_ACTIVE, colorActive);
|
||||||
|
if (colorInactive) localStorage.setItem(LYRICS_COLOR_INACTIVE, colorInactive);
|
||||||
|
if (colorLightInactive) localStorage.setItem(LYRICS_COLOR_LIGHT_INACTIVE, colorLightInactive);
|
||||||
|
}
|
||||||
|
applyLyricColors();
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (args.includes("-l") || args.includes("-a")) {
|
if (args.includes("-l") || args.includes("-a")) {
|
||||||
const state = args[args.length - 1];
|
const state = args[args.length - 1];
|
||||||
if (state === "off") {
|
if (state === "off") {
|
||||||
@@ -1334,6 +1372,8 @@ const COMMAND_LIST = [
|
|||||||
{ cmd: "tui -wp <url> [-o <opacity>]", desc: "Set wallpaper (opacity 0-1)" },
|
{ cmd: "tui -wp <url> [-o <opacity>]", desc: "Set wallpaper (opacity 0-1)" },
|
||||||
{ cmd: "tui -wp off", desc: "Remove wallpaper" },
|
{ cmd: "tui -wp off", desc: "Remove wallpaper" },
|
||||||
{ cmd: "tui -t pull <theme_id>", desc: "Apply a theme by its ID (you can find the id on our website)" },
|
{ cmd: "tui -t pull <theme_id>", desc: "Apply a theme by its ID (you can find the id on our website)" },
|
||||||
|
{ cmd: "tui -ly -cp <active> <inactive> <light_inactive>", desc: "Set lyrics colors (hex)" },
|
||||||
|
{ cmd: "tui -ly -cp off", desc: "Reset lyrics colors" },
|
||||||
{ cmd: "playlist / list", desc: "Open playlist viewer" },
|
{ cmd: "playlist / list", desc: "Open playlist viewer" },
|
||||||
{ cmd: "play / pause / p", desc: "Toggle playback" },
|
{ cmd: "play / pause / p", desc: "Toggle playback" },
|
||||||
{ cmd: "skip", desc: "Next track" },
|
{ cmd: "skip", desc: "Next track" },
|
||||||
@@ -1733,6 +1773,9 @@ async function getPlaylists() {
|
|||||||
const LYRICS_STORAGE_KEY = "spotui:lyrics-open";
|
const LYRICS_STORAGE_KEY = "spotui:lyrics-open";
|
||||||
const WP_URL_KEY = "spotui:wp-url";
|
const WP_URL_KEY = "spotui:wp-url";
|
||||||
const WP_OPACITY_KEY = "spotui:wp-opacity";
|
const WP_OPACITY_KEY = "spotui:wp-opacity";
|
||||||
|
const LYRICS_COLOR_ACTIVE = "spotui:lyrics-color-active";
|
||||||
|
const LYRICS_COLOR_INACTIVE = "spotui:lyrics-color-inactive";
|
||||||
|
const LYRICS_COLOR_LIGHT_INACTIVE = "spotui:lyrics-color-light-inactive";
|
||||||
|
|
||||||
let lyricsPanelOpen = false;
|
let lyricsPanelOpen = false;
|
||||||
let lyricsLoadToken = 0;
|
let lyricsLoadToken = 0;
|
||||||
@@ -2043,6 +2086,7 @@ try {
|
|||||||
if (localStorage.getItem(WP_URL_KEY)) {
|
if (localStorage.getItem(WP_URL_KEY)) {
|
||||||
setTimeout(() => setWallpaper(localStorage.getItem(WP_URL_KEY), localStorage.getItem(WP_OPACITY_KEY) || "1", false), 1500);
|
setTimeout(() => setWallpaper(localStorage.getItem(WP_URL_KEY), localStorage.getItem(WP_OPACITY_KEY) || "1", false), 1500);
|
||||||
}
|
}
|
||||||
|
applyLyricColors();
|
||||||
} catch { }
|
} catch { }
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|||||||
Reference in New Issue
Block a user