summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/plugin.h2
-rw-r--r--media/mediaManager.cpp4
-rw-r--r--media/pluginManager.cpp7
-rw-r--r--plugins/provider/vdrProvider/vdrProvider.cpp28
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(){
+
}
};