diff --git a/src/main/java/top/gregtao/concerto/api/WithMetaData.java b/src/main/java/top/gregtao/concerto/api/WithMetaData.java index 2c29c99..4249fe9 100644 --- a/src/main/java/top/gregtao/concerto/api/WithMetaData.java +++ b/src/main/java/top/gregtao/concerto/api/WithMetaData.java @@ -5,4 +5,6 @@ public interface WithMetaData { MetaData getMeta(); + + boolean isMetaLoaded(); } diff --git a/src/main/java/top/gregtao/concerto/music/Music.java b/src/main/java/top/gregtao/concerto/music/Music.java index 9f14c21..93223fd 100644 --- a/src/main/java/top/gregtao/concerto/music/Music.java +++ b/src/main/java/top/gregtao/concerto/music/Music.java @@ -56,6 +56,10 @@ public boolean isLoaded() { return this.isMetaLoaded; } + public boolean isMetaLoaded() { + return this.isMetaLoaded; + } + public abstract InputStream getMusicSource() throws MusicSourceNotFoundException; public abstract String getLink(); diff --git a/src/main/java/top/gregtao/concerto/music/list/Playlist.java b/src/main/java/top/gregtao/concerto/music/list/Playlist.java index 927e9c8..16be39f 100644 --- a/src/main/java/top/gregtao/concerto/music/list/Playlist.java +++ b/src/main/java/top/gregtao/concerto/music/list/Playlist.java @@ -35,6 +35,10 @@ public boolean isLoaded() { return this.loaded; } + public boolean isMetaLoaded() { + return this.loaded; + } + public boolean isAlbum() { return this.isAlbum; } diff --git a/src/main/java/top/gregtao/concerto/screen/netease/NeteaseCloudUserScreen.java b/src/main/java/top/gregtao/concerto/screen/netease/NeteaseCloudUserScreen.java index ce7a585..64a818e 100644 --- a/src/main/java/top/gregtao/concerto/screen/netease/NeteaseCloudUserScreen.java +++ b/src/main/java/top/gregtao/concerto/screen/netease/NeteaseCloudUserScreen.java @@ -59,6 +59,7 @@ protected void init() { this.playlistList = this.initWidget(); this.onPageTurned(0); + this.addDrawableChild(this.playlistList); this.addSelectableChild(this.playlistList); this.addDrawableChild(ButtonWidget.builder(Text.translatable("concerto.screen.daily_recommendation"), @@ -88,9 +89,7 @@ protected void init() { @Override public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { super.render(matrices, mouseX, mouseY, delta); - if (this.loggedIn()) { - this.playlistList.render(matrices, mouseX, mouseY, delta); - } else { + if (!this.loggedIn()) { DrawableHelper.drawCenteredTextWithShadow(matrices, this.textRenderer, Text.translatable("concerto.screen.163.not_login"), this.width / 2, this.height / 2, 0xffffffff); } diff --git a/src/main/java/top/gregtao/concerto/screen/qq/QQMusicUserScreen.java b/src/main/java/top/gregtao/concerto/screen/qq/QQMusicUserScreen.java index 90f82ed..ba36e6d 100644 --- a/src/main/java/top/gregtao/concerto/screen/qq/QQMusicUserScreen.java +++ b/src/main/java/top/gregtao/concerto/screen/qq/QQMusicUserScreen.java @@ -16,8 +16,6 @@ import top.gregtao.concerto.screen.widget.ConcertoListWidget; import top.gregtao.concerto.screen.widget.MetadataListWidget; -import java.util.ListIterator; - public class QQMusicUserScreen extends PageScreen { private MetadataListWidget playlistList; @@ -58,6 +56,7 @@ protected void init() { this.playlistList = this.initWidget(); this.onPageTurned(0); + this.addDrawableChild(this.playlistList); this.addSelectableChild(this.playlistList); this.addDrawableChild(ButtonWidget.builder(Text.translatable("concerto.screen.play"), button -> { @@ -76,12 +75,7 @@ protected void init() { @Override public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { super.render(matrices, mouseX, mouseY, delta); - if (this.loggedIn()) { - ListIterator.Entry> iterator = this.playlistList.children().listIterator(); - while (iterator.hasNext() && iterator.next().item.isLoaded()) { - if (!iterator.hasNext()) this.playlistList.render(matrices, mouseX, mouseY, delta); - } - } else { + if (!this.loggedIn()) { DrawableHelper.drawCenteredTextWithShadow(matrices, this.textRenderer, Text.translatable("concerto.screen.qq.not_login"), this.width / 2, this.height / 2, 0xffffffff); } diff --git a/src/main/java/top/gregtao/concerto/screen/widget/MetadataListWidget.java b/src/main/java/top/gregtao/concerto/screen/widget/MetadataListWidget.java index 9863318..031c58d 100644 --- a/src/main/java/top/gregtao/concerto/screen/widget/MetadataListWidget.java +++ b/src/main/java/top/gregtao/concerto/screen/widget/MetadataListWidget.java @@ -17,7 +17,11 @@ public MetadataListWidget(int width, int height, int top, int bottom, int itemHe @Override public Text getNarration(int index, T t) { - MetaData meta = t.getMeta(); - return Text.literal(meta.title()).append(" ").append(Text.literal(meta.author()).formatted(Formatting.BOLD, Formatting.GRAY)); + if (t.isMetaLoaded()) { + MetaData meta = t.getMeta(); + return Text.literal(meta.title()).append(" ").append(Text.literal(meta.author()).formatted(Formatting.BOLD, Formatting.GRAY)); + } else { + return Text.translatable("concerto.loading"); + } } } diff --git a/src/main/java/top/gregtao/concerto/screen/widget/MusicWithUUIDListWidget.java b/src/main/java/top/gregtao/concerto/screen/widget/MusicWithUUIDListWidget.java index ea568fd..50fb577 100644 --- a/src/main/java/top/gregtao/concerto/screen/widget/MusicWithUUIDListWidget.java +++ b/src/main/java/top/gregtao/concerto/screen/widget/MusicWithUUIDListWidget.java @@ -15,8 +15,12 @@ public MusicWithUUIDListWidget(int width, int height, int top, int bottom, int i @Override public Text getNarration(int index, Pair t) { - MusicMetaData meta = t.getFirst().getMeta(); - return Text.literal(meta.title() + " - " + meta.getSource()); + if (t.getFirst().isMetaLoaded()) { + MusicMetaData meta = t.getFirst().getMeta(); + return Text.literal(meta.title() + " - " + meta.getSource()); + } else { + return Text.translatable("concerto.loading"); + } } public MusicWithUUIDListWidget(int width, int height, int top, int bottom, int itemHeight, int color) {