Compare commits

...

2 commits

Author SHA1 Message Date
4c37c102cf
update spotifyio-downloader to v0.6.0 2025-10-04 07:41:13 +02:00
229d933308
feat!: fix MP4 format names 2025-10-04 07:39:59 +02:00
6 changed files with 55 additions and 52 deletions

View file

@ -1,7 +1,7 @@
[package]
name = "spotifyio-downloader"
description = "CLI for downloading music from Spotify"
version = "0.5.1"
version = "0.6.0"
edition.workspace = true
authors.workspace = true
license.workspace = true

View file

@ -441,7 +441,7 @@ impl SpotifyDownloader {
audio_item.track_id
);
let formats = &[AudioFileFormat::MP4_128];
let formats = &[AudioFileFormat::MP4_128, AudioFileFormat::MP4_128_DUAL];
let (format, file_id) = formats
.iter()

View file

@ -18,10 +18,10 @@ message AudioFile {
MP3_160_ENC = 7;
AAC_24 = 8;
AAC_48 = 9;
AAC_160 = 10;
AAC_320 = 11;
MP4_128 = 12;
OTHER5 = 13;
MP4_128 = 10;
MP4_256 = 11;
MP4_128_DUAL = 12;
MP4_256_DUAL = 13;
FLAC_FLAC = 16;
}
}
@ -29,22 +29,22 @@ message AudioFile {
message File {
int32 bitrate = 3;
string mime_type = 4;
oneof file {
ExternalFile external_file = 1;
FileIdFile file_id_file = 2;
}
message ExternalFile {
string method = 1;
bytes body = 4;
oneof endpoint {
string url = 2;
string service = 3;
}
}
message FileIdFile {
string file_id_hex = 1;
AudioFile.Format download_format = 2;

View file

@ -292,10 +292,10 @@ message AudioFile {
MP3_160_ENC = 7;
AAC_24 = 8;
AAC_48 = 9;
AAC_160 = 10;
AAC_320 = 11;
MP4_128 = 12;
MP4_256 = 13;
MP4_128 = 10;
MP4_256 = 11;
MP4_128_DUAL = 12;
MP4_256_DUAL = 13;
FLAC_FLAC = 16;
UNKNOWN_FORMAT = 255;
}

View file

@ -59,11 +59,11 @@ pub fn audio_format_extension(format: AudioFileFormat) -> Option<&'static str> {
| AudioFileFormat::MP3_160_ENC
| AudioFileFormat::MP3_256
| AudioFileFormat::MP3_320 => Some(".mp3"),
AudioFileFormat::AAC_24
| AudioFileFormat::AAC_48
| AudioFileFormat::AAC_160
| AudioFileFormat::AAC_320 => Some(".aac"),
AudioFileFormat::MP4_128 | AudioFileFormat::MP4_256 => Some(".m4a"),
AudioFileFormat::AAC_24 | AudioFileFormat::AAC_48 => Some(".aac"),
AudioFileFormat::MP4_128
| AudioFileFormat::MP4_128_DUAL
| AudioFileFormat::MP4_256
| AudioFileFormat::MP4_256_DUAL => Some(".m4a"),
AudioFileFormat::FLAC_FLAC => Some(".flac"),
AudioFileFormat::UNKNOWN_FORMAT => None,
}
@ -79,11 +79,11 @@ pub fn audio_format_mime(format: AudioFileFormat) -> Option<&'static str> {
| AudioFileFormat::MP3_160_ENC
| AudioFileFormat::MP3_256
| AudioFileFormat::MP3_320 => Some("audio/mp3"),
AudioFileFormat::AAC_24
| AudioFileFormat::AAC_48
| AudioFileFormat::AAC_160
| AudioFileFormat::AAC_320 => Some("audio/aac"),
AudioFileFormat::MP4_128 | AudioFileFormat::MP4_256 => Some("audio/mp4"),
AudioFileFormat::AAC_24 | AudioFileFormat::AAC_48 => Some("audio/aac"),
AudioFileFormat::MP4_128
| AudioFileFormat::MP4_128_DUAL
| AudioFileFormat::MP4_256
| AudioFileFormat::MP4_256_DUAL => Some("audio/mp4"),
AudioFileFormat::FLAC_FLAC => Some("audio/flac"),
AudioFileFormat::UNKNOWN_FORMAT => None,
}
@ -94,14 +94,13 @@ pub fn audio_format_bitrate(format: AudioFileFormat) -> Option<u32> {
match format {
AudioFileFormat::OGG_VORBIS_96 | AudioFileFormat::MP3_96 => Some(96000),
AudioFileFormat::OGG_VORBIS_160
| AudioFileFormat::AAC_160
| AudioFileFormat::MP3_160
| AudioFileFormat::MP3_160_ENC => Some(160000),
AudioFileFormat::OGG_VORBIS_320 | AudioFileFormat::AAC_320 | AudioFileFormat::MP3_320 => {
Some(320000)
AudioFileFormat::OGG_VORBIS_320 | AudioFileFormat::MP3_320 => Some(320000),
AudioFileFormat::MP4_128 | AudioFileFormat::MP4_128_DUAL => Some(128000),
AudioFileFormat::MP3_256 | AudioFileFormat::MP4_256 | AudioFileFormat::MP4_256_DUAL => {
Some(256000)
}
AudioFileFormat::MP4_128 => Some(128000),
AudioFileFormat::MP3_256 | AudioFileFormat::MP4_256 => Some(256000),
AudioFileFormat::AAC_24 => Some(24000),
AudioFileFormat::AAC_48 => Some(48000),
AudioFileFormat::FLAC_FLAC | AudioFileFormat::UNKNOWN_FORMAT => None,
@ -117,13 +116,13 @@ pub fn audio_format_available(format: AudioFileFormat, is_premium: bool) -> bool
| AudioFileFormat::MP3_160_ENC
| AudioFileFormat::AAC_24
| AudioFileFormat::AAC_48
| AudioFileFormat::AAC_160
| AudioFileFormat::MP4_128 => true,
| AudioFileFormat::MP4_128
| AudioFileFormat::MP4_128_DUAL => true,
AudioFileFormat::OGG_VORBIS_320
| AudioFileFormat::MP3_256
| AudioFileFormat::MP3_320
| AudioFileFormat::AAC_320
| AudioFileFormat::MP4_256
| AudioFileFormat::MP4_256_DUAL
| AudioFileFormat::FLAC_FLAC => is_premium,
AudioFileFormat::UNKNOWN_FORMAT => false,
}
@ -131,5 +130,11 @@ pub fn audio_format_available(format: AudioFileFormat, is_premium: bool) -> bool
/// Return true if the audio format uses Widevine
pub fn audio_format_widevine(format: AudioFileFormat) -> bool {
matches!(format, AudioFileFormat::MP4_128 | AudioFileFormat::MP4_256)
matches!(
format,
AudioFileFormat::MP4_128
| AudioFileFormat::MP4_128_DUAL
| AudioFileFormat::MP4_256
| AudioFileFormat::MP4_256_DUAL
)
}

View file

@ -28,11 +28,11 @@ pub fn audio_format_extension(format: AudioFileFormat) -> Option<&'static str> {
| AudioFileFormat::MP3_160_ENC
| AudioFileFormat::MP3_256
| AudioFileFormat::MP3_320 => Some(".mp3"),
AudioFileFormat::AAC_24
| AudioFileFormat::AAC_48
| AudioFileFormat::AAC_160
| AudioFileFormat::AAC_320 => Some(".aac"),
AudioFileFormat::MP4_128 | AudioFileFormat::MP4_256 => Some(".m4a"),
AudioFileFormat::AAC_24 | AudioFileFormat::AAC_48 => Some(".aac"),
AudioFileFormat::MP4_128
| AudioFileFormat::MP4_128_DUAL
| AudioFileFormat::MP4_256
| AudioFileFormat::MP4_256_DUAL => Some(".m4a"),
AudioFileFormat::FLAC_FLAC => Some(".flac"),
AudioFileFormat::UNKNOWN_FORMAT => None,
}
@ -48,11 +48,11 @@ pub fn audio_format_mime(format: AudioFileFormat) -> Option<&'static str> {
| AudioFileFormat::MP3_160_ENC
| AudioFileFormat::MP3_256
| AudioFileFormat::MP3_320 => Some("audio/mp3"),
AudioFileFormat::AAC_24
| AudioFileFormat::AAC_48
| AudioFileFormat::AAC_160
| AudioFileFormat::AAC_320 => Some("audio/aac"),
AudioFileFormat::MP4_128 | AudioFileFormat::MP4_256 => Some("audio/mp4"),
AudioFileFormat::AAC_24 | AudioFileFormat::AAC_48 => Some("audio/aac"),
AudioFileFormat::MP4_128
| AudioFileFormat::MP4_128_DUAL
| AudioFileFormat::MP4_256
| AudioFileFormat::MP4_256_DUAL => Some("audio/mp4"),
AudioFileFormat::FLAC_FLAC => Some("audio/flac"),
AudioFileFormat::UNKNOWN_FORMAT => None,
}
@ -66,8 +66,8 @@ pub fn audio_format_bitrate(format: AudioFileFormat) -> Option<u32> {
| AudioFileFormat::MP3_160
| AudioFileFormat::MP3_160_ENC => Some(160000),
AudioFileFormat::OGG_VORBIS_320 | AudioFileFormat::MP3_320 => Some(320000),
AudioFileFormat::MP4_128 | AudioFileFormat::AAC_160 => Some(128000),
AudioFileFormat::MP3_256 | AudioFileFormat::MP4_256 | AudioFileFormat::AAC_320 => {
AudioFileFormat::MP4_128 | AudioFileFormat::MP4_128_DUAL => Some(128000),
AudioFileFormat::MP3_256 | AudioFileFormat::MP4_256 | AudioFileFormat::MP4_256_DUAL => {
Some(256000)
}
AudioFileFormat::AAC_24 => Some(24000),
@ -85,13 +85,13 @@ pub fn audio_format_available(format: AudioFileFormat, is_premium: bool) -> bool
| AudioFileFormat::MP3_160_ENC
| AudioFileFormat::AAC_24
| AudioFileFormat::AAC_48
| AudioFileFormat::AAC_160
| AudioFileFormat::MP4_128 => true,
| AudioFileFormat::MP4_128
| AudioFileFormat::MP4_128_DUAL => true,
AudioFileFormat::OGG_VORBIS_320
| AudioFileFormat::MP3_256
| AudioFileFormat::MP3_320
| AudioFileFormat::AAC_320
| AudioFileFormat::MP4_256
| AudioFileFormat::MP4_256_DUAL
| AudioFileFormat::FLAC_FLAC => is_premium,
AudioFileFormat::UNKNOWN_FORMAT => false,
}
@ -102,10 +102,8 @@ pub fn audio_format_widevine(format: AudioFileFormat) -> bool {
matches!(
format,
AudioFileFormat::MP4_128
| AudioFileFormat::MP4_128_DUAL
| AudioFileFormat::MP4_256
| AudioFileFormat::AAC_160
| AudioFileFormat::AAC_320
| AudioFileFormat::AAC_24
| AudioFileFormat::AAC_48
| AudioFileFormat::MP4_256_DUAL
)
}