172 lines
3.6 KiB
C++
172 lines
3.6 KiB
C++
#include <algorithm>
|
|
#include <iostream>
|
|
#include <vector>
|
|
|
|
#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<string> 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 Cover
|
|
ok = mcat.download_cover(release.catalog_id, release_folder);
|
|
if (!ok)
|
|
{
|
|
cout << "Could not download cover for release " << release.catalog_id << endl;
|
|
continue;
|
|
}
|
|
|
|
// TODO: Resize cover
|
|
|
|
// 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);
|
|
filepath += ".mp3";
|
|
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;
|
|
}
|
|
|
|
// TODO: Tag MP3
|
|
|
|
// Download FLAC
|
|
filepath = build_fname(flac_folder, "", filename);
|
|
filepath += ".flac";
|
|
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;
|
|
}
|
|
|
|
// TODO: Tag FLAC
|
|
|
|
// 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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
ok = mcat.logout();
|
|
if (!ok)
|
|
{
|
|
cout << "Could not log out" << endl;
|
|
}
|
|
|
|
return 0;
|
|
}
|