Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

在 netease-cloud-music-gtk 不工作 #17

Closed
gmg137 opened this issue Oct 23, 2023 · 15 comments
Closed

在 netease-cloud-music-gtk 不工作 #17

gmg137 opened this issue Oct 23, 2023 · 15 comments

Comments

@gmg137
Copy link

gmg137 commented Oct 23, 2023

貎似 netease-cloud-music-gtk 2.0 版本后 desktop-lyric 就不再工作了,在排查了 netease-cloud-music-gtk 的代码后没有找到原因,麻烦可以检查下看是哪里出了问题。

@tuberry
Copy link
Owner

tuberry commented Oct 23, 2023

我这里 Gnome 45 / netease-cloud-music-gtk4 2.2.0 在播放单歌手歌曲时没有问题。
图片
图片
比如今天这个"飙升榜"第一首可以,第二首不行。而用官方客户端都可以。
应该还是这个问题,我这里搜歌词会匹配所有歌手 (

@tuberry
Copy link
Owner

tuberry commented Nov 25, 2023

如果 NCM-gtk 下载的歌词保存为 song-artist-album.lrc 到指定的路径下配合 NCM-gtk 本身可以工作。

再者用其他播放器播放官方网易云下载的音乐时,mpris 接口返回的多歌手信息xesam:artist字段是用斜杠分隔的单字符串数组,形如['artist1/artist2/artist3'],如果 NCM-gtk 支持这种形式也能工作。

其实由播放器直接提供歌词才是正解,即 metadataxesam:asText 字段,可惜基本没有播放器支持,如果 NCM-gtk 有这个的话,我可以尝试支持。:)

@gmg137
Copy link
Author

gmg137 commented Nov 27, 2023

好的,对比还是我这边直接下载歌词比较简单,不容易出错。

@gmg137 gmg137 closed this as completed Nov 27, 2023
@gmg137 gmg137 reopened this Nov 27, 2023
@gmg137
Copy link
Author

gmg137 commented Nov 27, 2023

发现新问题,现在打开ncm-gtk 后状态栏没有desktop-lyric 图标,但打开gnome music 会显示。
在将歌词按你说的格式下载到 .lyrics 目录,并对 desktop-lyric 做相应配置后,播放歌曲依然没有任何反应。

@tuberry
Copy link
Owner

tuberry commented Nov 27, 2023

Arch / GNOME 45.1 / netease-cloud-music-gtk4 2.2.0 下无法复现,状态栏没图标而 GNOME Shell 本身的 Mpris 控件存在的话,很可能是在这里被忽略了。
终端中运行:

gdbus call --session --dest org.mpris.MediaPlayer2.com.gitee.gmg137.NeteaseCloudMusicGtk4 --object-path /org/mpris/MediaPlayer2 --method org.freedesktop.DBus.Properties.Get org.mpris.MediaPlayer2 DesktopEntry

Alt+F2 输入 lg 在 lookingGlass 里运行:

Shell.AppSystem.get_default().lookup_app('com.gitee.gmg137.NeteaseCloudMusicGtk4.desktop').get_app_info().get_string('Categories')

的输出是什么?

另外在终端中看看 GNOME Shell 的日志有相关的错误吗:

journalctl -fo cat /usr/bin/gnome-shell

@gmg137
Copy link
Author

gmg137 commented Nov 27, 2023

1、运行gdbus call ... 命令后返回:(<'com.gitee.gmg137.NeteaseCloudMusicGtk4'>,),没有任何反应。

2、没有找到 lg 命令。

3、journalctl 的日志输出如下:

Received error from D-Bus search provider firefox.desktop: Gio.DBusError: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.mozilla.Firefox.SearchProvider was not provided by any .service files
Received error from D-Bus search provider org.gnome.Notes.desktop: Gio.DBusError: GDBus.Error:org.freedesktop.DBus.Error.NoReply: Message recipient disconnected from message bus without replying
Could not load a pixbuf from icon theme.
This may indicate that pixbuf loaders or the mime database could not be found.
Received error from D-Bus search provider org.gnome.Boxes.desktop: Gio.IOErrorEnum: 无法调用方法;代理名称为常见的无所有者的名称 org.gnome.Boxes.SearchProvider,且代理使用 G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START 标记构建
Received error from D-Bus search provider firefox.desktop: Gio.DBusError: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.mozilla.Firefox.SearchProvider was not provided by any .service files
Received error from D-Bus search provider org.gnome.Calendar.desktop: Gio.IOErrorEnum: 已到超时限制

@tuberry
Copy link
Owner

tuberry commented Nov 27, 2023

看了下 85a4385 之前的版本是取 Mpris bus_name 末尾的播放器名称来搜索过滤浏览器之类的非音乐应用,而 NCM-gtk4 2.0 之前应该用的org.mpris.MediaPlayer2.netease-cloud-music-gtk 可以工作,现在的com.gitee.gmg137.NeteaseCloudMusicGtk4匹配不到任何应用:

Shell.AppSystem.search('com.gitee.gmg137.NeteaseCloudMusicGtk4') 

不过其后直接用的 Mpris 提供的 DesktopEntry 应该不存在这个问题,所以你用的应该是 GNOME 45 之前的版本吧。
可以直接在这行后加一行作为 workaround:

