diff options
author | Kjetil Ørbekk <orbekk@pvv.ntnu.no> | 2008-08-12 21:44:18 +0200 |
---|---|---|
committer | Kjetil Ørbekk <orbekk@pvv.ntnu.no> | 2008-08-12 21:44:18 +0200 |
commit | 425289cfe389c4a5c0eaed744fe1c637328fc8ef (patch) | |
tree | 122aa167009f4aa46d72e644314b3cdbc7c4b6f9 | |
parent | b401c0765b296f2660550592cd4bd043f5f8203b (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.sql | 2 | ||||
-rw-r--r-- | src/mp3_subr.c | 27 |
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) { |