diff --git a/README.md b/README.md index d9d406c..98f2960 100644 --- a/README.md +++ b/README.md @@ -64,17 +64,17 @@ metaflac --preserve-modtime --no-utf8-convert - // First Step - Remove Tags + // First Step - Remove Pictures + --remove --block-type=PICTURE + + // Second Step - Remove Tags --remove-tag=TITLE --remove-tag=ARTIST --remove-tag=ALBUM --remove-tag=TRACKNUMBER - // Second Step - Remove Pictures - --remove --block-type=PICTURE - // Third Step - Add - --import-picture-from=3|image/jpeg|||"/path/to/cover" + "--import-picture-from=3|image/jpeg|||/path/to/cover" "--set-tag=TITLE=..." "--set-tag=ARTIST=..." "--set-tag=ALBUM=..." diff --git a/TODO.md b/TODO.md index d94e775..2e58165 100644 --- a/TODO.md +++ b/TODO.md @@ -1,5 +1 @@ -* Rate limit -* Use external tools -* Download and resize cover before tracks -* Tag tracks -* Update README with eyeD3 +* Add API Rate Limit diff --git a/main.cpp b/main.cpp index 2a3d1c5..981a1f6 100644 --- a/main.cpp +++ b/main.cpp @@ -65,6 +65,61 @@ string gen_mp3_set_tags(const string& filepath, const string& artist, return cmd; } +string gen_flac_clear_images(const string& filepath, const string& metaflac_exec) +{ + string cmd; + + cmd = metaflac_exec; + cmd += " --preserve-modtime --no-utf8-convert"; + cmd += " --remove --block-type=PICTURE \""; + cmd += filepath; + cmd += "\""; + + return cmd; +} + +string gen_flac_clear_tags(const string& filepath, const string& metaflac_exec) +{ + string cmd; + + cmd = metaflac_exec; + cmd += " --preserve-modtime --no-utf8-convert"; + cmd += " --remove-tag=TITLE"; + cmd += " --remove-tag=ARTIST"; + // cmd += " --remove-tag=ALBUM"; + cmd += " --remove-tag=TRACKNUMBER"; + cmd += " \""; + cmd += filepath; + cmd += "\""; + + return cmd; +} + +string gen_flac_set_tags(const string& filepath, const string& artist, + const string& title, const string& album, int track_num, + const string& cover_filepath, string metaflac_exec) +{ + string cmd; + + cmd = metaflac_exec; + cmd += " --preserve-modtime --no-utf8-convert"; + cmd += " \"--import-picture-from=3|image/jpeg|||"; + cmd += cover_filepath; + cmd += "\" \"--set-tag=TITLE="; + cmd += title; + cmd += "\" \"--set-tag=ARTIST="; + cmd += artist; + // cmd += "\" \"--set-tag=ALBUM="; + // cmd += album; + cmd += "\" \"--set-tag=TRACKNUMBER="; + cmd += to_string(track_num); + cmd += "\" --dont-use-padding \""; + cmd += filepath; + cmd += "\""; + + return cmd; +} + int main(int argc, char **argv) { // Config stuff @@ -101,6 +156,10 @@ int main(int argc, char **argv) json_extract(config, "Pass", pass); json_extract(config, "download_path", main_path); + json_extract(config, "convert_exec", convert_exec); + json_extract(config, "eyed3_exec", eyed3_exec); + json_extract(config, "metaflac_exec", metaflac_exec); + ok = mcat.login(email, pass); if (!ok) { @@ -178,7 +237,7 @@ int main(int argc, char **argv) continue; } - // Clean MP3 Images + // Clear MP3 Images ok = exec_cmd(gen_mp3_clear(filepath, eyed3_exec)); if (!ok) { @@ -187,7 +246,7 @@ int main(int argc, char **argv) continue; } - // Tag MP3 + // Set MP3 Tags ok = exec_cmd( gen_mp3_set_tags(filepath, track.artist, @@ -214,7 +273,39 @@ int main(int argc, char **argv) continue; } - // TODO: Tag FLAC + // Clear FLAC Images + ok = exec_cmd(gen_flac_clear_images(filepath, metaflac_exec)); + if (!ok) + { + cout << "Could not clear images for FLAC track " << track.number << + " from release " << release.catalog_id << endl; + continue; + } + + // Clear FLAC Tags + ok = exec_cmd(gen_flac_clear_tags(filepath, metaflac_exec)); + if (!ok) + { + cout << "Could not clear tags for FLAC track " << track.number << + " from release " << release.catalog_id << endl; + continue; + } + + // Set FLAC Tags + ok = exec_cmd( + gen_flac_set_tags(filepath, + track.artist, + track.title, + release.title, + track.number, + build_fname(release_folder, "", "Cover_small.jpg"), + metaflac_exec)); + if (!ok) + { + cout << "Could not tag FLAC track " << track.number << + " from release " << release.catalog_id << endl; + continue; + } // Download Extended Mix if (!track.extended_mix_file_id.empty())