From: Jaroslav Kysela Date: Sun, 27 Sep 2015 17:42:29 +0000 (+0200) Subject: WEBUI: Add default web language selection to global config, fixes #3097 X-Git-Tag: v4.2.1~2042 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=28f7a34aec5305e2e0f82b703cdb4b73ae0e2a8f;p=thirdparty%2Ftvheadend.git WEBUI: Add default web language selection to global config, fixes #3097 --- diff --git a/src/access.c b/src/access.c index 3708ca6fe..36ad1d937 100644 --- a/src/access.c +++ b/src/access.c @@ -1311,7 +1311,7 @@ access_entry_conn_limit_type_enum ( void *p, const char *lang ) return strtab2htsmsg(conn_limit_type_tab, 1, lang); } -static htsmsg_t * +htsmsg_t * language_get_list ( void *obj, const char *lang ) { htsmsg_t *m = htsmsg_create_map(); diff --git a/src/access.h b/src/access.h index 08eafabb7..8e3da42a5 100644 --- a/src/access.h +++ b/src/access.h @@ -298,4 +298,9 @@ ipblock_entry_save(ipblock_entry_t *pw); void access_init(int createdefault, int noacl); void access_done(void); +/** + * + */ +htsmsg_t *language_get_list ( void *obj, const char *lang ); + #endif /* ACCESS_H_ */ diff --git a/src/config.c b/src/config.c index c61590efd..10c1c1434 100644 --- a/src/config.c +++ b/src/config.c @@ -1904,13 +1904,21 @@ const idclass_t config_class = { .type = PT_STR, .islist = 1, .id = "info_area", - .name = N_("Information Area"), + .name = N_("Information area"), .set = config_class_info_area_set, .get = config_class_info_area_get, .list = config_class_info_area_list, .opts = PO_LORDER, .group = 3 }, + { + .type = PT_STR, + .id = "ulanguage", + .name = N_("User language"), + .list = language_get_list, + .off = offsetof(config_t, ulanguage), + .group = 3 + }, { .type = PT_STR, .id = "muxconfpath", @@ -1987,3 +1995,11 @@ const char *config_get_language ( void ) return "eng"; return s; } + +const char *config_get_ulanguage ( void ) +{ + const char *s = config.ulanguage; + if (s == NULL || *s == '\0') + return NULL; + return s; +} diff --git a/src/config.h b/src/config.h index 1dccd4a05..386c58049 100644 --- a/src/config.h +++ b/src/config.h @@ -34,6 +34,7 @@ typedef struct config { char *server_name; char *language; char *info_area; + char *ulanguage; char *muxconf_path; int prefer_picon; char *chicon_path; @@ -57,5 +58,6 @@ void config_save ( void ); const char *config_get_server_name ( void ); const char *config_get_language ( void ); +const char *config_get_ulanguage ( void ); #endif /* __TVH_CONFIG__H__ */ diff --git a/src/lang_codes.c b/src/lang_codes.c index ec9a7a68c..b46a8bf72 100644 --- a/src/lang_codes.c +++ b/src/lang_codes.c @@ -698,26 +698,33 @@ const char *lang_code_preferred( void ) char *lang_code_user( const char *ucode ) { - const char *codes = config_get_language(), *s; + const char *pucode = config_get_ulanguage(), *s; + const char *codes = config_get_language(); char *ret; - if (!codes) + if (!pucode && !codes) return ucode ? strdup(ucode) : NULL; - if (!ucode) - return codes ? strdup(codes) : NULL; - ret = malloc(strlen(codes) + strlen(ucode ?: "") + 1); + ret = malloc(strlen(pucode ?: "") + strlen(codes ?: "") + + strlen(ucode ?: "") + 3); strcpy(ret, ucode); - while (codes && *codes) { - s = codes; - while (*s && *s != ',') - s++; - if (strncmp(codes, ucode ?: "", s - codes)) { - strcat(ret, ","); - strncat(ret, codes, s - codes); + if (pucode && strcmp(ret, pucode)) { + strcat(ret, ","); + strcat(ret, pucode); + } + if (codes) { + while (codes && *codes) { + s = codes; + while (*s && *s != ',') + s++; + if (strncmp(codes, ucode ?: "", s - codes) && + strncmp(codes, pucode ?: "", s - codes)) { + strcat(ret, ","); + strncat(ret, codes, s - codes); + } + if (*s && *s == ',') + s++; + codes = s; } - if (*s && *s == ',') - s++; - codes = s; } return ret; }