Skip to content
Extraits de code Groupes Projets
Vérifiée Valider 2e51fcb1 rédigé par Kubat's avatar Kubat
Parcourir les fichiers

Check mdt equality in downloader

parent ef8935dc
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!77Kara downloader update
...@@ -47,9 +47,14 @@ struct kara { ...@@ -47,9 +47,14 @@ struct kara {
Returns 0 on success and -1 on error. */ Returns 0 on success and -1 on error. */
int kara_metadata_read(struct kara_metadata *dst, const char *filename); int kara_metadata_read(struct kara_metadata *dst, const char *filename);
/* Write metadata to a mkv file */ /* Write metadata to a mkv file. Returns 0 on success and -1 on error */
int kara_metadata_write(struct kara_metadata *mdt, const char *filename, const char *mkvpropedit); int kara_metadata_write(struct kara_metadata *mdt, const char *filename, const char *mkvpropedit);
/* Check if the mdt of the kara `filename` is the same as the `mdt`.
Returns 0 on success and -1 on error or if the metadata are
not equals. */
int kara_metadata_equals(struct kara_metadata *mdt, const char *filename);
/* Set the metadata for the file according to its path. */ /* Set the metadata for the file according to its path. */
int metadata_set_file(char *karapath, const char *mkvpropedit); int metadata_set_file(char *karapath, const char *mkvpropedit);
......
...@@ -537,3 +537,19 @@ error: ...@@ -537,3 +537,19 @@ error:
close(file.fd); close(file.fd);
return status_code; return status_code;
} }
int
kara_metadata_equals(struct kara_metadata *mdt, const char *filename)
{
struct kara_metadata kara_mdt; /* FIXME: Less dirty bomb */
if (kara_metadata_read(&kara_mdt, filename))
return -1;
return ! (STR_MATCH(kara_mdt.song_name, mdt->song_name) &&
STR_MATCH(kara_mdt.source_name, mdt->source_name) &&
STR_MATCH(kara_mdt.category, mdt->category) &&
STR_MATCH(kara_mdt.language, mdt->language) &&
STR_MATCH(kara_mdt.author_name, mdt->author_name) &&
STR_MATCH(kara_mdt.song_type, mdt->song_type) &&
kara_mdt.song_number == mdt->song_number);
}
...@@ -349,26 +349,29 @@ __handle_got_json(volatile sqlite3 *db, struct lkt_repo *repo, struct json_objec ...@@ -349,26 +349,29 @@ __handle_got_json(volatile sqlite3 *db, struct lkt_repo *repo, struct json_objec
} }
safe_snprintf(kara.filename + kara_dir_len, PATH_MAX - kara_dir_len, "%d.mkv", integer); safe_snprintf(kara.filename + kara_dir_len, PATH_MAX - kara_dir_len, "%d.mkv", integer);
/* Reads the json */
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);
if (err || safe_json_get_int32(kara_json, "song_number", &kara.mdt.song_number)) {
LOG_WARN_SCT("REPO", "Json is invalid for kara '%ld', skip it", kara.id);
continue;
}
/* Timestamp verification */ /* Timestamp verification */
if (safe_json_get_long(kara_json, "unix_timestamp", &timestamp)) if (safe_json_get_long(kara_json, "unix_timestamp", &timestamp))
continue; continue;
filestamp = get_mtime(kara.filename); filestamp = get_mtime(kara.filename);
if (database_get_timestamp(db) >= filestamp && filestamp > timestamp && if (database_get_timestamp(db) >= filestamp && filestamp > timestamp &&
! kara_metadata_read(&kara.mdt, kara.filename)) { ! kara_metadata_equals(&kara.mdt, kara.filename)) {
LOG_INFO_SCT("REPO", "Ignore kara '%ld' with path '%s'", kara.id, kara.filename); LOG_INFO_SCT("REPO", "Ignore kara '%ld' with path '%s'", kara.id, kara.filename);
continue; continue;
} }
LOG_WARN_SCT("REPO", "Download kara '%ld' with path '%s'", kara.id, kara.filename); LOG_WARN_SCT("REPO", "Download kara '%ld' with path '%s'", kara.id, kara.filename);
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)) { 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); LOG_ERROR_SCT("REPO", "Could not add unavailable kara %ld to db", kara.id);
continue; continue;
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter