mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-08-03 16:07:51 +00:00
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
This commit is contained in:
parent
09db49f6a6
commit
e75c3ac988
@ -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 <stdexcept>
|
|
||||||
#include <vdr/tools.h>
|
|
||||||
#include <tnt/tntnet.h>
|
|
||||||
+#include <tnt/tntconfig.h>
|
|
||||||
#include "thread.h"
|
|
||||||
#include "tntconfig.h"
|
|
||||||
|
|
290
packages/3rdparty/multimedia/vdr-live/patches/vdr-live-0.3.0-04_tntnet-2.2-1.patch
vendored
Normal file
290
packages/3rdparty/multimedia/vdr-live/patches/vdr-live-0.3.0-04_tntnet-2.2-1.patch
vendored
Normal file
@ -0,0 +1,290 @@
|
|||||||
|
commit 042724e30d5690ab67a6c04aea48a16b9a3b085b
|
||||||
|
Author: Dieter Hametner <dh (plus) vdr (at) gekrumbel (dot) de>
|
||||||
|
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 <fstream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <stdexcept>
|
||||||
|
+#include "tntfeatures.h"
|
||||||
|
+#if TNT_LOG_SERINFO
|
||||||
|
+#include <cxxtools/log.h>
|
||||||
|
+#include <cxxtools/xml/xmldeserializer.h>
|
||||||
|
+#else
|
||||||
|
#include <cxxtools/loginit.h>
|
||||||
|
+#endif
|
||||||
|
#include <tnt/sessionscope.h>
|
||||||
|
#include <tnt/httpreply.h>
|
||||||
|
#include <vdr/config.h>
|
||||||
|
@@ -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(
|
||||||
|
+ "<logging>\n"
|
||||||
|
+ " <rootlogger>" + LiveSetup().GetTntnetLogLevel() + "</rootlogger>\n"
|
||||||
|
+ " <loggers>\n"
|
||||||
|
+ " <logger>\n"
|
||||||
|
+ " <category>cxxtools</category>\n"
|
||||||
|
+ " <level>" + LiveSetup().GetTntnetLogLevel() + "</level>\n"
|
||||||
|
+ " </logger>\n"
|
||||||
|
+ " <logger>\n"
|
||||||
|
+ " <category>tntnet</category>\n"
|
||||||
|
+ " <level>" + LiveSetup().GetTntnetLogLevel() + "</level>\n"
|
||||||
|
+ " </logger>\n"
|
||||||
|
+ " </loggers>\n"
|
||||||
|
+ "</logging>\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/<imgname>.<ext>
|
||||||
|
// deprecated: 3. <imgname>.<ext> (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
|
25
packages/3rdparty/multimedia/vdr-live/patches/vdr-live-0.3.0-04_tntnet-2.2-2.patch
vendored
Normal file
25
packages/3rdparty/multimedia/vdr-live/patches/vdr-live-0.3.0-04_tntnet-2.2-2.patch
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
commit 69f84f95fa875c6f562294b1a6a1ea6f584d3f6c
|
||||||
|
Author: Dieter Hametner <dh (plus) vdr (at) gekrumbel (dot) de>
|
||||||
|
Date: Sat May 4 22:27:09 2013 +0200
|
||||||
|
|
||||||
|
With tntnet v2.2 use also the request.getArg(<name>) 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);
|
Loading…
x
Reference in New Issue
Block a user