From a82e66ff83bbf1e46c951fbb90ec13a253165b49 Mon Sep 17 00:00:00 2001 From: kdeng00 Date: Fri, 13 Sep 2019 23:12:09 -0400 Subject: [PATCH] Working on updating a song's metadata --- include/controller/SongController.hpp | 2 - include/manager/SongManager.h | 3 ++ src/manager/SongManager.cpp | 60 ++++++++++++++++----------- 3 files changed, 39 insertions(+), 26 deletions(-) diff --git a/include/controller/SongController.hpp b/include/controller/SongController.hpp index 5dbee3c..110a146 100644 --- a/include/controller/SongController.hpp +++ b/include/controller/SongController.hpp @@ -158,8 +158,6 @@ namespace controller songDto->id = id; auto updatedSong = manager::SongManager::songDtoConv(songDto); - std::cout << "printing updated song" << std::endl; - manager::SongManager::printSong(updatedSong); manager::SongManager songMgr(m_bConf); songMgr.updateSong(updatedSong); diff --git a/include/manager/SongManager.h b/include/manager/SongManager.h index cf81fa8..09f7529 100644 --- a/include/manager/SongManager.h +++ b/include/manager/SongManager.h @@ -17,6 +17,9 @@ namespace manager SongManager(std::string&); SongManager(const model::BinaryPath&); + bool didSongChange(const model::Song&, const model::Song&); + bool requiresFilesystemChange(const model::Song&, const model::Song&); + void saveSong(model::Song&); void deleteSong(model::Song&); void updateSong(model::Song&); diff --git a/src/manager/SongManager.cpp b/src/manager/SongManager.cpp index 63f8180..2da917c 100644 --- a/src/manager/SongManager.cpp +++ b/src/manager/SongManager.cpp @@ -29,6 +29,30 @@ manager::SongManager::SongManager(const model::BinaryPath& bConf) { } +bool manager::SongManager::didSongChange(const model::Song& updatedSong, + const model::Song& currSong) +{ + // TODO: implement this + + return false; +} + +bool manager::SongManager::requiresFilesystemChange(const model::Song& updatedSong, + const model::Song& currSong) +{ + if (updatedSong.title.compare(currSong.title) != 0) { + return true; + } + if (updatedSong.artist.compare(currSong.album) != 0) { + return true; + } + if (updatedSong.album.compare(currSong.genre) != 0) { + return true; + } + + return false; +} + void manager::SongManager::saveSong(model::Song& song) { saveSongTemp(song); @@ -73,18 +97,22 @@ void manager::SongManager::deleteSong(model::Song& song) void manager::SongManager::updateSong(model::Song& updatedSong) { database::SongRepository songRepo(m_bConf); + model::Song currSong(updatedSong.id); - OATPP_ASSERT_HTTP(songRepo.doesSongExist(updatedSong, type::SongFilter::id) , oatpp::web::protocol::http::Status::CODE_404, "song does not exist"); + OATPP_ASSERT_HTTP(songRepo.doesSongExist(currSong, type::SongFilter::id) , oatpp::web::protocol::http::Status::CODE_404, "song does not exist"); - auto currSong = songRepo.retrieveRecord(updatedSong, type::SongFilter::id); + currSong = songRepo.retrieveRecord(currSong, type::SongFilter::id); utility::MetadataRetriever meta; meta.updateMetadata(updatedSong, currSong); // TODO: - // 1. depending on what metadata was changed there might be a need to + // 1. determine if the song has been updated at all + // 2. depending on what metadata was changed there might be a need to // change where the song is stored on the filesystem, deleting empty // directories in the process - // 2. create or delete necessary records + // 3. create or delete necessary records + if (requiresFilesystemChange(updatedSong, currSong)) { + } } model::Song manager::SongManager::songDtoConv(dto::SongDto::ObjectWrapper& songDto) @@ -92,29 +120,13 @@ model::Song manager::SongManager::songDtoConv(dto::SongDto::ObjectWrapper& songD std::cout << "coverting dto::SongDto to model::Song" << std::endl; model::Song song; song.id = songDto->id; + song.title = (songDto->title == nullptr) ? "" : songDto->title->c_str(); song.album = (songDto->album == nullptr) ? "" : songDto->album->c_str(); song.artist = (songDto->artist == nullptr) ? "" : songDto->artist->c_str(); song.genre = (songDto->genre == nullptr) ? "" : songDto->genre->c_str(); - auto year = songDto->year.getPtr(); - auto track = songDto->track.getPtr(); - auto disc = songDto->track.getPtr(); - auto duration = songDto->track.getPtr(); - if (year != nullptr) { - std::cout << "not null" << std::endl; - song.year = songDto->year; - } else { - year = 0; - } - if (track != nullptr) { - song.track = songDto->track; - } else { - track = 0; - } - if (disc != nullptr) { - song.disc = songDto->disc; - } else { - disc = 0; - } + song.year = (songDto->year.getPtr() == nullptr) ? 0 : songDto->year->getValue(); + song.track = (songDto->track.getPtr() == nullptr) ? 0 : songDto->track->getValue(); + song.disc = (songDto->disc.getPtr() == nullptr) ? 0 : songDto->disc->getValue(); return song; }