if(name === 'com.gitee.gmg137.NeteaseCloudMusicGtk4') return true;

等升级到 GNOME 45 应该就好了。

@gmg137
Copy link
Author

gmg137 commented Nov 27, 2023

我的桌面版本已经是gnome 45.1 了, 用D-Feet 可以搜到下面结果。

截图 2023-11-27 15-37-59

@tuberry
Copy link
Owner

tuberry commented Nov 27, 2023

我下了扩展网站上的版本,还是无法复现。请从 Github 安装加几句 log 重新登录看看日志journalctl -fo cat /usr/bin/gnome-shell:

diff --git a/src/mpris.js b/src/mpris.js
index 2e84b84..f7e14be 100644
--- a/src/mpris.js
+++ b/src/mpris.js
@@ -49,8 +49,10 @@ export class MprisPlayer extends Destroyable {
             let mpris = await MprisProxy.newAsync(Gio.DBus.session, bus_name, '/org/mpris/MediaPlayer2'),
                 app = Shell.AppSystem.get_default().lookup_app(`${mpris.DesktopEntry ?? ''}.desktop`),
                 ctg = app?.get_app_info().get_string('Categories').split(';') ?? [];
+            log(mpris.DesktopEntry, ctg);
             if(ctg.includes('AudioVideo') && !ctg.includes('Video')) return mpris;
         } catch(e) {
+            logError(e);
             // ignore
         }
     }

@gmg137
Copy link
Author

gmg137 commented Nov 27, 2023

日志结果:

com.gitee.gmg137.NeteaseCloudMusicGtk4 Array [
    "GTK",
    "GNOME",
    ""
]

@tuberry
Copy link
Owner

tuberry commented Nov 27, 2023

我这里是这样的:

Array [
    "GTK",
    "Audio",
    "AudioVideo",
    ""
]

实际上,为了过滤视频播放器和浏览器的 Mpris 要求.desktop Categories 包含 AudioVideo 且不包含 Videorg AudioVideo /usr/share/applications/*usic*

❯ rg AudioVideo /usr/share/applications/*usic*
../../usr/share/applications/com.gitee.gmg137.NeteaseCloudMusicGtk4.desktop
13:Categories=GTK;Audio;AudioVideo

../../usr/share/applications/org.gnome.Music.desktop
209:Categories=GNOME;GTK;AudioVideo;Player;Audio;

../../usr/share/applications/netease-cloud-music.desktop
12:Categories=AudioVideo;Player;

可能是com.gitee.gmg137.NeteaseCloudMusicGtk4.desktop的问题。如果系统目录下的文件没问题那可能用户目录下有同名的旧文件。

@gmg137
Copy link
Author

gmg137 commented Nov 27, 2023

确实是desktop 文件的问题,修改后已经可以正常触发运行了。

@gmg137 gmg137 closed this as completed Nov 27, 2023
@gmg137 gmg137 reopened this Nov 27, 2023
@gmg137
Copy link
Author

gmg137 commented Nov 27, 2023

又发现一个问题,当我下载 song-artist-album.lrc 格式的歌词后,desktop-lyrics 会再下载一个 song-artist.lrc,希望可以添加一个检测,优先检测 song-artist-album.lrc ,不存在的话再检测 song-artist.lrc,如果歌词文件已经存在就不要重复下载了。

@tuberry
Copy link
Owner

tuberry commented Nov 28, 2023

这是由于 NCM-gtk 没有提供 xseam:album:

gdbus call --session --dest org.mpris.MediaPlayer2.com.gitee.gmg137.NeteaseCloudMusicGtk4 --object-path /org/mpris/MediaPlayer2 --method org.freedesktop.DBus.Properties.Get org.mpris.MediaPlayer2.Player Metadata

提供的数据只有 song 和 artist 可用,length 也是有用的但全为0毫无意义:

(<{'mpris:length': <'0'>, 'xesam:title': <'海阔天空'>, 'mpris:artUrl': <'file:///home/test/.cache/netease-cloud-music-gtk4/174925713-songlist.jpg'>, 'xesam:artist': <['G.E.M.邓紫棋']>}>,)

顺带一提,Position 也同样为0。

gdbus call --session --dest org.mpris.MediaPlayer2.com.gitee.gmg137.NeteaseCloudMusicGtk4 --object-path /org/mpris/MediaPlayer2 --method org.freedesktop.DBus.Properties.Get org.mpris.MediaPlayer2.Player Position

如果 NCM-gtk 不打算提供的话,在更新 Mpris 前保存为song-artist.lrc 应该可以工作。

但这样信息少了可能会增加文件冲突的可能,既然 NCM-gtk 能取到对应的歌词,推荐直接将原文以 Mpris xseam:asText 提供,不必借助文件中转,NCM-gtk 想怎么存都行,两全其美。

@gmg137
Copy link
Author

gmg137 commented Nov 30, 2023

非常感谢,已经可以正确识别运行了

@gmg137 gmg137 closed this as completed Nov 30, 2023
tuberry added a commit that referenced this issue Dec 29, 2023
cancel the pending lyrics request before each download
improve light theme integration with the panel lyrics
use binary search on sorted timestamps
cleanup
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants