music_dump_lib 0.2.0

Library for dumping ncm files to mp3
Documentation
use std::{io::Cursor, path::Path};

use lofty::{config::{ParseOptions, WriteOptions}, file::AudioFile, flac::FlacFile, id3::v2::Id3v2Tag, mpeg::MpegFile, picture::Picture, tag::TagExt};

pub struct LoftyMetaData {
    pub tag: Id3v2Tag,
}

impl LoftyMetaData {
    pub fn from(audio: &[u8], picture: &[u8]) -> Self {
        let mut reader = Cursor::new(audio);
        let mp3_file = MpegFile::read_from(&mut reader, ParseOptions::default());
        if let Ok(mp3_file) = mp3_file {
            let mut tag = mp3_file.id3v2().unwrap().clone();
            let mut picture_bytes = Cursor::new(picture);
            let _ = tag.insert_picture(Picture::from_reader(&mut picture_bytes).unwrap());
            return Self {
                tag,
            }
        }
        let flac_file = FlacFile::read_from(&mut reader, ParseOptions::default());
        if let Ok(flac_file) = flac_file {
            let mut tag = flac_file.id3v2().unwrap().clone();
            let mut picture_bytes = Cursor::new(picture);
            let _ = tag.insert_picture(Picture::from_reader(&mut picture_bytes).unwrap());
            return Self {
                tag,
            }
        }
        panic!("none of the supported formats found: (mp3, flac)")
    }
}

impl LoftyMetaData {
    pub fn inject_to_path<P: AsRef<Path>>(&self, path: P) {
        self.tag.save_to_path(path, WriteOptions::default()).unwrap();
    }
}