diff options
| author | Midas <vdrportal_midas@gmx.de> | 2010-04-22 01:06:40 +0200 |
|---|---|---|
| committer | Midas <vdrportal_midas@gmx.de> | 2010-04-22 01:06:40 +0200 |
| commit | 4921cf32c8bda089a21dc4a14ce191ed477f80ff (patch) | |
| tree | ff9debb648949a2ad43ee7759fb667fb03a78b73 /block/event.c | |
| download | vdr-plugin-block-4921cf32c8bda089a21dc4a14ce191ed477f80ff.tar.gz vdr-plugin-block-4921cf32c8bda089a21dc4a14ce191ed477f80ff.tar.bz2 | |
Initial release. Version 0.0.1b. Fork of the taste plugin 0.0.2d by LordJaxom.
Patches for the taste plugin by tomg and mapovi were added permanently to the
source of the block plugin. For more information, feature list und bugfixes
read HISTORY and README please.
Diffstat (limited to 'block/event.c')
| -rw-r--r-- | block/event.c | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/block/event.c b/block/event.c new file mode 100644 index 0000000..d06040a --- /dev/null +++ b/block/event.c @@ -0,0 +1,127 @@ +/** + * based on event.c,v 1.1.1.1 2006/02/26 14:11:02 lordjaxom + * + * version by Midas + * + */ + +#include "event.h" + +#include <ctype.h> + +static char *duptolower(const char *s) { + char *c = strdup(s); + char *p = c; + for (; *p; ++p) + *p = tolower(*p); + return c; +} + +cEventsBlock EventsBlock; + +cEventBlock::cEventBlock(void): + mRegularExp(false), + mIgnoreCase(false), + mCompiled(false) +{ + strncpy(mPattern, tr("New Entry"), sizeof(mPattern)); +} + +cEventBlock::cEventBlock(const char *Pattern): + mRegularExp(false), + mIgnoreCase(false), + mCompiled(false) +{ + strncpy(mPattern, Pattern, sizeof(mPattern)); +} + +cEventBlock::cEventBlock(const cEventBlock &Src) +{ + operator=(Src); +} + +cEventBlock &cEventBlock::operator=(const cEventBlock &Src) +{ + printf("copy construct\n"); + strcpy(mPattern, Src.mPattern); + mRegularExp = Src.mRegularExp; + mIgnoreCase = Src.mIgnoreCase; + mCompiled = false; + Compile(); + return *this; +} + +cEventBlock::~cEventBlock() +{ + if (mRegularExp) + regfree(&mExpression); +} + +bool cEventBlock::Acceptable(const char *Event) const +{ + if (mRegularExp) + return regexec(&mExpression, Event, 0, NULL, 0) != 0; + else if (mIgnoreCase) { + char *ev = duptolower(Event); + char *pa = duptolower(mPattern); + printf("check for %s in %s\n", pa, ev); + bool res = strstr(ev, pa) == NULL; + free(ev); free(pa); + return res; + } else + return strstr(Event, mPattern) == NULL; +} + +bool cEventBlock::Parse(char *s) { + char *patternbuf = NULL; + int fields = sscanf(s, "%d:%d:%a[^\n]", &mRegularExp, &mIgnoreCase, &patternbuf); + + if (fields == 3) { + strncpy(mPattern, skipspace(stripspace(patternbuf)), sizeof(mPattern)); + free(patternbuf); + } else { // backward compatibility + strncpy(mPattern, skipspace(stripspace(s)), sizeof(mPattern)); + mRegularExp = false; + mIgnoreCase = false; + } + + return Compile(); +} + +bool cEventBlock::Compile(void) { + mCompiled = false; + if (mRegularExp) { + if (regcomp(&mExpression, mPattern, REG_EXTENDED | (mIgnoreCase ? REG_ICASE : 0)) != 0) { + esyslog("ERROR: malformed regular expression: %s", mPattern); + return false; + } else + mCompiled = true; + } + return true; +} + +bool cEventBlock::Save(FILE *f) { + return fprintf(f, "%d:%d:%s\n", mRegularExp, mIgnoreCase, mPattern) > 0; +} + +bool cEventsBlock::Acceptable(const char *Event) { + const cEventBlock *event = First(); + while (event != NULL) { + if (!event->Acceptable(Event)) + return false; + event = Next(event); + } + return true; +} + +cEventsBlock &cEventsBlock::operator=(const cEventsBlock &Source) { + cList<cEventBlock>::Clear(); + + const cEventBlock *event = Source.First(); + while (event != NULL) { + printf("transfering %p\n", event); + Add(new cEventBlock(*event)); + event = Source.Next(event); + } + return *this; +} |
