diff --git a/modules/juce_core/juce_core.cpp b/modules/juce_core/juce_core.cpp index 71c0554db0..4784f65936 100644 --- a/modules/juce_core/juce_core.cpp +++ b/modules/juce_core/juce_core.cpp @@ -226,6 +226,7 @@ #include "threads/juce_HighResolutionTimer.cpp" #include "network/juce_URL.cpp" #include "network/juce_WebInputStream.cpp" +#include "streams/juce_URLInputSource.cpp" //============================================================================== #if JUCE_UNIT_TESTS diff --git a/modules/juce_core/juce_core.h b/modules/juce_core/juce_core.h index 6ad812bacc..b58b9e3df8 100644 --- a/modules/juce_core/juce_core.h +++ b/modules/juce_core/juce_core.h @@ -302,6 +302,7 @@ namespace juce #include "network/juce_Socket.h" #include "network/juce_URL.h" #include "network/juce_WebInputStream.h" +#include "streams/juce_URLInputSource.h" #include "system/juce_SystemStats.h" #include "time/juce_PerformanceCounter.h" #include "unit_tests/juce_UnitTest.h" diff --git a/modules/juce_core/streams/juce_URLInputSource.cpp b/modules/juce_core/streams/juce_URLInputSource.cpp new file mode 100644 index 0000000000..d7c954abd2 --- /dev/null +++ b/modules/juce_core/streams/juce_URLInputSource.cpp @@ -0,0 +1,59 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2017 - ROLI Ltd. + + JUCE is an open source library subject to commercial or open-source + licensing. + + The code included in this file is provided under the terms of the ISC license + http://www.isc.org/downloads/software-support-policy/isc-license. Permission + To use, copy, modify, and/or distribute this software for any purpose with or + without fee is hereby granted provided that the above copyright notice and + this permission notice appear in all copies. + + JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER + EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE + DISCLAIMED. + + ============================================================================== +*/ + +namespace juce +{ + +URLInputSource::URLInputSource (const URL& url) + : u (url) +{ +} + +URLInputSource::URLInputSource (URL&& url) + : u (static_cast (url)) +{ +} + +URLInputSource::~URLInputSource() +{ +} + +InputStream* URLInputSource::createInputStream() +{ + return u.createInputStream (false); +} + +InputStream* URLInputSource::createInputStreamFor (const String& relatedItemPath) +{ + auto sub = u.getSubPath(); + auto parent = sub.containsChar (L'/') ? sub.upToLastOccurrenceOf ("/", false, false) + : String (); + + return u.withNewSubPath (parent).getChildURL (relatedItemPath).createInputStream (false); +} + +int64 URLInputSource::hashCode() const +{ + return u.toString (true).hashCode64(); +} + +} // namespace juce diff --git a/modules/juce_core/streams/juce_URLInputSource.h b/modules/juce_core/streams/juce_URLInputSource.h new file mode 100644 index 0000000000..ffe913e2f8 --- /dev/null +++ b/modules/juce_core/streams/juce_URLInputSource.h @@ -0,0 +1,59 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2017 - ROLI Ltd. + + JUCE is an open source library subject to commercial or open-source + licensing. + + The code included in this file is provided under the terms of the ISC license + http://www.isc.org/downloads/software-support-policy/isc-license. Permission + To use, copy, modify, and/or distribute this software for any purpose with or + without fee is hereby granted provided that the above copyright notice and + this permission notice appear in all copies. + + JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER + EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE + DISCLAIMED. + + ============================================================================== +*/ + +namespace juce +{ + +//============================================================================== +/** + A type of InputSource that represents a URL. + + @see InputSource +*/ +class JUCE_API URLInputSource : public InputSource +{ +public: + //============================================================================== + /** Creates a URLInputSource for a url. */ + URLInputSource (const URL& url); + + /** Move constructor which will move the URL into the InputSource. + + This is useful when the url carries any security credentials. + */ + URLInputSource (URL&& url); + + /** Destructor. */ + ~URLInputSource(); + + InputStream* createInputStream(); + InputStream* createInputStreamFor (const String& relatedItemPath); + int64 hashCode() const; + +private: + //============================================================================== + const URL u; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (URLInputSource) +}; + +}