Compare commits

..

No commits in common. "main" and "musixmatch-cli/v0.3.0" have entirely different histories.

7 changed files with 67 additions and 74 deletions

View file

@ -17,7 +17,7 @@ jobs:
renovate:
runs-on: docker
container:
image: renovate/renovate:39
image: renovate/renovate:latest
steps:
- name: Load renovate repo cache

View file

@ -3,23 +3,6 @@
All notable changes to this project will be documented in this file.
## [v0.2.1](https://codeberg.org/ThetaDev/musixmatch-inofficial/compare/musixmatch-inofficial/v0.2.0..musixmatch-inofficial/v0.2.1) - 2025-04-04
### 🐛 Bug Fixes
- Parsing unset has_fan_chant field - ([6f90033](https://codeberg.org/ThetaDev/musixmatch-inofficial/commit/6f90033cf4284eff5c12a30aafb21943c1575b92))
### 📚 Documentation
- Fix docs - ([4a46e7b](https://codeberg.org/ThetaDev/musixmatch-inofficial/commit/4a46e7bb1d83c6261660d403c009cdb640b301d7))
### ⚙️ Miscellaneous Tasks
- *(deps)* Update rust crate governor to 0.10.0 - ([87859e6](https://codeberg.org/ThetaDev/musixmatch-inofficial/commit/87859e629f3c236ba450872b29beb7876be7ef0b))
- *(deps)* Update rust crate rstest to 0.25.0 - ([a3f2ffc](https://codeberg.org/ThetaDev/musixmatch-inofficial/commit/a3f2ffc5d99ddddf777b4de306bd215bd3bbf5ce))
- *(deps)* Update rust crate rand to 0.9.0 - ([7c325c4](https://codeberg.org/ThetaDev/musixmatch-inofficial/commit/7c325c4af779e32059680c1cfb874f83896d7649))
## [v0.2.0](https://codeberg.org/ThetaDev/musixmatch-inofficial/compare/musixmatch-inofficial/v0.1.2..musixmatch-inofficial/v0.2.0) - 2025-01-16
### 🚀 Features

View file

@ -1,6 +1,6 @@
[package]
name = "musixmatch-inofficial"
version = "0.2.1"
version = "0.2.0"
rust-version = "1.70.0"
edition.workspace = true
authors.workspace = true
@ -54,14 +54,14 @@ time = { version = "0.3.10", features = [
] }
hmac = "0.12.0"
sha1 = "0.10.0"
rand = "0.9.0"
rand = "0.8.0"
base64 = "0.22.0"
[dev-dependencies]
rstest = { version = "0.25.0", default-features = false }
rstest = { version = "0.24.0", default-features = false }
dotenvy = "0.15.5"
tokio = { version = "1.20.4", features = ["macros"] }
futures = "0.3.21"
path_macro = "1.0.0"
governor = "0.10.0"
governor = "0.8.0"
test-log = "0.2.16"

View file

@ -1,6 +1,8 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:best-practices", ":preserveSemverRanges"],
"extends": [
"config:best-practices"
],
"semanticCommits": "enabled",
"automerge": true,
"automergeStrategy": "squash",

View file

@ -449,20 +449,20 @@ impl Musixmatch {
}
fn random_guid() -> String {
let mut rng = rand::rng();
let n = rng.random::<u64>();
let mut rng = rand::thread_rng();
let n = rng.gen::<u64>();
format!("{:016x}", n)
}
fn random_uuid() -> String {
let mut rng = rand::rng();
let mut rng = rand::thread_rng();
format!(
"{:08x}-{:04x}-{:04x}-{:04x}-{:012x}",
rng.random::<u32>(),
rng.random::<u16>(),
rng.random::<u16>(),
rng.random::<u16>(),
rng.random::<u64>() & 0xffffffffffff,
rng.gen::<u32>(),
rng.gen::<u16>(),
rng.gen::<u16>(),
rng.gen::<u16>(),
rng.gen::<u64>() & 0xffffffffffff,
)
}

View file

@ -160,20 +160,18 @@ pub struct TrackLyricsTranslationStatus {
/// Lyrics parts marked with the performer who is singing them
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[allow(missing_docs)]
pub struct TrackPerformerTagging {
/// Musixmatch user ID of the user who added the performer tags
///
/// Format: `mxm:<16 byte hex>`
pub user_id: String,
/// True if the lyrics are completely tagged
#[serde(default)]
pub completed: bool,
/// True if the lyrics have unknown performers
#[serde(default)]
/// True if the lyrics
pub has_unknown: bool,
/// True if the lyrics contain parts that are intended to be sung by the
/// audience during concerts
#[serde(default)]
pub has_fan_chant: bool,
/// List of tagged lyrics parts
#[serde(default)]
@ -185,14 +183,15 @@ pub struct TrackPerformerTagging {
/// Performer-tagged lyrics part
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[allow(missing_docs)]
pub struct PerformerTaggingPart {
/// Part of the lyrics text
///
/// Includes whitespace (spaces and newline characters).
pub snippet: String,
/// Unknown
/// Unbekannt
///
/// Values: 0-3
/// 0-3
pub position: u32,
/// List of performers singing this part
pub performers: Vec<Performer>,
@ -200,6 +199,7 @@ pub struct PerformerTaggingPart {
/// Lyrics performer
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[allow(missing_docs)]
pub struct Performer {
/// artist / unknown
#[serde(rename = "type")]
@ -219,6 +219,7 @@ pub struct Performer {
/// Artists (and possibly other objects) that are referenced by the tagged parts
#[derive(Default, Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(default)]
#[allow(missing_docs)]
pub struct PerformerTaggingResources {
/// List of artists tagged as performers
pub artists: Vec<Artist>,

View file

@ -324,9 +324,9 @@ mod track {
let track = mxm
.await
.matcher_track(
"Unter der Oberfläche",
"Silbermond",
"Himmel auf",
"Poker Face",
"Lady Gaga",
"The Fame",
translation_status,
lang_3c,
false,
@ -336,58 +336,55 @@ mod track {
// dbg!(&track);
assert_eq!(track.track_id, 17633247);
assert_eq!(
track.track_mbid.unwrap(),
"1b97675a-537e-4599-82de-b4ef801e4a69"
);
assert_eq!(track.track_isrc.unwrap(), "DEE861200084");
assert_eq!(track.track_id, 85213841);
// assert_eq!(
// track.track_mbid.unwrap(),
// "080975b0-39b1-493c-ae64-5cb3292409bb"
// );
// assert_eq!(track.track_isrc.unwrap(), "USUM70824409");
assert!(
track.commontrack_isrcs[0]
.iter()
.any(|isrc| isrc == "DEE861200084"),
.any(|isrc| isrc == "USUM70824409"),
"commontrack_isrcs: {:?}",
&track.commontrack_isrcs[0],
);
assert_eq!(track.track_spotify_id.unwrap(), "4kebfr96W2JTvb7xjf4lDV");
assert_eq!(track.track_spotify_id.unwrap(), "1QV6tiMFM6fSOKOGLMHYYg");
assert!(
track
.commontrack_spotify_ids
.iter()
.any(|spid| spid == "4kebfr96W2JTvb7xjf4lDV"),
.any(|spid| spid == "1QV6tiMFM6fSOKOGLMHYYg"),
"commontrack_spotify_ids: {:?}",
track.commontrack_spotify_ids,
);
assert_eq!(track.track_name, "Unter der Oberfläche");
assert!(track.track_rating > 30);
assert_eq!(track.commontrack_id, 10514077);
assert_eq!(track.track_name, "Poker Face");
assert!(track.track_rating > 50);
assert_eq!(track.commontrack_id, 47672612);
assert!(!track.instrumental);
assert!(!track.explicit);
assert!(track.explicit);
assert!(track.has_subtitles);
assert!(track.has_richsync);
assert!(!track.has_track_structure);
assert!(track.num_favourite > 10);
assert_eq!(track.lyrics_id.unwrap(), 7401716);
assert_eq!(track.subtitle_id.unwrap(), 35487435);
assert_eq!(track.album_id, 14122870);
assert_eq!(track.album_name, "Himmel auf");
assert_eq!(track.artist_id, 84849);
assert!(track.has_track_structure);
assert!(track.num_favourite > 50);
assert!(track.lyrics_id.is_some());
assert_eq!(track.subtitle_id.unwrap(), 36450705);
assert_eq!(track.album_id, 20960801);
assert_eq!(track.album_name, "The Fame");
assert_eq!(track.artist_id, 378462);
assert_eq!(
track.artist_mbid.unwrap(),
"34d42823-6b56-4861-a675-1565bf40d557"
);
assert_eq!(track.artist_name, "Silbermond");
assert_imgurl(&track.album_coverart_100x100, "/30913494.jpg");
assert_imgurl(&track.album_coverart_350x350, "/30913494_350_350.jpg");
assert_imgurl(&track.album_coverart_500x500, "/30913494_500_500.jpg");
assert_imgurl(&track.album_coverart_800x800, "/30913494_800_800.jpg");
assert_eq!(
track.commontrack_vanity_id,
"Silbermond/Unter-der-Oberfläche"
"650e7db6-b795-4eb5-a702-5ea2fc46c848"
);
assert_eq!(track.artist_name, "Lady Gaga");
assert_imgurl(&track.album_coverart_100x100, "/32133892.jpg");
assert_imgurl(&track.album_coverart_350x350, "/32133892_350_350.jpg");
assert_imgurl(&track.album_coverart_500x500, "/32133892_500_500.jpg");
assert_imgurl(&track.album_coverart_800x800, "/32133892_800_800.jpg");
assert_eq!(track.commontrack_vanity_id, "Lady-Gaga/poker-face-1");
let first_release = track.first_release_date.unwrap();
assert_eq!(first_release.date(), date!(2012 - 3 - 23));
assert!(track.updated_time > datetime!(2013-4-26 13:11:50 UTC));
assert_eq!(first_release.date(), date!(2008 - 1 - 1));
assert!(track.updated_time > datetime!(2023-1-17 0:00 UTC));
let first_pri_genre = &track.primary_genres.music_genre_list[0].music_genre;
assert_eq!(first_pri_genre.music_genre_id, 14);
@ -396,13 +393,23 @@ mod track {
assert_eq!(first_pri_genre.music_genre_name_extended, "Pop");
assert_eq!(first_pri_genre.music_genre_vanity.as_ref().unwrap(), "Pop");
let first_sec_genre = &track.secondary_genres.music_genre_list[0].music_genre;
assert_eq!(first_sec_genre.music_genre_id, 17);
assert_eq!(first_sec_genre.music_genre_parent_id, 34);
assert_eq!(first_sec_genre.music_genre_name, "Dance");
assert_eq!(first_sec_genre.music_genre_name_extended, "Dance");
assert_eq!(
first_sec_genre.music_genre_vanity.as_ref().unwrap(),
"Dance"
);
if translation_status {
assert!(
track.track_lyrics_translation_status.iter().all(|tl| {
(if lang_3c {
tl.from.as_deref() == Some("deu")
tl.from.as_deref() == Some("eng")
} else {
tl.from.as_deref() == Some("de")
tl.from.as_deref() == Some("en")
}) && tl.perc >= 0.0
&& tl.perc <= 1.0
}),