Added a lyrics fetching and display plugin#554
Merged
spiros132 merged 13 commits intonoctalia-dev:mainfrom Apr 13, 2026
Merged
Conversation
Contributor
Automatic Manifest CheckFile: lyrics-fetch/manifest.json
"repository": "https://github.com/noctalia-dev/noctalia-plugins" |
Contributor
Automatic Code Quality ReviewFile: lyrics-fetch/BarWidget.qml
+ spacing: 50
property ShellScreen screen
property string widgetId: ""
property string section: ""
property int sectionWidgetIndex: -1
property int sectionWidgetsCount: 0File: lyrics-fetch/Settings.qml
+ label: "Font Family"
+ description: "Select the font for lyrics."
+ label: "Font Size"
+ description: "Text size in points."
+ label: "Widget Width"
+ label: "Scroll Speed"
+ label: "Scroll Mode"
+ label: "Adapt scroll speed to line"
+ label: "Hide when empty"
+ label: "Show display when paused" |
Contributor
Automatic Manifest CheckFile: lyrics-fetch/manifest.json
+ "repository": "https://github.com/pever3ll/noctalia-plugins" |
Contributor
Automatic Code Quality ReviewFile: lyrics-fetch/BarWidget.qml
+ "label": pluginApi?.tr("settings.title") || "Settings",File: lyrics-fetch/Main.qml
+ return pluginApi?.tr("lyrics.paused") || "Music paused"
+ return pluginApi?.tr("lyrics.loading") || "Wait Loading 🪿"File: lyrics-fetch/Settings.qml
+ label: pluginApi?.tr("settings.font.title") || "Font Family"
+ description: pluginApi?.tr("settings.font.desc") || "Select the font for lyrics."
+ placeholder: pluginApi?.tr("settings.font.placeholder") || "Select a font..."
+ searchPlaceholder: pluginApi?.tr("settings.font.search-placeholder") || "Search fonts..."
+ label: pluginApi?.tr("settings.font.size") || "Font Size"
+ description: pluginApi?.tr("settings.font.size-desc") || "Text size in points."
+ label: pluginApi?.tr("settings.width") || "Widget Width"
+ label: pluginApi?.tr("settings.scroll.speed") || "Scroll Speed"
+ label: pluginApi?.tr("settings.scroll.mode.title") || "Scroll Mode"
+ name: pluginApi?.tr("settings.scroll.mode.always") || "Always Scroll",
+ name: pluginApi?.tr("settings.scroll.mode.hover") || "Scroll on Hover",
+ name: pluginApi?.tr("settings.scroll.mode.never") || "Don't Scroll",
+ label: pluginApi?.tr("settings.scroll.adapt") || "Adapt scroll speed to line"
+ description: pluginApi?.tr("settings.scroll.adapt-desc") || "Change scroll speed based on length of line"
+ label: pluginApi?.tr("settings.hide-when-empty") || "Hide when empty"
+ label: pluginApi?.tr("show-when-paused") || "Show display when paused" |
Contributor
Automatic Manifest CheckFile: lyrics-fetch/manifest.json
+ "repository": "https://github.com/pever3ll/noctalia-plugins" |
Contributor
Automatic Code Quality ReviewFile: lyrics-fetch/BarWidget.qml
+ "label": pluginApi?.tr("settings.title") || "Settings",File: lyrics-fetch/Main.qml
+ return pluginApi?.tr("lyrics.paused") || "Music paused"
+ return pluginApi?.tr("lyrics.loading") || "Wait Loading 🪿"File: lyrics-fetch/Settings.qml
+ label: pluginApi?.tr("settings.font.title") || "Font Family"
+ description: pluginApi?.tr("settings.font.desc") || "Select the font for lyrics."
+ placeholder: pluginApi?.tr("settings.font.placeholder") || "Select a font..."
+ searchPlaceholder: pluginApi?.tr("settings.font.search-placeholder") || "Search fonts..."
+ label: pluginApi?.tr("settings.font.size") || "Font Size"
+ description: pluginApi?.tr("settings.font.size-desc") || "Text size in points."
+ label: pluginApi?.tr("settings.width") || "Widget Width"
+ label: pluginApi?.tr("settings.scroll.speed") || "Scroll Speed"
+ label: pluginApi?.tr("settings.scroll.mode.title") || "Scroll Mode"
+ name: pluginApi?.tr("settings.scroll.mode.always") || "Always Scroll",
+ name: pluginApi?.tr("settings.scroll.mode.hover") || "Scroll on Hover",
+ name: pluginApi?.tr("settings.scroll.mode.never") || "Don't Scroll",
+ label: pluginApi?.tr("settings.scroll.adapt") || "Adapt scroll speed to line"
+ description: pluginApi?.tr("settings.scroll.adapt-desc") || "Change scroll speed based on length of line"
+ label: pluginApi?.tr("settings.hide-when-empty") || "Hide when empty"
+ label: pluginApi?.tr("show-when-paused") || "Show display when paused" |
Contributor
Automatic Manifest CheckFile: lyrics-fetch/manifest.json
+ "repository": "https://github.com/pever3ll/noctalia-plugins" |
Contributor
Automatic Code Quality ReviewFile: lyrics-fetch/BarWidget.qml
+ "label": pluginApi?.tr("settings.title") || "Settings",File: lyrics-fetch/Main.qml
+ return pluginApi?.tr("lyrics.paused") || "Music paused"
+ return pluginApi?.tr("lyrics.loading") || "Wait Loading 🪿"File: lyrics-fetch/Settings.qml
+ label: pluginApi?.tr("settings.font.title") || "Font Family"
+ description: pluginApi?.tr("settings.font.desc") || "Select the font for lyrics."
+ placeholder: pluginApi?.tr("settings.font.placeholder") || "Select a font..."
+ searchPlaceholder: pluginApi?.tr("settings.font.search-placeholder") || "Search fonts..."
+ label: pluginApi?.tr("settings.font.size") || "Font Size"
+ description: pluginApi?.tr("settings.font.size-desc") || "Text size in points."
+ label: pluginApi?.tr("settings.width") || "Widget Width"
+ label: pluginApi?.tr("settings.scroll.speed") || "Scroll Speed"
+ label: pluginApi?.tr("settings.scroll.mode.title") || "Scroll Mode"
+ name: pluginApi?.tr("settings.scroll.mode.always") || "Always Scroll",
+ name: pluginApi?.tr("settings.scroll.mode.hover") || "Scroll on Hover",
+ name: pluginApi?.tr("settings.scroll.mode.never") || "Don't Scroll",
+ label: pluginApi?.tr("settings.scroll.adapt") || "Adapt scroll speed to line"
+ description: pluginApi?.tr("settings.scroll.adapt-desc") || "Change scroll speed based on length of line"
+ label: pluginApi?.tr("settings.hide-when-empty") || "Hide when empty"
+ label: pluginApi?.tr("show-when-paused") || "Show display when paused" |
Contributor
Automatic Manifest CheckFile: lyrics-fetch/manifest.json
+ "repository": "https://github.com/pever3ll/noctalia-plugins" |
Contributor
Automatic Code Quality ReviewFile: lyrics-fetch/BarWidget.qml
+ "label": pluginApi?.tr("settings.title") || "Settings",File: lyrics-fetch/Main.qml
+ return pluginApi?.tr("lyrics.paused") || "Music paused"
+ return pluginApi?.tr("lyrics.loading") || "Wait Loading 🪿"File: lyrics-fetch/Settings.qml
+ label: pluginApi?.tr("settings.font.title") || "Font Family"
+ description: pluginApi?.tr("settings.font.desc") || "Select the font for lyrics."
+ placeholder: pluginApi?.tr("settings.font.placeholder") || "Select a font..."
+ searchPlaceholder: pluginApi?.tr("settings.font.search-placeholder") || "Search fonts..."
+ label: pluginApi?.tr("settings.font.size") || "Font Size"
+ description: pluginApi?.tr("settings.font.size-desc") || "Text size in points."
+ label: pluginApi?.tr("settings.width") || "Widget Width"
+ label: pluginApi?.tr("settings.scroll.speed") || "Scroll Speed"
+ label: pluginApi?.tr("settings.scroll.mode.title") || "Scroll Mode"
+ name: pluginApi?.tr("settings.scroll.mode.always") || "Always Scroll",
+ name: pluginApi?.tr("settings.scroll.mode.hover") || "Scroll on Hover",
+ name: pluginApi?.tr("settings.scroll.mode.never") || "Don't Scroll",
+ label: pluginApi?.tr("settings.scroll.adapt") || "Adapt scroll speed to line"
+ description: pluginApi?.tr("settings.scroll.adapt-desc") || "Change scroll speed based on length of line"
+ label: pluginApi?.tr("settings.hide-when-empty") || "Hide when empty"
+ label: pluginApi?.tr("show-when-paused") || "Show display when paused" |
Contributor
Automatic Manifest CheckFile: lyrics-fetch/manifest.json
+ "repository": "https://github.com/pever3ll/noctalia-plugins" |
Contributor
Automatic Code Quality ReviewFile: lyrics-fetch/BarWidget.qml
+ "label": pluginApi?.tr("settings.title") || "Settings",File: lyrics-fetch/Main.qml
+ return pluginApi?.tr("lyrics.paused") || "Music paused"
+ return pluginApi?.tr("lyrics.loading") || "Wait Loading 🪿"File: lyrics-fetch/Settings.qml
+ label: pluginApi?.tr("settings.font.title") || "Font Family"
+ description: pluginApi?.tr("settings.font.desc") || "Select the font for lyrics."
+ placeholder: pluginApi?.tr("settings.font.placeholder") || "Select a font..."
+ searchPlaceholder: pluginApi?.tr("settings.font.search-placeholder") || "Search fonts..."
+ label: pluginApi?.tr("settings.font.size") || "Font Size"
+ description: pluginApi?.tr("settings.font.size-desc") || "Text size in points."
+ label: pluginApi?.tr("settings.width") || "Widget Width"
+ label: pluginApi?.tr("settings.scroll.speed") || "Scroll Speed"
+ label: pluginApi?.tr("settings.scroll.mode.title") || "Scroll Mode"
+ name: pluginApi?.tr("settings.scroll.mode.always") || "Always Scroll",
+ name: pluginApi?.tr("settings.scroll.mode.hover") || "Scroll on Hover",
+ name: pluginApi?.tr("settings.scroll.mode.never") || "Don't Scroll",
+ label: pluginApi?.tr("settings.scroll.adapt") || "Adapt scroll speed to line"
+ description: pluginApi?.tr("settings.scroll.adapt-desc") || "Change scroll speed based on length of line"
+ label: pluginApi?.tr("settings.hide-when-empty") || "Hide when empty"
+ label: pluginApi?.tr("show-when-paused") || "Show display when paused" |
Contributor
Automatic Code Quality ReviewFile: lyrics-fetch/BarWidget.qml
+ "label": pluginApi?.tr("settings.title") || "Settings",File: lyrics-fetch/Main.qml
+ return pluginApi?.tr("lyrics.paused") || "Music paused"
+ return pluginApi?.tr("lyrics.loading") || "Wait Loading 🪿"File: lyrics-fetch/Settings.qml
+ label: pluginApi?.tr("settings.font.title") || "Font Family"
+ description: pluginApi?.tr("settings.font.desc") || "Select the font for lyrics."
+ placeholder: pluginApi?.tr("settings.font.placeholder") || "Select a font..."
+ searchPlaceholder: pluginApi?.tr("settings.font.search-placeholder") || "Search fonts..."
+ label: pluginApi?.tr("settings.font.size") || "Font Size"
+ description: pluginApi?.tr("settings.font.size-desc") || "Text size in points."
+ label: pluginApi?.tr("settings.width") || "Widget Width"
+ label: pluginApi?.tr("settings.scroll.speed") || "Scroll Speed"
+ label: pluginApi?.tr("settings.scroll.mode.title") || "Scroll Mode"
+ name: pluginApi?.tr("settings.scroll.mode.always") || "Always Scroll",
+ name: pluginApi?.tr("settings.scroll.mode.hover") || "Scroll on Hover",
+ name: pluginApi?.tr("settings.scroll.mode.never") || "Don't Scroll",
+ label: pluginApi?.tr("settings.scroll.adapt") || "Adapt scroll speed to line"
+ description: pluginApi?.tr("settings.scroll.adapt-desc") || "Change scroll speed based on length of line"
+ label: pluginApi?.tr("settings.hide-when-empty") || "Hide when empty"
+ label: pluginApi?.tr("show-when-paused") || "Show display when paused" |
Collaborator
|
Is this PR ready for review? :) |
Author
yes! |
spiros132
reviewed
Apr 9, 2026
Collaborator
spiros132
left a comment
There was a problem hiding this comment.
Some minor feedback about the PR, otherwise ready to be merged :)
| // Logger.d("songSeekProc", "playing:", data === "Playing") | ||
| // Logger.d("songSeekProc", "wasPlaying:", songSeekProc.lastState === "Playing") | ||
| if (data === "Playing" && songSeekProc.lastState === "Playing") { | ||
| Logger.d("songSeekProc", "seeked") |
Collaborator
There was a problem hiding this comment.
I would suggest using the plugin name here. For example instead of using the songSeekProc, use LyricsFetch
| try { | ||
| lyrics = JSON.parse(output)?.syncedLyrics?.toString() || "" | ||
| } catch (e) { | ||
| Logger.e("fetchLyricProc", "Error parsing JSON:", e) |
Collaborator
There was a problem hiding this comment.
Here as well, prefer for the first argument to be the plugin name, and maybe then describe where you are in the code. For example: `Logger.e("LyricsFetch", "Fetching Lyrics Process | Error parsing JSON:", e)
| Logger.e("fetchLyricProc", "Error parsing JSON:", e) | ||
| } | ||
| if (!lyrics) { | ||
| Logger.e("fetchLyricProc", "No synced lyrics") |
Collaborator
There was a problem hiding this comment.
Here as well, use your plugins name.
Author
|
Done! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The plugin fetches lyrics using MPRIS data from lrclib.net and displays it in the bar.