/* * tools.c: The 'EnigmaNG' VDR skin * * See the README file for copyright information and how to reach the author. * */ #include #ifndef __STL_CONFIG_H #define __STL_CONFIG_H #endif #include #include #include "common.h" #include "i18n.h" #include "tools.h" using namespace std; #define AUX_HEADER_EPGSEARCH "EPGSearch: " #define AUX_TAGS_EPGSEARCH_START "" #define AUX_TAGS_EPGSEARCH_ITEM_1A_START "" #define AUX_TAGS_EPGSEARCH_ITEM_1A_END "" #define AUX_TAGS_EPGSEARCH_ITEM_2A_START "" #define AUX_TAGS_EPGSEARCH_ITEM_2A_END "" #define AUX_TAGS_EPGSEARCH_ITEM_1B_START "" #define AUX_TAGS_EPGSEARCH_ITEM_1B_END "" #define AUX_TAGS_EPGSEARCH_ITEM_2B_START "" #define AUX_TAGS_EPGSEARCH_ITEM_2B_END "" #define AUX_TAGS_EPGSEARCH_END "" #define AUX_HEADER_VDRADMIN "VDRAdmin-AM: " #define AUX_TAGS_VDRADMIN_START "" #define AUX_TAGS_VDRADMIN_ITEM1_START "" #define AUX_TAGS_VDRADMIN_ITEM1_END "" #define AUX_TAGS_VDRADMIN_END "" #define AUX_HEADER_PIN "Protected: " #define AUX_TAGS_PIN_START "" #define AUX_TAGS_PIN_ITEM1_START "" #define AUX_TAGS_PIN_ITEM1_END "" #define AUX_TAGS_PIN_END "" 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_ITEM_1A_START)) != NULL) { if (tmp < end) { tmp += strlen(AUX_TAGS_EPGSEARCH_ITEM_1A_START); char *tmp2; if ((tmp2 = strcasestr(tmp, AUX_TAGS_EPGSEARCH_ITEM_1A_END)) != NULL) { // add channel sstrReturn << string(tmp, tmp2 - tmp); founditem = true; } else { founditem = false; } } } // parse second item if ((tmp = strcasestr(start, AUX_TAGS_EPGSEARCH_ITEM_2A_START)) != NULL) { if (tmp < end) { tmp += strlen(AUX_TAGS_EPGSEARCH_ITEM_2A_START); char *tmp2; if ((tmp2 = strcasestr(tmp, AUX_TAGS_EPGSEARCH_ITEM_2A_END)) != NULL) { // add separator if (founditem) { sstrReturn << ", "; } // add search item sstrReturn << string(tmp, tmp2 - tmp); founditem = true; } else { founditem = false; } } } // timer check? if ((tmp = strcasestr(start, AUX_TAGS_EPGSEARCH_ITEM_1B_START)) != NULL) { if (tmp < end) { tmp += strlen(AUX_TAGS_EPGSEARCH_ITEM_1B_START); char *tmp2; if ((tmp2 = strcasestr(tmp, AUX_TAGS_EPGSEARCH_ITEM_1B_END)) != NULL) { if (string(tmp, tmp2 - tmp) != "0") { // add separator if (founditem) { sstrReturn << ", "; } founditem = true; // add search item sstrReturn << tr("Timer check"); // parse second item if ((tmp = strcasestr(start, AUX_TAGS_EPGSEARCH_ITEM_2B_START)) != NULL) { if (tmp < end) { tmp += strlen(AUX_TAGS_EPGSEARCH_ITEM_2B_START); char *tmp2; if ((tmp2 = strcasestr(tmp, AUX_TAGS_EPGSEARCH_ITEM_2B_END)) != NULL) { // add separator if (founditem) { sstrReturn << ", "; } // add search item sstrReturn << "eventid=" << string(tmp, tmp2 - tmp); } } } } else { founditem = false; } } 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; }