diff --git a/inc/common/macro.h b/inc/common/macro.h index 3e220015527cf73428f3a5799b45d417e6c0b9e5..8b1b527e5c3c1f4460b5f478af963b791b52f3e4 100644 --- a/inc/common/macro.h +++ b/inc/common/macro.h @@ -161,7 +161,6 @@ typedef volatile enum { #define SQLITE_STEP_ROW(db, stmt, error) SQLITE_STEP(db, stmt, SQLITE_ROW, error) #define SQLITE_STEP_DONE(db, stmt, error) SQLITE_STEP(db, stmt, SQLITE_DONE, error) -#define SQLITE_STEP_OK(db, stmt, error) SQLITE_STEP(db, stmt, SQLITE_OK, error) #define SQLITE_DO_ROLLBACK(db) \ sqlite3_exec((sqlite3 *) db, "ROLLBACK TRANSACTION;\n", NULL, NULL, NULL); diff --git a/inc/lektor/database.h b/inc/lektor/database.h index c2d090799c38f9184c682abf0a28af80f9d4ec4a..b0383152b10acc95f9d82f029f2a74fafa7e6b47 100644 --- a/inc/lektor/database.h +++ b/inc/lektor/database.h @@ -50,6 +50,7 @@ bool database_update (volatile sqlite3 *db, const char *kara_dir, i bool database_update_add (volatile sqlite3 *db, const char *kara_path, struct kara_metadata *mdt, uint64_t id, bool avail); bool database_update_set_available(volatile sqlite3 *db, int id); void database_update_del (volatile sqlite3 *db, int id); +void database_update_touch (volatile sqlite3 *db, int id); /* Control the content of the queue. */ bool database_queue_add_uri(volatile sqlite3 *db, struct lkt_uri *uri, int priority); diff --git a/src/database/playlist.c b/src/database/playlist.c index a805e47b214f86c4d35dbb9eadbd3430f6c3ac36..b3d259ab8066d934b47fe7c4be47940baf215330 100644 --- a/src/database/playlist.c +++ b/src/database/playlist.c @@ -51,7 +51,7 @@ database_plt_remove_pos(volatile sqlite3 *db, const char *name, int pos) SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_BIND_TEXT(db, stmt, 1, name, error); SQLITE_BIND_INT(db, stmt, 2, pos, error); - SQLITE_STEP_OK(db, stmt, error); + SQLITE_STEP_DONE(db, stmt, error); sta = true; error: sqlite3_finalize(stmt); @@ -67,7 +67,7 @@ database_plt_clear(volatile sqlite3 *db, const char *name) bool sta = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_BIND_TEXT(db, stmt, 1, name, error); - SQLITE_STEP_OK(db, stmt, error); + SQLITE_STEP_DONE(db, stmt, error); sta = true; error: sqlite3_finalize(stmt); @@ -83,7 +83,7 @@ database_plt_rename(volatile sqlite3 *db, const char *old_name, const char *new_ SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_BIND_TEXT(db, stmt, 1, new_name, error); SQLITE_BIND_TEXT(db, stmt, 2, old_name, error); - SQLITE_STEP_OK(db, stmt, error); + SQLITE_STEP_DONE(db, stmt, error); sta = true; error: sqlite3_finalize(stmt); diff --git a/src/database/stickers.c b/src/database/stickers.c index 6f52e6eee8ea4ed773e13a59ace2d13242019ef8..149be88f8bc25201ec3730d49eee2ba03f8ae567 100644 --- a/src/database/stickers.c +++ b/src/database/stickers.c @@ -37,7 +37,7 @@ database_sticker_delete(volatile sqlite3 *db, const char *name) RETURN_IF(strlen(name) == 0, "A sticker name must be at least one character long", ret); SQLITE_PREPARE(db, stmt, INSERT, error); SQLITE_BIND_TEXT(db, stmt, 1, name, error); - SQLITE_STEP_OK(db, stmt, error); + SQLITE_STEP_DONE(db, stmt, error); ret = true; error: sqlite3_finalize(stmt); @@ -117,7 +117,7 @@ database_sticker_delete_specify(volatile sqlite3 *db, const char *type, int uri, if (name) SQLITE_BIND_TEXT(db, stmt, 2, name, error); - SQLITE_STEP_OK(db, stmt, error); + SQLITE_STEP_DONE(db, stmt, error); ret = true; error: sqlite3_finalize(stmt); diff --git a/src/database/update.c b/src/database/update.c index 7ff464aa795b96b77fc3bd8d34e054de40049a3c..bef7c3f913cc4003a0287517db550e1eab010f00 100644 --- a/src/database/update.c +++ b/src/database/update.c @@ -24,7 +24,7 @@ __add_kara_to_update_job(volatile sqlite3 *db, size_t id) sqlite3_stmt *stmt; SQLITE_PREPARE(db, stmt, SQL, error); SQLITE_BIND_INT(db, stmt, 1, (int) id, error); - SQLITE_STEP_OK(db, stmt, error); + SQLITE_STEP_DONE(db, stmt, error); return true; error: return false; @@ -224,7 +224,7 @@ database_deleted_kara(volatile sqlite3 *db, int **kara_id, size_t *len) while (sqlite3_step(stmt) == SQLITE_ROW) { if (size == *len) { - new = realloc((void *) kara_id, (*len) * 2 * sizeof(void *)); + new = realloc(*kara_id, size * 2 * sizeof(int)); GOTO_UNLESS(new, "Out of memory", out); size *= 2; *kara_id = new; @@ -254,6 +254,12 @@ error: LOG_WARN_SCT("DB", "Failed to get informations about the last update: %s", sqlite3_errmsg((sqlite3 *) db)); } +void +database_update_touch(volatile sqlite3 *db, int id) +{ + __add_kara_to_update_job(db, id); +} + void database_update_del(volatile sqlite3 *db, int id) { @@ -261,7 +267,7 @@ database_update_del(volatile sqlite3 *db, int id) sqlite3_stmt *stmt = NULL; SQLITE_PREPARE(db, stmt, SQL, error); SQLITE_BIND_INT(db, stmt, 1, id, error); - SQLITE_STEP_OK(db, stmt, error); + SQLITE_STEP_DONE(db, stmt, error); LOG_WARN_SCT("DB", "Deleted kara with id '%d' from database", id); error: return; @@ -269,7 +275,7 @@ error: #define sqlite_just_exec(func, query) \ void func (volatile sqlite3 *db) { \ - SQLITE_EXEC(db, #query, error); \ + SQLITE_EXEC(db, query, error); \ error: return; \ } sqlite_just_exec(database_stamp, "UPDATE misc SET last_update = strftime('%s','now');") diff --git a/src/database/user.c b/src/database/user.c index cad67826f5fec56ab1e9b58dea3121d729de8a28..8460216eb5cb5f174506a908b92f19bd586bc3b0 100644 --- a/src/database/user.c +++ b/src/database/user.c @@ -29,7 +29,7 @@ database_user_add(volatile sqlite3 *db, const char *username, const char *passwo SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_BIND_TEXT(db, stmt, 1, username, error); SQLITE_BIND_TEXT(db, stmt, 2, password, error); - SQLITE_STEP_OK(db, stmt, error); + SQLITE_STEP_DONE(db, stmt, error); LOG_INFO_SCT("DB", "User '%s' successfully added", username); ret = true; error: diff --git a/src/net/downloader.c b/src/net/downloader.c index 9606701e0e7a89b1bd3f3e15430df3f142864528..b4cfa451224c534499985fe9d50e952764049461 100644 --- a/src/net/downloader.c +++ b/src/net/downloader.c @@ -369,6 +369,7 @@ __handle_got_json(volatile sqlite3 *db, struct lkt_repo *repo, struct json_objec database_get_update(db, &db_timestamp, NULL, NULL); if (db_timestamp >= filestamp && filestamp > timestamp && ! kara_metadata_equals(&kara.mdt, kara.filename)) { + database_update_touch(db, kara.id); LOG_INFO_SCT("REPO", "Ignore kara '%ld' with path '%s'", kara.id, kara.filename); continue; } @@ -407,12 +408,12 @@ __handle_deleted_kara(volatile sqlite3 *db) int *kara_ids; char filepath[PATH_MAX]; database_deleted_kara(db, &kara_ids, &len); - for (i = 0; i < len; ++i) { if (!database_get_kara_path(db, kara_ids[i], filepath)) continue; database_update_del(db, kara_ids[i]); } + free(kara_ids); } void *