From 905a6ab4a2eb860307cd9279de5710d5c9880b53 Mon Sep 17 00:00:00 2001 From: arcnmx Date: Mon, 19 Oct 2020 17:00:43 -0700 Subject: [PATCH] ytdl: WIP: virtual InputStream::GetURI() See #19 for details. Also note the lack of synchronization for now. --- src/input/InputStream.hxx | 2 +- src/input/ProxyInputStream.cxx | 10 ++++++++++ src/input/ProxyInputStream.hxx | 1 + src/input/plugins/YtdlInputStream.cxx | 8 ++++++++ src/input/plugins/YtdlInputStream.hxx | 1 + 5 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/input/InputStream.hxx b/src/input/InputStream.hxx index 8395693e2d..c4d177f8d8 100644 --- a/src/input/InputStream.hxx +++ b/src/input/InputStream.hxx @@ -153,7 +153,7 @@ public: * * No lock necessary for this method. */ - const char *GetURI() const noexcept { + virtual const char *GetURI() const noexcept { return uri.c_str(); } diff --git a/src/input/ProxyInputStream.cxx b/src/input/ProxyInputStream.cxx index d58ad660f7..8f5a6d1610 100644 --- a/src/input/ProxyInputStream.cxx +++ b/src/input/ProxyInputStream.cxx @@ -71,6 +71,16 @@ ProxyInputStream::CopyAttributes() } } +const char* +ProxyInputStream::GetURI() const noexcept +{ + if (input) { + return input->GetURI(); + } else { + return InputStream::GetURI(); + } +} + void ProxyInputStream::Check() { diff --git a/src/input/ProxyInputStream.hxx b/src/input/ProxyInputStream.hxx index d58263be4b..0c8d9cba20 100644 --- a/src/input/ProxyInputStream.hxx +++ b/src/input/ProxyInputStream.hxx @@ -58,6 +58,7 @@ public: ProxyInputStream &operator=(const ProxyInputStream &) = delete; /* virtual methods from InputStream */ + const char *GetURI() const noexcept; void Check() override; void Update() noexcept override; void Seek(std::unique_lock &lock, diff --git a/src/input/plugins/YtdlInputStream.cxx b/src/input/plugins/YtdlInputStream.cxx index 393e735440..44029375ec 100644 --- a/src/input/plugins/YtdlInputStream.cxx +++ b/src/input/plugins/YtdlInputStream.cxx @@ -15,6 +15,14 @@ YtdlInputStream::YtdlInputStream(const char *_uri, Mutex &_mutex, EventLoop &eve YtdlInputStream::~YtdlInputStream() noexcept { } +const char *YtdlInputStream::GetURI() const noexcept { + if (inner != nullptr) { + return inner->GetURI(); + } else { + return InputStream::GetURI(); + } +} + void YtdlInputStream::SyncFields() noexcept { seekable = inner->IsSeekable(); offset = inner->GetOffset(); diff --git a/src/input/plugins/YtdlInputStream.hxx b/src/input/plugins/YtdlInputStream.hxx index a60383a657..d5f16ab7ef 100644 --- a/src/input/plugins/YtdlInputStream.hxx +++ b/src/input/plugins/YtdlInputStream.hxx @@ -22,6 +22,7 @@ public: virtual void Check(); virtual void Update() noexcept; virtual void Seek(std::unique_lock &lock, offset_type by_offset); + virtual const char *GetURI() const noexcept; gcc_pure virtual bool IsEOF() const noexcept;