Skip to content

Commit

Permalink
修复轮播错误
Browse files Browse the repository at this point in the history
  • Loading branch information
gmg137 committed Jun 23, 2024
1 parent 928ea88 commit cb53b77
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 18 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ gtk = { version = "~0.8", package = "gtk4" }
once_cell = "~1.19"
qrcode-generator = "~4.1"
# ncm-api = { git = "https://github.com/gmg137/netease-cloud-music-api.git", branch = "dev", package = "netease-cloud-music-api" }
ncm-api = { git = "https://gitee.com/gmg137/netease-cloud-music-api.git", tag = "1.3.2", package = "netease-cloud-music-api" }
ncm-api = { git = "https://gitee.com/gmg137/netease-cloud-music-api.git", tag = "1.4.0", package = "netease-cloud-music-api" }
anyhow = "~1.0"
gstreamer = "~0.22"
gstreamer-play = "~0.22"
Expand Down
59 changes: 57 additions & 2 deletions src/application.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ use glib::{clone, source::Priority, timeout_future, timeout_future_seconds, Weak
use gtk::{gio, glib, prelude::*};
use log::*;
use ncm_api::{
AlbumDetailDynamic, CookieJar, LoginInfo, PlayListDetailDynamic, SingerInfo, SongInfo,
SongList, TopList,
AlbumDetailDynamic, BannersInfo, CookieJar, LoginInfo, PlayListDetailDynamic, SingerInfo,
SongInfo, SongList, TargetType, TopList,
};
use once_cell::sync::OnceCell;
use std::{cell::RefCell, fs, path::PathBuf, sync::Arc, time::Duration};
Expand Down Expand Up @@ -77,6 +77,7 @@ pub enum Action {
SetupTopPicks(Vec<SongList>),
InitNewAlbums,
SetupNewAlbums(Vec<SongList>),
BannerTo(BannersInfo),

// toplist
GetToplist,
Expand Down Expand Up @@ -596,6 +597,60 @@ impl NeteaseCloudMusicGtk4Application {
Action::SetupNewAlbums(song_list) => {
window.setup_new_albums(song_list);
}
Action::BannerTo(banner) => {
let sender = imp.sender.clone();
match banner.target_type {
TargetType::Song => {
MAINCONTEXT.spawn_local_with_priority(Priority::DEFAULT_IDLE, async move {
match ncmapi.client.songs_detail(&[banner.target_id]).await {
Ok(songs) => {
debug!("获取轮播歌曲信息:{:?}", songs);
if let Some(song) = songs.first() {
sender.send(Action::AddPlay(song.clone())).await.unwrap();
}
}
Err(err) => {
error!("获取轮播歌曲信息失败!{:?}", err);
}
}
});
}
TargetType::Album => {
MAINCONTEXT.spawn_local_with_priority(Priority::DEFAULT_IDLE, async move {
match ncmapi.client.album(banner.target_id).await {
Ok(album) => {
debug!("获取轮播专辑信息:{:?}", album);
let page = window.init_songlist_page(
&SongList {
id: album.id,
name: album.name.to_owned(),
cover_img_url: album.pic_url.to_owned(),
author: album.artist_name.to_owned(),
},
true,
);
window.page_new(&page, &album.name);
let page = page.downgrade();
let detal_dynamic_as =
ncmapi.client.album_detail_dynamic(album.id);
let dy = detal_dynamic_as.await.unwrap_or_else(|err| {
error!("{:?}", err);
AlbumDetailDynamic::default()
});
let detail = SongListDetail::Album(album, dy);
if let Some(page) = page.upgrade() {
window.update_songlist_page(page, &detail);
}
}
Err(err) => {
error!("获取轮播专辑信息失败!{:?}", err);
}
}
});
}
TargetType::Unknown => (),
}
}
Action::AddPlay(song_info) => {
window.add_play(song_info.clone());
let sender = imp.sender.clone();
Expand Down
21 changes: 6 additions & 15 deletions src/gui/discover.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use crate::{application::Action, gui::SongListGridItem, model::ImageDownloadImpl
use async_channel::{unbounded, Sender};
use glib::{clone, ControlFlow};
use gtk::{glib, prelude::*, subclass::prelude::*, CompositeTemplate, *};
use ncm_api::{BannersInfo, SongInfo, SongList};
use ncm_api::{BannersInfo, SongList};
use once_cell::sync::OnceCell;
use std::sync::{Arc, RwLock};

Expand Down Expand Up @@ -89,11 +89,11 @@ impl Discover {
}

let mut path = CACHE.clone();
path.push(format!("{}-banner.jpg", banner.id));
path.push(format!("{}-banner.jpg", banner.target_id));

let sender = self.imp().sender.get().unwrap().clone();
let image = Picture::new();
image.set_from_net(banner.pic_url.to_owned(), path, (730, 283), &sender);
image.set_from_net(banner.pic.to_owned(), path, (730, 283), &sender);

// 图片加载方式已验证,必须这样才能实现。
// let image = gtk::gdk_pixbuf::Pixbuf::from_file(path).unwrap();
Expand Down Expand Up @@ -184,19 +184,10 @@ mod imp {
fn carousel_pressed_cb(&self) {
let position = self.carousel.position();
if let Some(banner) = self.banners.borrow().get(position as usize) {
let song_info = SongInfo {
id: banner.id.to_owned(),
name: banner.name.to_owned(),
singer: banner.singer.to_owned(),
album: banner.album.to_owned(),
album_id: banner.album_id.to_owned(),
pic_url: banner.pic_url.to_owned(),
duration: banner.duration.to_owned(),
song_url: "".to_owned(),
copyright: ncm_api::SongCopyright::Unknown,
};
let sender = self.sender.get().unwrap();
sender.send_blocking(Action::AddPlay(song_info)).unwrap();
sender
.send_blocking(Action::BannerTo(banner.clone()))
.unwrap();
}
}

Expand Down

0 comments on commit cb53b77

Please sign in to comment.