mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-08-02 23:47:49 +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