From e75c3ac988af13fe9c3c12deacce5e47c4943a05 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Sun, 6 Oct 2013 14:43:07 +0300 Subject: [PATCH] vdr-live: fix build with tntnet-2.2 this is my last contribution to vdr-live/tntnet/cxxtools if it is still broken, feel free to revert or fix it --- .../vdr-live-0.2.0-04_tntnet-2.0.patch | 12 - .../vdr-live-0.3.0-04_tntnet-2.2-1.patch | 290 ++++++++++++++++++ .../vdr-live-0.3.0-04_tntnet-2.2-2.patch | 25 ++ 3 files changed, 315 insertions(+), 12 deletions(-) delete mode 100644 packages/3rdparty/multimedia/vdr-live/patches/vdr-live-0.2.0-04_tntnet-2.0.patch create mode 100644 packages/3rdparty/multimedia/vdr-live/patches/vdr-live-0.3.0-04_tntnet-2.2-1.patch create mode 100644 packages/3rdparty/multimedia/vdr-live/patches/vdr-live-0.3.0-04_tntnet-2.2-2.patch diff --git a/packages/3rdparty/multimedia/vdr-live/patches/vdr-live-0.2.0-04_tntnet-2.0.patch b/packages/3rdparty/multimedia/vdr-live/patches/vdr-live-0.2.0-04_tntnet-2.0.patch deleted file mode 100644 index add77c9476..0000000000 --- a/packages/3rdparty/multimedia/vdr-live/patches/vdr-live-0.2.0-04_tntnet-2.0.patch +++ /dev/null @@ -1,12 +0,0 @@ -Index: vdr-plugin-live-0.2.0/thread.cpp -=================================================================== ---- vdr-plugin-live-0.2.0.orig/thread.cpp 2011-08-25 21:58:33.000000000 +0200 -+++ vdr-plugin-live-0.2.0/thread.cpp 2011-08-25 21:58:37.000000000 +0200 -@@ -3,6 +3,7 @@ - #include - #include - #include -+#include - #include "thread.h" - #include "tntconfig.h" - diff --git a/packages/3rdparty/multimedia/vdr-live/patches/vdr-live-0.3.0-04_tntnet-2.2-1.patch b/packages/3rdparty/multimedia/vdr-live/patches/vdr-live-0.3.0-04_tntnet-2.2-1.patch new file mode 100644 index 0000000000..35d1c5a11a --- /dev/null +++ b/packages/3rdparty/multimedia/vdr-live/patches/vdr-live-0.3.0-04_tntnet-2.2-1.patch @@ -0,0 +1,290 @@ +commit 042724e30d5690ab67a6c04aea48a16b9a3b085b +Author: Dieter Hametner +Date: Fri May 3 01:37:41 2013 +0200 + + Make LIVE compile and work with Tntnet and cxxtools version 2.2. + Thanks to Tommi Mäkitalo for his help on resolving the issues. + This problem was reported by Martin Gansser and by the user 'varas' in + the bugtracker as bug #1351. This commit fixes that bug. + +diff --git a/pages/recordings.ecpp b/pages/recordings.ecpp +index 51018bb..80f145b 100644 +--- a/pages/recordings.ecpp ++++ b/pages/recordings.ecpp +@@ -205,7 +205,11 @@ for (recIter = recItems.begin(); recIter != recItems.end(); ++recIter) { + <& rec_item_dir name=(recItem->Name()) level=(level) &> + <%cpp> + #if TNT_HAS_QUERYPARAMS ++#if TNT_QUERYPARAMS_NO_BOOL ++ tnt::QueryParams recItemParams(qparam); ++#else + tnt::QueryParams recItemParams(qparam, false); ++#endif + #else + cxxtools::QueryParams recItemParams(qparam, false); + #endif +diff --git a/tntconfig.cpp b/tntconfig.cpp +index 3a1fd14..3325776 100644 +--- a/tntconfig.cpp ++++ b/tntconfig.cpp +@@ -3,7 +3,13 @@ + #include + #include + #include ++#include "tntfeatures.h" ++#if TNT_LOG_SERINFO ++#include ++#include ++#else + #include ++#endif + #include + #include + #include +@@ -181,19 +187,67 @@ namespace vdrlive { + #endif + + #if TNT_CONFIG_INTERNAL ++ namespace { ++ std::string GetResourcePath() ++ { ++#if APIVERSNUM > 10729 ++ string resourceDir(Plugin::GetResourceDirectory()); ++ return resourceDir; ++#else ++ string configDir(Plugin::GetConfigDirectory()); ++ return configDir; ++#endif ++ } ++ ++ void MapUrl(tnt::Tntnet & app, const char *rule, const char * component, std::string const & instPath, const char * pathInfo, const char * mime_type) ++ { ++#if TNT_MAPURL_NAMED_ARGS ++ tnt::Mapping::args_type argMap; ++ argMap.insert(std::make_pair("mime-type", mime_type)); ++#endif ++ app.mapUrl(rule, component) ++ .setPathInfo(instPath + pathInfo) ++#if TNT_MAPURL_NAMED_ARGS ++ .setArgs(argMap); ++#else ++ .pushArg(mime_type); ++#endif ++ } ++ } ++ + void TntConfig::Configure(tnt::Tntnet& app) const + { + string const configDir(Plugin::GetConfigDirectory()); +-#if APIVERSNUM > 10729 +- string const resourceDir(Plugin::GetResourceDirectory()); +-#endif + ++#if TNT_LOG_SERINFO ++ cxxtools::SerializationInfo si; ++ std::istringstream logXmlConf( ++ "\n" ++ " " + LiveSetup().GetTntnetLogLevel() + "\n" ++ " \n" ++ " \n" ++ " cxxtools\n" ++ " " + LiveSetup().GetTntnetLogLevel() + "\n" ++ " \n" ++ " \n" ++ " tntnet\n" ++ " " + LiveSetup().GetTntnetLogLevel() + "\n" ++ " \n" ++ " \n" ++ "\n" ++ ); ++ cxxtools::xml::XmlDeserializer d(logXmlConf); ++ d.deserialize(si); ++ log_init(si); ++#else + std::istringstream logConf( + "rootLogger=" + LiveSetup().GetTntnetLogLevel() + "\n" + "logger.tntnet=" + LiveSetup().GetTntnetLogLevel() + "\n" + "logger.cxxtools=" + LiveSetup().GetTntnetLogLevel() + "\n" + ); ++ + log_init(logConf); ++#endif + + // +++ CAUTION +++ CAUTION +++ CAUTION +++ CAUTION +++ CAUTION +++ + // ------------------------------------------------------------------------ +@@ -229,13 +283,12 @@ namespace vdrlive { + + // the following selects the theme specific 'theme.css' file + // inserted by 'tadi' -- verified with above, but not counterchecked yet! +- app.mapUrl("^/themes/([^/]*)/css.*/(.+\\.css)", "content") +-#if APIVERSNUM > 10729 +- .setPathInfo(resourceDir + "/themes/$1/css/$2") +-#else +- .setPathInfo(configDir + "/themes/$1/css/$2") +-#endif +- .pushArg("text/css"); ++ MapUrl(app, ++ "^/themes/([^/]*)/css.*/(.+\\.css)", ++ "content", ++ GetResourcePath(), ++ "/themes/$1/css/$2", ++ "text/css"); + + // the following rules provide a search scheme for images. The first + // rule where a image is found, terminates the search. +@@ -243,79 +296,82 @@ namespace vdrlive { + // 2. /img/. + // deprecated: 3. . (builtin images) + // inserted by 'tadi' -- verified with above, but not counterchecked yet! +- app.mapUrl("^/themes/([^/]*)/img.*/(.+)\\.(.+)", "content") +-#if APIVERSNUM > 10729 +- .setPathInfo(resourceDir + "/themes/$1/img/$2.$3") +-#else +- .setPathInfo(configDir + "/themes/$1/img/$2.$3") +-#endif +- .pushArg("image/$3"); +- app.mapUrl("^/themes/([^/]*)/img.*/(.+)\\.(.+)", "content") +-#if APIVERSNUM > 10729 +- .setPathInfo(resourceDir + "/img/$2.$3") +-#else +- .setPathInfo(configDir + "/img/$2.$3") +-#endif +- .pushArg("image/$3"); ++ MapUrl(app, ++ "^/themes/([^/]*)/img.*/(.+)\\.(.+)", ++ "content", ++ GetResourcePath(), ++ "/themes/$1/img/$2.$3", ++ "image/$3"); ++ ++ MapUrl(app, ++ "^/themes/([^/]*)/img.*/(.+)\\.(.+)", ++ "content", ++ GetResourcePath(), ++ "/img/$2.$3", ++ "image/$3"); + // deprecated: file << "MapUrl ^/themes/([^/]*)/img.*/(.+)\\.(.+) $2@" << endl; + + // Epg images + string const epgImgPath(LiveSetup().GetEpgImageDir()); + if (!epgImgPath.empty()) { + // inserted by 'tadi' -- verified with above, but not counterchecked yet! +- app.mapUrl("^/epgimages/([^/]*)\\.([^./]+)", "content") +- .setPathInfo(epgImgPath + "/$1.$2") +- .pushArg("image/$2"); ++ MapUrl(app, ++ "^/epgimages/([^/]*)\\.([^./]+)", ++ "content", ++ epgImgPath, ++ "/$1.$2", ++ "image/$2"); + } + + // select additional (not build in) javascript. + // WARNING: no path components with '.' in the name are allowed. Only + // the basename may contain dots and must end with '.js' + // inserted by 'tadi' -- verified with above, but not counterchecked yet! +- app.mapUrl("^/js(/[^.]*)([^/]*\\.js)", "content") +-#if APIVERSNUM > 10729 +- .setPathInfo(resourceDir + "/js$1$2") +-#else +- .setPathInfo(configDir + "/js$1$2") +-#endif +- .pushArg("text/javascript"); ++ MapUrl(app, ++ "^/js(/[^.]*)([^/]*\\.js)", ++ "content", ++ GetResourcePath(), ++ "/js$1$2", ++ "text/javascript"); + + // map to 'css/basename(uri)' + // inserted by 'tadi' -- verified with above, but not counterchecked yet! +- app.mapUrl("^/css.*/(.+)", "content") +-#if APIVERSNUM > 10729 +- .setPathInfo(resourceDir + "/css/$1") +-#else +- .setPathInfo(configDir + "/css/$1") +-#endif +- .pushArg("text/css"); ++ MapUrl(app, ++ "^/css.*/(.+)", ++ "content", ++ GetResourcePath(), ++ "/css/$1", ++ "text/css"); + + // map to 'img/basename(uri)' + // inserted by 'tadi' -- verified with above, but not counterchecked yet! +- app.mapUrl("^/img.*/(.+)\\.([^.]+)", "content") +-#if APIVERSNUM > 10729 +- .setPathInfo(resourceDir + "/img/$1.$2") +-#else +- .setPathInfo(configDir + "/img/$1.$2") +-#endif +- .pushArg("image/$2"); ++ MapUrl(app, ++ "^/img.*/(.+)\\.([^.]+)", ++ "content", ++ GetResourcePath(), ++ "/img/$1.$2", ++ "image/$2"); + + // Map favicon.ico into img directory +- app.mapUrl("^/favicon.ico$", "content") +-#if APIVERSNUM > 10729 +- .setPathInfo(resourceDir + "/img/favicon.ico") +-#else +- .setPathInfo(configDir + "/img/favicon.ico") +-#endif +- .pushArg("image/x-icon"); ++ MapUrl(app, ++ "^/favicon.ico$", ++ "content", ++ GetResourcePath(), ++ "/img/favicon.ico", ++ "image/x-icon"); + + // takes first path components without 'extension' when it does not + // contain '.' + // modified by 'tadi' -- verified with above, but not counterchecked yet! + app.mapUrl("^/([^./]+)(.*)?", "$1"); + ++#if TNT_GLOBAL_TNTCONFIG ++ tnt::TntConfig::it().sessionTimeout = 86400; ++ tnt::TntConfig::it().defaultContentType = string("text/html; charset=") + LiveI18n().CharacterEncoding(); ++#else + tnt::Sessionscope::setDefaultTimeout(86400); + tnt::HttpReply::setDefaultContentType(string("text/html; charset=") + LiveI18n().CharacterEncoding()); ++#endif + + Setup::IpList const& ips = LiveSetup().GetServerIps(); + int port = LiveSetup().GetServerPort(); +diff --git a/tntfeatures.h b/tntfeatures.h +index 6de1f88..76d3757 100644 +--- a/tntfeatures.h ++++ b/tntfeatures.h +@@ -17,6 +17,9 @@ + // Query params are now in tntnet and not in cxxtools + #define TNT_HAS_QUERYPARAMS (TNTVERSION >= 16060) + ++// Query params without boolean parameter ++#define TNT_QUERYPARAMS_NO_BOOL (TNTVERSION >= 22000) ++ + // One can request the host part of the request url + #define TNT_HAS_GETHOST (TNTVERSION >= 16060) + +@@ -26,4 +29,13 @@ + // version of TNTNET that binds ipv6 addresses with IPV6_V6ONLY flag set to true + #define TNT_IPV6_V6ONLY (CXXTOOLVER >= 21000) + ++// version of TNTNET with properties deserializer for logger configuration args. ++#define TNT_LOG_SERINFO (CXXTOOLVER >= 22000) ++ ++// version of TNTNET wich expects name, value mappings for Url-Mapper arguments. ++#define TNT_MAPURL_NAMED_ARGS (TNTVERSION >= 22000) ++ ++// version of TNTNET where configuration is global ++#define TNT_GLOBAL_TNTCONFIG (TNTVERSION >= 22000) ++ + #endif // VDR_LIVE_TNTFEATURES_H diff --git a/packages/3rdparty/multimedia/vdr-live/patches/vdr-live-0.3.0-04_tntnet-2.2-2.patch b/packages/3rdparty/multimedia/vdr-live/patches/vdr-live-0.3.0-04_tntnet-2.2-2.patch new file mode 100644 index 0000000000..3b49c6b0a3 --- /dev/null +++ b/packages/3rdparty/multimedia/vdr-live/patches/vdr-live-0.3.0-04_tntnet-2.2-2.patch @@ -0,0 +1,25 @@ +commit 69f84f95fa875c6f562294b1a6a1ea6f584d3f6c +Author: Dieter Hametner +Date: Sat May 4 22:27:09 2013 +0200 + + With tntnet v2.2 use also the request.getArg() function. + In the previous commit support for tntnet 2.2 was added. The URL + mapping changed in that version and allows now named arguments. This + change makes uses of this feature now. + +diff --git a/pages/content.ecpp b/pages/content.ecpp +index 27d827c..cde092f 100644 +--- a/pages/content.ecpp ++++ b/pages/content.ecpp +@@ -17,7 +17,11 @@ bool logged_in(false); + + string mime("image/png"); + if (request.getArgsCount() > 0) { ++#if TNT_MAPURL_NAMED_ARGS ++ mime = request.getArg("mime-type"); ++#else + mime = request.getArg(0); ++#endif + // dsyslog("vdrlive::content found mime arg (%s)", mime.c_str()); + } + reply.setContentType(mime);