diff --git a/inc/lektor/database.h b/inc/lektor/database.h index 2a3e87e1463e622184f94e7374873bc189ae35c4..4f4ef9ccb31ea9ea3cb4ff60ed3bd3549f92aae7 100644 --- a/inc/lektor/database.h +++ b/inc/lektor/database.h @@ -65,7 +65,7 @@ bool database_get_kara_mtime_path (volatile sqlite3 *db, char filepath[PATH_MA bool database_get_kara_duration_path(volatile sqlite3 *db, char filepath[PATH_MAX], uint64_t *duration); void database_cache_kara (volatile sqlite3 *db, int id); -void database_get_all_kara(volatile sqlite3 *db, int **ret_ids, size_t *ret_ids_len); +void database_get_all_non_cached_kara(volatile sqlite3 *db, int **ret_ids, size_t *ret_ids_len); /* Update the database. */ bool database_update (volatile sqlite3 *db, const char *kara_dir, int check_timestamp); diff --git a/src/base/launch.c b/src/base/launch.c index d8c49a72684d2165c4796f1d21233ce58d2e265c..d59d0da0220763d349f4953393074441e657b061 100644 --- a/src/base/launch.c +++ b/src/base/launch.c @@ -180,14 +180,20 @@ ___caching_walker(void *args) size_t ids_count = 0; int *ids = NULL; - database_get_all_kara(db, &ids, &ids_count); + database_get_all_non_cached_kara(db, &ids, &ids_count); if (ids == NULL || ids_count == 0) { LOG_ERROR("CACHING", "No kara present in the database, exit caching thread"); return NULL; } - free(ids); + LOG_INFO("CACHE", "Begin to cache %ld karas", ids_count); + + for (size_t index = 0; index < ids_count; ++index) { + database_cache_kara(db, ids[index]); + } + LOG_INFO("CACHE", "Finished caching %ld karas", ids_count); + free(ids); return NULL; } diff --git a/src/database/find.c b/src/database/find.c index 495fdac397219c78730cb744a5459b2f4a1be75d..7bea8d7f561f8b252adf49583c4ed249b69c8b19 100644 --- a/src/database/find.c +++ b/src/database/find.c @@ -399,10 +399,10 @@ error: } void -database_get_all_kara(volatile sqlite3 *db, int **ret_ids, size_t *ret_ids_len) +database_get_all_non_cached_kara(volatile sqlite3 *db, int **ret_ids, size_t *ret_ids_len) { - static const char *SQL_DATA = "SELECT id FROM kara;"; - static const char *SQL_COUNT = "SELECT count(id) FROM kara;"; + static const char *SQL_DATA = "SELECT id FROM kara WHERE cached_mtime = 0 OR cached_duration = 0;"; + static const char *SQL_COUNT = "SELECT count(id) FROM kara WHERE cached_mtime = 0 OR cached_duration = 0;"; sqlite3_stmt *stmt = NULL; size_t index = 0;