// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once #include #include #include #include #include #include #include #include namespace app::music_player { class AbstractTagsFetcher { public: virtual ~AbstractTagsFetcher() noexcept = default; virtual std::optional getFileTags(const std::string &filePath) const = 0; }; class ServiceAudioTagsFetcher : public AbstractTagsFetcher { public: explicit ServiceAudioTagsFetcher(Application *application); std::optional getFileTags(const std::string &filePath) const final; private: Application *application = nullptr; }; class AbstractSongsRepository { public: virtual ~AbstractSongsRepository() noexcept = default; virtual void scanMusicFilesList() = 0; virtual std::vector getMusicFilesList() const = 0; virtual std::size_t getFileIndex(const std::string &filePath) const = 0; virtual std::string getNextFilePath(const std::string &filePath) const = 0; virtual std::string getPreviousFilePath(const std::string &filePath) const = 0; }; class SongsRepository : public AbstractSongsRepository { static constexpr auto musicSubfolderName = "music"; public: explicit SongsRepository(std::unique_ptr tagsFetcher, std::string musicFolderName = purefs::dir::getUserDiskPath() / musicSubfolderName); void scanMusicFilesList() override; std::vector getMusicFilesList() const override; std::size_t getFileIndex(const std::string &filePath) const override; std::string getNextFilePath(const std::string &filePath) const override; std::string getPreviousFilePath(const std::string &filePath) const override; private: std::unique_ptr tagsFetcher; std::string musicFolderName; std::vector musicFiles; }; } // namespace app::music_player