// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "MultimediaFilesRecord.hpp" #include "BaseInterface.hpp" #include #include #include #include #include #include #include #include namespace db::multimedia_files { MultimediaFilesRecordInterface::MultimediaFilesRecordInterface(MultimediaFilesDB *database) : database(database) {} std::unique_ptr MultimediaFilesRecordInterface::runQuery(std::shared_ptr query) { if (query == nullptr) { return nullptr; } if (typeid(*query) == typeid(query::Add)) { return runQueryImplAdd(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(query::Edit)) { return runQueryImplEdit(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(query::Get)) { return runQueryImplGet(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(query::GetLimited)) { return runQueryImplGetLimited(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(query::GetLimitedByPaths)) { return runQueryImplGetLimited(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(query::Remove)) { return runQueryImplRemove(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(query::RemoveByPath)) { return runQueryImplRemoveByPath(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(query::RemoveAll)) { return runQueryImplRemoveAll(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(query::GetCount)) { return runQueryImplGetCount(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(query::GetCountArtists)) { return runQueryImplGetCountArtists(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(query::GetArtistsLimited)) { return runQueryImplGetArtistsLimited(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(query::GetCountAlbums)) { return runQueryImplGetCountAlbums(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(query::GetAlbumsLimited)) { return runQueryImplGetAlbumsLimited(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(query::GetLimitedForArtist)) { return runQueryImplGetLimited(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(query::GetCountForArtist)) { return runQueryImplGetCount(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(query::GetLimitedForAlbum)) { return runQueryImplGetLimited(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(query::GetCountForAlbum)) { return runQueryImplGetCount(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(query::AddOrEdit)) { return runQueryImplAddOrEdit(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(query::GetByPath)) { return runQueryImplGetByPath(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(query::GetCountForPath)) { return runQueryImplGetCountForPath(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(query::GetOffsetByPath)) { return runQueryImplGetOffsetByPath(std::static_pointer_cast(query)); } return nullptr; } std::unique_ptr MultimediaFilesRecordInterface::runQueryImplAdd( const std::shared_ptr &query) { const auto result = database->files.add(query->getRecord()); auto response = std::make_unique(result); response->setRequestQuery(query); return response; } std::unique_ptr MultimediaFilesRecordInterface::runQueryImplAddOrEdit( const std::shared_ptr &query) { const auto result = database->files.addOrUpdate(query->getRecord(), query->getOldPath()); auto response = std::make_unique(result); response->setRequestQuery(query); return response; } std::unique_ptr MultimediaFilesRecordInterface::runQueryImplEdit( const std::shared_ptr &query) { const auto result = database->files.update(query->getRecord()); auto response = std::make_unique(result); response->setRequestQuery(query); return response; } std::unique_ptr MultimediaFilesRecordInterface::runQueryImplGet( const std::shared_ptr &query) { const auto record = database->files.getById(query->id); auto response = std::make_unique(record); response->setRequestQuery(query); return response; } std::unique_ptr MultimediaFilesRecordInterface::runQueryImplGetByPath( const std::shared_ptr &query) { const auto record = database->files.getByPath(query->path); auto response = std::make_unique(record); response->setRequestQuery(query); return response; } std::unique_ptr MultimediaFilesRecordInterface::runQueryImplGetLimited( const std::shared_ptr &query) { const auto records = database->files.getLimitOffset(query->offset, query->limit); auto response = std::make_unique(records, database->files.count()); response->setRequestQuery(query); return response; } std::unique_ptr MultimediaFilesRecordInterface::runQueryImplRemove( const std::shared_ptr &query) { const bool ret = database->files.removeById(query->id); auto response = std::make_unique(ret); response->setRequestQuery(query); return response; } std::unique_ptr MultimediaFilesRecordInterface::runQueryImplRemoveByPath( const std::shared_ptr &query) { const bool ret = database->files.removeByField(TableFields::path, query->path.c_str()); auto response = std::make_unique(ret); response->setRequestQuery(query); return response; } std::unique_ptr MultimediaFilesRecordInterface::runQueryImplRemoveAll( const std::shared_ptr &query) { const bool ret = database->files.removeAll(); auto response = std::make_unique(ret); response->setRequestQuery(query); return response; } std::unique_ptr MultimediaFilesRecordInterface::runQueryImplGetCount( const std::shared_ptr &query) { const auto ret = database->files.count(); auto response = std::make_unique(ret); response->setRequestQuery(query); return response; } std::unique_ptr MultimediaFilesRecordInterface:: runQueryImplGetCountArtists(const std::shared_ptr &query) { const auto ret = database->files.countArtists(); auto response = std::make_unique(ret); response->setRequestQuery(query); return response; } std::unique_ptr MultimediaFilesRecordInterface:: runQueryImplGetArtistsLimited(const std::shared_ptr &query) { const auto records = database->files.getArtistsLimitOffset(query->offset, query->limit); auto response = std::make_unique(records, database->files.countArtists()); response->setRequestQuery(query); return response; } std::unique_ptr MultimediaFilesRecordInterface:: runQueryImplGetCountAlbums(const std::shared_ptr &query) { const auto ret = database->files.countAlbums(); auto response = std::make_unique(ret); response->setRequestQuery(query); return response; } std::unique_ptr MultimediaFilesRecordInterface:: runQueryImplGetAlbumsLimited(const std::shared_ptr &query) { const auto records = database->files.getAlbumsLimitOffset(query->offset, query->limit); auto response = std::make_unique(records, database->files.countAlbums()); response->setRequestQuery(query); return response; } std::unique_ptr MultimediaFilesRecordInterface:: runQueryImplGetLimited(const std::shared_ptr &query) { const auto records = database->files.getLimitOffset(query->artist, query->offset, query->limit); auto response = std::make_unique(records, database->files.count()); response->setRequestQuery(query); return response; } std::unique_ptr MultimediaFilesRecordInterface::runQueryImplGetCount( const std::shared_ptr &query) { const auto ret = database->files.count(query->artist); auto response = std::make_unique(ret); response->setRequestQuery(query); return response; } std::unique_ptr MultimediaFilesRecordInterface:: runQueryImplGetLimited(const std::shared_ptr &query) { const auto records = database->files.getLimitOffset(query->album, query->offset, query->limit); auto response = std::make_unique(records, database->files.count()); response->setRequestQuery(query); return response; } std::unique_ptr MultimediaFilesRecordInterface:: runQueryImplGetLimited(const std::shared_ptr &query) { const auto records = database->files.getLimitOffsetByPaths(query->paths, query->offset, query->limit, query->sorting); auto response = std::make_unique(records, database->files.count(query->paths)); response->setRequestQuery(query); return response; } std::unique_ptr MultimediaFilesRecordInterface::runQueryImplGetCount( const std::shared_ptr &query) { const auto ret = database->files.count(query->album); auto response = std::make_unique(ret); response->setRequestQuery(query); return response; } std::unique_ptr MultimediaFilesRecordInterface:: runQueryImplGetCountForPath(const std::shared_ptr &query) { const auto ret = database->files.count(std::vector{query->path}); auto response = std::make_unique(ret); response->setRequestQuery(query); return response; } std::unique_ptr MultimediaFilesRecordInterface:: runQueryImplGetOffsetByPath(const std::shared_ptr &query) { const auto ret = database->files.getOffsetOfSortedRecordByPath(query->folderPath, query->recordPath, query->sorting); auto response = std::make_unique(ret); response->setRequestQuery(query); return response; } } // namespace db::multimedia_files