Ferry-200 / coriander_player

Windows端本地音乐播放器,使用Material You配色。Dart (Flutter) + Rust (lofty, windows-rs) + C (bass lib) 多语言项目。绝赞开发中。
https://ferry-200.github.io/coriander_player_website/
GNU General Public License v3.0
510 stars 22 forks source link

[BUG] 播放未加载好标签的歌曲导致无法退出应用 #86

Open Wenti-D opened 1 month ago

Wenti-D commented 1 month ago

Bug 概要

假定歌曲列表有巨多歌曲(我这有 2000 以上),部分歌曲的标签可能未能及时加载出来。此时播放这样的歌曲,能放,但是点 X 退出不了应用,并且在此后若播放别的歌曲,下方提示报错:

DroppableDisposedException: Try to use `RustArc<dynamic>` after it has been disposed.

复现步骤

  1. 找到一首没加载好标签的歌(一般没加载出来专辑封面的就是);
  2. 播放之;
  3. 点 X 退出,此时应该无法退出;
  4. 放点别的歌,此时会弹出报错。

然而 Alt+F4 还是能用的。

预期行为(你认为软件应该怎么样才正确)

录屏

GitHub 说太大了,所以我传网盘了,见此

Ferry-200 commented 1 month ago

其实这里不是在加载标签,而是在加载图片。标签是缓存了的 不过之前确实没见过这个 bug,等我复制歌曲到 5000 首好好地做压力测试

Wenti-D commented 1 month ago

其实这里不是在加载标签,而是在加载图片。

嗨呀我本来想写「加载专辑封面」的……🤣

Ferry-200 commented 1 month ago

尝试优化了下列表加载,可以做一下测试吗?

https://github.com/user-attachments/assets/fab63e26-bee0-4c59-af61-df8139e2371b

https://wwmn.lanzouv.com/iegpb27bfwbe

Wenti-D commented 1 month ago

测了一下,无法退出的问题解决了。但第一次一下拉到底,还是会出现没加载完的情况,见这个录屏

Ferry-200 commented 1 month ago

好,那我先推送这个修改。其实我看别的播放器还会缓存图片,也许我该考虑提供自定义缓存目录和清除缓存的功能了。

只缓存 48 * 48 的图片,一个占 2kb😂

Wenti-D commented 1 month ago

说起来,在我的录屏里还有一个现象,播放封面未加载出来的歌曲,卡顿时间一般长于已经加载出来的。

Ferry-200 commented 1 month ago

因为 dart 是单线程模型,这种情况应该是被阻塞了🥲不过我也不太清楚