summaryrefslogtreecommitdiff
path: root/helpers.h
diff options
context:
space:
mode:
authoranbr <vdr07@deltab.de>2010-12-21 20:36:58 +0100
committeranbr <vdr07@deltab.de>2010-12-21 20:36:58 +0100
commit10a33e14d6338ff004410413f6fe52810be43f67 (patch)
tree6f71b062e9235be1383a9e6c536fea336d400e6c /helpers.h
downloadvdr-plugin-dvdswitch-10a33e14d6338ff004410413f6fe52810be43f67.tar.gz
vdr-plugin-dvdswitch-10a33e14d6338ff004410413f6fe52810be43f67.tar.bz2
release 0.1.0 from http://www.schmidtie.de/download/vdr-dvdswitch-0.1.0.tar.bz20.1.0
Diffstat (limited to 'helpers.h')
-rw-r--r--helpers.h270
1 files changed, 270 insertions, 0 deletions
diff --git a/helpers.h b/helpers.h
new file mode 100644
index 0000000..b5d7185
--- /dev/null
+++ b/helpers.h
@@ -0,0 +1,270 @@
+#ifndef __HELPERS_DVDSWITCH_H
+#define __HELPERS_DVDSWITCH_H
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <regex.h>
+#include <ctype.h>
+#include <cmath>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <vdr/tools.h>
+#include <vdr/interface.h>
+#include <vdr/thread.h>
+
+#include "debug.h"
+
+#define OSD_ERRMSG(msg) OsdMsg(mtError, msg)
+#define OSD_WARNMSG(msg) OsdMsg(mtWarning, msg)
+#define OSD_INFOMSG(msg) OsdMsg(mtInfo, msg)
+
+#define FREENULL(p) (free(p), p = NULL)
+
+void OsdMsg(eMessageType Type, const char *Msg);
+void ChangeChars(char *name, char *chars);
+void StrRepeat(char *input, int count, char *dest);
+bool RegIMatch(char *string, char *pattern);
+
+// --- cStringValue -------------------------------------
+
+class cStringValue
+{
+ private:
+ char *String;
+
+ void Init(char *string)
+ {
+ FREENULL(String);
+ String = string ? strdup(string) : NULL;
+ }
+ public:
+ cStringValue(void) { String = NULL; }
+ ~cStringValue(void) { free(String); }
+
+ cStringValue &operator= (char *string)
+ {
+ Init(string);
+ return *this;
+ }
+ cStringValue &operator+= (char *string)
+ {
+ if(String && string)
+ {
+ String = (char*) realloc(String, strlen(String) + strlen(string) + 1);
+ strcat(String, string);
+ }
+ if(!String)
+ Init(string);
+
+ return *this;
+ }
+ char *operator& (void) { return String; }
+
+ int len(void) { return String ? strlen(String) : 0; }
+};
+
+// --- cStringList --------------------------------------
+
+class cStringListItem : public cListObject
+{
+ private:
+ char *String;
+ public:
+ cStringListItem(char *string)
+ {
+ String = string ? strdup(string) : NULL;
+ }
+ ~cStringListItem(void) { free(String); }
+
+ char *Value(void) { return String; }
+};
+
+class cStringList : public cList<cStringListItem> {};
+
+// --- cTokenizer ---------------------------------------
+
+class cToken : public cListObject
+{
+ private:
+ char *String;
+ public:
+ cToken(char *string) {
+ DEBUG("Neuer Token: %s", string);
+ String = string ? strdup(string) : NULL;
+ }
+ ~cToken(void) { free(String); }
+ char *Value(void) { return String; }
+};
+
+class cTokenizer : public cList<cToken>
+{
+ private:
+ char *String;
+ char *Delim;
+
+ void Tokenize(bool trim);
+ public:
+ cTokenizer(char *string, char *delim, bool trim = false)
+ {
+ DEBUG("neuer Tokenizer wird initialisiert: %s, %s", string, delim);
+ String = string ? strdup(string) : NULL;
+ Delim = delim ? strdup(delim) : NULL;
+ if(String && Delim)
+ Tokenize(trim);
+ }
+ ~cTokenizer(void)
+ {
+ DEBUG("Tokenizer wird gelöscht");
+ free(String);
+ free(Delim);
+ }
+ char *GetToken(int index) { return index > 0 && index <= Count() ? Get(index - 1)->Value() : NULL; }
+};
+
+// --- cFileInfo ----------------------------------------
+
+enum eFileInfo
+{
+ tNone = 0,
+ tDir,
+ tFile,
+ tUnknown,
+};
+
+class cFileInfo
+{
+ private:
+ char *File;
+ char *buffer;
+ struct stat64 Info;
+ unsigned long long int size;
+
+ public:
+ cFileInfo(char *file);
+ ~cFileInfo(void);
+
+ char *Path(void);
+ char *FileName(void);
+ char *FileNameWithoutExt(void);
+ char *Extension(bool withPoint = true);
+ eFileInfo Type(void);
+ unsigned long long int SizeByte(void);
+ double SizeKByte(int decimals = 2);
+ double SizeMByte(int decimals = 2);
+ double SizeGByte(int decimals = 1);
+ bool isReadable(void);
+ bool isWriteable(void);
+ bool isExecutable(void);
+ bool isExists(void);
+};
+
+// --- cFileCMD ------------------------------------------
+
+class cFileCMD
+{
+ public:
+ static bool Del(char *file);
+ static bool Mkdir(char *dir) { return MakeDirs(dir, true); }
+ static bool Rn(char *oldfile, char *newfile) { return !rename(oldfile, newfile); }
+ static bool DirIsEmpty(char *file);
+};
+
+// --- cFileList -------------------------------
+
+enum eFileList
+{
+ sNone,
+ sAsc,
+ sDesc,
+};
+
+class cFileOptListItem : public cListObject
+{
+ private:
+ char *RegEx;
+ eFileInfo Type;
+ public:
+ cFileOptListItem(char *regex, eFileInfo type = tNone)
+ {
+ RegEx = (regex && !isempty(regex)) ? strdup(regex) : NULL;
+ Type = type;
+ }
+ ~cFileOptListItem(void) { free(RegEx); }
+
+ char *Regex(void) { return RegEx; }
+ eFileInfo FileType(void) { return Type; }
+};
+
+class cFileOptList : public cList<cFileOptListItem> {};
+
+class cFileList;
+
+class cFileListItem : public cListObject
+{
+ friend class cFileList;
+ private:
+ char *File;
+ public:
+ cFileListItem(char *dir, char *file);
+ cFileListItem(char *file);
+ ~cFileListItem(void) { free(File); }
+ char *Value(void) { return File; }
+};
+
+class cFileList : public cList<cFileListItem>
+{
+ private:
+ char *Dir;
+ bool Sub;
+
+ cFileOptList *Includes;
+ cFileOptList *Excludes;
+ bool Protect;
+
+ eFileList SortMode;
+ bool SortToFilename;
+ eFileInfo Type;
+
+ bool Read(char *dir, bool withsub);
+ void SortIn(char *dir, char *file);
+
+ bool CheckIncludes(char *dir, char *file);
+ bool CheckExcludes(char *dir, char *file);
+ bool CheckType(char *dir, char *file, eFileInfo type);
+ public:
+ cFileList(void);
+ ~cFileList(void);
+
+ bool Load(char *dir = NULL, bool withsub = false);
+ void OptInclude(char *include, eFileInfo type = tNone)
+ {
+ if(!Includes)
+ Includes = new cFileOptList();
+ if(!include)
+ Includes->Clear();
+ else
+ Includes->Add(new cFileOptListItem(include, type));
+ }
+ void OptExclude(char *exclude, eFileInfo type = tNone)
+ {
+ if(!Excludes)
+ Excludes = new cFileOptList();
+ if(!exclude)
+ Excludes->Clear();
+ else
+ Excludes->Add(new cFileOptListItem(exclude, type));
+ }
+ void OptSort(eFileList mode, bool tofilename = false)
+ {
+ SortMode = mode;
+ SortToFilename = tofilename;
+ }
+ void OptFilterType(eFileInfo type) { Type = type; }
+
+ bool DirIsEmpty(cFileListItem *item);
+ static bool DirIsIn(char *file, char *strings);
+ static bool DirIsIn(cFileListItem *item, char *strings) { return DirIsIn(item->Value(), strings); }
+};
+
+#endif // __HELPERS_DVDSWITCH_H