summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--confdloader.c121
-rw-r--r--confdloader.h71
-rw-r--r--epgsearch.c27
4 files changed, 132 insertions, 89 deletions
diff --git a/Makefile b/Makefile
index 2799c25..c4a2a49 100644
--- a/Makefile
+++ b/Makefile
@@ -80,7 +80,7 @@ DEFINES4 += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN4)"'
### The object files (add further files here):
-OBJS = afuzzy.o blacklist.o changrp.o conflictcheck.o conflictcheck_thread.o distance.o $(PLUGIN).o epgsearchcats.o epgsearchcfg.o epgsearchext.o epgsearchsetup.o epgsearchsvdrp.o epgsearchtools.o i18n.o mail.o md5.o menu_announcelist.o menu_blacklistedit.o menu_blacklists.o menu_commands.o menu_conflictcheck.o menu_deftimercheckmethod.o menu_dirselect.o menu_event.o menu_favorites.o menu_main.o menu_myedittimer.o menu_quicksearch.o menu_recsdone.o menu_search.o menu_searchactions.o menu_searchedit.o menu_searchresults.o menu_searchtemplate.o menu_switchtimers.o menu_templateedit.o menu_timersdone.o menu_whatson.o noannounce.o rcfile.o recdone.o recstatus.o searchtimer_thread.o services.o switchtimer.o switchtimer_thread.o templatefile.o timer_thread.o timerdone.o timerstatus.o uservars.o varparser.o
+OBJS = afuzzy.o blacklist.o changrp.o confdloader.o conflictcheck.o conflictcheck_thread.o distance.o $(PLUGIN).o epgsearchcats.o epgsearchcfg.o epgsearchext.o epgsearchsetup.o epgsearchsvdrp.o epgsearchtools.o i18n.o mail.o md5.o menu_announcelist.o menu_blacklistedit.o menu_blacklists.o menu_commands.o menu_conflictcheck.o menu_deftimercheckmethod.o menu_dirselect.o menu_event.o menu_favorites.o menu_main.o menu_myedittimer.o menu_quicksearch.o menu_recsdone.o menu_search.o menu_searchactions.o menu_searchedit.o menu_searchresults.o menu_searchtemplate.o menu_switchtimers.o menu_templateedit.o menu_timersdone.o menu_whatson.o noannounce.o rcfile.o recdone.o recstatus.o searchtimer_thread.o services.o switchtimer.o switchtimer_thread.o templatefile.o timer_thread.o timerdone.o timerstatus.o uservars.o varparser.o
ifdef HAVE_PCREPOSIX
LIBS += -L/usr/lib -lpcreposix -lpcre
diff --git a/confdloader.c b/confdloader.c
new file mode 100644
index 0000000..4188c89
--- /dev/null
+++ b/confdloader.c
@@ -0,0 +1,121 @@
+/*
+Copyright (C) 2004-2008 Christian Wieninger
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+
+The author can be reached at cwieninger@gmx.de
+
+The project's page is at http://winni.vdr-developer.org/epgsearch
+*/
+
+#include <vdr/plugin.h>
+#include "confdloader.h"
+#include "log.h"
+#include "uservars.h"
+#include "menu_dirselect.h"
+#include "templatefile.h"
+#include "epgsearchcats.h"
+
+
+bool cConfDLoader::Load()
+{
+ const string dirPath(AddDirectory(CONFIGDIR, "conf.d"));
+ LogFile.Log(2, "loading entries in %s", dirPath.c_str());
+ cReadDir d(dirPath.c_str());
+ struct dirent* e;
+ string parent("..");
+ string current(".");
+ int count = 0;
+ bool success = true;
+ while ((e = d.Next())) {
+ string direntry = e->d_name;
+ if ((current == direntry) || (parent == direntry) || (direntry[direntry.size()-1] == '~')) {
+ continue;
+ }
+ /* Check if entry is a directory: I do not rely on e->d_type
+ here because on some systems it is always DT_UNKNOWN. Also
+ testing for DT_DIR does not take into account symbolic
+ links to directories.
+ */
+ struct stat buf;
+ if ((stat((dirPath + "/" + e->d_name).c_str(), &buf) != 0) || (S_ISDIR(buf.st_mode))) {
+ continue;
+ }
+ success &= LoadFile((dirPath + "/" + e->d_name).c_str());
+ count++;
+ }
+ LogFile.Log(2, "loaded %d entries in %s", count, dirPath.c_str());
+ return success;
+}
+
+bool cConfDLoader::LoadFile(const char *FileName)
+{
+ if (FileName && access(FileName, F_OK) == 0) {
+ LogFile.Log(1, "loading %s", FileName);
+ FILE *f = fopen(FileName, "r");
+ if (f) {
+ char *s;
+ int line = 0;
+ cReadLine ReadLine;
+ std::string section;
+ while ((s = ReadLine.Read(f)) != NULL) {
+ line++;
+ char *p = strchr(s, '#');
+ if (p)
+ *p = 0;
+ stripspace(s);
+ if (!isempty(s)) {
+ if (*s == '[' && *(s+strlen(s)-1)==']') // Section?
+ section = s;
+ else {
+ if (EqualsNoCase(section, "[epgsearchuservars]"))
+ cUserVarLine::Parse(s);
+ if (EqualsNoCase(section, "[epgsearchdirs]"))
+ {
+ cDirExt* D = new cDirExt;
+ if (D && D->Parse(s))
+ ConfDDirExts.Add(D);
+ else
+ delete D;
+ }
+ if (EqualsNoCase(section, "[epgsearchmenu]"))
+ {
+ cTemplLine T;
+ if (T.Parse(s))
+ cTemplFile::Parse(T.Name(), T.Value());
+ }
+ if (EqualsNoCase(section, "[epgsearchcats]"))
+ {
+ cSearchExtCat* cat = new cSearchExtCat;
+ if (cat && cat->Parse(s))
+ SearchExtCats.Add(cat);
+ else
+ delete cat;
+ }
+ }
+ }
+ }
+ }
+ fclose(f);
+ return true;
+ }
+ else
+ {
+ LOG_ERROR_STR(FileName);
+ return false;
+ }
+}
+
diff --git a/confdloader.h b/confdloader.h
index 56c858f..12b6909 100644
--- a/confdloader.h
+++ b/confdloader.h
@@ -20,70 +20,15 @@ The author can be reached at cwieninger@gmx.de
The project's page is at http://winni.vdr-developer.org/epgsearch
*/
-#include "log.h"
-#include "uservars.h"
-#include "menu_dirselect.h"
-#include "templatefile.h"
-#include "epgsearchcats.h"
+
+#ifndef VDR_EPGSEARCH_CONFDLOADER_INC
+#define VDR_EPGSEARCH_CONFDLOADER_INC
class cConfDLoader {
public:
- cConfDLoader(const char* FileName) { Load(FileName); }
- bool Load(const char *FileName)
- {
- if (FileName && access(FileName, F_OK) == 0) {
- LogFile.Log(1, "loading %s", FileName);
- FILE *f = fopen(FileName, "r");
- if (f) {
- char *s;
- int line = 0;
- cReadLine ReadLine;
- std::string section;
- while ((s = ReadLine.Read(f)) != NULL) {
- line++;
- char *p = strchr(s, '#');
- if (p)
- *p = 0;
- stripspace(s);
- if (!isempty(s)) {
- if (*s == '[' && *(s+strlen(s)-1)==']') // Section?
- section = s;
- else {
- if (EqualsNoCase(section, "[epgsearchuservars]"))
- cUserVarLine::Parse(s);
- if (EqualsNoCase(section, "[epgsearchdirs]"))
- {
- cDirExt* D = new cDirExt;
- if (D && D->Parse(s))
- ConfDDirExts.Add(D);
- else
- delete D;
- }
- if (EqualsNoCase(section, "[epgsearchmenu]"))
- {
- cTemplLine T;
- if (T.Parse(s))
- cTemplFile::Parse(T.Name(), T.Value());
- }
- if (EqualsNoCase(section, "[epgsearchcats]"))
- {
- cSearchExtCat* cat = new cSearchExtCat;
- if (cat && cat->Parse(s))
- SearchExtCats.Add(cat);
- else
- delete cat;
- }
- }
- }
- }
- }
- fclose(f);
- return true;
- }
- else
- {
- LOG_ERROR_STR(FileName);
- return false;
- }
- }
+ cConfDLoader() {}
+ bool Load();
+ bool LoadFile(const char *FileName);
};
+
+#endif
diff --git a/epgsearch.c b/epgsearch.c
index 2555dab..ad8f578 100644
--- a/epgsearch.c
+++ b/epgsearch.c
@@ -561,31 +561,8 @@ void cPluginEpgsearch::LoadUserVars()
void cPluginEpgsearch::LoadConfD()
{
- const string dirPath(AddDirectory(CONFIGDIR, "conf.d"));
- LogFile.Log(2, "loading entries in %s", dirPath.c_str());
- cReadDir d(dirPath.c_str());
- struct dirent* e;
- string parent("..");
- string current(".");
- int count = 0;
- while ((e = d.Next())) {
- string direntry = e->d_name;
- if ((current == direntry) || (parent == direntry) || (direntry[direntry.size()-1] == '~')) {
- continue;
- }
- /* Check if entry is a directory: I do not rely on e->d_type
- here because on some systems it is allways DT_UNKNOWN. Also
- testing for DT_DIR does not take into account symbolic
- links to directories.
- */
- struct stat buf;
- if ((stat((dirPath + "/" + e->d_name).c_str(), &buf) != 0) || (S_ISDIR(buf.st_mode))) {
- continue;
- }
- cConfDLoader L((dirPath + "/" + e->d_name).c_str());
- count++;
- }
- LogFile.Log(2, "loaded %d entries in %s", count, dirPath.c_str());
+ cConfDLoader D;
+ D.Load();
}
cMenuSetupPage *cPluginEpgsearch::SetupMenu(void)