Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package osdlyrics for openSUSE:Factory checked in at 2026-10-21 20:56:16 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/osdlyrics (Old) and /work/SRC/openSUSE:Factory/.osdlyrics.new.2252680 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "osdlyrics" Wed Oct 21 20:56:16 2026 rev:16 rq:1386583 version:0.5.16 Changes: -------- --- /work/SRC/openSUSE:Factory/osdlyrics/osdlyrics.changes 2026-02-16 13:18:50.733882869 +0100 +++ /work/SRC/openSUSE:Factory/.osdlyrics.new.2252680/osdlyrics.changes 2026-10-21 20:57:38.145356138 +0200 @@ -1,0 +2,9 @@ +Sat Oct 17 16:47:40 UTC 2026 - Martin Pluskal <[email protected]> + +- Update to version 0.5.16: + * Add LrcLib lyrics source. + * Remove Xiami lyrics source support. + * Correctly parse song title from filename. + * Fix build error (drop fix-build-with-gcc15.patch, adopted upstream). + +------------------------------------------------------------------- Old: ---- fix-build-with-gcc15.patch osdlyrics-0.5.15.tar.gz New: ---- osdlyrics-0.5.16.tar.gz ----------(Old B)---------- Old: * Correctly parse song title from filename. * Fix build error (drop fix-build-with-gcc15.patch, adopted upstream). ----------(Old E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ osdlyrics.spec ++++++ --- /var/tmp/diff_new_pack.FB2eeP/_old 2026-10-21 20:57:38.860386111 +0200 +++ /var/tmp/diff_new_pack.FB2eeP/_new 2026-10-21 20:57:38.861386153 +0200 @@ -17,15 +17,13 @@ Name: osdlyrics -Version: 0.5.15 +Version: 0.5.16 Release: 0 Summary: A third-party lyrics display program License: GPL-3.0-or-later -Group: Productivity/Multimedia/Sound/Visualization URL: https://github.com/osdlyrics/osdlyrics Source0: https://github.com/osdlyrics/osdlyrics/archive/%{version}/%{name}-%{version}.tar.gz Source1: %{name}.appdata.xml -Patch0: fix-build-with-gcc15.patch BuildRequires: fdupes BuildRequires: gettext-devel BuildRequires: glibc-devel @@ -57,7 +55,6 @@ %package -n python3-%{name} Summary: Python module for osdlyrics -Group: Productivity/Multimedia/Sound/Visualization Requires: %{name} = %{version} Obsoletes: python-%{name} <= %{version} ++++++ osdlyrics-0.5.15.tar.gz -> osdlyrics-0.5.16.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/check-version.sh new/osdlyrics-0.5.16/check-version.sh --- old/osdlyrics-0.5.15/check-version.sh 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/check-version.sh 2026-05-04 13:00:22.000000000 +0200 @@ -1,7 +1,7 @@ #h!/usr/bin/env sh GIT="${GIT:-git}" -OL_VERSION="${OL_VERSION:-0.5.15}" +OL_VERSION="${OL_VERSION:-0.5.16}" if [ ! "$("$GIT" rev-parse --show-prefix 2>/dev/null)" ]; then _GIT_VERSION="$("$GIT" describe --always --tags 2>/dev/null)" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/configure.ac new/osdlyrics-0.5.16/configure.ac --- old/osdlyrics-0.5.15/configure.ac 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/configure.ac 2026-05-04 13:00:22.000000000 +0200 @@ -132,7 +132,7 @@ IT_PROG_INTLTOOL([0.35.0]) AM_GNU_GETTEXT([external]) AM_GNU_GETTEXT_VERSION([0.19]) -m4_ifdef([AM_GNU_GETTEXT_REQUIRE_VERSION], +m4_ifdef([AM_GNU_GET][TEXT_REQUIRE_VERSION], [AM_GNU_GETTEXT_REQUIRE_VERSION([0.19])] ) @@ -159,11 +159,11 @@ python/Makefile python/dbusext/Makefile lyricsources/Makefile - lyricsources/xiami/Makefile lyricsources/megalobiz/Makefile lyricsources/netease/Makefile lyricsources/netease_tr/Makefile lyricsources/subtitles4songs/Makefile + lyricsources/lrclib/Makefile tools/Makefile ]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/doc/dbus.rst new/osdlyrics-0.5.16/doc/dbus.rst --- old/osdlyrics-0.5.15/doc/dbus.rst 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/doc/dbus.rst 2026-05-04 13:00:22.000000000 +0200 @@ -420,7 +420,7 @@ To write a plugin to support a new lyric source to download or upload(optional), the plugins should follow the specification here. -A lyric source plugin Must have a unique name, linke ``ttplayer`` or ``xiami``. The well-known bus name should be ``org.osdlyrics.LyricSourcePlugin.<pluginname>``. The object path should be ``/org/osdlyrics/LyricSourcePlugin/<pluginname>``. ``<pluginname>`` here stands for the unique name of the plugin. +A lyric source plugin Must have a unique name, like ``ttplayer``. The well-known bus name should be ``org.osdlyrics.LyricSourcePlugin.<pluginname>``. The object path should be ``/org/osdlyrics/LyricSourcePlugin/<pluginname>``. ``<pluginname>`` here stands for the unique name of the plugin. All lyric source plugin should implement ``org.osdlyrics.LyricSourcePlugin`` interface. The interface is defined below: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/lyricsources/Makefile.am new/osdlyrics-0.5.16/lyricsources/Makefile.am --- old/osdlyrics-0.5.15/lyricsources/Makefile.am 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/lyricsources/Makefile.am 2026-05-04 13:00:22.000000000 +0200 @@ -1 +1 @@ -SUBDIRS = xiami megalobiz netease netease_tr subtitles4songs +SUBDIRS = megalobiz netease netease_tr subtitles4songs lrclib diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/lyricsources/lrclib/Makefile.am new/osdlyrics-0.5.16/lyricsources/lrclib/Makefile.am --- old/osdlyrics-0.5.15/lyricsources/lrclib/Makefile.am 1970-01-01 01:00:00.000000000 +0100 +++ new/osdlyrics-0.5.16/lyricsources/lrclib/Makefile.am 2026-05-04 13:00:22.000000000 +0200 @@ -0,0 +1,19 @@ +lrclib_PYTHON = lrclib.py + +lrclibdir = $(pkglibdir)/lyricsources/lrclib + + +servicedir = $(datadir)/dbus-1/services +service_in_files = org.osdlyrics.LyricSourcePlugin.lrclib.service.in +service_DATA = $(service_in_files:.service.in=.service) + +EXTRA_DIST = \ + $(service_in_files) \ + $(NULL) + +$(service_DATA): $(service_in_files) + @sed -e "s|\@pkglibdir\@|$(pkglibdir)|" -e "s|\@PYTHON\@|$(PYTHON)|" $< > $@ + +CLEANFILES = \ + org.osdlyrics.LyricSourcePlugin.lrclib.service \ + $(NULL) \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/lyricsources/lrclib/lrclib.py new/osdlyrics-0.5.16/lyricsources/lrclib/lrclib.py --- old/osdlyrics-0.5.15/lyricsources/lrclib/lrclib.py 1970-01-01 01:00:00.000000000 +0100 +++ new/osdlyrics-0.5.16/lyricsources/lrclib/lrclib.py 2026-05-04 13:00:22.000000000 +0200 @@ -0,0 +1,147 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2025 OSD Lyrics Contributors +# +# This file is part of OSD Lyrics. +# +# OSD Lyrics is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# OSD Lyrics is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>. +# + +import json +import urllib.parse +import gettext +import http.client + +from osdlyrics.lyricsource import BaseLyricSourcePlugin, SearchResult +from osdlyrics.utils import get_proxy_settings, http_download + +_ = gettext.gettext + +# API endpoints +LRCLIB_HOST = 'https://lrclib.net' +LRCLIB_SEARCH_PATH = '/api/search' +LRCLIB_GET_PATH = '/api/get' +LRCLIB_GET_CACHED_PATH = '/api/get-cached' + +# Set User-Agent as recommended in the API docs +USER_AGENT = 'OSDLyrics v0.5.15 (https://github.com/osdlyrics/osdlyrics)' + +gettext.bindtextdomain('osdlyrics') +gettext.textdomain('osdlyrics') + + +class LrcLibSource(BaseLyricSourcePlugin): + """ Lyric source from https://lrclib.net/ + """ + + def __init__(self): + super().__init__(id='lrclib', name=_('LrcLib')) + + def do_search(self, metadata): + """ + Search for lyrics using LrcLib API + """ + # Prepare search parameters + params = {} + + # If both title and artist are available, use them for search + if metadata.title and metadata.artist: + params['track_name'] = metadata.title + params['artist_name'] = metadata.artist + # If only title is available, use it as a general query + elif metadata.title: + params['q'] = metadata.title + # If only artist is available, use it as a general query + elif metadata.artist: + params['q'] = metadata.artist + else: + # No search criteria available + return [] + + # Add album name if available + if metadata.album: + params['album_name'] = metadata.album + + # Build the URL and make request + url = LRCLIB_HOST + LRCLIB_SEARCH_PATH + headers = {'User-Agent': USER_AGENT} + status, content = http_download( + url=url, + params=params, + headers=headers, + proxy=get_proxy_settings(self.config_proxy) + ) + + # Check HTTP response code + if status < 200 or status >= 400: + if status == 404: + # Not found is a normal condition, return empty list + return [] + raise http.client.HTTPException(status, content) + + # Parse JSON response + results = json.loads(content.decode('utf-8')) + + # Process search results + search_results = [] + for result in results: + # Use the ID as downloadinfo - this is what we'll use to fetch lyrics + track_id = result.get('id') + if track_id: + search_results.append( + SearchResult( + title=result.get('trackName', ''), + artist=result.get('artistName', ''), + album=result.get('albumName', ''), + sourceid=self.id, + downloadinfo=str(track_id) + ) + ) + + return search_results + + def do_download(self, downloadinfo): + """ + Download lyrics using LrcLib API + """ + # downloadinfo is now just the track ID as a string + url = f"{LRCLIB_HOST}{LRCLIB_GET_PATH}/{downloadinfo}" + headers = {'User-Agent': USER_AGENT} + status, content = http_download( + url=url, + headers=headers, + proxy=get_proxy_settings(self.config_proxy) + ) + + # Check HTTP response code + if status < 200 or status >= 400: + raise http.client.HTTPException(status, content) + + # Parse JSON response + result = json.loads(content.decode('utf-8')) + + # Check if we have synced lyrics + if result.get('syncedLyrics'): + return result['syncedLyrics'].encode('utf-8') + # Fall back to plain lyrics if no synced lyrics + elif result.get('plainLyrics'): + return result['plainLyrics'].encode('utf-8') + # Return empty string if no lyrics found + else: + return b'' + + +if __name__ == '__main__': + lls = LrcLibSource() + lls._app.run() \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/lyricsources/lrclib/org.osdlyrics.LyricSourcePlugin.lrclib.service.in new/osdlyrics-0.5.16/lyricsources/lrclib/org.osdlyrics.LyricSourcePlugin.lrclib.service.in --- old/osdlyrics-0.5.15/lyricsources/lrclib/org.osdlyrics.LyricSourcePlugin.lrclib.service.in 1970-01-01 01:00:00.000000000 +0100 +++ new/osdlyrics-0.5.16/lyricsources/lrclib/org.osdlyrics.LyricSourcePlugin.lrclib.service.in 2026-05-04 13:00:22.000000000 +0200 @@ -0,0 +1,3 @@ +[D-BUS Service] +Name=org.osdlyrics.LyricSourcePlugin.lrclib +Exec=@PYTHON@ @pkglibdir@/lyricsources/lrclib/lrclib.py \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/lyricsources/xiami/Makefile.am new/osdlyrics-0.5.16/lyricsources/xiami/Makefile.am --- old/osdlyrics-0.5.15/lyricsources/xiami/Makefile.am 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/lyricsources/xiami/Makefile.am 1970-01-01 01:00:00.000000000 +0100 @@ -1,19 +0,0 @@ -xiami_PYTHON = xiami.py - -xiamidir = $(pkglibdir)/lyricsources/xiami - - -servicedir = $(datadir)/dbus-1/services -service_in_files = org.osdlyrics.LyricSourcePlugin.xiami.service.in -service_DATA = $(service_in_files:.service.in=.service) - -EXTRA_DIST = \ - $(service_in_files) \ - $(NULL) - -$(service_DATA): $(service_in_files) - @sed -e "s|\@pkglibdir\@|$(pkglibdir)|" -e "s|\@PYTHON\@|$(PYTHON)|" $< > $@ - -CLEANFILES = \ - org.osdlyrics.LyricSourcePlugin.xiami.service \ - $(NULL) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/lyricsources/xiami/org.osdlyrics.LyricSourcePlugin.xiami.service.in new/osdlyrics-0.5.16/lyricsources/xiami/org.osdlyrics.LyricSourcePlugin.xiami.service.in --- old/osdlyrics-0.5.15/lyricsources/xiami/org.osdlyrics.LyricSourcePlugin.xiami.service.in 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/lyricsources/xiami/org.osdlyrics.LyricSourcePlugin.xiami.service.in 1970-01-01 01:00:00.000000000 +0100 @@ -1,3 +0,0 @@ -[D-BUS Service] -Name=org.osdlyrics.LyricSourcePlugin.xiami -Exec=@PYTHON@ @pkglibdir@/lyricsources/xiami/xiami.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/lyricsources/xiami/xiami.py new/osdlyrics-0.5.16/lyricsources/xiami/xiami.py --- old/osdlyrics-0.5.15/lyricsources/xiami/xiami.py 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/lyricsources/xiami/xiami.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,122 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012 Tiger Soldier <[email protected]> -# -# This file is part of OSD Lyrics. -# -# OSD Lyrics is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# OSD Lyrics is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>. -# - -# import urlparse -import gettext -import html.parser -import http.client -import re - -from osdlyrics.lyricsource import BaseLyricSourcePlugin, SearchResult -from osdlyrics.utils import get_proxy_settings, http_download - -_ = gettext.gettext - -XIAMI_HOST = 'www.xiami.com' -XIAMI_SEARCH_URL = '/search' -XIAMI_SONG_URL = '/song/' -XIAMI_LRC_URL = '/song/playlist/id/' -XIAMI_SEARCH_PATTERN = re.compile(r'(<a [^<]*?href="http://www.xiami.com/song/(\w+)".*?>).*?(<a [^<]*?href="http://www.xiami.com/artist/.*?>).*?(<a [^<]*?href="http://www.xiami.com/album/.*?>)', re.DOTALL) -XIAMI_ID_PATTERN = re.compile(r'<a [^<]*?onclick="tag\((\d+).*?>') -XIAMI_URL_PATTERN = re.compile(r'<lyric>(.*?)</lyric>', re.DOTALL) -TITLE_ATTR_PATTERN = re.compile(r'title="(.*?)"') - -gettext.bindtextdomain('osdlyrics') -gettext.textdomain('osdlyrics') - - -class XiamiSource(BaseLyricSourcePlugin): - """ Lyric source from xiami.com - """ - - def __init__(self): - super().__init__(id='xiami', name=_('Xiami')) - - def do_search(self, metadata): - # type: (osdlyrics.metadata.Metadata) -> List[SearchResult] - keys = [] - if metadata.title: - keys.append(metadata.title) - if metadata.artist: - keys.append(metadata.artist) - urlkey = '+'.join(keys).replace(' ', '+') - url = XIAMI_HOST + XIAMI_SEARCH_URL - status, content = http_download(url=url, - params={'key': urlkey}, - proxy=get_proxy_settings(self.config_proxy)) - if status < 200 or status >= 400: - raise http.client.HTTPException(status, '') - match = XIAMI_SEARCH_PATTERN.findall(content.decode('utf8')) - result = [] - if match: - for title_elem, id, artist_elem, album_elem in match: - title = TITLE_ATTR_PATTERN.search(title_elem).group(1) - artist = TITLE_ATTR_PATTERN.search(artist_elem).group(1) - album = TITLE_ATTR_PATTERN.search(album_elem).group(1) - url = self.get_url(id) - if url is not None: - result.append(SearchResult(title=title, - artist=artist, - album=album, - sourceid=self.id, - downloadinfo=url)) - return result - - def get_songid(self, id): - status, content = http_download(url=XIAMI_HOST + XIAMI_SONG_URL + str(id), - proxy=get_proxy_settings(self.config_proxy)) - if status < 200 or status >= 400: - return None - match = XIAMI_ID_PATTERN.search(content) - if not match: - return None - songid = match.group(1).strip() - return songid - - def get_url(self, id): - songid = self.get_songid(id) - status, content = http_download(url=XIAMI_HOST + XIAMI_LRC_URL + str(songid), - proxy=get_proxy_settings(self.config_proxy)) - if status < 200 or status >= 400: - return None - match = XIAMI_URL_PATTERN.search(content) - if not match: - return None - url = match.group(1).strip() - if url.lower().endswith('.lrc'): - return url - else: - return None - - def do_download(self, downloadinfo): - # type: (Any) -> bytes - # parts = urlparse.urlparse(downloadinfo) - status, content = http_download(downloadinfo, - proxy=get_proxy_settings(self.config_proxy)) - if status < 200 or status >= 400: - raise http.client.HTTPException(status) - if content: - content = html.parser.HTMLParser().unescape(content.decode('utf-8')) - return content.encode('utf-8') - - -if __name__ == '__main__': - xiami = XiamiSource() - xiami._app.run() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/po/POTFILES.in new/osdlyrics-0.5.16/po/POTFILES.in --- old/osdlyrics-0.5.15/po/POTFILES.in 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/po/POTFILES.in 2026-05-04 13:00:22.000000000 +0200 @@ -14,5 +14,4 @@ lyricsources/megalobiz/megalobiz.py lyricsources/netease/netease.py lyricsources/netease_tr/netease_tr.py -lyricsources/xiami/xiami.py lyricsources/subtitles4songs/subtitles4songs.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/po/cs.po new/osdlyrics-0.5.16/po/cs.po --- old/osdlyrics-0.5.15/po/cs.po 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/po/cs.po 2026-05-04 13:00:22.000000000 +0200 @@ -666,7 +666,3 @@ #: ../data/osdlyrics.desktop.in.h:3 msgid "Download and show lyrics for your favorite media player" msgstr "Stahuje a zobrazuje časovaný text k přehrávaným skladbám" - -#: ../lyricsources/xiami/xiami.py:49 -msgid "Xiami" -msgstr "" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/po/de.po new/osdlyrics-0.5.16/po/de.po --- old/osdlyrics-0.5.15/po/de.po 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/po/de.po 2026-05-04 13:00:22.000000000 +0200 @@ -107,10 +107,6 @@ msgid "ttPlayer" msgstr "" -#: ../src/ol_lrc_fetch_xiami.c:237 -msgid "Xiami" -msgstr "" - #: ../src/ol_lrc_candidate_list.c:43 msgid "Title" msgstr "Titel" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/po/es.po new/osdlyrics-0.5.16/po/es.po --- old/osdlyrics-0.5.15/po/es.po 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/po/es.po 2026-05-04 13:00:22.000000000 +0200 @@ -106,10 +106,6 @@ msgid "ttPlayer" msgstr "" -#: ../src/ol_lrc_fetch_xiami.c:237 -msgid "Xiami" -msgstr "" - #: ../src/ol_lrc_candidate_list.c:43 msgid "Title" msgstr "Título" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/po/fr.po new/osdlyrics-0.5.16/po/fr.po --- old/osdlyrics-0.5.15/po/fr.po 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/po/fr.po 2026-05-04 13:00:22.000000000 +0200 @@ -107,10 +107,6 @@ msgid "ttPlayer" msgstr "" -#: ../src/ol_lrc_fetch_xiami.c:237 -msgid "Xiami" -msgstr "" - #: ../src/ol_lrc_candidate_list.c:43 msgid "Title" msgstr "Titre" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/po/it.po new/osdlyrics-0.5.16/po/it.po --- old/osdlyrics-0.5.15/po/it.po 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/po/it.po 2026-05-04 13:00:22.000000000 +0200 @@ -106,10 +106,6 @@ msgid "ttPlayer" msgstr "" -#: ../src/ol_lrc_fetch_xiami.c:237 -msgid "Xiami" -msgstr "" - #: ../src/ol_lrc_candidate_list.c:43 msgid "Title" msgstr "Titolo" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/po/ms.po new/osdlyrics-0.5.16/po/ms.po --- old/osdlyrics-0.5.15/po/ms.po 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/po/ms.po 2026-05-04 13:00:22.000000000 +0200 @@ -106,10 +106,6 @@ msgid "ttPlayer" msgstr "" -#: ../src/ol_lrc_fetch_xiami.c:237 -msgid "Xiami" -msgstr "" - #: ../src/ol_lrc_candidate_list.c:43 msgid "Title" msgstr "Tajuk" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/po/pt_BR.po new/osdlyrics-0.5.16/po/pt_BR.po --- old/osdlyrics-0.5.15/po/pt_BR.po 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/po/pt_BR.po 2026-05-04 13:00:22.000000000 +0200 @@ -106,10 +106,6 @@ msgid "ttPlayer" msgstr "" -#: ../src/ol_lrc_fetch_xiami.c:237 -msgid "Xiami" -msgstr "" - #: ../src/ol_lrc_candidate_list.c:43 msgid "Title" msgstr "Título" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/po/ro.po new/osdlyrics-0.5.16/po/ro.po --- old/osdlyrics-0.5.15/po/ro.po 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/po/ro.po 2026-05-04 13:00:22.000000000 +0200 @@ -106,10 +106,6 @@ msgid "ttPlayer" msgstr "ttPlayer" -#: ../src/ol_lrc_fetch_xiami.c:237 -msgid "Xiami" -msgstr "Xiami" - #: ../src/ol_lrc_candidate_list.c:43 msgid "Title" msgstr "Titlu" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/po/ru.po new/osdlyrics-0.5.16/po/ru.po --- old/osdlyrics-0.5.15/po/ru.po 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/po/ru.po 2026-05-04 13:00:22.000000000 +0200 @@ -107,10 +107,6 @@ msgid "ttPlayer" msgstr "" -#: ../src/ol_lrc_fetch_xiami.c:237 -msgid "Xiami" -msgstr "" - #: ../src/ol_lrc_candidate_list.c:43 msgid "Title" msgstr "Заголовок" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/po/tr.po new/osdlyrics-0.5.16/po/tr.po --- old/osdlyrics-0.5.15/po/tr.po 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/po/tr.po 2026-05-04 13:00:22.000000000 +0200 @@ -106,10 +106,6 @@ msgid "ttPlayer" msgstr "" -#: ../src/ol_lrc_fetch_xiami.c:237 -msgid "Xiami" -msgstr "" - #: ../src/ol_lrc_candidate_list.c:43 msgid "Title" msgstr "Başlık" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/po/uk.po new/osdlyrics-0.5.16/po/uk.po --- old/osdlyrics-0.5.15/po/uk.po 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/po/uk.po 2026-05-04 13:00:22.000000000 +0200 @@ -108,10 +108,6 @@ msgid "ttPlayer" msgstr "" -#: ../src/ol_lrc_fetch_xiami.c:237 -msgid "Xiami" -msgstr "" - #: ../src/ol_lrc_candidate_list.c:43 msgid "Title" msgstr "Назва" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/po/zh_CN.po new/osdlyrics-0.5.16/po/zh_CN.po --- old/osdlyrics-0.5.15/po/zh_CN.po 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/po/zh_CN.po 2026-05-04 13:00:22.000000000 +0200 @@ -672,10 +672,6 @@ msgid "Download and show lyrics for your favorite media player" msgstr "让你的音乐播放器支持下载和显示歌词" -#: ../lyricsources/xiami/xiami.py:50 -msgid "Xiami" -msgstr "虾米" - #~ msgid "Cannot create the lyric directory" #~ msgstr "无法创建歌词目录" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/po/zh_HK.po new/osdlyrics-0.5.16/po/zh_HK.po --- old/osdlyrics-0.5.15/po/zh_HK.po 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/po/zh_HK.po 2026-05-04 13:00:22.000000000 +0200 @@ -101,10 +101,6 @@ msgid "ttPlayer" msgstr "" -#: ../src/ol_lrc_fetch_xiami.c:237 -msgid "Xiami" -msgstr "" - #: ../src/ol_lrc_candidate_list.c:43 msgid "Title" msgstr "歌名" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/po/zh_TW.po new/osdlyrics-0.5.16/po/zh_TW.po --- old/osdlyrics-0.5.15/po/zh_TW.po 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/po/zh_TW.po 2026-05-04 13:00:22.000000000 +0200 @@ -101,10 +101,6 @@ msgid "ttPlayer" msgstr "" -#: ../src/ol_lrc_fetch_xiami.c:237 -msgid "Xiami" -msgstr "" - #: ../src/ol_lrc_candidate_list.c:43 msgid "Title" msgstr "歌名" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/src/ol_config_property.h new/osdlyrics-0.5.16/src/ol_config_property.h --- old/osdlyrics-0.5.15/src/ol_config_property.h 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/src/ol_config_property.h 2026-05-04 13:00:22.000000000 +0200 @@ -33,7 +33,6 @@ static const char *OL_CONFIG_DEFAULT_DOWNLOAD_ENGINE[] = { "ttPlayer", - "xiami", NULL, }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/src/ol_keybindings.c new/osdlyrics-0.5.16/src/ol_keybindings.c --- old/osdlyrics-0.5.15/src/ol_keybindings.c 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/src/ol_keybindings.c 2026-05-04 13:00:22.000000000 +0200 @@ -51,8 +51,8 @@ gtk_accel_group_connect_by_path (accel, "<OSD Lyrics>/Switch OSD", hide_closure); - ol_keybinder_bind ("<Ctrl><Shift>H", ol_osd_switch_display, NULL); - ol_keybinder_bind ("<Ctrl><Shift>L", ol_osd_lock_unlock, NULL); + ol_keybinder_bind ("<Ctrl><Shift>H", (OlBindkeyHandler)ol_osd_switch_display, NULL); + ol_keybinder_bind ("<Ctrl><Shift>L", (OlBindkeyHandler)ol_osd_lock_unlock, NULL); } GtkAccelGroup* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.15/src/ol_metadata.c new/osdlyrics-0.5.16/src/ol_metadata.c --- old/osdlyrics-0.5.15/src/ol_metadata.c 2023-12-20 15:02:07.000000000 +0100 +++ new/osdlyrics-0.5.16/src/ol_metadata.c 2026-05-04 13:00:22.000000000 +0200 @@ -364,13 +364,28 @@ char *tmp, *rhs; /* Remove track number, if any */ - if ((tmp = strstr (new_title, "."))) + tmp = strstr (new_title, "."); + if (tmp != NULL && tmp != new_title) { + gboolean is_track_number = TRUE; + char *p; + for (p = new_title; p < tmp; p++) + { + if (!g_ascii_isdigit (*p) && !g_ascii_isspace(*p)) + { + is_track_number = FALSE; + break; + } + } + + if (is_track_number) + { rhs = g_strstrip (tmp + 1); if (strlen (rhs) > 0) { new_title = rhs; } + } } /*
