summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common.h2
-rw-r--r--database/database.h2
-rw-r--r--database/metadata.cpp37
-rw-r--r--database/resources.cpp6
-rw-r--r--server/server.cpp4
-rw-r--r--upnpcomponents/dlna.cpp1
-rw-r--r--upnpcomponents/upnpwebserver.cpp15
-rw-r--r--upnpcomponents/upnpwebserver.h2
8 files changed, 57 insertions, 12 deletions
diff --git a/common.h b/common.h
index 191dd3a..6d7177a 100644
--- a/common.h
+++ b/common.h
@@ -262,6 +262,8 @@ enum UPNP_RESOURCE_TYPES {
*
****************************************************/
+#define UPNP_WEB_MAX_FILE_HANDLES 512
+
#define UPNP_WEB_PRESENTATION_URL "/index.html"
#define UPNP_WEB_SERVER_ROOT_DIR UPNP_DIR_PRESENTATION
diff --git a/database/database.h b/database/database.h
index fe91f2b..9df2c71 100644
--- a/database/database.h
+++ b/database/database.h
@@ -20,7 +20,7 @@
#define PK_RESOURCES TOSTRING(2)
#define PK_SEARCHCLASSES TOSTRING(3)
-#define SQLITE_FIRST_CUSTOMID TOSTRING(0)
+#define SQLITE_FIRST_CUSTOMID TOSTRING(100)
#define SQLITE_COLUMN_NAME_LENGTH 64
diff --git a/database/metadata.cpp b/database/metadata.cpp
index ac19118..75adf98 100644
--- a/database/metadata.cpp
+++ b/database/metadata.cpp
@@ -186,16 +186,27 @@ int cMediaDatabase::prepareDatabase(){
Radio->addSearchClass(AudioBCClass);
Radio->setSearchable(true);
if(this->mFactory->saveObject(Radio)) return -1;
+
+ cUPnPClassContainer* CustomVideos = (cUPnPClassContainer*)this->mFactory->createObject(UPNP_CLASS_CONTAINER, _("User videos"));
+ CustomVideos->setID(6);
+ Video->addObject(CustomVideos);
+ CustomVideos->addSearchClass(VideoClass);
+ CustomVideos->setSearchable(true);
+ if(this->mFactory->saveObject(CustomVideos)) return -1;
}
return 0;
}
int cMediaDatabase::loadChannels(){
- MESSAGE("Loading channels from Database");
+ MESSAGE("Loading channels");
cUPnPClassContainer* TV = (cUPnPClassContainer*)this->getObjectByID(3);
if(TV){
// Iterating channels
cList<cUPnPClassObject>* List = TV->getObjectList();
+ bool noResource = false;
+ // TODO: Add to setup
+ // if an error occured while loading resources, add the channel anyway
+ bool addWithoutResources = false;
for(cChannel* Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)){
bool inList = false;
for(cUPnPClassVideoBroadcast* Child = (cUPnPClassVideoBroadcast*)List->First();
@@ -205,6 +216,7 @@ int cMediaDatabase::loadChannels(){
}
if(!inList){
if(!Channel->GroupSep()){
+ noResource = false;
tChannelID ChannelID = Channel->GetChannelID();
MESSAGE("Adding channel '%s' ID:%s", Channel->Name(), *ChannelID.ToString());
cUPnPClassVideoBroadcast* ChannelItem;
@@ -215,9 +227,14 @@ int cMediaDatabase::loadChannels(){
if(Channel->Alang(0)){
ChannelItem->setLanguage(Channel->Alang(0));
}
- cUPnPResources::getInstance()->createFromChannel(ChannelItem, Channel);
- TV->addObject(ChannelItem);
- if(this->mFactory->saveObject(ChannelItem)) return -1;
+ if(cUPnPResources::getInstance()->createFromChannel(ChannelItem, Channel)){
+ ERROR("Unable to get resources for this channel");
+ noResource = true;
+ }
+ if(noResource && addWithoutResources) {
+ TV->addObject(ChannelItem);
+ if(this->mFactory->saveObject(ChannelItem)) return -1;
+ }
}
else {
MESSAGE("Skipping group '%s'", Channel->Name());
@@ -234,6 +251,18 @@ int cMediaDatabase::loadChannels(){
return 0;
}
+//int cMediaDatabase::loadRecordings(){
+// MESSAGE("Loading recordings");
+// cUPnPClassContainer* Records = (cUPnPClassContainer*)this->getObjectByID(4);
+// if(Records){
+// // Iterating channels
+// cList<cUPnPClassObject>* List = Records->getObjectList();
+// for(cRecording* Record = Recordings.First(); Record; Record = Recordings.Next(Record)){
+//
+// }
+// }
+//}
+
void cMediaDatabase::Action(){
time_t LastEPGUpdate = 0;
while(this->Running()){
diff --git a/database/resources.cpp b/database/resources.cpp
index f681a54..df2b354 100644
--- a/database/resources.cpp
+++ b/database/resources.cpp
@@ -101,6 +101,12 @@ int cUPnPResources::createFromChannel(cUPnPClassVideoBroadcast* Object, cChannel
}
DLNAProfile* Profile = cDlna::getInstance()->getProfileOfChannel(Channel);
+
+ if(!Profile){
+ ERROR("No profile found for Channel %s", *Channel->GetChannelID().ToString());
+ return -1;
+ }
+
const char* ProtocolInfo = cDlna::getInstance()->getProtocolInfo(Profile);
MESSAGE("Protocol info: %s", ProtocolInfo);
diff --git a/server/server.cpp b/server/server.cpp
index 56afcaa..feebcb1 100644
--- a/server/server.cpp
+++ b/server/server.cpp
@@ -186,6 +186,10 @@ bool cUPnPServer::uninit(void) {
MESSAGE("Closing metadata database");
delete this->mMediaDatabase; this->mMediaDatabase = NULL;
+ MESSAGE("Closing the web server");
+ this->mWebServer->uninit();
+ delete this->mWebServer;
+
MESSAGE("Close Intel SDK");
// unregiser media server device from UPnP SDK
int ret = UpnpUnRegisterRootDevice(this->mDeviceHandle);
diff --git a/upnpcomponents/dlna.cpp b/upnpcomponents/dlna.cpp
index a68c6db..1d57d0e 100644
--- a/upnpcomponents/dlna.cpp
+++ b/upnpcomponents/dlna.cpp
@@ -72,6 +72,7 @@ DLNAProfile* cDlna::getProfileOfChannel(cChannel* Channel){
// Switching the video types of the DVB-Stream
switch(Channel->Vtype()){
case 0x02:
+ // MPEG2 Video
return &DLNA_PROFILE_MPEG2_TS_SD_EU;
case 0x1B:
return &DLNA_PROFILE_AVC_TS_HD_EU;
diff --git a/upnpcomponents/upnpwebserver.cpp b/upnpcomponents/upnpwebserver.cpp
index 9be3d6a..77572f5 100644
--- a/upnpcomponents/upnpwebserver.cpp
+++ b/upnpcomponents/upnpwebserver.cpp
@@ -95,7 +95,7 @@ cUPnPWebServer::cUPnPWebServer(const char* root) : mRootdir(root) {
}
cUPnPWebServer::~cUPnPWebServer(){
- delete this->mRootdir;
+ delete [] this->mRootdir;
}
cUPnPWebServer* cUPnPWebServer::mInstance = NULL;
@@ -136,6 +136,13 @@ bool cUPnPWebServer::init(){
return true;
}
+bool cUPnPWebServer::uninit(){
+ MESSAGE("Disabling the internal webserver");
+ UpnpEnableWebserver(FALSE);
+
+ MESSAGE("Closing open file transfers");
+}
+
cUPnPWebServer* cUPnPWebServer::getInstance(const char* rootdir){
if(cUPnPWebServer::mInstance == NULL)
cUPnPWebServer::mInstance = new cUPnPWebServer(rootdir);
@@ -146,10 +153,6 @@ cUPnPWebServer* cUPnPWebServer::getInstance(const char* rootdir){
else return NULL;
}
-void cUPnPWebServer::free(){
- delete cUPnPWebServer::mInstance;
-}
-
int cUPnPWebServer::getInfo(const char* filename, File_Info* info){
MESSAGE("Getting information of file '%s'", filename);
@@ -332,4 +335,4 @@ int cUPnPWebServer::close(UpnpWebFileHandle fh){
delete FileHandle->FileHandle;
delete FileHandle;
return 0;
-}
+} \ No newline at end of file
diff --git a/upnpcomponents/upnpwebserver.h b/upnpcomponents/upnpwebserver.h
index 55ef260..613f97b 100644
--- a/upnpcomponents/upnpwebserver.h
+++ b/upnpcomponents/upnpwebserver.h
@@ -20,9 +20,9 @@ private:
cUPnPWebServer(const char* root = "/");
protected:
bool enable(bool enable);
- static void free();
public:
bool init();
+ bool uninit();
static cUPnPWebServer* getInstance(const char* rootdir = "/");
virtual ~cUPnPWebServer();
//};