diff options
-rw-r--r-- | httptnt/resourceStreamer.ecpp | 50 | ||||
-rw-r--r-- | media/mediaManager.cpp | 49 | ||||
-rw-r--r-- | plugins/provider/recProvider/recProvider.cpp | 2 |
3 files changed, 51 insertions, 50 deletions
diff --git a/httptnt/resourceStreamer.ecpp b/httptnt/resourceStreamer.ecpp index f064c49..9fddecc 100644 --- a/httptnt/resourceStreamer.ecpp +++ b/httptnt/resourceStreamer.ecpp @@ -64,11 +64,11 @@ int doRequest(tnt::HttpReply reply, tnt::HttpRequest request, std::string object length = to - from; hasRange = true; - if(request.isMethodHEAD()){ - std::stringstream contentRangeHeader; - contentRangeHeader << "bytes " << from << "-" << to << "/" << contentLength; - reply.setHeader("Content-Range ", contentRangeHeader.str()); - } + std::stringstream contentRangeHeader; + contentRangeHeader << "bytes " << from << "-" << to << "/" << contentLength; + reply.setHeader("Content-Range ", contentRangeHeader.str()); + reply.setContentLengthHeader(length); + } } } @@ -76,46 +76,28 @@ int doRequest(tnt::HttpReply reply, tnt::HttpRequest request, std::string object } if(!request.isMethodHEAD()){ - if(!streamer->Open()){ code = HTTP_INTERNAL_SERVER_ERROR; goto ret; } - ssize_t bytesRead = 0; - if(hasRange && streamer->Seekable() && contentLength > 0){ - if(!streamer->Seek(from, SEEK_SET)){ code = HTTP_INTERNAL_SERVER_ERROR; goto close; } + code = HTTP_PARTIAL_CONTENT; + } - if(length > MB(1)) length = MB(1); - - char buffer[length]; - if((bytesRead = streamer->Read(buffer, length)) > 0){ - std::stringstream ss; - ss << "bytes " << from << "-" << from + bytesRead << "/" << contentLength; - reply.setHeader("Content-Range ", ss.str()); - reply.setContentLengthHeader(bytesRead); - code = HTTP_PARTIAL_CONTENT; - reply.out().write(buffer, bytesRead); - if (!reply.out()) { - code = HTTP_GONE; - goto close; - } - } - - } else { - reply.setDirectMode(); - char buffer[KB(20)]; - while ((bytesRead = streamer->Read(buffer, KB(20))) > 0) { - reply.out().write(buffer, bytesRead); - if (!reply.out()) { - code = HTTP_GONE; - goto close; - } + reply.setDirectMode(code); + + ssize_t bytesRead = 0; + char buffer[KB(20)]; + while ((bytesRead = streamer->Read(buffer, KB(20))) > 0) { + reply.out().write(buffer, bytesRead); + if (!reply.out()) { + code = HTTP_GONE; + goto close; } } } else { diff --git a/media/mediaManager.cpp b/media/mediaManager.cpp index 25e44f1..18f8255 100644 --- a/media/mediaManager.cpp +++ b/media/mediaManager.cpp @@ -797,26 +797,45 @@ bool cMediaManager::RefreshObject(cMetadata& metadata){ connection.beginTransaction(); - ss << "INSERT OR REPLACE INTO " << db::Metadata << " (" + ss << "INSERT OR IGNORE INTO " << db::Metadata << " (" << "`" << property::object::KEY_OBJECTID << "`," << "`" << property::object::KEY_PARENTID << "`," << "`" << property::object::KEY_TITLE << "`," << "`" << property::object::KEY_CLASS << "`," - << "`" << property::object::KEY_RESTRICTED << "`," - << "`" << property::object::KEY_CREATOR << "`," - << "`" << property::object::KEY_DESCRIPTION << "`," - << "`" << property::object::KEY_LONG_DESCRIPTION << "`," - << "`" << property::object::KEY_DATE << "`," - << "`" << property::object::KEY_LANGUAGE << "`," - << "`" << property::object::KEY_CHANNEL_NR << "`," - << "`" << property::object::KEY_CHANNEL_NAME << "`," - << "`" << property::object::KEY_SCHEDULED_START << "`," - << "`" << property::object::KEY_SCHEDULED_END << "`" + << "`" << property::object::KEY_RESTRICTED << "`" << ") VALUES (" - << ":objectID, :parentID, :title, :class, :restricted," - << ":creator, :description, :longDescription, :date," - << ":language, :channelNr, :channelName, :start, :end" - << ")"; + << ":objectID, :parentID, :title, :class, :restricted" + << "); "; + + tntdb::Statement insert = connection.prepare(ss.str()); + + insert.setString("objectID", objectID) + .setString("parentID", metadata.GetPropertyByKey(property::object::KEY_PARENTID).GetString()) + .setString("title", metadata.GetPropertyByKey(property::object::KEY_TITLE).GetString()) + .setString("class", metadata.GetPropertyByKey(property::object::KEY_CLASS).GetString()) + .setBool ("restricted", metadata.GetPropertyByKey(property::object::KEY_RESTRICTED).GetBoolean()) + .execute(); + + ss.str(string()); + + ss << "UPDATE " << db::Metadata << " SET " + << "`" << property::object::KEY_OBJECTID << "` = :objectID," + << "`" << property::object::KEY_PARENTID << "` = :parentID," + << "`" << property::object::KEY_TITLE << "` = :title," + << "`" << property::object::KEY_CLASS << "` = :class," + << "`" << property::object::KEY_RESTRICTED << "` = :restricted," + << "`" << property::object::KEY_CREATOR << "` = :creator," + << "`" << property::object::KEY_DESCRIPTION << "` = :description," + << "`" << property::object::KEY_LONG_DESCRIPTION << "` = :longDescription," + << "`" << property::object::KEY_DATE << "` = :date," + << "`" << property::object::KEY_LANGUAGE << "` = :language," + << "`" << property::object::KEY_CHANNEL_NR << "` = :channelNr," + << "`" << property::object::KEY_CHANNEL_NAME << "` = :channelName," + << "`" << property::object::KEY_SCHEDULED_START << "` = :start," + << "`" << property::object::KEY_SCHEDULED_END << "` = :end" + << " WHERE " + << "`" << property::object::KEY_OBJECTID << "` = :objectID" + << ";"; tntdb::Statement object = connection.prepare(ss.str()); diff --git a/plugins/provider/recProvider/recProvider.cpp b/plugins/provider/recProvider/recProvider.cpp index c7e5b1e..f2e0fa0 100644 --- a/plugins/provider/recProvider/recProvider.cpp +++ b/plugins/provider/recProvider/recProvider.cpp @@ -257,7 +257,7 @@ public: if(Recordings.NeedsUpdate() || Recordings.StateChanged(state)){ OnContainerUpdate(GetRootContainer(), GetContainerUpdateId(GetRootContainer())); } - sleep(10); + sleep(100); } } |