feat: add music search suggested items
This commit is contained in:
parent
331a13568a
commit
1d56b9c9a0
8 changed files with 1016 additions and 150 deletions
|
|
@ -866,17 +866,13 @@ impl MusicListMapper {
|
|||
) -> Option<MusicItemType> {
|
||||
let mut etype = None;
|
||||
self.warnings.append(&mut res.warnings);
|
||||
res.c
|
||||
.into_iter()
|
||||
.for_each(|item| match self.map_item(item) {
|
||||
Ok(Some(et)) => {
|
||||
if etype.is_none() {
|
||||
etype = Some(et);
|
||||
}
|
||||
res.c.into_iter().for_each(|item| {
|
||||
if let Some(et) = self.add_response_item(item) {
|
||||
if etype.is_none() {
|
||||
etype = Some(et);
|
||||
}
|
||||
Ok(None) => {}
|
||||
Err(e) => self.warnings.push(e),
|
||||
});
|
||||
}
|
||||
});
|
||||
etype
|
||||
}
|
||||
|
||||
|
|
@ -884,6 +880,16 @@ impl MusicListMapper {
|
|||
self.items.push(item);
|
||||
}
|
||||
|
||||
pub fn add_response_item(&mut self, item: MusicResponseItem) -> Option<MusicItemType> {
|
||||
match self.map_item(item) {
|
||||
Ok(et) => et,
|
||||
Err(e) => {
|
||||
self.warnings.push(e);
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn add_warnings(&mut self, warnings: &mut Vec<String>) {
|
||||
self.warnings.append(warnings);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,10 @@ use serde_with::{rust::deserialize_ignore_any, serde_as, VecSkipError};
|
|||
|
||||
use crate::serializer::text::Text;
|
||||
|
||||
use super::{music_item::MusicShelf, ContentsRenderer, SectionList, Tab};
|
||||
use super::{
|
||||
music_item::{ListMusicItem, MusicShelf},
|
||||
ContentsRenderer, SectionList, Tab,
|
||||
};
|
||||
|
||||
/// Response model for YouTube Music search
|
||||
#[derive(Debug, Deserialize)]
|
||||
|
|
@ -12,7 +15,7 @@ pub(crate) struct MusicSearch {
|
|||
pub contents: Contents,
|
||||
}
|
||||
|
||||
/// Response model for YouTube Music suggestion
|
||||
/// Response model for YouTube Music search suggestion
|
||||
#[serde_as]
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
|
|
@ -70,6 +73,7 @@ pub(crate) enum SearchSuggestionItem {
|
|||
#[serde_as(as = "Text")]
|
||||
suggestion: String,
|
||||
},
|
||||
MusicResponsiveListItemRenderer(Box<ListMusicItem>),
|
||||
#[serde(other, deserialize_with = "deserialize_ignore_any")]
|
||||
None,
|
||||
}
|
||||
|
|
|
|||
Reference in a new issue