diff options
-rw-r--r-- | common.h | 2 | ||||
-rw-r--r-- | database/database.h | 2 | ||||
-rw-r--r-- | database/metadata.cpp | 37 | ||||
-rw-r--r-- | database/resources.cpp | 6 | ||||
-rw-r--r-- | server/server.cpp | 4 | ||||
-rw-r--r-- | upnpcomponents/dlna.cpp | 1 | ||||
-rw-r--r-- | upnpcomponents/upnpwebserver.cpp | 15 | ||||
-rw-r--r-- | upnpcomponents/upnpwebserver.h | 2 |
8 files changed, 57 insertions, 12 deletions
@@ -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(); //}; |