#include #include #include #include "monstercat_dl.h" #include "common.h" #include "json.hpp" using namespace std; using nlohmann::json; void usage(const char *name) { cout << "Usage: " << name << " [catalog id] ..." << endl; } int main(int argc, char **argv) { // Config stuff bool ok; json config; string email; string pass; string main_path; string convert_exec = "convert"; string eyed3_exec = "eyeD3"; string metaflac_exec = "metaflac"; vector catalog_ids(&(argv[1]), &(argv[argc])); json j; Monstercat_DL mcat; Release release; // Folder stuff string release_folder; string mp3_folder; string flac_folder; string extended_folder; string filename; string filepath; ok = read_config(config); if (!ok) { cout << "Could not read config" << endl; return -1; } json_extract(config, "Email", email); json_extract(config, "Pass", pass); json_extract(config, "download_path", main_path); ok = mcat.login(email, pass); if (!ok) { cout << "Could not login" << endl; return -1; } if (argc < 2) { usage(argv[0]); return -1; } for (string& id : catalog_ids) { // Gather data j = mcat.get_release_json(id); release = mcat.parse_release_json(j); j = mcat.get_browse_json(release.id); mcat.add_extended_mixes(release, j); // Calculate folders release_folder = mcat.calc_release_folder(release, main_path); mp3_folder = release_folder; flac_folder = release_folder; if (release.tracks.size() > 1) { mp3_folder = build_fname(release_folder, "MP3", ""); flac_folder = build_fname(release_folder, "FLAC", ""); } extended_folder = build_fname(release_folder, "Extended", ""); ok = ensure_folder(mp3_folder, ""); if (!ok) { cout << "Could not ensure MP3 folder - '" << mp3_folder << "'" << endl; continue; } ok = ensure_folder(flac_folder, ""); if (!ok) { cout << "Could not ensure FLAC folder - '" << mp3_folder << "'" << endl; continue; } // Download tracks (1 -- N) for (Track& track : release.tracks) { filename = mcat.calc_track_filename(release, track.number); // Download MP3 filepath = build_fname(mp3_folder, "", filename); ok = mcat.download_track(release.id, track.id, filepath, FORMAT_MP3); if (!ok) { cout << "Could not download MP3 track " << track.number << " from release " << release.catalog_id << endl; continue; } // Download FLAC filepath = build_fname(flac_folder, "", filename); ok = mcat.download_track(release.id, track.id, filepath, FORMAT_FLAC); if (!ok) { cout << "Could not download MP3 track " << track.number << " from release " << release.catalog_id << endl; continue; } // Download Extended Mix if (!track.extended_mix_file_id.empty()) { ok = ensure_folder(extended_folder, ""); if (!ok) { cout << "Could not ensure extended folder - '" << extended_folder << "'" << endl; continue; } filepath = build_fname(extended_folder, "", filename); filepath += track.extended_mix_extension; ok = mcat.download_file(track.extended_mix_file_id, filepath); if (!ok) { cout << "Could not download extended track " << track.number << " from release " << release.catalog_id << endl; continue; } } } // Download Cover ok = mcat.download_cover(release.catalog_id, release_folder); if (!ok) { cout << "Could not download cover for release " << release.catalog_id << endl; continue; } } ok = mcat.logout(); if (!ok) { cout << "Could not log out" << endl; } return 0; }