From: Jaroslav Kysela Date: Fri, 23 Oct 2015 13:20:12 +0000 (+0200) Subject: fix more internationalization issues, fixes #3202 X-Git-Tag: v4.2.1~1794 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e4341198934cafc1f8927733e614b8c7fc8458f8;p=thirdparty%2Ftvheadend.git fix more internationalization issues, fixes #3202 --- diff --git a/src/api/api_service.c b/src/api/api_service.c index 3afa19a63..0efe837ab 100644 --- a/src/api/api_service.c +++ b/src/api/api_service.c @@ -90,7 +90,7 @@ api_mapper_status void api_service_mapper_notify ( void ) { - notify_by_msg("servicemapper", api_mapper_status_msg()); + notify_by_msg("servicemapper", api_mapper_status_msg(), 0); } static htsmsg_t * diff --git a/src/api/api_status.c b/src/api/api_status.c index 9adce24ad..ebf8819e2 100644 --- a/src/api/api_status.c +++ b/src/api/api_status.c @@ -71,7 +71,7 @@ api_status_subscriptions c = 0; pthread_mutex_lock(&global_lock); LIST_FOREACH(ths, &subscriptions, ths_global_link) { - e = subscription_create_msg(ths); + e = subscription_create_msg(ths, perm->aa_lang_ui); htsmsg_add_msg(l, NULL, e); c++; } diff --git a/src/config.c b/src/config.c index 6bd9bb5a7..ae425e1e5 100644 --- a/src/config.c +++ b/src/config.c @@ -1821,11 +1821,12 @@ config_class_info_area_set ( void *o, const void *v ) } static void -config_class_info_area_list1 ( htsmsg_t *m, const char *key, const char *val ) +config_class_info_area_list1 ( htsmsg_t *m, const char *key, + const char *val, const char *lang ) { htsmsg_t *e = htsmsg_create_map(); htsmsg_add_str(e, "key", key); - htsmsg_add_str(e, "val", val); + htsmsg_add_str(e, "val", tvh_gettext_lang(lang, val)); htsmsg_add_msg(m, NULL, e); } @@ -1833,9 +1834,9 @@ static htsmsg_t * config_class_info_area_list ( void *o, const char *lang ) { htsmsg_t *m = htsmsg_create_list(); - config_class_info_area_list1(m, "login", N_("Login/Logout")); - config_class_info_area_list1(m, "storage", N_("Storage space")); - config_class_info_area_list1(m, "time", N_("Time")); + config_class_info_area_list1(m, "login", N_("Login/Logout"), lang); + config_class_info_area_list1(m, "storage", N_("Storage space"), lang); + config_class_info_area_list1(m, "time", N_("Time"), lang); return m; } diff --git a/src/dvr/dvr_rec.c b/src/dvr/dvr_rec.c index 81a26b4c3..8d34c5992 100644 --- a/src/dvr/dvr_rec.c +++ b/src/dvr/dvr_rec.c @@ -1334,7 +1334,7 @@ dvr_get_disk_space_tcb(void *opaque, int dearmed) htsmsg_add_s64(m, "totaldiskspace", dvr_btotal); pthread_mutex_unlock(&dvr_disk_space_mutex); - notify_by_msg("diskspaceUpdate", m); + notify_by_msg("diskspaceUpdate", m, 0); } free(opaque); diff --git a/src/idnode.c b/src/idnode.c index 0d06542f9..e3bffea46 100644 --- a/src/idnode.c +++ b/src/idnode.c @@ -1613,7 +1613,7 @@ idnode_notify_title_changed (void *in, const char *lang) htsmsg_t *m = htsmsg_create_map(); htsmsg_add_str(m, "uuid", idnode_uuid_as_sstr(in)); htsmsg_add_str(m, "text", idnode_get_title(in, lang)); - notify_by_msg("title", m); + notify_by_msg("title", m, 0); idnode_notify_changed(in); } diff --git a/src/input/mpegts/mpegts_input.c b/src/input/mpegts/mpegts_input.c index cb7973287..6283f7fe9 100644 --- a/src/input/mpegts/mpegts_input.c +++ b/src/input/mpegts/mpegts_input.c @@ -1594,7 +1594,7 @@ mpegts_input_status_timer ( void *p ) mpegts_input_stream_status(mmi, &st); e = tvh_input_stream_create_msg(&st); htsmsg_add_u32(e, "update", 1); - notify_by_msg("input_status", e); + notify_by_msg("input_status", e, 0); subs += st.subs_count; tvh_input_stream_destroy(&st); } diff --git a/src/notify.c b/src/notify.c index b7b8b1a87..79f26d2af 100644 --- a/src/notify.c +++ b/src/notify.c @@ -33,10 +33,10 @@ static pthread_t notify_tid; static void* notify_thread(void* p); void -notify_by_msg(const char *class, htsmsg_t *m) +notify_by_msg(const char *class, htsmsg_t *m, int rewrite) { htsmsg_add_str(m, "notificationClass", class); - comet_mailbox_add_message(m, 0); + comet_mailbox_add_message(m, 0, rewrite); htsmsg_destroy(m); } @@ -46,7 +46,7 @@ notify_reload(const char *class) { htsmsg_t *m = htsmsg_create_map(); htsmsg_add_u32(m, "reload", 1); - notify_by_msg(class, m); + notify_by_msg(class, m, 0); } void @@ -103,7 +103,7 @@ notify_thread ( void *p ) pthread_mutex_lock(&global_lock); HTSMSG_FOREACH(f, q) - notify_by_msg(f->hmf_name, htsmsg_detach_submsg(f)); + notify_by_msg(f->hmf_name, htsmsg_detach_submsg(f), 0); /* Finished */ pthread_mutex_unlock(&global_lock); diff --git a/src/notify.h b/src/notify.h index c5da84c81..a49451629 100644 --- a/src/notify.h +++ b/src/notify.h @@ -21,7 +21,9 @@ #include "htsmsg.h" -void notify_by_msg(const char *class, htsmsg_t *m); +#define NOTIFY_REWRITE_SUBSCRIPTIONS 1 + +void notify_by_msg(const char *class, htsmsg_t *m, int rewrite); void notify_reload(const char *class); diff --git a/src/subscriptions.c b/src/subscriptions.c index 19368c666..8ff7596a4 100644 --- a/src/subscriptions.c +++ b/src/subscriptions.c @@ -847,7 +847,7 @@ static gtimer_t subscription_status_timer; * Serialize info about subscription */ htsmsg_t * -subscription_create_msg(th_subscription_t *s) +subscription_create_msg(th_subscription_t *s, const char *lang) { htsmsg_t *m = htsmsg_create_map(); descramble_info_t *di; @@ -860,24 +860,24 @@ subscription_create_msg(th_subscription_t *s) const char *state; switch(s->ths_state) { default: - state = "Idle"; + state = N_("Idle"); break; case SUBSCRIPTION_TESTING_SERVICE: - state = "Testing"; + state = N_("Testing"); break; case SUBSCRIPTION_GOT_SERVICE: - state = "Running"; + state = N_("Running"); break; case SUBSCRIPTION_BAD_SERVICE: - state = "Bad"; + state = N_("Bad"); break; } - htsmsg_add_str(m, "state", state); + htsmsg_add_str(m, "state", lang ? tvh_gettext_lang(lang, state) : state); if(s->ths_hostname != NULL) htsmsg_add_str(m, "hostname", s->ths_hostname); @@ -939,9 +939,9 @@ subscription_status_callback ( void *p ) s->ths_bytes_out_avg = (int)(out_curr - out_prev); s->ths_total_bytes_out_prev = s->ths_total_bytes_out; - htsmsg_t *m = subscription_create_msg(s); + htsmsg_t *m = subscription_create_msg(s, NULL); htsmsg_add_u32(m, "updateEntry", 1); - notify_by_msg("subscriptions", m); + notify_by_msg("subscriptions", m, NOTIFY_REWRITE_SUBSCRIPTIONS); count++; } if (old_count != count) { diff --git a/src/subscriptions.h b/src/subscriptions.h index 2f537967d..270c34005 100644 --- a/src/subscriptions.h +++ b/src/subscriptions.h @@ -215,6 +215,6 @@ static inline int subscriptions_active(void) { return LIST_FIRST(&subscriptions) != NULL; } struct htsmsg; -struct htsmsg *subscription_create_msg(th_subscription_t *s); +struct htsmsg *subscription_create_msg(th_subscription_t *s, const char *lang); #endif /* SUBSCRIPTIONS_H */ diff --git a/src/tvhlog.c b/src/tvhlog.c index 5af7bce2d..7ba7b8a5f 100644 --- a/src/tvhlog.c +++ b/src/tvhlog.c @@ -178,7 +178,7 @@ tvhlog_process snprintf(buf, sizeof(buf), "%s %s", t, msg->msg); htsmsg_add_str(m, "notificationClass", "logmessage"); htsmsg_add_str(m, "logtxt", buf); - comet_mailbox_add_message(m, msg->severity >= LOG_DEBUG); + comet_mailbox_add_message(m, msg->severity >= LOG_DEBUG, 0); htsmsg_destroy(m); } diff --git a/src/webui/comet.c b/src/webui/comet.c index 1a8c0b814..9ffb14faf 100644 --- a/src/webui/comet.c +++ b/src/webui/comet.c @@ -35,6 +35,7 @@ #include "dvr/dvr.h" #include "webui/webui.h" #include "access.h" +#include "notify.h" #include "tcp.h" static pthread_mutex_t comet_mutex = PTHREAD_MUTEX_INITIALIZER; @@ -54,6 +55,7 @@ int comet_running; typedef struct comet_mailbox { char *cmb_boxid; /* SHA-1 hash */ + char *cmb_lang; /* UI language */ htsmsg_t *cmb_messages; /* A vector */ time_t cmb_last_used; LIST_ENTRY(comet_mailbox) cmb_link; @@ -74,6 +76,7 @@ cmb_destroy(comet_mailbox_t *cmb) LIST_REMOVE(cmb, cmb_link); + free(cmb->cmb_lang); free(cmb->cmb_boxid); free(cmb); } @@ -103,7 +106,7 @@ comet_flush(void) * */ static comet_mailbox_t * -comet_mailbox_create(void) +comet_mailbox_create(const char *lang) { comet_mailbox_t *cmb = calloc(1, sizeof(comet_mailbox_t)); @@ -127,6 +130,7 @@ comet_mailbox_create(void) id[40] = 0; cmb->cmb_boxid = strdup(id); + cmb->cmb_lang = lang ? strdup(lang) : NULL; time(&cmb->cmb_last_used); mailbox_tally++; @@ -234,7 +238,7 @@ comet_mailbox_poll(http_connection_t *hc, const char *remain, void *opaque) break; if(cmb == NULL) { - cmb = comet_mailbox_create(); + cmb = comet_mailbox_create(hc->hc_access->aa_lang_ui); comet_access_update(hc, cmb); comet_serverIpPort(hc, cmb); } @@ -332,13 +336,35 @@ comet_done(void) pthread_mutex_unlock(&comet_mutex); } +/** + * + */ +static void +comet_mailbox_rewrite_str(htsmsg_t *m, const char *key, const char *lang) +{ + const char *s = htsmsg_get_str(m, key); + if (s) + htsmsg_set_str(m, key, tvh_gettext_lang(lang, s)); +} + +static void +comet_mailbox_rewrite_msg(int rewrite, htsmsg_t *m, const char *lang) +{ + switch (rewrite) { + case NOTIFY_REWRITE_SUBSCRIPTIONS: + comet_mailbox_rewrite_str(m, "state", lang); + break; + } +} + /** * */ void -comet_mailbox_add_message(htsmsg_t *m, int isdebug) +comet_mailbox_add_message(htsmsg_t *m, int isdebug, int rewrite) { comet_mailbox_t *cmb; + htsmsg_t *e; pthread_mutex_lock(&comet_mutex); @@ -350,7 +376,10 @@ comet_mailbox_add_message(htsmsg_t *m, int isdebug) if(cmb->cmb_messages == NULL) cmb->cmb_messages = htsmsg_create_list(); - htsmsg_add_msg(cmb->cmb_messages, NULL, htsmsg_copy(m)); + e = htsmsg_copy(m); + if (cmb->cmb_lang && rewrite) + comet_mailbox_rewrite_msg(rewrite, e, cmb->cmb_lang); + htsmsg_add_msg(cmb->cmb_messages, NULL, e); } } diff --git a/src/webui/webui.h b/src/webui/webui.h index dc6132b0c..5ffe62125 100644 --- a/src/webui/webui.h +++ b/src/webui/webui.h @@ -49,7 +49,7 @@ void comet_init(void); void comet_done(void); -void comet_mailbox_add_message(htsmsg_t *m, int isdebug); +void comet_mailbox_add_message(htsmsg_t *m, int isdebug, int rewrite); void comet_flush(void);