我已经尝试了几个板条箱,但似乎没有得到它。 有关更多信息,我正在尝试在 Tauri 中使用它,我不太擅长 Rust,因为我是 Javascript 开发者
// Prevents additional console window on Windows in release, DO NOT REMOVE!!
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
use playerctl::{PlayerCtl, TrackMetadata};
use serde::{Deserialize, Serialize};
use tauri::{AppHandle, Manager};
#[derive(Serialize)]
struct Metadata {
artist: String,
title: String,
album: String,
// Add other fields as needed
}
#[tauri::command]
fn get_current_media_metadata(app_handle: AppHandle) -> Result<Metadata, String> {
let track_metadata = PlayerCtl::metadata();
let metadata = Metadata {
artist: track_metadata.artist,
title: track_metadata.title,
album: track_metadata.album,
// Add other fields as needed
};
Ok(metadata)
}
fn main() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![get_current_media_metadata])
.run(tauri::generate_context!())
.expect("failed to run app");
}
我得到的错误是:
thread 'main' panicked at /home/n3rd/.cargo/registry/src/index.crates.io-6f17d22bba15001f/playerctl-0.1.0/src/lib.rs:40:29:
Failed to execute command 'playerctl metadata title'
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
正如 @cafce25 指出的,您需要在目标系统上安装
playerctl
。
正确的方法是使用 Rust 包装器包装 C/C++ 库代码并在代码中调用它。有人已经做了尝试: playerctl-sys 所以这可能更适合你。它应该为您的平台编译代码,您的用户不需要单独安装它。
查看他们的测试源代码,以更好地了解如何为您的目的获取元数据。