summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwr61 <wr61@e10066b5-e1e2-0310-b819-94efdf66514b>2005-07-13 12:39:50 +0000
committerwr61 <wr61@e10066b5-e1e2-0310-b819-94efdf66514b>2005-07-13 12:39:50 +0000
commitdc345f142f79a5db20a71df5cd5320111e37a607 (patch)
tree81267cb33b227859683f8e5577fd82824bc80fee
parenta76bc5f9054f1f438e32815eccf32acbfb27a6e8 (diff)
downloadvdr-plugin-muggle-dc345f142f79a5db20a71df5cd5320111e37a607.tar.gz
vdr-plugin-muggle-dc345f142f79a5db20a71df5cd5320111e37a607.tar.bz2
mugglei does not change dir before importing
git-svn-id: https://vdr-muggle.svn.sourceforge.net/svnroot/vdr-muggle/branches/0.1.7-wr@764 e10066b5-e1e2-0310-b819-94efdf66514b
-rw-r--r--HISTORY4
-rw-r--r--mg_db.c21
-rw-r--r--mg_db.h4
-rwxr-xr-xmugglei.c26
-rw-r--r--vdr_menu.c4
5 files changed, 42 insertions, 17 deletions
diff --git a/HISTORY b/HISTORY
index d63991f..64f8850 100644
--- a/HISTORY
+++ b/HISTORY
@@ -228,3 +228,7 @@ xxxxxxxx: Version 0.1.8-BETA
- import items from the setup menu: This is done by a background thread.
Those threads are not allowed to access the OSD, so we removed the
status messages of the import progress.
+- mugglei: import counter counts only successes.
+- mugglei: do not change directory to TLD before starting the import.
+ mugglei has to be started in TLD or below. This way wildcards will
+ always be expanded as expected.
diff --git a/mg_db.c b/mg_db.c
index 94ecc45..ff8daf2 100644
--- a/mg_db.c
+++ b/mg_db.c
@@ -317,14 +317,8 @@ mgDb::Sync(char * const * path_argv)
}
unsigned int importcount=0;
- chdir(the_setup.ToplevelDir);
FTS *fts;
FTSENT *ftsent;
- if (!path_argv)
- {
- static char *default_args[] = { ".", 0};
- path_argv = default_args;
- }
fts = fts_open( path_argv, FTS_LOGICAL, 0);
if (fts)
{
@@ -335,8 +329,8 @@ mgDb::Sync(char * const * path_argv)
mgDebug(1,"Importing from %s",ftsent->fts_path);
if (!(mode&S_IFREG))
continue;
- SyncFile(ftsent->fts_path);
- importcount++;
+ if (SyncFile(ftsent->fts_path))
+ importcount++;
if (importcount%1000==0)
showimportcount(importcount);
}
@@ -1051,14 +1045,14 @@ mgDb::getGenre1(TagLib::FileRef& f)
return m_Genres[genre1];
}
-void
+bool
mgDb::SyncFile(const char *filename)
{
char *ext = extension(filename);
if (strcasecmp(ext,"flac")
&& strcasecmp(ext,"ogg")
&& strcasecmp(ext,"mp3"))
- return;
+ return false;
if (!strncmp(filename,"./",2)) // strip leading ./
filename += 2;
const char *cfilename=filename;
@@ -1067,13 +1061,13 @@ mgDb::SyncFile(const char *filename)
if (strlen(cfilename)>255)
{
mgWarning("Length of file exceeds database field capacity: %s", filename);
- return;
+ return false;
}
TagLib::FileRef f( filename) ;
if (f.isNull())
- return;
+ return false;
if (!f.tag())
- return;
+ return false;
mgDebug(2,"Importing %s",filename);
TagLib::AudioProperties *ap = f.audioProperties();
get_ID3v2_Tags(filename);
@@ -1123,6 +1117,7 @@ mgDb::SyncFile(const char *filename)
c_folder3.quoted(),c_folder4.quoted());
}
Execute(sql);
+ return true;
}
string
diff --git a/mg_db.h b/mg_db.h
index 91ec492..73ea605 100644
--- a/mg_db.h
+++ b/mg_db.h
@@ -177,7 +177,7 @@ class mgDb {
virtual void ClearCollection( const string Name);
virtual bool CreateCollection( const string Name);
- void Sync(char * const * path_argv = 0);
+ void Sync(char * const * path_argv);
virtual bool FieldExists(string table, string field)=0;
void LoadMapInto(string sql,map<string,string>*idmap,map<string,string>*valmap);
string LoadItemsInto(mgParts& what,vector<mgItem*>& items);
@@ -195,7 +195,7 @@ class mgDb {
int m_rows;
int m_cols;
virtual void SyncEnd() {}
- void SyncFile(const char *filename);
+ bool SyncFile(const char *filename);
bool m_database_found;
bool m_hasfolderfields;
bool m_separate_thread;
diff --git a/mugglei.c b/mugglei.c
index 8646934..1e3d059 100755
--- a/mugglei.c
+++ b/mugglei.c
@@ -63,6 +63,23 @@ const char *I18nTranslate(const char *s,const char *Plugin)
return s;
}
+bool
+path_within_tld()
+{
+ char path[5000];
+ if (!getcwd(path,4999))
+ {
+ std::cout << "Path too long" << std::endl;
+ exit (1);
+ }
+ int tldlen = strlen(the_setup.ToplevelDir);
+ strcat(path,"/");
+ int pathlen = strlen(path);
+ if (pathlen<tldlen)
+ return false;
+ return !strncmp(path,the_setup.ToplevelDir,tldlen);
+}
+
int main( int argc, char *argv[] )
{
the_setup.SetMugglei();
@@ -83,10 +100,17 @@ int main( int argc, char *argv[] )
std::cout << "Options:" << std::endl;
std::cout << the_setup.HelpText();
- exit( 1 );
+ exit( 2 );
}
the_setup.ProcessArguments(argc,argv);
+
+ if (!path_within_tld())
+ {
+ std::cout << "you should be in " << the_setup.ToplevelDir
+ << " or below" << std::endl;
+ exit( 2 );
+ }
if (optind<argc)
{
mgDb *sync = GenerateDB();
diff --git a/vdr_menu.c b/vdr_menu.c
index 1b72f8b..d9df3ef 100644
--- a/vdr_menu.c
+++ b/vdr_menu.c
@@ -1216,6 +1216,8 @@ import()
mgThreadSync *s = mgThreadSync::get_instance();
if (!s)
return false;
- s->Sync();
+ static char *tld_arg[] = { 0, 0};
+ tld_arg[0] = the_setup.ToplevelDir;
+ s->Sync(tld_arg);
return true;
}