diff options
author | lvw <lvw@e10066b5-e1e2-0310-b819-94efdf66514b> | 2004-08-23 06:36:25 +0000 |
---|---|---|
committer | lvw <lvw@e10066b5-e1e2-0310-b819-94efdf66514b> | 2004-08-23 06:36:25 +0000 |
commit | 622c22ea45654d4741a900fa078bafa947b24177 (patch) | |
tree | 3bb91389c820abd1f793bfa7f26bbf145856e707 | |
parent | 37ce84e62b46619cc0bfc5733159c07b88556754 (diff) | |
download | vdr-plugin-muggle-622c22ea45654d4741a900fa078bafa947b24177.tar.gz vdr-plugin-muggle-622c22ea45654d4741a900fa078bafa947b24177.tar.bz2 |
Initial version of an import module added
git-svn-id: https://vdr-muggle.svn.sourceforge.net/svnroot/vdr-muggle/trunk/muggle-plugin@114 e10066b5-e1e2-0310-b819-94efdf66514b
-rw-r--r-- | gd_content_interface.c | 8 | ||||
-rwxr-xr-x | mugglei.c | 170 | ||||
-rwxr-xr-x | scripts/gdgentools.pm | 2 | ||||
-rwxr-xr-x | scripts/gdimport.pl | 3 | ||||
-rwxr-xr-x | scripts/make-empty-db | 16 |
5 files changed, 186 insertions, 13 deletions
diff --git a/gd_content_interface.c b/gd_content_interface.c index 759c32c..d7d157a 100644 --- a/gd_content_interface.c +++ b/gd_content_interface.c @@ -1,8 +1,8 @@ /*! \file content_interface.cpp * \brief Data Objects for content (e.g. mp3 files, movies) for the vdr muggle plugindatabase * - * \version $Revision: 1.24 $ - * \date $Date: 2004/07/25 21:33:35 $ + * \version $Revision: 1.25 $ + * \date $Date: 2004/08/23 06:36:25 $ * \author Ralf Klueber, Lars von Wedel, Andreas Kellner * \author Responsible author: $Author: lvw $ * @@ -791,6 +791,7 @@ int GdPlaylist::insertDataFromSQL() } return nrows; } + bool GdPlaylist::storePlaylist() { vector<mgContentItem*>::iterator iter; @@ -1395,6 +1396,9 @@ mgContentItem* GdTreeNode::getSingleTrack() /* -------------------- begin CVS log --------------------------------- * $Log: gd_content_interface.c,v $ + * Revision 1.25 2004/08/23 06:36:25 lvw + * Initial version of an import module added + * * Revision 1.24 2004/07/25 21:33:35 lvw * Removed bugs in finding track files and playlist indexing. * diff --git a/mugglei.c b/mugglei.c new file mode 100755 index 0000000..6587006 --- /dev/null +++ b/mugglei.c @@ -0,0 +1,170 @@ +#include <string>
+using namespace std;
+
+#include <id3.h/tag.h>
+#include <mysql/mysql.h>
+
+MYSQL *db;
+
+int init_database()
+{
+ if( mysql_init(db) == NULL )
+ {
+ return -1;
+ }
+
+ if( mysql_real_connect( db, "host", "user", "pass",
+ "dbname", 0, NULL, 0 ) == NULL )
+ {
+ return -2;
+ }
+
+ return 0;
+}
+
+time_t get_fs_modification_time( string filename )
+{
+ struct stat *buf = malloc( sizeof( struct stat ) );
+
+ // yes: obtain modification date for file and db entry
+ int res = stat( filename.c_str(), buf );
+
+ time_t res = buf->st_mtime;
+ free( buf );
+
+ return res;
+}
+
+time_t get_db_modification_time( long uid )
+{
+ char *query;
+ time_t mt;
+
+ asprintf( &query, "SELECT modification_time FROM tracks WHERE id='%d'", uid );
+
+ if( mysql_real_query( &db, query, strlen( query ) ) )
+ {
+ printf( mysql_error(&db) );
+ exit(1);
+ }
+ else
+ {
+ MYSQL_RES *result = mysql_store_result( db );
+ MYSQL_ROW row = mysql_fetch_row( result );
+
+ string mod_time = row[0];
+ mt = (time_t) atol( mod_time.c_str() );
+ }
+
+ free( query );
+ return mt;
+}
+
+long find_file_in_database( string filename )
+{
+ char *query;
+
+ asprintf( &query, "SELECT id FROM tracks WHERE mp3file='%s'", filename.c_str() );
+
+ if( mysql_real_query( &demo_db, query, strlen( query ) ) )
+ {
+ printf( mysql_error(&demo_db) );
+ exit(1);
+ }
+ else
+ {
+ MYSQL_RES *result = mysql_store_result( db );
+ row = mysql_fetch_row( result );
+
+ // obtain ID and return
+ return atol( row[0] );
+ }
+
+ free( query );
+}
+
+void evaluate_file( string filename )
+{
+ if( 0 == init_database() )
+ {
+ // is filename stored in database?
+ long uid = find_file_in_database( filename );
+ if( uid >= 0 )
+ {
+ // determine modification times in database and on filesystem
+ time_t db_time = get_db_modification_time( uid );
+ time_t fs_time = get_fs_modification_time( filename );
+
+ if( db_time > fs_time )
+ {
+ // db is newer: update id3 tags from db
+ update_tags( uid, filename );
+ }
+ else
+ {
+ // file is newer: update db from id3 tags
+ update_db( uid, filename );
+ }
+ }
+ else
+ {
+ // not in db yet: import file
+ import_file( filename );
+ }
+ }
+}
+
+void update_db( long uid, string filename )
+{
+ char title[1024], album[1024];
+ ID3_Tag filetag( filename.c_str() );
+
+ // obtain album value
+ ID3_Frame* album_frame = filetag.Find( ID3FID_ALBUM );
+ if( NULL != album_frame )
+ {
+ album_frame->Field ( ID3FN_TEXT ).Get ( album, 1024 );
+ }
+
+ // obtain title value
+ ID3_Frame* title_frame = filetag.Find( ID3FID_TITLE );
+ if( NULL != title_frame )
+ {
+ title_frame->Field ( ID3FN_TEXT ).Get ( title, 1024 );
+ }
+
+ // obtain year value (ID3FID_YEAR)
+
+ // obtain artist value (ID3FID_LEADARTIST)
+
+ // see what else may be needed later
+
+ // finally update the database
+
+ // update tracks table
+ mgSqlWriteQuery( db,
+ "UPDATE tracks "
+ "SET artist=\"%s\", title=\"%s\", year=%d, rating=%d "
+ "WHERE id=%d",
+ artist, title,
+ m_year, m_rating, uid );
+
+ // obtain associated album or create
+
+
+}
+
+void update_tags( long uid, string filename )
+{
+
+}
+
+void import_file( string filename )
+{
+
+}
+
+void main( int argc, char *argv[] )
+{
+
+}
diff --git a/scripts/gdgentools.pm b/scripts/gdgentools.pm index 3522302..aadc5c7 100755 --- a/scripts/gdgentools.pm +++ b/scripts/gdgentools.pm @@ -12,7 +12,7 @@ package gdgentools; ### General tool routines -use lib '/home/andi/muggle/import'; +use lib '/home/lvw/Development/muggle-import/scripts'; use gdparams; use IO::Socket; diff --git a/scripts/gdimport.pl b/scripts/gdimport.pl index 6c8f548..438b07c 100755 --- a/scripts/gdimport.pl +++ b/scripts/gdimport.pl @@ -16,7 +16,8 @@ # inclusion of mp3 tracks and a proper update of the database. -use lib '/home/andi/muggle/import'; +use lib '/home/lvw/Development/muggle-plugin/scripts'; +#use lib '/home/andi/muggle/import'; use gdparams; use gdgentools; use gddb; diff --git a/scripts/make-empty-db b/scripts/make-empty-db index 7157539..59d2c21 100755 --- a/scripts/make-empty-db +++ b/scripts/make-empty-db @@ -1,24 +1,22 @@ #!/bin/sh -export SCRIPTDIR=/home/andi/muggle/import +export SCRIPTDIR=/home/lvw/Development/muggle-plugin/scripts cd $SCRIPTDIR echo "creating db" -mysql < createdb.mysql +mysql -u root < createdb.mysql echo "creating tables" -mysql < $SCRIPTDIR/createtables.mysql +mysql -u root < $SCRIPTDIR/createtables.mysql echo "reading genres" -echo " use GiantDisc; load data local infile '$SCRIPTDIR/genres.txt' into table genre;"| mysql --local-infile=1 - +echo " use GiantDisc; load data local infile '$SCRIPTDIR/genres.txt' into table genre;"| mysql -u root --local-infile=1 echo "reading languages" -echo "use GiantDisc; load data local infile '$SCRIPTDIR/languages.txt' into table language;" | mysql --local-infile=1 +echo "use GiantDisc; load data local infile '$SCRIPTDIR/languages.txt' into table language;" | mysql -u root --local-infile=1 echo "reading musictypes" -echo "use GiantDisc; load data local infile '$SCRIPTDIR/musictypes.txt' into table language;" | mysql --local-infile=1 - +echo "use GiantDisc; load data local infile '$SCRIPTDIR/musictypes.txt' into table language;" | mysql -u root --local-infile=1 echo "reading sources" -echo "use GiantDisc; load data local infile '$SCRIPTDIR/sources.txt' into table language;" | mysql --local-infile=1 +echo "use GiantDisc; load data local infile '$SCRIPTDIR/sources.txt' into table language;" | mysql -u root --local-infile=1 |