]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
locale: add filter for available locales
authorJaroslav Kysela <perex@perex.cz>
Fri, 1 Jan 2016 17:49:15 +0000 (18:49 +0100)
committerJaroslav Kysela <perex@perex.cz>
Fri, 1 Jan 2016 17:49:15 +0000 (18:49 +0100)
src/api/api_language.c
src/tvh_locale.c
src/tvh_locale.h

index 874dceb4952e74eba0b48d12838ba227d0f4ac79..a3721885508a3d473640e23acd31fd7846aeed70 100644 (file)
@@ -58,9 +58,11 @@ api_language_locale_enum
   l = htsmsg_create_list();
   while (c->code2b) {
     e = htsmsg_create_map();
-    htsmsg_add_str(e, "key", c->code2b);
-    htsmsg_add_str(e, "val", c->desc);
-    htsmsg_add_msg(l, NULL, e);
+    if (tvh_gettext_langcode_valid(c->code2b)) {
+      htsmsg_add_str(e, "key", c->code2b);
+      htsmsg_add_str(e, "val", c->desc);
+      htsmsg_add_msg(l, NULL, e);
+    }
     s = c->locale;
     while (s && *s) {
       if (*s == '|')
@@ -68,11 +70,13 @@ api_language_locale_enum
       if (s[0] == '\0' || s[1] == '\0')
         break;
       snprintf(buf1, sizeof(buf1), "%s_%c%c", c->code2b, s[0], s[1]);
-      snprintf(buf2, sizeof(buf2), "%s (%c%c)", c->desc, s[0], s[1]);
-      e = htsmsg_create_map();
-      htsmsg_add_str(e, "key", buf1);
-      htsmsg_add_str(e, "val", buf2);
-      htsmsg_add_msg(l, NULL, e);
+      if (tvh_gettext_langcode_valid(buf1)) {
+        snprintf(buf2, sizeof(buf2), "%s (%c%c)", c->desc, s[0], s[1]);
+        e = htsmsg_create_map();
+        htsmsg_add_str(e, "key", buf1);
+        htsmsg_add_str(e, "val", buf2);
+        htsmsg_add_msg(l, NULL, e);
+      }
       s += 2;
     }
     c++;
index 95e4819bb9ca6dedb042416eeda9fd752468759f..85e0d05fbb699eb1e0292568ce695b2afdeaa5e3 100644 (file)
@@ -160,6 +160,21 @@ static struct lng *lng_get_locale(char *locale_lang)
   return lng_get("eng");
 }
 
+/*
+ *
+ */
+int tvh_gettext_langcode_valid(const char *code)
+{
+  struct lng ls;
+  int ret;
+
+  pthread_mutex_lock(&tvh_gettext_mutex);
+  ls.tvh_lang = code;
+  ret = RB_FIND(&lngs, &ls, link, lng_cmp) != NULL;
+  pthread_mutex_unlock(&tvh_gettext_mutex);
+  return ret;
+}
+
 /*
  *
  */
index 19c53e69c498c9706f505417023fa9a482542527..d5ce71f92c4238bf2316b09237d924eb73fd5837 100644 (file)
@@ -26,6 +26,8 @@ static inline const char *tvh_gettext(const char *s)
 #define _(s) tvh_gettext(s)
 #define N_(s) (s)
 
+int tvh_gettext_langcode_valid(const char *code);
+
 void tvh_gettext_init(void);
 void tvh_gettext_done(void);