Skip to content
Extraits de code Groupes Projets

Database update from FS

Fusionnées Kubat a demandé de fusionner logs vers master
1 file
+ 29
41
Comparer les modifications
  • Côte à côte
  • En ligne
+ 29
41
@@ -337,7 +337,7 @@ __handle_got_json(volatile sqlite3 *db, struct lkt_repo *repo, struct json_objec
size_t i, len = json_object_array_length(json);
struct json_object *kara_json;
int32_t integer, err;
struct kara *kara;
struct kara kara;
char url[URL_MAX_LEN];
long filestamp, timestamp;
RETURN_UNLESS(len > 0 && json_object_get_array(json), "Json invalid or array empty", NOTHING);
@@ -345,74 +345,62 @@ __handle_got_json(volatile sqlite3 *db, struct lkt_repo *repo, struct json_objec
LOG_INFO_SCT("REPO", "Starting to process json for repo %s", repo->name);
for (i = 0; i < len; ++i) {
kara_json = json_object_array_get_idx(json, i);
kara = calloc(1, sizeof(struct kara));
RETURN_UNLESS(kara, "Out of memory", NOTHING);
err = 0;
/* Get the id of the kara. */
if (safe_json_get_int32(kara_json, "id", &integer))
continue;
kara->id = integer;
kara.id = integer;
/* Craft a fake filepath here, it will be used later. */
size_t kara_dir_len = strlen(repo->kara_dir);
memcpy(kara->filename, repo->kara_dir, sizeof(char) * (kara_dir_len + 1));
if (kara->filename[kara_dir_len - 1] != '/') {
strncat(kara->filename, "/", PATH_MAX - 1);
kara->filename[++kara_dir_len] = 0;
memcpy(kara.filename, repo->kara_dir, sizeof(char) * (kara_dir_len + 1));
if (kara.filename[kara_dir_len - 1] != '/') {
strncat(kara.filename, "/", PATH_MAX - 1);
kara.filename[++kara_dir_len] = 0;
}
safe_snprintf(kara->filename + kara_dir_len, PATH_MAX - kara_dir_len, "%d.mkv", integer);
LOG_INFO_SCT("REPO", "Crafted filename is '%s'", kara->filename);
safe_snprintf(kara.filename + kara_dir_len, PATH_MAX - kara_dir_len, "%d.mkv", integer);
/* Timestamp verification */
if (safe_json_get_long(kara_json, "unix_timestamp", &timestamp))
continue;
filestamp = get_mtime(kara->filename);
if (database_get_timestamp(db) < filestamp) {
LOG_WARN_SCT("REPO", "Kara file %s is more recent than database timestamp, download it", kara->filename);
goto do_it;
}
if (filestamp > timestamp) {
LOG_INFO_SCT("REPO", "Ignore kara '%ld', last timestamp was %ld, new is %ld", kara->id, filestamp, timestamp);
filestamp = get_mtime(kara.filename);
if (database_get_timestamp(db) < filestamp)
LOG_WARN_SCT("REPO", "Download kara '%ld' with path '%s'", kara.id, kara.filename);
else if (filestamp > timestamp) {
LOG_INFO_SCT("REPO", "Ignore kara '%ld' with path '%s'", kara.id, kara.filename);
continue;
}
do_it:
err |= safe_json_get_string(kara_json, "song_name", kara->mdt.song_name, LEKTOR_TAG_MAX);
err |= safe_json_get_string(kara_json, "source_name", kara->mdt.source_name, LEKTOR_TAG_MAX);
err |= safe_json_get_string(kara_json, "category", kara->mdt.category, LEKTOR_TAG_MAX);
err |= safe_json_get_string(kara_json, "language", kara->mdt.language, LEKTOR_TAG_MAX);
err |= safe_json_get_string(kara_json, "author_name", kara->mdt.author_name, LEKTOR_TAG_MAX);
err |= safe_json_get_string(kara_json, "song_type", kara->mdt.song_type, LEKTOR_TAG_MAX);
GOTO_IF(err, "Invalid json", err);
if (safe_json_get_int32(kara_json, "song_number", &kara->mdt.song_number))
goto err;
if (!database_update_add((sqlite3 *) db, kara->filename, &kara->mdt, kara->id, false)) {
LOG_ERROR_SCT("REPO", "Could not add unavailable kara %ld to db", kara->id);
err |= safe_json_get_string(kara_json, "song_name", kara.mdt.song_name, LEKTOR_TAG_MAX);
err |= safe_json_get_string(kara_json, "source_name", kara.mdt.source_name, LEKTOR_TAG_MAX);
err |= safe_json_get_string(kara_json, "category", kara.mdt.category, LEKTOR_TAG_MAX);
err |= safe_json_get_string(kara_json, "language", kara.mdt.language, LEKTOR_TAG_MAX);
err |= safe_json_get_string(kara_json, "author_name", kara.mdt.author_name, LEKTOR_TAG_MAX);
err |= safe_json_get_string(kara_json, "song_type", kara.mdt.song_type, LEKTOR_TAG_MAX);
RETURN_IF(err || safe_json_get_int32(kara_json, "song_number", &kara.mdt.song_number),
"Invalid json", NOTHING);
if (!database_update_add((sqlite3 *) db, kara.filename, &kara.mdt, kara.id, false)) {
LOG_ERROR_SCT("REPO", "Could not add unavailable kara %ld to db", kara.id);
continue;
}
safe_snprintf(url, URL_MAX_LEN, repo->get_id_file, kara->id);
safe_snprintf(url, URL_MAX_LEN, repo->get_id_file, kara.id);
if (__download_kara(url, kara->filename, true)) {
LOG_WARN_SCT("REPO", "Could not download kara %ld at path '%s'", kara->id, kara->filename);
if (__download_kara(url, kara.filename, true)) {
LOG_WARN_SCT("REPO", "Could not download kara %ld at path '%s'", kara.id, kara.filename);
continue;
}
if (!database_update_set_available((sqlite3 *) db, kara->id)) {
LOG_WARN_SCT("REPO", "Could not set kara %ld available", kara->id);
if (!database_update_set_available((sqlite3 *) db, kara.id)) {
LOG_WARN_SCT("REPO", "Could not set kara %ld available", kara.id);
continue;
}
database_stamp(db);
LOG_INFO_SCT("REPO", "Added kara %ld from repo %s, filepath is %s", kara->id, repo->name, kara->filename);
LOG_INFO_SCT("REPO", "Added kara %ld from repo %s, filepath is %s", kara.id, repo->name, kara.filename);
}
err:
free(kara);
}
void *
Chargement en cours