diff options
-rw-r--r-- | include/plugin.h | 2 | ||||
-rw-r--r-- | media/mediaManager.cpp | 4 | ||||
-rw-r--r-- | media/pluginManager.cpp | 7 | ||||
-rw-r--r-- | plugins/provider/vdrProvider/vdrProvider.cpp | 28 |
4 files changed, 32 insertions, 9 deletions
diff --git a/include/plugin.h b/include/plugin.h index c30ce2b..cd24e91 100644 --- a/include/plugin.h +++ b/include/plugin.h @@ -348,7 +348,7 @@ public: * The implementor of a resource provider MUST either implement * this function or the file access methods below. */ - virtual string GetHTTPUri(const string& uri, const string& currentIP = string()); + virtual string GetHTTPUri(const string& uri, const string& currentIP); virtual bool Seekable() const; diff --git a/media/mediaManager.cpp b/media/mediaManager.cpp index c869bb0..409b49d 100644 --- a/media/mediaManager.cpp +++ b/media/mediaManager.cpp @@ -270,7 +270,7 @@ int cMediaManager::CreateResponse(MediaRequest& request, const string& select, c boost::shared_ptr<cUPnPResourceProvider> provider(CreateResourceProvider(row2.getString(property::resource::KEY_RESOURCE))); if(provider.get()){ - string resourceURI = provider->GetHTTPUri(row2.getString(property::resource::KEY_RESOURCE)); + string resourceURI = provider->GetHTTPUri(row2.getString(property::resource::KEY_RESOURCE), cMediaServer::GetInstance()->GetServerIPAddress()); IXML_Element* resource = ixml::IxmlAddFilteredProperty(filterList, DIDLDoc, object, property::resource::KEY_RESOURCE, resourceURI); @@ -608,7 +608,7 @@ cResourceStreamer* cMediaManager::GetResourceStreamer(const string& objectID, in } cUPnPResourceProvider* cMediaManager::CreateResourceProvider(const string& uri){ - return NULL; + return pluginManager->CreateProvider(uri.substr(0, uri.find_first_of(':',0))); } void cMediaManager::SetDatabaseFile(const string& file){ diff --git a/media/pluginManager.cpp b/media/pluginManager.cpp index 280f0c9..a76af8f 100644 --- a/media/pluginManager.cpp +++ b/media/pluginManager.cpp @@ -229,7 +229,7 @@ bool cUPnPResourceProvider::GetMetadata(const string& uri, cMetadata& metadata){ } -string cUPnPResourceProvider::GetHTTPUri(const string& uri, const string& currentIP){ +string cUPnPResourceProvider::GetHTTPUri(const string&, const string&){ return string(); } @@ -268,7 +268,10 @@ int upnp::cPluginManager::Count() const { } cUPnPResourceProvider* upnp::cPluginManager::CreateProvider(const string& schema) { - return providers[schema](); + if(providers[schema]) + return providers[schema](); + else + return NULL; } #define UPNPPLUGIN_PREFIX "libupnp-" diff --git a/plugins/provider/vdrProvider/vdrProvider.cpp b/plugins/provider/vdrProvider/vdrProvider.cpp index 7d1ef22..bcf06a4 100644 --- a/plugins/provider/vdrProvider/vdrProvider.cpp +++ b/plugins/provider/vdrProvider/vdrProvider.cpp @@ -10,13 +10,23 @@ #include <vdr/tools.h> #include <vdr/config.h> #include <string> +#include <sstream> #include <tools.h> +#include <vdr/thread.h> using namespace std; namespace upnp { -class VdrProvider : public cUPnPResourceProvider { +class VdrProvider : public cUPnPResourceProvider, cThread { +private: + int lastUpdateID; + +public: + + VdrProvider() + : lastUpdateID(0) + {} virtual string ProvidesSchema(){ return "vdr"; } @@ -54,9 +64,9 @@ class VdrProvider : public cUPnPResourceProvider { return false; } - virtual long GetContainerUpdateId(const string& uri){ + virtual long GetContainerUpdateId(const string&){ // TODO: provide a container update id - return 0; + return lastUpdateID; } virtual bool GetMetadata(const string& uri, cMetadata& metadata){ @@ -74,7 +84,17 @@ class VdrProvider : public cUPnPResourceProvider { return string(); } - return string(); + int port = 3000; + + stringstream ss; + + ss << "http://" << currentIP << ":" << port << "/TS/" << uri.substr(6); + + return ss.str(); + } + + virtual void Action(){ + } }; |