summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Ørbekk <orbekk@pvv.ntnu.no>2008-08-12 21:44:18 +0200
committerKjetil Ørbekk <orbekk@pvv.ntnu.no>2008-08-12 21:44:18 +0200
commit425289cfe389c4a5c0eaed744fe1c637328fc8ef (patch)
tree122aa167009f4aa46d72e644314b3cdbc7c4b6f9
parentb401c0765b296f2660550592cd4bd043f5f8203b (diff)
- Added extension and mtime to dbschema and scanning code
mtime: preparation for updating files already in the db extension: to include extension in the mp3fs hierarchy
-rw-r--r--dbschema.sql2
-rw-r--r--src/mp3_subr.c27
2 files changed, 25 insertions, 4 deletions
diff --git a/dbschema.sql b/dbschema.sql
index efa89f5..ec24d28 100644
--- a/dbschema.sql
+++ b/dbschema.sql
@@ -13,6 +13,8 @@ CREATE TABLE song (
genrename varchar(200),
filepath varchar(255),
year int,
+ extension varchar(50),
+ mtime int,
PRIMARY KEY(title, artistname, year)
);
diff --git a/src/mp3_subr.c b/src/mp3_subr.c
index 6668b57..546bbdd 100644
--- a/src/mp3_subr.c
+++ b/src/mp3_subr.c
@@ -93,10 +93,12 @@ mp3_scan(char *filepath)
TagLib_File *file;
TagLib_Tag *tag;
char *artist, *album, *genre, *title;
+ const char *extension;
int ret;
unsigned int year;
sqlite3_stmt *st;
-
+ struct stat fstat;
+
file = taglib_file_new(filepath);
/* XXX: errmsg. */
if (file == NULL)
@@ -107,6 +109,11 @@ mp3_scan(char *filepath)
return;
}
+ if (stat(filepath, &fstat) < 0) {
+ perror("stat");
+ return;
+ }
+
/* XXX: The main query code should perhaps be a bit generalized. */
/* First insert artist if we have it. */
@@ -188,6 +195,13 @@ mp3_scan(char *filepath)
title = taglib_tag_title(tag);
album = taglib_tag_album(tag);
year = taglib_tag_year(tag);
+ extension = strrchr(filepath, (int)'.');
+ if (extension == NULL)
+ extension = "";
+ else
+ /* Drop the '.' */
+ extension++;
+
if (title == NULL || genre == NULL || artist == NULL ||
album == NULL)
break;
@@ -205,13 +219,16 @@ mp3_scan(char *filepath)
sqlite3_bind_int(st, 2, year);
ret = sqlite3_step(st);
sqlite3_finalize(st);
- /* Already exists or generic error. */
+ if (ret == SQLITE_ROW)
+ /* Already exists. XXX: Update it if mtime mismatches */
+ break;
if (ret != SQLITE_DONE)
+ /* SQL Error. */
break;
/* Now, finally insert it. */
ret = sqlite3_prepare_v2(handle, "INSERT INTO song(title, "
- "artistname, album, genrename, year, filepath) "
- "VALUES(?, ?, ?, ?, ?, ?)",
+ "artistname, album, genrename, year, filepath, mtime, "
+ "extension) VALUES(?, ?, ?, ?, ?, ?, ?, ?)",
-1, &st, NULL);
if (ret != SQLITE_OK) {
warnx("Error preparing insert statement: %s\n",
@@ -224,6 +241,8 @@ mp3_scan(char *filepath)
sqlite3_bind_text(st, 4, genre, -1, SQLITE_STATIC);
sqlite3_bind_int(st, 5, year);
sqlite3_bind_text(st, 6, filepath, -1, SQLITE_STATIC);
+ sqlite3_bind_int(st, 7, fstat.st_mtime);
+ sqlite3_bind_text(st, 8, extension, -1, SQLITE_STATIC);
ret = sqlite3_step(st);
sqlite3_finalize(st);
if (ret != SQLITE_DONE) {