feat: add autoplay suggestions when queue runs out
Some checks failed
Build for Windows / build-windows (push) Has been cancelled
Some checks failed
Build for Windows / build-windows (push) Has been cancelled
This commit is contained in:
@@ -48,6 +48,7 @@ pub const EV_DEEP_SHUFFLE_OK: c_int = 25;
|
||||
pub const EV_MOST_POPULAR_OK: c_int = 26;
|
||||
pub const EV_GENRES_OK: c_int = 27;
|
||||
pub const EV_FEATURED_ALBUMS_OK: c_int = 28;
|
||||
pub const EV_DYNAMIC_SUGGEST_OK: c_int = 29;
|
||||
|
||||
// ---------- Callback ----------
|
||||
|
||||
@@ -234,6 +235,59 @@ pub unsafe extern "C" fn qobuz_backend_most_popular_search(
|
||||
});
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn qobuz_backend_get_dynamic_suggestions(
|
||||
ptr: *mut Backend,
|
||||
listened_track_ids_json: *const c_char,
|
||||
tracks_to_analyze_json: *const c_char,
|
||||
limit: u32,
|
||||
) {
|
||||
let inner = &(*ptr).0;
|
||||
let client = inner.client.clone();
|
||||
let cb = inner.cb;
|
||||
let ud = inner.ud;
|
||||
|
||||
let listened_str = CStr::from_ptr(listened_track_ids_json)
|
||||
.to_string_lossy()
|
||||
.into_owned();
|
||||
let analyze_str = CStr::from_ptr(tracks_to_analyze_json)
|
||||
.to_string_lossy()
|
||||
.into_owned();
|
||||
|
||||
let listened: serde_json::Value = match serde_json::from_str(&listened_str) {
|
||||
Ok(v) => v,
|
||||
Err(e) => {
|
||||
call_cb(cb, ud, EV_GENERIC_ERR, &err_json(&e.to_string()));
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
let to_analyze: serde_json::Value = match serde_json::from_str(&analyze_str) {
|
||||
Ok(v) => v,
|
||||
Err(e) => {
|
||||
call_cb(cb, ud, EV_GENERIC_ERR, &err_json(&e.to_string()));
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
spawn(inner, async move {
|
||||
let result = client
|
||||
.lock()
|
||||
.await
|
||||
.get_dynamic_suggestions(limit, listened, to_analyze)
|
||||
.await;
|
||||
match result {
|
||||
Ok(r) => call_cb(
|
||||
cb,
|
||||
ud,
|
||||
EV_DYNAMIC_SUGGEST_OK,
|
||||
&serde_json::to_string(&r).unwrap_or_default(),
|
||||
),
|
||||
Err(e) => call_cb(cb, ud, EV_GENERIC_ERR, &err_json(&e.to_string())),
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// ---------- Album ----------
|
||||
|
||||
#[no_mangle]
|
||||
|
||||
Reference in New Issue
Block a user