]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
WEBUI: Add default web language selection to global config, fixes #3097
authorJaroslav Kysela <perex@perex.cz>
Sun, 27 Sep 2015 17:42:29 +0000 (19:42 +0200)
committerJaroslav Kysela <perex@perex.cz>
Sun, 27 Sep 2015 17:42:29 +0000 (19:42 +0200)
src/access.c
src/access.h
src/config.c
src/config.h
src/lang_codes.c

index 3708ca6fe5d7d51179b24254b01ba5262c131bbd..36ad1d937027c132af1811345209ba84eee87169 100644 (file)
@@ -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();
index 08eafabb70a51e1caef4da02e298574a174c561d..8e3da42a55f4663d617641593c93b81080094059 100644 (file)
@@ -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_ */
index c61590efd3fde15c8a5d5b2fa34447eb3751c973..10c1c14346500d4efa7c65e85a73a8345aadd217 100644 (file)
@@ -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;
+}
index 1dccd4a0578d063765363664a512caa84dca2838..386c58049595303e9392407f5e12ffcb953adf43 100644 (file)
@@ -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__ */
index ec9a7a68c4777e8ee190c7210f54f78d0908a831..b46a8bf7258af2b587041f644c5f58ce130a942c 100644 (file)
@@ -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;
 }