summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwr61 <wr61@e10066b5-e1e2-0310-b819-94efdf66514b>2005-04-25 11:28:50 +0000
committerwr61 <wr61@e10066b5-e1e2-0310-b819-94efdf66514b>2005-04-25 11:28:50 +0000
commitbf00e255fa948c288ae11a3ea83ca70eec184c7b (patch)
treeae87f19340fc58066791de7a66fd2b440ea72d01
parent97898c769992f7740891bdfb45ce50a09ba831b4 (diff)
downloadvdr-plugin-muggle-bf00e255fa948c288ae11a3ea83ca70eec184c7b.tar.gz
vdr-plugin-muggle-bf00e255fa948c288ae11a3ea83ca70eec184c7b.tar.bz2
simplify import code, use less member variables
git-svn-id: https://vdr-muggle.svn.sourceforge.net/svnroot/vdr-muggle/branches/0.1.7-wr@662 e10066b5-e1e2-0310-b819-94efdf66514b
-rw-r--r--mg_db_gd.c186
-rw-r--r--mg_db_gd.h24
-rw-r--r--mg_tools.c9
-rw-r--r--mg_tools.h1
4 files changed, 93 insertions, 127 deletions
diff --git a/mg_db_gd.c b/mg_db_gd.c
index 29e7e5e..ab03a91 100644
--- a/mg_db_gd.c
+++ b/mg_db_gd.c
@@ -57,7 +57,6 @@ bool UsingEmbeddedMySQL();
mgDbGd::mgDbGd(bool SeparateThread)
{
- m_genre_rows=0;
m_db = 0;
if (!mysqlhandle)
mysqlhandle = new mysqlhandle_t;
@@ -67,7 +66,6 @@ mgDbGd::mgDbGd(bool SeparateThread)
mgDbGd::~mgDbGd()
{
- if (m_genre_rows) mysql_free_result(m_genre_rows);
mysql_close (m_db);
m_db = 0;
if (m_separate_thread)
@@ -637,7 +635,7 @@ mgDbGd::getlanguage(const char *filename)
{
TagLib::String result = "";
TagLib::ID3v2::Tag * id3v2tag=0;
- if (!strcasecmp(c_extension,"flac"))
+ if (!strcasecmp(extension(filename),"flac"))
{
TagLib::FLAC::File f(filename);
id3v2tag = f.ID3v2Tag();
@@ -648,7 +646,7 @@ mgDbGd::getlanguage(const char *filename)
result = l.front()->toString();
}
}
- else if (!strcasecmp(c_extension,"mp3"))
+ else if (!strcasecmp(extension(filename),"mp3"))
{
TagLib::MPEG::File f(filename);
id3v2tag = f.ID3v2Tag();
@@ -663,7 +661,7 @@ mgDbGd::getlanguage(const char *filename)
}
char *
-mgDbGd::getAlbum(const char *c_album,const char *c_artist,const char *c_directory)
+mgDbGd::getAlbum(const char *filename,const char *c_album,const char *c_artist)
{
char * result;
char *b;
@@ -673,6 +671,14 @@ mgDbGd::getAlbum(const char *c_album,const char *c_artist,const char *c_director
free(b);
if (!strcmp(result,"'NULL'"))
{
+ char c_directory[520];
+ sql_Cstring(filename,c_directory);
+ char *slash=strrchr(c_directory,'/');
+ if (slash)
+ {
+ *slash='\'';
+ *(slash+1)=0;
+ }
const char *directory="substring(tracks.mp3file,1,length(tracks.mp3file)"
"-instr(reverse(tracks.mp3file),'/'))";
char *where;
@@ -720,71 +726,35 @@ mgDbGd::getAlbum(const char *c_album,const char *c_artist,const char *c_director
}
void
-mgDbGd::UpdateTrack(long trackid)
-{
- char sql[7000];
- char *c_cddbid=getAlbum(c_album,c_artist,c_directory);
- sprintf(sql,"UPDATE tracks SET artist=%s, title=%s,year=%d,sourceid=%s,"
- "tracknb=%d,length=%d,bitrate=%d,samplerate=%d,"
- "channels=%d,genre1=%s,lang=%s WHERE id=%ld",
- c_artist,c_title,year,c_cddbid,
- trackno,len,bitrate,sample,
- channels,c_genre1,c_lang,trackid);
- free(c_cddbid);
- exec_sql(sql);
-}
-
-void
-mgDbGd::AddTrack()
-{
- char sql[7000];
- char *c_cddbid=getAlbum(c_album,c_artist,c_directory);
- sprintf(sql,"INSERT INTO tracks SET artist=%s,title=%s,year=%u,sourceid=%s,"
- "tracknb=%u,mp3file=%s,length=%d,bitrate=%d,samplerate=%d,"
- "channels=%d,genre1=%s,genre2='',lang=%s,"
- "folder1=%s,folder2=%s,folder3=%s,folder4=%s",
- c_artist,c_title,year,c_cddbid,
- trackno,c_mp3file,len,bitrate,sample,
- channels,c_genre1,c_lang,
- c_folder1,c_folder2,c_folder3,c_folder4);
- free(c_cddbid);
- exec_sql(sql);
-}
-
-bool
-mgDbGd::GetFileInfo(const char *filename)
+mgDbGd::SyncFile(const char *filename)
{
+ if (!strncmp(filename,"./",2)) // strip leading ./
+ filename += 2;
+ const char *cfilename=filename;
+ if (isdigit(filename[0]) && isdigit(filename[1]) && filename[2]=='/' && !strchr(filename+3,'/'))
+ cfilename=cfilename+3;
+ if (strlen(cfilename)>255)
+ {
+ mgWarning("Length of file exceeds database field capacity: %s", filename);
+ return;
+ }
TagLib::FileRef f( filename) ;
if (f.isNull())
- return false;
- TagLib::Tag *tag = f.tag();
+ return;
if (!f.tag())
- return false;
- if (tag->album()=="")
- strcpy(c_album,"'Unassigned'");
- else
- sql_Cstring(tag->album(),c_album);
- sql_Cstring(tag->artist(),c_artist);
- sql_Cstring(tag->title(),c_title);
- sql_Cstring(filename,c_directory);
- char *slash=strrchr(c_directory,'/');
- if (slash)
- {
- *slash='\'';
- *(slash+1)=0;
- }
- TagLib::String sgenre1=tag->genre();
- const char *genrename=sgenre1.toCString();
- const char *genreid=m_Genres[genrename].c_str();
- sql_Cstring(genreid,c_genre1);
- sql_Cstring(getlanguage(filename),c_lang);
- trackno=tag->track();
- year=tag->year();
+ return;
+ mgDebug(3,"Importing %s",filename);
TagLib::AudioProperties *ap = f.audioProperties();
- len = ap->length(); // tracks.length
- bitrate = ap->bitrate(); // tracks.bitrate
- sample = ap->sampleRate(); //tracks.samplerate
- channels = ap->channels(); //tracks.channels
+ char c_artist[520];
+ char c_title[520];
+ char c_album[520];
+ char c_genre1[520];
+ char c_lang[520];
+ char c_mp3file[520];
+ char c_folder1[520];
+ char c_folder2[520];
+ char c_folder3[520];
+ char c_folder4[520];
if (HasFolderFields())
{
char *folders[4];
@@ -795,48 +765,51 @@ mgDbGd::GetFileInfo(const char *filename)
sql_Cstring(folders[3],c_folder4);
free(fbuf);
}
- return true;
-}
-
-void
-mgDbGd::SyncFile(const char *filename)
-{
- if (!Connect())
- return;
- m_genre_rows = exec_sql ("SELECT id,genre from genre");
- MYSQL_ROW rx;
- while ((rx = mysql_fetch_row (m_genre_rows)) != 0)
- m_Genres[rx[1]]=rx[0];
- // init random number generator
- struct timeval tv;
- struct timezone tz;
- gettimeofday( &tv, &tz );
- srandom( tv.tv_usec );
- if (!strncmp(filename,"./",2)) // strip leading ./
- filename += 2;
- const char *cfilename=filename;
- if (isdigit(filename[0]) && isdigit(filename[1]) && filename[2]=='/' && !strchr(filename+3,'/'))
- cfilename=cfilename+3;
- if (strlen(cfilename)>255)
+ else
{
- mgWarning("Length of file exceeds database field capacity: %s", filename);
- return;
+ c_folder1[0]=0;
+ c_folder2[0]=0;
+ c_folder3[0]=0;
+ c_folder4[0]=0;
}
- mgDebug(3,"Importing %s",filename);
+ sql_Cstring(f.tag()->artist(),c_artist);
+ sql_Cstring(f.tag()->title(),c_title);
+ if (f.tag()->album()=="")
+ sql_Cstring("Unassigned",c_album);
+ else
+ sql_Cstring(f.tag()->album(),c_album);
+ TagLib::String sgenre1=f.tag()->genre();
+ const char *genrename=sgenre1.toCString();
+ const char *genreid=m_Genres[genrename].c_str();
+ sql_Cstring(genreid,c_genre1);
+ sql_Cstring(getlanguage(filename),c_lang);
+ char sql[7000];
+ char *c_cddbid=getAlbum(filename,c_album,c_artist);
sql_Cstring(cfilename,c_mp3file);
- char sql[600];
sprintf(sql,"SELECT id from tracks WHERE mp3file=%s",c_mp3file);
- string s = get_col0(sql);
- if (s!="NULL")
+ string id = get_col0(sql);
+ if (id!="NULL")
{
- if (GetFileInfo(filename))
- UpdateTrack(atol(s.c_str()));
+ sprintf(sql,"UPDATE tracks SET artist=%s, title=%s,year=%d,sourceid=%s,"
+ "tracknb=%d,length=%d,bitrate=%d,samplerate=%d,"
+ "channels=%d,genre1=%s,lang=%s WHERE id=%ld",
+ c_artist,c_title,f.tag()->year(),c_cddbid,
+ f.tag()->track(),ap->length(),ap->bitrate(),ap->sampleRate(),
+ ap->channels(),c_genre1,c_lang,atol(id.c_str()));
}
else
{
- if (GetFileInfo(filename))
- AddTrack();
+ sprintf(sql,"INSERT INTO tracks SET artist=%s,title=%s,year=%u,sourceid=%s,"
+ "tracknb=%u,mp3file=%s,length=%d,bitrate=%d,samplerate=%d,"
+ "channels=%d,genre1=%s,genre2='',lang=%s,"
+ "folder1=%s,folder2=%s,folder3=%s,folder4=%s",
+ c_artist,c_title,f.tag()->year(),c_cddbid,
+ f.tag()->track(),c_mp3file,ap->length(),ap->bitrate(),ap->sampleRate(),
+ ap->channels(),c_genre1,c_lang,
+ c_folder1,c_folder2,c_folder3,c_folder4);
}
+ free(c_cddbid);
+ exec_sql(sql);
}
void
@@ -845,9 +818,15 @@ mgDbGd::Sync(char * const * path_argv, bool delete_missing)
extern void showimportcount(unsigned int,bool final=false);
if (!Connect())
return;
+ LoadMapInto("SELECT id,genre from genre",&m_Genres,0);
+ // init random number generator
+ struct timeval tv;
+ struct timezone tz;
+ gettimeofday( &tv, &tz );
+ srandom( tv.tv_usec );
+ CreateFolderFields();
unsigned int importcount=0;
- CreateFolderFields();
chdir(the_setup.ToplevelDir);
FTS *fts;
FTSENT *ftsent;
@@ -858,11 +837,10 @@ mgDbGd::Sync(char * const * path_argv, bool delete_missing)
{
if (!((ftsent->fts_statp->st_mode)||S_IFREG))
continue;
- char *extension = strrchr(ftsent->fts_path,'.');
- if (!extension)
- continue;
- strcpy(c_extension,extension+1);
- if (!strcasecmp(c_extension,"flac") || !strcasecmp(c_extension,"ogg") || !strcasecmp(c_extension,"mp3"))
+ char *ext = extension(ftsent->fts_path);
+ if (!strcasecmp(ext,"flac")
+ || !strcasecmp(ext,"ogg")
+ || !strcasecmp(ext,"mp3"))
{
SyncFile(ftsent->fts_path);
importcount++;
diff --git a/mg_db_gd.h b/mg_db_gd.h
index 6cb295c..f8626c1 100644
--- a/mg_db_gd.h
+++ b/mg_db_gd.h
@@ -52,32 +52,10 @@ class mgDbGd : public mgDb {
string get_col0( const string query);
char *sql_Cstring(TagLib::String s,char *buf=0);
TagLib::String getlanguage(const char *filename);
- char * getAlbum(const char *c_album,const char *c_artist,const char *c_directory);
- bool GetFileInfo(const char *filename);
- void AddTrack();
- void UpdateTrack(long trackid);
+ char * getAlbum(const char *filename,const char *c_album,const char *c_artist);
void SyncFile(const char *filename);
map<string,string> m_Genres;
- MYSQL_RES* m_genre_rows;
- char c_album[520]; // at least 256 * 2 + 2 for VARCHAR(255), see sql_string()
- char c_artist[520];
- char c_title[520];
- char c_directory[520];
- char c_mp3file[520];
- char c_genre1[520];
- char c_lang[520];
- char c_folder1[520];
- char c_folder2[520];
- char c_folder3[520];
- char c_folder4[520];
- char c_extension[300];
- unsigned int trackno;
- unsigned int year;
- int len;
- int bitrate;
- int sample;
- int channels;
};
#endif
diff --git a/mg_tools.c b/mg_tools.c
index c0bbc47..61dff0a 100644
--- a/mg_tools.c
+++ b/mg_tools.c
@@ -146,3 +146,12 @@ ltos (long l)
s << l;
return s.str ();
}
+
+char *
+extension(const char *filename)
+{
+ char *dot = strrchr(filename,'.');
+ if (!dot)
+ dot = strrchr(filename,0)-1;
+ return dot+1;
+}
diff --git a/mg_tools.h b/mg_tools.h
index bbe5ace..497abaf 100644
--- a/mg_tools.h
+++ b/mg_tools.h
@@ -123,4 +123,5 @@ string itos (int i);
//! \brief convert long to string
string ltos (long l);
+char *extension (const char *filename);
#endif /* _MUGGLE_TOOLS_H */