summaryrefslogtreecommitdiff
path: root/tools.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools.c')
-rw-r--r--tools.c151
1 files changed, 151 insertions, 0 deletions
diff --git a/tools.c b/tools.c
new file mode 100644
index 0000000..1219c91
--- /dev/null
+++ b/tools.c
@@ -0,0 +1,151 @@
+/*
+ * tools.c: The 'EnigmaNG' VDR skin
+ *
+ * See the README file for copyright information and how to reach the author.
+ *
+ */
+
+#include <sstream>
+
+#ifndef __STL_CONFIG_H
+#define __STL_CONFIG_H
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include "common.h"
+#include "tools.h"
+
+using namespace std;
+
+#define AUX_HEADER_EPGSEARCH "EPGSearch: "
+#define AUX_TAGS_EPGSEARCH_START "<epgsearch>"
+#define AUX_TAGS_EPGSEARCH_ITEM1_START "<Channel>"
+#define AUX_TAGS_EPGSEARCH_ITEM1_END "</Channel>"
+#define AUX_TAGS_EPGSEARCH_ITEM2_START "<Search timer>"
+#define AUX_TAGS_EPGSEARCH_ITEM2_END "</Search timer>"
+#define AUX_TAGS_EPGSEARCH_END "</epgsearch>"
+
+#define AUX_HEADER_VDRADMIN "VDRAdmin-AM: "
+#define AUX_TAGS_VDRADMIN_START "<vdradmin-am>"
+#define AUX_TAGS_VDRADMIN_ITEM1_START "<pattern>"
+#define AUX_TAGS_VDRADMIN_ITEM1_END "</pattern>"
+#define AUX_TAGS_VDRADMIN_END "</vdradmin-am>"
+
+#define AUX_HEADER_PIN "Protected: "
+#define AUX_TAGS_PIN_START "<pin-plugin>"
+#define AUX_TAGS_PIN_ITEM1_START "<protected>"
+#define AUX_TAGS_PIN_ITEM1_END "</protected>"
+#define AUX_TAGS_PIN_END "</pin-plugin>"
+
+const char *parseaux(const char *aux)
+{
+ bool founditem = false;
+ stringstream sstrReturn;
+ char *start, *end;
+ // check if egpsearch
+ start = strcasestr(aux, AUX_TAGS_EPGSEARCH_START);
+ end = strcasestr(aux, AUX_TAGS_EPGSEARCH_END);
+ if (start && end) {
+ // add header
+ sstrReturn << AUX_HEADER_EPGSEARCH;
+ // parse first item
+ char *tmp;
+ if ((tmp = strcasestr(start, AUX_TAGS_EPGSEARCH_ITEM1_START)) != NULL) {
+ if (tmp < end) {
+ tmp += strlen(AUX_TAGS_EPGSEARCH_ITEM1_START);
+ char *tmp2;
+ if ((tmp2 = strcasestr(tmp, AUX_TAGS_EPGSEARCH_ITEM1_END)) != NULL) {
+ // add channel
+ sstrReturn << string(tmp, tmp2 - tmp);
+ founditem = true;
+ } else {
+ founditem = false;
+ }
+ }
+ }
+ // parse second item
+ if ((tmp = strcasestr(start, "<Search timer>")) != NULL) {
+ if (tmp < end) {
+ tmp += strlen(AUX_TAGS_EPGSEARCH_ITEM2_START);
+ char *tmp2;
+ if ((tmp2 = strcasestr(tmp, AUX_TAGS_EPGSEARCH_ITEM2_END)) != NULL) {
+ // add separator
+ if (founditem) {
+ sstrReturn << ", ";
+ }
+ // add search item
+ sstrReturn << string(tmp, tmp2 - tmp);
+ founditem = true;
+ } else {
+ founditem = false;
+ }
+ }
+ }
+ // use old syntax
+ if (!founditem) {
+ start += strlen(AUX_HEADER_EPGSEARCH);
+ sstrReturn << string(start, end - start);
+ }
+ sstrReturn << endl;
+ }
+ // check if VDRAdmin-AM
+ start = strcasestr(aux, AUX_TAGS_VDRADMIN_START);
+ end = strcasestr(aux, AUX_TAGS_VDRADMIN_END);
+ if (start && end) {
+ // add header
+ sstrReturn << AUX_HEADER_VDRADMIN;
+ // parse first item
+ char *tmp;
+ if ((tmp = strcasestr(start, AUX_TAGS_VDRADMIN_ITEM1_START)) != NULL) {
+ if (tmp < end) {
+ tmp += strlen(AUX_TAGS_VDRADMIN_ITEM1_START);
+ char *tmp2;
+ if ((tmp2 = strcasestr(tmp, AUX_TAGS_VDRADMIN_ITEM1_END)) != NULL) {
+ // add search item
+ sstrReturn << string(tmp, tmp2 - tmp) << endl;
+ }
+ }
+ }
+ }
+ // check if pin
+ start = strcasestr(aux, AUX_TAGS_PIN_START);
+ end = strcasestr(aux, AUX_TAGS_PIN_END);
+ if (start && end) {
+ // add header
+ sstrReturn << AUX_HEADER_PIN;
+ // parse first item
+ char *tmp;
+ if ((tmp = strcasestr(start, AUX_TAGS_PIN_ITEM1_START)) != NULL) {
+ if (tmp < end) {
+ tmp += strlen(AUX_TAGS_PIN_ITEM1_START);
+ char *tmp2;
+ if ((tmp2 = strcasestr(tmp, AUX_TAGS_PIN_ITEM1_END)) != NULL) {
+ // add search item
+ sstrReturn << string(tmp, tmp2 - tmp) << endl;
+ }
+ }
+ }
+ }
+
+ if (!sstrReturn.str().empty())
+ return sstrReturn.str().c_str();
+
+ return aux;
+}
+
+bool ischaracters(const char *str, const char *mask)
+{
+ bool match = true;
+ const char *p = str;
+ for (; *p; ++p) {
+ const char *m = mask;
+ bool tmp = false;
+ for (; *m; ++m) {
+ if (*p == *m)
+ tmp = true;
+ }
+ match = match && tmp;
+ }
+ return match;
+}