Compare commits
10 commits
musixmatch
...
main
Author | SHA1 | Date | |
---|---|---|---|
f73dcdd134 | |||
04a0544ad5 | |||
4a46e7bb1d | |||
6f90033cf4 | |||
7c325c4af7 | |||
a3f2ffc5d9 | |||
87859e629f | |||
c90bfc647c | |||
0bb886adab | |||
bf68f94682 |
7 changed files with 74 additions and 67 deletions
|
@ -17,7 +17,7 @@ jobs:
|
||||||
renovate:
|
renovate:
|
||||||
runs-on: docker
|
runs-on: docker
|
||||||
container:
|
container:
|
||||||
image: renovate/renovate:latest
|
image: renovate/renovate:39
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Load renovate repo cache
|
- name: Load renovate repo cache
|
17
CHANGELOG.md
17
CHANGELOG.md
|
@ -3,6 +3,23 @@
|
||||||
All notable changes to this project will be documented in this file.
|
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
|
## [v0.2.0](https://codeberg.org/ThetaDev/musixmatch-inofficial/compare/musixmatch-inofficial/v0.1.2..musixmatch-inofficial/v0.2.0) - 2025-01-16
|
||||||
|
|
||||||
### 🚀 Features
|
### 🚀 Features
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "musixmatch-inofficial"
|
name = "musixmatch-inofficial"
|
||||||
version = "0.2.0"
|
version = "0.2.1"
|
||||||
rust-version = "1.70.0"
|
rust-version = "1.70.0"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
authors.workspace = true
|
authors.workspace = true
|
||||||
|
@ -54,14 +54,14 @@ time = { version = "0.3.10", features = [
|
||||||
] }
|
] }
|
||||||
hmac = "0.12.0"
|
hmac = "0.12.0"
|
||||||
sha1 = "0.10.0"
|
sha1 = "0.10.0"
|
||||||
rand = "0.8.0"
|
rand = "0.9.0"
|
||||||
base64 = "0.22.0"
|
base64 = "0.22.0"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
rstest = { version = "0.24.0", default-features = false }
|
rstest = { version = "0.25.0", default-features = false }
|
||||||
dotenvy = "0.15.5"
|
dotenvy = "0.15.5"
|
||||||
tokio = { version = "1.20.4", features = ["macros"] }
|
tokio = { version = "1.20.4", features = ["macros"] }
|
||||||
futures = "0.3.21"
|
futures = "0.3.21"
|
||||||
path_macro = "1.0.0"
|
path_macro = "1.0.0"
|
||||||
governor = "0.8.0"
|
governor = "0.10.0"
|
||||||
test-log = "0.2.16"
|
test-log = "0.2.16"
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
{
|
{
|
||||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||||
"extends": [
|
"extends": ["config:best-practices", ":preserveSemverRanges"],
|
||||||
"config:best-practices"
|
|
||||||
],
|
|
||||||
"semanticCommits": "enabled",
|
"semanticCommits": "enabled",
|
||||||
"automerge": true,
|
"automerge": true,
|
||||||
"automergeStrategy": "squash",
|
"automergeStrategy": "squash",
|
||||||
|
|
16
src/lib.rs
16
src/lib.rs
|
@ -449,20 +449,20 @@ impl Musixmatch {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn random_guid() -> String {
|
fn random_guid() -> String {
|
||||||
let mut rng = rand::thread_rng();
|
let mut rng = rand::rng();
|
||||||
let n = rng.gen::<u64>();
|
let n = rng.random::<u64>();
|
||||||
format!("{:016x}", n)
|
format!("{:016x}", n)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn random_uuid() -> String {
|
fn random_uuid() -> String {
|
||||||
let mut rng = rand::thread_rng();
|
let mut rng = rand::rng();
|
||||||
format!(
|
format!(
|
||||||
"{:08x}-{:04x}-{:04x}-{:04x}-{:012x}",
|
"{:08x}-{:04x}-{:04x}-{:04x}-{:012x}",
|
||||||
rng.gen::<u32>(),
|
rng.random::<u32>(),
|
||||||
rng.gen::<u16>(),
|
rng.random::<u16>(),
|
||||||
rng.gen::<u16>(),
|
rng.random::<u16>(),
|
||||||
rng.gen::<u16>(),
|
rng.random::<u16>(),
|
||||||
rng.gen::<u64>() & 0xffffffffffff,
|
rng.random::<u64>() & 0xffffffffffff,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -160,18 +160,20 @@ pub struct TrackLyricsTranslationStatus {
|
||||||
|
|
||||||
/// Lyrics parts marked with the performer who is singing them
|
/// Lyrics parts marked with the performer who is singing them
|
||||||
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
||||||
#[allow(missing_docs)]
|
|
||||||
pub struct TrackPerformerTagging {
|
pub struct TrackPerformerTagging {
|
||||||
/// Musixmatch user ID of the user who added the performer tags
|
/// Musixmatch user ID of the user who added the performer tags
|
||||||
///
|
///
|
||||||
/// Format: `mxm:<16 byte hex>`
|
/// Format: `mxm:<16 byte hex>`
|
||||||
pub user_id: String,
|
pub user_id: String,
|
||||||
/// True if the lyrics are completely tagged
|
/// True if the lyrics are completely tagged
|
||||||
|
#[serde(default)]
|
||||||
pub completed: bool,
|
pub completed: bool,
|
||||||
/// True if the lyrics
|
/// True if the lyrics have unknown performers
|
||||||
|
#[serde(default)]
|
||||||
pub has_unknown: bool,
|
pub has_unknown: bool,
|
||||||
/// True if the lyrics contain parts that are intended to be sung by the
|
/// True if the lyrics contain parts that are intended to be sung by the
|
||||||
/// audience during concerts
|
/// audience during concerts
|
||||||
|
#[serde(default)]
|
||||||
pub has_fan_chant: bool,
|
pub has_fan_chant: bool,
|
||||||
/// List of tagged lyrics parts
|
/// List of tagged lyrics parts
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
|
@ -183,15 +185,14 @@ pub struct TrackPerformerTagging {
|
||||||
|
|
||||||
/// Performer-tagged lyrics part
|
/// Performer-tagged lyrics part
|
||||||
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
||||||
#[allow(missing_docs)]
|
|
||||||
pub struct PerformerTaggingPart {
|
pub struct PerformerTaggingPart {
|
||||||
/// Part of the lyrics text
|
/// Part of the lyrics text
|
||||||
///
|
///
|
||||||
/// Includes whitespace (spaces and newline characters).
|
/// Includes whitespace (spaces and newline characters).
|
||||||
pub snippet: String,
|
pub snippet: String,
|
||||||
/// Unbekannt
|
/// Unknown
|
||||||
///
|
///
|
||||||
/// 0-3
|
/// Values: 0-3
|
||||||
pub position: u32,
|
pub position: u32,
|
||||||
/// List of performers singing this part
|
/// List of performers singing this part
|
||||||
pub performers: Vec<Performer>,
|
pub performers: Vec<Performer>,
|
||||||
|
@ -199,7 +200,6 @@ pub struct PerformerTaggingPart {
|
||||||
|
|
||||||
/// Lyrics performer
|
/// Lyrics performer
|
||||||
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
||||||
#[allow(missing_docs)]
|
|
||||||
pub struct Performer {
|
pub struct Performer {
|
||||||
/// artist / unknown
|
/// artist / unknown
|
||||||
#[serde(rename = "type")]
|
#[serde(rename = "type")]
|
||||||
|
@ -219,7 +219,6 @@ pub struct Performer {
|
||||||
/// Artists (and possibly other objects) that are referenced by the tagged parts
|
/// Artists (and possibly other objects) that are referenced by the tagged parts
|
||||||
#[derive(Default, Clone, Debug, PartialEq, Serialize, Deserialize)]
|
#[derive(Default, Clone, Debug, PartialEq, Serialize, Deserialize)]
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
#[allow(missing_docs)]
|
|
||||||
pub struct PerformerTaggingResources {
|
pub struct PerformerTaggingResources {
|
||||||
/// List of artists tagged as performers
|
/// List of artists tagged as performers
|
||||||
pub artists: Vec<Artist>,
|
pub artists: Vec<Artist>,
|
||||||
|
|
|
@ -324,9 +324,9 @@ mod track {
|
||||||
let track = mxm
|
let track = mxm
|
||||||
.await
|
.await
|
||||||
.matcher_track(
|
.matcher_track(
|
||||||
"Poker Face",
|
"Unter der Oberfläche",
|
||||||
"Lady Gaga",
|
"Silbermond",
|
||||||
"The Fame",
|
"Himmel auf",
|
||||||
translation_status,
|
translation_status,
|
||||||
lang_3c,
|
lang_3c,
|
||||||
false,
|
false,
|
||||||
|
@ -336,55 +336,58 @@ mod track {
|
||||||
|
|
||||||
// dbg!(&track);
|
// dbg!(&track);
|
||||||
|
|
||||||
assert_eq!(track.track_id, 85213841);
|
assert_eq!(track.track_id, 17633247);
|
||||||
// assert_eq!(
|
assert_eq!(
|
||||||
// track.track_mbid.unwrap(),
|
track.track_mbid.unwrap(),
|
||||||
// "080975b0-39b1-493c-ae64-5cb3292409bb"
|
"1b97675a-537e-4599-82de-b4ef801e4a69"
|
||||||
// );
|
);
|
||||||
// assert_eq!(track.track_isrc.unwrap(), "USUM70824409");
|
assert_eq!(track.track_isrc.unwrap(), "DEE861200084");
|
||||||
assert!(
|
assert!(
|
||||||
track.commontrack_isrcs[0]
|
track.commontrack_isrcs[0]
|
||||||
.iter()
|
.iter()
|
||||||
.any(|isrc| isrc == "USUM70824409"),
|
.any(|isrc| isrc == "DEE861200084"),
|
||||||
"commontrack_isrcs: {:?}",
|
"commontrack_isrcs: {:?}",
|
||||||
&track.commontrack_isrcs[0],
|
&track.commontrack_isrcs[0],
|
||||||
);
|
);
|
||||||
assert_eq!(track.track_spotify_id.unwrap(), "1QV6tiMFM6fSOKOGLMHYYg");
|
assert_eq!(track.track_spotify_id.unwrap(), "4kebfr96W2JTvb7xjf4lDV");
|
||||||
assert!(
|
assert!(
|
||||||
track
|
track
|
||||||
.commontrack_spotify_ids
|
.commontrack_spotify_ids
|
||||||
.iter()
|
.iter()
|
||||||
.any(|spid| spid == "1QV6tiMFM6fSOKOGLMHYYg"),
|
.any(|spid| spid == "4kebfr96W2JTvb7xjf4lDV"),
|
||||||
"commontrack_spotify_ids: {:?}",
|
"commontrack_spotify_ids: {:?}",
|
||||||
track.commontrack_spotify_ids,
|
track.commontrack_spotify_ids,
|
||||||
);
|
);
|
||||||
assert_eq!(track.track_name, "Poker Face");
|
assert_eq!(track.track_name, "Unter der Oberfläche");
|
||||||
assert!(track.track_rating > 50);
|
assert!(track.track_rating > 30);
|
||||||
assert_eq!(track.commontrack_id, 47672612);
|
assert_eq!(track.commontrack_id, 10514077);
|
||||||
assert!(!track.instrumental);
|
assert!(!track.instrumental);
|
||||||
assert!(track.explicit);
|
assert!(!track.explicit);
|
||||||
assert!(track.has_subtitles);
|
assert!(track.has_subtitles);
|
||||||
assert!(track.has_richsync);
|
assert!(track.has_richsync);
|
||||||
assert!(track.has_track_structure);
|
assert!(!track.has_track_structure);
|
||||||
assert!(track.num_favourite > 50);
|
assert!(track.num_favourite > 10);
|
||||||
assert!(track.lyrics_id.is_some());
|
assert_eq!(track.lyrics_id.unwrap(), 7401716);
|
||||||
assert_eq!(track.subtitle_id.unwrap(), 36450705);
|
assert_eq!(track.subtitle_id.unwrap(), 35487435);
|
||||||
assert_eq!(track.album_id, 20960801);
|
assert_eq!(track.album_id, 14122870);
|
||||||
assert_eq!(track.album_name, "The Fame");
|
assert_eq!(track.album_name, "Himmel auf");
|
||||||
assert_eq!(track.artist_id, 378462);
|
assert_eq!(track.artist_id, 84849);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
track.artist_mbid.unwrap(),
|
track.artist_mbid.unwrap(),
|
||||||
"650e7db6-b795-4eb5-a702-5ea2fc46c848"
|
"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"
|
||||||
);
|
);
|
||||||
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();
|
let first_release = track.first_release_date.unwrap();
|
||||||
assert_eq!(first_release.date(), date!(2008 - 1 - 1));
|
assert_eq!(first_release.date(), date!(2012 - 3 - 23));
|
||||||
assert!(track.updated_time > datetime!(2023-1-17 0:00 UTC));
|
assert!(track.updated_time > datetime!(2013-4-26 13:11:50 UTC));
|
||||||
|
|
||||||
let first_pri_genre = &track.primary_genres.music_genre_list[0].music_genre;
|
let first_pri_genre = &track.primary_genres.music_genre_list[0].music_genre;
|
||||||
assert_eq!(first_pri_genre.music_genre_id, 14);
|
assert_eq!(first_pri_genre.music_genre_id, 14);
|
||||||
|
@ -393,23 +396,13 @@ mod track {
|
||||||
assert_eq!(first_pri_genre.music_genre_name_extended, "Pop");
|
assert_eq!(first_pri_genre.music_genre_name_extended, "Pop");
|
||||||
assert_eq!(first_pri_genre.music_genre_vanity.as_ref().unwrap(), "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 {
|
if translation_status {
|
||||||
assert!(
|
assert!(
|
||||||
track.track_lyrics_translation_status.iter().all(|tl| {
|
track.track_lyrics_translation_status.iter().all(|tl| {
|
||||||
(if lang_3c {
|
(if lang_3c {
|
||||||
tl.from.as_deref() == Some("eng")
|
tl.from.as_deref() == Some("deu")
|
||||||
} else {
|
} else {
|
||||||
tl.from.as_deref() == Some("en")
|
tl.from.as_deref() == Some("de")
|
||||||
}) && tl.perc >= 0.0
|
}) && tl.perc >= 0.0
|
||||||
&& tl.perc <= 1.0
|
&& tl.perc <= 1.0
|
||||||
}),
|
}),
|
||||||
|
|
Loading…
Add table
Reference in a new issue