From d9962749c8cea17ddd24d7c43601c859e15cbceb Mon Sep 17 00:00:00 2001 From: kdeng00 Date: Sun, 9 Jan 2022 18:06:43 -0500 Subject: [PATCH] Ready for release --- README.md | 13 +++++++--- include/Models/Song.h | 46 ++++++++++++++++++++++++++++++++-- src/Main.cpp | 2 +- src/Managers/CommitManager.cpp | 39 ++++++++++++++++------------ src/Syncers/Upload.cpp | 5 ++-- 5 files changed, 80 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 16e8363..4434a28 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ IcarusDownloadManager is a Linux CLI software client application that has the fe * C++ with C++17 features * CMake -* GCC >= 9 +* GCC >= 9 or Visual Studio >= 16 [2019] * [conan](https://github.com/conan-io/conan) * [json](https://github.com/nlohmann/json) * [openssl](https://github.com/openssl/openssl) @@ -28,18 +28,20 @@ cd build conan install .. --build -cmake -DCMAKE_BUILD_TYPE=RELEASE -cmake --build . -j +cmake .. +cmake --build . --config release -j ``` The program has been built and can be executed by the binary file *icd*. For information on how to use icd, merely execute the program without any command line arguments. ### Downloading Song + ```BASH icd download -u spacecadet -p stellar40 -h https://icarus.com -b 15 ``` ### Uploading Song + ```BASH icd upload -u spacecadet -p stellar40 -h https://icarus.com -s /path/of/song.mp3 ``` @@ -53,16 +55,18 @@ icd upload-meta -u spacecadet -p stellar40 -h https://icarus.com -s /path/of/son ### Uploading Song with metadata from directory ```BASH -icd upload-meta -u spacecadet -p stellar40 -h https://icarus.com -smca /path/where/songs/and/metadata/exist +icd upload-meta -u spacecadet -p stellar40 -h https://icarus.com -smca /path/where/songs/and/metadata/exists/ ``` ### Retrieving Song in json + ```Bash icd retrieve -u spacecadet -p stellar40 -h https://icarus.com -rt songs ``` ### Deleting Song + ```BASH icd delete -u spacecadet -p stellar40 -h https://icarus.com -D 15 ``` @@ -74,6 +78,7 @@ Please read [CONTRIBUTING.md](CONTRIBUTING.md) for details on the code of conduc ## Versioning +[v0.2.0](https://github.com/kdeng00/IcarusDownloadManager/releases/tag/v0.2.0) [v0.1.1](https://github.com/kdeng00/IcarusDownloadManager/releases/tag/v0.1.1) [v0.1.0](https://github.com/kdeng00/IcarusDownloadManager/releases/tag/0.1.0) diff --git a/include/Models/Song.h b/include/Models/Song.h index 8512666..a66c787 100644 --- a/include/Models/Song.h +++ b/include/Models/Song.h @@ -1,8 +1,9 @@ #ifndef SONG_H_ #define SONG_H_ -#include -#include +#include +#include +#include namespace Models @@ -19,6 +20,44 @@ public: std::cout<<"\n"; } + std::string song_path() noexcept + { + std::stringstream buffer; + + buffer << this->directory; + + const auto count = this->directory.size(); + + if (this->directory.at(count - 1) != '/' || this->directory.at(count - 1) != '\\') + { + buffer << "/"; + } + + buffer << this->filename; + + return buffer.str(); + } + + int generate_filename_from_track() + { + auto result = 0; + std::stringstream buffer; + buffer << "track"; + + // NOTE: Multiple discs in one directory is not being addressed + if (this->track < 10) + { + buffer << "0"; + } + + buffer << this->track << ".mp3"; + + + this->filename.assign(buffer.str()); + + return result; + } + std::string toMetadataJson(); @@ -32,7 +71,10 @@ public: int track; int disc; std::string data; + [[deprecated("Use song_path() function instead")]] std::string songPath; + std::string filename; + std::string directory; }; class CoverArt diff --git a/src/Main.cpp b/src/Main.cpp index 965792e..eada2a0 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -14,7 +14,7 @@ using Managers::CommitManager; constexpr static auto IcarusDownloadManager_version() { - return "v0.1.2"; + return "v0.2.0"; } void printHelp() diff --git a/src/Managers/CommitManager.cpp b/src/Managers/CommitManager.cpp index 956d7b8..0fec9ac 100644 --- a/src/Managers/CommitManager.cpp +++ b/src/Managers/CommitManager.cpp @@ -1,23 +1,23 @@ #include"Managers/CommitManager.h" -#include -#include -#include -#include +#include +#include +#include +#include -#include"nlohmann/json.hpp" +#include "nlohmann/json.hpp" -#include"Models/API.h" -#include"Models/Song.h" -#include"Models/Token.h" -#include"Parsers/APIParser.h" -#include"Syncers/Delete.h" -#include"Syncers/Download.h" -#include"Syncers/RetrieveRecords.h" -#include"Syncers/Upload.h" +#include "Models/API.h" +#include "Models/Song.h" +#include "Models/Token.h" +#include "Parsers/APIParser.h" +#include "Syncers/Delete.h" +#include "Syncers/Download.h" +#include "Syncers/RetrieveRecords.h" +#include "Syncers/Upload.h" -#include"Managers/TokenManager.h" -#include"Managers/UserManager.h" +#include "Managers/TokenManager.h" +#include "Managers/UserManager.h" using std::cout; using std::endl; @@ -308,7 +308,9 @@ void CommitManager::singTargetUpload(const std::string &songPath, const std::str } song = *sng; - song.songPath = songPath; + const auto p = fs::path(songPath); + song.directory = p.parent_path.string(); + song.generate_filename_from_track(); Models::CoverArt cover; cover.title = song.title; @@ -363,6 +365,8 @@ void CommitManager::multiTargetUpload(const std::string &sourcePath) } auto album = retrieveMetadata(metadataPath); + songs.clear(); + songs.assign(album.songs.begin(), album.songs.end()); Upload up(api, token); @@ -399,6 +403,9 @@ CommitManager::Album CommitManager::retrieveMetadata(const std::string_view path song.album = album.album; song.year = album.year; song.genre = album.genre; + song.generate_filename_from_track(); + const auto p = fs::path(path); + song.directory = p.parent_path().string(); album.songs.push_back(song); } diff --git a/src/Syncers/Upload.cpp b/src/Syncers/Upload.cpp index d00ed66..006691b 100644 --- a/src/Syncers/Upload.cpp +++ b/src/Syncers/Upload.cpp @@ -112,7 +112,7 @@ void Upload::uploadSongWithMetadata(Managers::CommitManager::Album &album, Model { auto url = retrieveUrl(); - cout<<"url "<m_token.tokenType); auth.append(" " + this->m_token.accessToken); @@ -131,10 +131,11 @@ void Upload::uploadSongWithMetadata(Managers::CommitManager::Album &album, Model const auto meta = s.dump(); cout<<"\n\nMeta:\n"<