/* * Copyright 2023 jacqueline * * SPDX-License-Identifier: GPL-3.0-only */ #pragma once #include #include "codec.hpp" #include "database/track.hpp" #include "types.hpp" namespace audio { class TaggedStream : public codecs::IStream { public: TaggedStream(std::shared_ptr, std::unique_ptr wrapped, std::string path, uint32_t offset = 0); auto tags() -> std::shared_ptr; auto Read(std::span dest) -> ssize_t override; auto CanSeek() -> bool override; auto SeekTo(int64_t destination, SeekFrom from) -> void override; auto CurrentPosition() -> int64_t override; auto Size() -> std::optional override; auto Offset() -> uint32_t; auto Filepath() -> std::string; auto SetPreambleFinished() -> void override; private: std::shared_ptr tags_; std::unique_ptr wrapped_; std::string filepath_; int32_t offset_; }; class IAudioSource { public: virtual ~IAudioSource() {} virtual auto HasNewStream() -> bool = 0; virtual auto NextStream() -> std::shared_ptr = 0; }; } // namespace audio