summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlvw <lvw@e10066b5-e1e2-0310-b819-94efdf66514b>2004-08-23 06:36:25 +0000
committerlvw <lvw@e10066b5-e1e2-0310-b819-94efdf66514b>2004-08-23 06:36:25 +0000
commit622c22ea45654d4741a900fa078bafa947b24177 (patch)
tree3bb91389c820abd1f793bfa7f26bbf145856e707
parent37ce84e62b46619cc0bfc5733159c07b88556754 (diff)
downloadvdr-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.c8
-rwxr-xr-xmugglei.c170
-rwxr-xr-xscripts/gdgentools.pm2
-rwxr-xr-xscripts/gdimport.pl3
-rwxr-xr-xscripts/make-empty-db16
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