diff --git a/src/Makefile.am b/src/Makefile.am index 034f84146a9b39abee0ebbf0ccbbb74006d99c7f..58ad65b6b3dde7f38955f4d2d05734807d515947 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -34,7 +34,7 @@ endif ## Lib lektor # Base sources -liblektor_la_SOURCES = base/bufferfd.c base/cmd.c base/common.c base/config.c +liblektor_la_SOURCES = base/bufferfd.c base/cmd.c base/common.c base/config.c base/json.c liblektor_la_SOURCES += base/reg.c base/uri.c base/commands.c base/stack.c # Database sources diff --git a/src/Makefile.in b/src/Makefile.in index c9a9252f11ec24ae60cf46099b18326b8af7d524..87ccd656127a86e30744679035b041c265aa3c5b 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -148,7 +148,7 @@ LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) @LKT_STATIC_MODULE_TRUE@liblektor_la_DEPENDENCIES = liblktmodsdl.la \ @LKT_STATIC_MODULE_TRUE@ liblktmodrepo.la am__liblektor_la_SOURCES_DIST = base/bufferfd.c base/cmd.c \ - base/common.c base/config.c base/reg.c base/uri.c \ + base/common.c base/config.c base/json.c base/reg.c base/uri.c \ base/commands.c base/stack.c database/disk.c database/memory.c \ database/open.c database/playlist.c database/queue.c \ database/stickers.c database/update.c database/user.c \ @@ -159,10 +159,11 @@ am__dirstamp = $(am__leading_dot)dirstamp @LKT_STATIC_MODULE_TRUE@am__objects_1 = module/liblektor_la-thread.lo am_liblektor_la_OBJECTS = base/liblektor_la-bufferfd.lo \ base/liblektor_la-cmd.lo base/liblektor_la-common.lo \ - base/liblektor_la-config.lo base/liblektor_la-reg.lo \ - base/liblektor_la-uri.lo base/liblektor_la-commands.lo \ - base/liblektor_la-stack.lo database/liblektor_la-disk.lo \ - database/liblektor_la-memory.lo database/liblektor_la-open.lo \ + base/liblektor_la-config.lo base/liblektor_la-json.lo \ + base/liblektor_la-reg.lo base/liblektor_la-uri.lo \ + base/liblektor_la-commands.lo base/liblektor_la-stack.lo \ + database/liblektor_la-disk.lo database/liblektor_la-memory.lo \ + database/liblektor_la-open.lo \ database/liblektor_la-playlist.lo \ database/liblektor_la-queue.lo \ database/liblektor_la-stickers.lo \ @@ -236,6 +237,7 @@ am__depfiles_remade = base/$(DEPDIR)/cmd.Po base/$(DEPDIR)/common.Po \ base/$(DEPDIR)/liblektor_la-commands.Plo \ base/$(DEPDIR)/liblektor_la-common.Plo \ base/$(DEPDIR)/liblektor_la-config.Plo \ + base/$(DEPDIR)/liblektor_la-json.Plo \ base/$(DEPDIR)/liblektor_la-reg.Plo \ base/$(DEPDIR)/liblektor_la-stack.Plo \ base/$(DEPDIR)/liblektor_la-uri.Plo \ @@ -468,12 +470,13 @@ liblktmodsdl_la_LIBADD = -lSDL2 -lmpv # Net sources liblektor_la_SOURCES = base/bufferfd.c base/cmd.c base/common.c \ - base/config.c base/reg.c base/uri.c base/commands.c \ - base/stack.c database/disk.c database/memory.c database/open.c \ - database/playlist.c database/queue.c database/stickers.c \ - database/update.c database/user.c database/config.c \ - database/find.c mkv/mkv.c mkv/utils.c mkv/write.c \ - net/command.c net/listen.c net/message.c $(am__append_8) + base/config.c base/json.c base/reg.c base/uri.c \ + base/commands.c base/stack.c database/disk.c database/memory.c \ + database/open.c database/playlist.c database/queue.c \ + database/stickers.c database/update.c database/user.c \ + database/config.c database/find.c mkv/mkv.c mkv/utils.c \ + mkv/write.c net/command.c net/listen.c net/message.c \ + $(am__append_8) # Liblektor configuration liblektor_la_CFLAGS = -fPIC @@ -645,6 +648,8 @@ base/liblektor_la-common.lo: base/$(am__dirstamp) \ base/$(DEPDIR)/$(am__dirstamp) base/liblektor_la-config.lo: base/$(am__dirstamp) \ base/$(DEPDIR)/$(am__dirstamp) +base/liblektor_la-json.lo: base/$(am__dirstamp) \ + base/$(DEPDIR)/$(am__dirstamp) base/liblektor_la-reg.lo: base/$(am__dirstamp) \ base/$(DEPDIR)/$(am__dirstamp) base/liblektor_la-uri.lo: base/$(am__dirstamp) \ @@ -775,6 +780,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@base/$(DEPDIR)/liblektor_la-commands.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@base/$(DEPDIR)/liblektor_la-common.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@base/$(DEPDIR)/liblektor_la-config.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@base/$(DEPDIR)/liblektor_la-json.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@base/$(DEPDIR)/liblektor_la-reg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@base/$(DEPDIR)/liblektor_la-stack.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@base/$(DEPDIR)/liblektor_la-uri.Plo@am__quote@ # am--include-marker @@ -860,6 +866,13 @@ base/liblektor_la-config.lo: base/config.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblektor_la_CFLAGS) $(CFLAGS) -c -o base/liblektor_la-config.lo `test -f 'base/config.c' || echo '$(srcdir)/'`base/config.c +base/liblektor_la-json.lo: base/json.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblektor_la_CFLAGS) $(CFLAGS) -MT base/liblektor_la-json.lo -MD -MP -MF base/$(DEPDIR)/liblektor_la-json.Tpo -c -o base/liblektor_la-json.lo `test -f 'base/json.c' || echo '$(srcdir)/'`base/json.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) base/$(DEPDIR)/liblektor_la-json.Tpo base/$(DEPDIR)/liblektor_la-json.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='base/json.c' object='base/liblektor_la-json.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblektor_la_CFLAGS) $(CFLAGS) -c -o base/liblektor_la-json.lo `test -f 'base/json.c' || echo '$(srcdir)/'`base/json.c + base/liblektor_la-reg.lo: base/reg.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblektor_la_CFLAGS) $(CFLAGS) -MT base/liblektor_la-reg.lo -MD -MP -MF base/$(DEPDIR)/liblektor_la-reg.Tpo -c -o base/liblektor_la-reg.lo `test -f 'base/reg.c' || echo '$(srcdir)/'`base/reg.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) base/$(DEPDIR)/liblektor_la-reg.Tpo base/$(DEPDIR)/liblektor_la-reg.Plo @@ -1196,6 +1209,7 @@ distclean: distclean-am -rm -f base/$(DEPDIR)/liblektor_la-commands.Plo -rm -f base/$(DEPDIR)/liblektor_la-common.Plo -rm -f base/$(DEPDIR)/liblektor_la-config.Plo + -rm -f base/$(DEPDIR)/liblektor_la-json.Plo -rm -f base/$(DEPDIR)/liblektor_la-reg.Plo -rm -f base/$(DEPDIR)/liblektor_la-stack.Plo -rm -f base/$(DEPDIR)/liblektor_la-uri.Plo @@ -1274,6 +1288,7 @@ maintainer-clean: maintainer-clean-am -rm -f base/$(DEPDIR)/liblektor_la-commands.Plo -rm -f base/$(DEPDIR)/liblektor_la-common.Plo -rm -f base/$(DEPDIR)/liblektor_la-config.Plo + -rm -f base/$(DEPDIR)/liblektor_la-json.Plo -rm -f base/$(DEPDIR)/liblektor_la-reg.Plo -rm -f base/$(DEPDIR)/liblektor_la-stack.Plo -rm -f base/$(DEPDIR)/liblektor_la-uri.Plo diff --git a/src/base/json.c b/src/base/json.c index 0ce5c380f6e850a468b831c6a9b0d881b86086db..5b321937b94bade15bbe3c2b361db24d8ec91375 100644 --- a/src/base/json.c +++ b/src/base/json.c @@ -139,7 +139,7 @@ json_parse(const char *str, int asked_level, json_parse_callback call, void *use } int -json_parse_get_count(const char *str, int level) +json_parse_get_count(const char *str, int asked_level) { int level = 0; int ret_len = 0; @@ -166,9 +166,6 @@ json_parse_get_count(const char *str, int level) __SKIP_NEXT_JSON(str, len); __SKIP_JSON(str); __SKIP_NEXT_JSON(str, len); - - if (asked_level == level) - call(key, val, 0, user); } if (level <= 0) diff --git a/src/module/module_repo.c b/src/module/module_repo.c index 67c19a67183d304cc1918027edf8b12b353ad32d..7528a12305202dad297e975aa31f38453ebac4af 100644 --- a/src/module/module_repo.c +++ b/src/module/module_repo.c @@ -569,12 +569,26 @@ __handle_fav_list(struct module_repo_internal *repo, char *fav, size_t fav_size) }, }; - size_t len = json_parse_get_count(json, 1); json_parse(json, 1, __handle_fav_list_internal, (void *) &uri); LOG_INFO("REPO", "Finished importing fav list '%s' as '%s'", fav_origin, fav); free(json); } +static void +__worker_import_favorites_internal(const char UNUSED *key, const char *val, int comp, void *user) +{ + if (comp) { + /* Already processed, only want one line of JSON */ + return; + } + + struct module_repo_internal *repo = (struct module_repo_internal *) user; + char fav[LKT_LINE_MAX]; + safe_strncpy(fav, val, LKT_LINE_MAX); + /* TODO: Add a way to use the workers to do this for each fav list */ + __handle_fav_list(repo, fav, LKT_LINE_MAX); +} + static void * __worker_import_favorites(void *__repo) { @@ -584,31 +598,17 @@ __worker_import_favorites(void *__repo) repo->updating &= REPO_UPDATE_FAV; GOTO_IF(pthread_mutex_unlock(&(repo->mtx)), "Failed to unlock", end_no_lock); - struct json_object *json, *item_json = NULL; + char *json; LOG_INFO("REPO", "Download favorite lists from %s (%s)", repo->name, repo->get_fav_json); if (__json_dl(repo->get_fav_json, &json)) { LOG_ERROR("REPO", "Failed to get json, possibly no internet connexion or repo is down"); pthread_exit(NULL); } LOG_INFO("REPO", "Finished to dl favorite lists"); + size_t len = json_parse_get_count(json, 1); + json_parse(json, 1, __worker_import_favorites_internal, (void *) repo); - size_t len = json_object_array_length(json), i; - char fav_name[LKT_LINE_MAX]; - for (i = 0; i < len; ++i) { - item_json = json_object_array_get_idx(json, i); - if (item_json == NULL) { - LOG_ERROR("REPO", "There is no item with index %ld in fav list", i); - continue; - } - GOTO_IF(__safe_json_get_string(item_json, "pseudo", fav_name, LKT_LINE_MAX), - "Field 'pseudo' not found in json item", error); - - /* TODO: Add a way to use the workers to do this for each fav list */ - __handle_fav_list(repo, fav_name, LKT_LINE_MAX); - } - -error: - json_object_put(json); + free(json); LOG_INFO("REPO", "Finished to deal with %ld favorite lists", len); GOTO_IF(pthread_mutex_lock(&(repo->mtx)), "Failed to lock", end_no_lock);