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

MODULE: Download karas, but incorrect UTF-8 strings?

parent a12dc31c
Branches
Étiquettes
1 requête de fusion!130Resolve "Remove json-c"
...@@ -42,6 +42,7 @@ struct kara { ...@@ -42,6 +42,7 @@ struct kara {
int update_count; int update_count;
volatile sqlite3 *db; volatile sqlite3 *db;
struct module_repo_internal *repo; struct module_repo_internal *repo;
size_t kara_dir_len;
long id; long id;
long unix_timestamp; long unix_timestamp;
struct kara_metadata mdt; struct kara_metadata mdt;
...@@ -68,9 +69,8 @@ struct module_repo_internal { ...@@ -68,9 +69,8 @@ struct module_repo_internal {
/* Craft a filename for newly downloaded karas. Arguments: /* Craft a filename for newly downloaded karas. Arguments:
* - str: the destination string, the prefix, i.e. the kara_dir, is already here * - str: the destination string, the prefix, i.e. the kara_dir, is already here
* - len: the length of the string, not its size (which is PATH_MAX)
* - kara: the kara structure, which contains all the data to create the filename */ * - kara: the kara structure, which contains all the data to create the filename */
void (*craft_filename)(char str[PATH_MAX], size_t, struct kara *); void (*craft_filename)(char str[PATH_MAX], struct kara *);
/* Worker threads */ /* Worker threads */
// *INDENT-OFF* // *INDENT-OFF*
...@@ -129,19 +129,19 @@ __mkdir(const char *dir, unsigned int umask) ...@@ -129,19 +129,19 @@ __mkdir(const char *dir, unsigned int umask)
} }
static inline void static inline void
__craft_filename_obfuscate(char str[PATH_MAX], size_t len, struct kara *kara) __craft_filename_obfuscate(char str[PATH_MAX], struct kara *kara)
{ {
/* Obfuscate filename */ /* Obfuscate filename */
safe_snprintf(str + len, PATH_MAX - len, "%ld.mkv", kara->id); safe_snprintf(str, PATH_MAX, "%s%ld.mkv", kara->database_filepath, kara->id);
} }
static inline void static inline void
__craft_filename_non_obfuscate(char str[PATH_MAX], size_t len, struct kara *kara) __craft_filename_non_obfuscate(char str[PATH_MAX], struct kara *kara)
{ {
/* Not obfuscate filename, need to create directories, won't fail if not /* Not obfuscate filename, need to create directories, won't fail if not
* possible. The program will fail later, when write will be attempted. */ * possible. The program will fail later, when write will be attempted. */
len += safe_snprintf(str + len, PATH_MAX - len, "%s/%s/%s/", kara->mdt.category, size_t len = safe_snprintf(str, PATH_MAX, "%s%s/%s/%s/", kara->database_filepath,
kara->mdt.language, kara->mdt.author_name); kara->mdt.category, kara->mdt.language, kara->mdt.author_name);
__mkdir(str, 0); __mkdir(str, 0);
if (access(str, R_OK | W_OK)) if (access(str, R_OK | W_OK))
LOG_ERROR("REPO", "No access in read / write for folder %s", str); LOG_ERROR("REPO", "No access in read / write for folder %s", str);
...@@ -311,7 +311,7 @@ __handle_got_json_dl(struct kara *kara, int current_id) ...@@ -311,7 +311,7 @@ __handle_got_json_dl(struct kara *kara, int current_id)
safe_snprintf(kara->url, LKT_LINE_MAX, kara->repo->get_id_file, kara->id); safe_snprintf(kara->url, LKT_LINE_MAX, kara->repo->get_id_file, kara->id);
LOG_INFO("REPO", "Start downloading kara %ld to %s", kara->id, kara->filename); LOG_INFO("REPO", "Start downloading kara %ld to: %s", kara->id, kara->filename);
if (__download_kara(kara->url, kara->filename, true)) { if (__download_kara(kara->url, kara->filename, true)) {
LOG_WARN("REPO", "Could not download kara %ld at path '%s'", LOG_WARN("REPO", "Could not download kara %ld at path '%s'",
kara->id, kara->filename); kara->id, kara->filename);
...@@ -383,13 +383,19 @@ __handle_got_json_internal_callback(const char *key, const char *val, int comp, ...@@ -383,13 +383,19 @@ __handle_got_json_internal_callback(const char *key, const char *val, int comp,
int current_id = 0; int current_id = 0;
/* Timestamp and presence verification */ /* Timestamp and presence verification */
if (!database_get_kara_path(kara->db, kara->id, kara->database_filepath)) kara->repo->craft_filename(kara->filename, kara);
LOG_DEBUG("REPO", "Generated filepath for kara %ld is: %s", kara->id, kara->filename);
if (!database_get_kara_path(kara->db, kara->id, kara->filename)) {
kara->repo->craft_filename(kara->filename, kara);
goto do_it; goto do_it;
}
/* Override calculated filename if it exists */ /* Override calculated filename if it exists */
size_t db_fp_size = (strlen(kara->database_filepath) + 1) * sizeof(char); size_t db_fp_size = (strlen(kara->database_filepath) + 1) * sizeof(char);
memcpy(kara->filename, kara->database_filepath, db_fp_size); memcpy(kara->filename, kara->database_filepath, db_fp_size);
/* Set filepath for kara */
filestamp = get_mtime(kara->filename); filestamp = get_mtime(kara->filename);
if (!(filestamp > kara->unix_timestamp)) if (!(filestamp > kara->unix_timestamp))
goto do_it; goto do_it;
...@@ -426,16 +432,19 @@ __handle_got_json(volatile sqlite3 *db, struct module_repo_internal *repo, const ...@@ -426,16 +432,19 @@ __handle_got_json(volatile sqlite3 *db, struct module_repo_internal *repo, const
"Can't get the mkvpropedit executable path", NOTHING); "Can't get the mkvpropedit executable path", NOTHING);
/* Craft a folder path here, it will be used later */ /* Craft a folder path here, it will be used later */
size_t kara_dir_len = strlen(repo->kara_dir); kara.kara_dir_len = strlen(repo->kara_dir);
kara_dir_len = sizeof(char) * (kara_dir_len + 1); kara.kara_dir_len = sizeof(char) * (kara.kara_dir_len + 1);
memcpy(kara.database_filepath, repo->kara_dir, kara_dir_len);
if (kara.database_filepath[kara_dir_len - 1] != '/') { memcpy(kara.database_filepath, repo->kara_dir, kara.kara_dir_len);
memcpy(kara.filename, repo->kara_dir, kara.kara_dir_len);
if (kara.database_filepath[kara.kara_dir_len - 1] != '/') {
strncat(kara.database_filepath, "/", PATH_MAX - 1); strncat(kara.database_filepath, "/", PATH_MAX - 1);
kara.database_filepath[++kara_dir_len] = 0; kara.database_filepath[++kara.kara_dir_len] = 0;
} }
/* Handle the json */ /* Handle the json */
LOG_INFO("REPO", "Starting to process json for repo %s", repo->name); LOG_INFO("REPO", "Starting to process json for repo %s, total of %ld karas", repo->name, len);
json_parse(json, 2, __handle_got_json_internal_callback, (void *) &kara); json_parse(json, 2, __handle_got_json_internal_callback, (void *) &kara);
LOG_INFO("REPO", "Updated %ld karas and ignored %ld karas, total is %ld", LOG_INFO("REPO", "Updated %ld karas and ignored %ld karas, total is %ld",
kara.update_count, kara.ignored_count, len); kara.update_count, kara.ignored_count, len);
......
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