summaryrefslogtreecommitdiff
path: root/dvdlist.c
diff options
context:
space:
mode:
Diffstat (limited to 'dvdlist.c')
-rw-r--r--dvdlist.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/dvdlist.c b/dvdlist.c
new file mode 100644
index 0000000..396eb48
--- /dev/null
+++ b/dvdlist.c
@@ -0,0 +1,75 @@
+#include <vdr/tools.h>
+#include "dvdlist.h"
+#include "setup.h"
+#include "helpers.h"
+#include "imagelist.h"
+
+// --- cDVDList ------------------------------------------------------------------
+
+bool cDVDList::Create(char *dir, char *exts, char *dirs, eFileList smode, bool sub)
+{
+ DEBUG("DVDList: %s, %s", exts, dirs);
+
+ Clear();
+ FREENULL(DVDExts);
+ FREENULL(DVDDirs);
+
+ DVDExts = exts ? strdup(exts) : NULL;
+ DVDDirs = dirs ? strdup(dirs) : NULL;
+
+ if(!DVDExts && !DVDDirs)
+ return false;
+
+ return Load(dir, smode, sub);
+}
+
+bool cDVDList::Load(char *dir, eFileList smode, bool sub)
+{
+ DEBUG("DVDList: Load");
+ bool ret = false;
+ int i = 0;
+
+ cFileInfo *fInfo = NULL;
+ cFileList *fList = new cFileList();
+
+ fList->OptExclude("^lost\\+found$"); // lost+found Dir
+ fList->OptExclude("^\\."); // hidden Files
+ fList->OptExclude("\\.sdel$"); // del Files
+ fList->OptExclude("\\.smove$"); // move Files
+
+ if(DVDExts)
+ {
+ cTokenizer *token = new cTokenizer(DVDExts, "@");
+ char *extexp = NULL;
+ for(i = 1; i <= token->Count(); i++)
+ {
+ asprintf(&extexp, "%s$", token->GetToken(i));
+ fList->OptInclude(extexp, tFile);
+ FREENULL(extexp);
+ }
+ delete(token);
+ }
+
+ if(DVDDirs)
+ fList->OptInclude(".*", tDir);
+
+ fList->OptSort(smode, true);
+
+ ret = fList->Load(dir, sub);
+
+ cFileListItem *fItem = fList->First();
+ while(fItem)
+ {
+ fInfo = new cFileInfo(fItem->Value());
+ if(fInfo->Type() == tFile ||
+ fInfo->Type() == tDir && fList->DirIsIn(fItem, DVDDirs))
+ Add(new cDVDListItem(fItem->Value()));
+ DELETENULL(fInfo);
+ fItem = fList->Next(fItem);
+ }
+
+ delete(fList);
+ delete(fInfo);
+
+ return ret;
+}