Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
WEBUI: Fix the UI language handling, fixes #3119
  • Loading branch information
perexg committed Sep 27, 2015
1 parent 78aea5c commit 147841b
Show file tree
Hide file tree
Showing 15 changed files with 70 additions and 47 deletions.
23 changes: 23 additions & 0 deletions src/access.c
Expand Up @@ -579,6 +579,21 @@ access_update(access_t *a, access_entry_t *ae)
a->aa_rights |= ae->ae_rights;
}

/**
*
*/
static void
access_set_lang_ui(access_t *a)
{
const char *s;
if (!a->aa_lang_ui) {
if ((s = config_get_language_ui()) != NULL)
a->aa_lang_ui = lang_code_user(s);
if (a->aa_lang)
a->aa_lang_ui = strdup(a->aa_lang);
}
}

/**
*
*/
Expand Down Expand Up @@ -644,6 +659,8 @@ access_get(const char *username, const char *password, struct sockaddr *src)
a->aa_rights = 0;
}

access_set_lang_ui(a);

if (tvhtrace_enabled())
access_dump_a(a);
return a;
Expand Down Expand Up @@ -714,6 +731,8 @@ access_get_hashed(const char *username, const uint8_t digest[20],
a->aa_rights = 0;
}

access_set_lang_ui(a);

if (tvhtrace_enabled())
access_dump_a(a);
return a;
Expand Down Expand Up @@ -750,6 +769,8 @@ access_get_by_username(const char *username)
access_update(a, ae);
}

access_set_lang_ui(a);

return a;
}

Expand Down Expand Up @@ -787,6 +808,8 @@ access_get_by_addr(struct sockaddr *src)
access_update(a, ae);
}

access_set_lang_ui(a);

return a;
}

Expand Down
6 changes: 3 additions & 3 deletions src/api/api_access.c
Expand Up @@ -32,7 +32,7 @@ api_passwd_entry_grid
passwd_entry_t *pw;

TAILQ_FOREACH(pw, &passwd_entries, pw_link)
idnode_set_add(ins, (idnode_t*)pw, &conf->filter, perm->aa_lang);
idnode_set_add(ins, (idnode_t*)pw, &conf->filter, perm->aa_lang_ui);
}

static int
Expand Down Expand Up @@ -64,7 +64,7 @@ api_ipblock_entry_grid
ipblock_entry_t *ib;

TAILQ_FOREACH(ib, &ipblock_entries, ib_link)
idnode_set_add(ins, (idnode_t*)ib, &conf->filter, perm->aa_lang);
idnode_set_add(ins, (idnode_t*)ib, &conf->filter, perm->aa_lang_ui);
}

static int
Expand Down Expand Up @@ -96,7 +96,7 @@ api_access_entry_grid
access_entry_t *ae;

TAILQ_FOREACH(ae, &access_entries, ae_link)
idnode_set_add(ins, (idnode_t*)ae, &conf->filter, perm->aa_lang);
idnode_set_add(ins, (idnode_t*)ae, &conf->filter, perm->aa_lang_ui);
}

static int
Expand Down
2 changes: 1 addition & 1 deletion src/api/api_bouquet.c
Expand Up @@ -54,7 +54,7 @@ api_bouquet_grid
bouquet_t *bq;

RB_FOREACH(bq, &bouquets, bq_link)
idnode_set_add(ins, (idnode_t*)bq, &conf->filter, perm->aa_lang);
idnode_set_add(ins, (idnode_t*)bq, &conf->filter, perm->aa_lang_ui);
}

static int
Expand Down
4 changes: 2 additions & 2 deletions src/api/api_caclient.c
Expand Up @@ -38,7 +38,7 @@ api_caclient_list
TAILQ_FOREACH(cac, &caclients, cac_link) {
e = htsmsg_create_map();
htsmsg_add_str(e, "uuid", idnode_uuid_as_sstr(&cac->cac_id));
htsmsg_add_str(e, "title", idnode_get_title(&cac->cac_id, perm->aa_lang));
htsmsg_add_str(e, "title", idnode_get_title(&cac->cac_id, perm->aa_lang_ui));
htsmsg_add_str(e, "status", caclient_get_status(cac));
htsmsg_add_msg(l, NULL, e);
}
Expand All @@ -58,7 +58,7 @@ api_caclient_builders
/* List of available builder classes */
l = htsmsg_create_list();
for (r = caclient_classes; *r; r++)
if ((e = idclass_serialize(*r, perm->aa_lang)))
if ((e = idclass_serialize(*r, perm->aa_lang_ui)))
htsmsg_add_msg(l, NULL, e);

/* Output */
Expand Down
4 changes: 2 additions & 2 deletions src/api/api_channel.c
Expand Up @@ -78,7 +78,7 @@ api_channel_grid

CHANNEL_FOREACH(ch)
if (cfg || channel_access(ch, perm, 0))
idnode_set_add(ins, (idnode_t*)ch, &conf->filter, perm->aa_lang);
idnode_set_add(ins, (idnode_t*)ch, &conf->filter, perm->aa_lang_ui);
}

static int
Expand Down Expand Up @@ -135,7 +135,7 @@ api_channel_tag_grid

TAILQ_FOREACH(ct, &channel_tags, ct_link)
if (cfg || channel_tag_access(ct, perm, 0))
idnode_set_add(ins, (idnode_t*)ct, &conf->filter, perm->aa_lang);
idnode_set_add(ins, (idnode_t*)ct, &conf->filter, perm->aa_lang_ui);
}

static int
Expand Down
14 changes: 7 additions & 7 deletions src/api/api_dvr.c
Expand Up @@ -35,7 +35,7 @@ api_dvr_config_grid

LIST_FOREACH(cfg, &dvrconfigs, config_link)
if (!idnode_perm((idnode_t *)cfg, perm, NULL)) {
idnode_set_add(ins, (idnode_t*)cfg, &conf->filter, perm->aa_lang);
idnode_set_add(ins, (idnode_t*)cfg, &conf->filter, perm->aa_lang_ui);
idnode_perm_unset((idnode_t *)cfg);
}
}
Expand Down Expand Up @@ -91,7 +91,7 @@ api_dvr_entry_grid
dvr_entry_t *de;

LIST_FOREACH(de, &dvrentries, de_global_link)
idnode_set_add(ins, (idnode_t*)de, &conf->filter, perm->aa_lang);
idnode_set_add(ins, (idnode_t*)de, &conf->filter, perm->aa_lang_ui);
}

static void
Expand All @@ -102,7 +102,7 @@ api_dvr_entry_grid_upcoming

LIST_FOREACH(de, &dvrentries, de_global_link)
if (is_dvr_entry_upcoming(de))
idnode_set_add(ins, (idnode_t*)de, &conf->filter, perm->aa_lang);
idnode_set_add(ins, (idnode_t*)de, &conf->filter, perm->aa_lang_ui);
}

static void
Expand All @@ -113,7 +113,7 @@ api_dvr_entry_grid_finished

LIST_FOREACH(de, &dvrentries, de_global_link)
if (is_dvr_entry_finished(de))
idnode_set_add(ins, (idnode_t*)de, &conf->filter, perm->aa_lang);
idnode_set_add(ins, (idnode_t*)de, &conf->filter, perm->aa_lang_ui);
}

static void
Expand All @@ -124,7 +124,7 @@ api_dvr_entry_grid_failed

LIST_FOREACH(de, &dvrentries, de_global_link)
if (is_dvr_entry_failed(de))
idnode_set_add(ins, (idnode_t*)de, &conf->filter, perm->aa_lang);
idnode_set_add(ins, (idnode_t*)de, &conf->filter, perm->aa_lang_ui);
}

static int
Expand Down Expand Up @@ -287,7 +287,7 @@ api_dvr_autorec_grid
dvr_autorec_entry_t *dae;

TAILQ_FOREACH(dae, &autorec_entries, dae_link)
idnode_set_add(ins, (idnode_t*)dae, &conf->filter, perm->aa_lang);
idnode_set_add(ins, (idnode_t*)dae, &conf->filter, perm->aa_lang_ui);
}

static int
Expand Down Expand Up @@ -381,7 +381,7 @@ api_dvr_timerec_grid
dvr_timerec_entry_t *dte;

TAILQ_FOREACH(dte, &timerec_entries, dte_link)
idnode_set_add(ins, (idnode_t*)dte, &conf->filter, perm->aa_lang);
idnode_set_add(ins, (idnode_t*)dte, &conf->filter, perm->aa_lang_ui);
}

static int
Expand Down
2 changes: 1 addition & 1 deletion src/api/api_epg.c
Expand Up @@ -606,7 +606,7 @@ api_epg_content_type_list(access_t *perm, void *opaque, const char *op,
htsmsg_get_bool(args, "full", &full);

*resp = htsmsg_create_map();
array = epg_genres_list_all(full ? 0 : 1, 0, perm->aa_lang);
array = epg_genres_list_all(full ? 0 : 1, 0, perm->aa_lang_ui);
htsmsg_add_msg(*resp, "entries", array);
return 0;
}
Expand Down
2 changes: 1 addition & 1 deletion src/api/api_epggrab.c
Expand Up @@ -46,7 +46,7 @@ api_epggrab_module_list
m = htsmsg_create_map();
htsmsg_add_str(m, "uuid", idnode_uuid_as_sstr(&mod->idnode));
htsmsg_add_str(m, "status", epggrab_module_get_status(mod));
htsmsg_add_str(m, "title", idnode_get_title(&mod->idnode, perm->aa_lang));
htsmsg_add_str(m, "title", idnode_get_title(&mod->idnode, perm->aa_lang_ui));
htsmsg_add_msg(l, NULL, m);
}
pthread_mutex_unlock(&global_lock);
Expand Down
5 changes: 2 additions & 3 deletions src/api/api_esfilter.c
Expand Up @@ -29,9 +29,8 @@ api_esfilter_grid
{
esfilter_t *esf;

TAILQ_FOREACH(esf, &esfilters[cls], esf_link) {
idnode_set_add(ins, (idnode_t*)esf, &conf->filter, perm->aa_lang);
}
TAILQ_FOREACH(esf, &esfilters[cls], esf_link)
idnode_set_add(ins, (idnode_t*)esf, &conf->filter, perm->aa_lang_ui);
}

static int
Expand Down
30 changes: 15 additions & 15 deletions src/api/api_idnode.c
Expand Up @@ -104,7 +104,7 @@ api_idnode_grid_conf
}

/* Sort */
conf->sort.lang = perm->aa_lang;
conf->sort.lang = perm->aa_lang_ui;
if ((str = htsmsg_get_str(args, "sort"))) {
conf->sort.key = str;
if ((str = htsmsg_get_str(args, "dir")) && !strcasecmp(str, "DESC"))
Expand Down Expand Up @@ -146,7 +146,7 @@ api_idnode_grid
htsmsg_add_str(e, "uuid", idnode_uuid_as_sstr(in));
if (idnode_perm(in, perm, NULL))
continue;
idnode_read0(in, e, flist, 0, perm->aa_lang);
idnode_read0(in, e, flist, 0, conf.sort.lang);
idnode_perm_unset(in);
htsmsg_add_msg(list, NULL, e);
if (conf.limit > 0) conf.limit--;
Expand Down Expand Up @@ -196,12 +196,12 @@ api_idnode_load_by_class0
if (_enum) {
e = htsmsg_create_map();
htsmsg_add_str(e, "key", idnode_uuid_as_sstr(in));
htsmsg_add_str(e, "val", idnode_get_title(in, perm->aa_lang));
htsmsg_add_str(e, "val", idnode_get_title(in, perm->aa_lang_ui));

/* Full record */
} else {
htsmsg_t *flist = api_idnode_flist_conf(args, "list");
e = idnode_serialize0(in, flist, 0, perm->aa_lang);
e = idnode_serialize0(in, flist, 0, perm->aa_lang_ui);
htsmsg_destroy(flist);
}

Expand Down Expand Up @@ -278,9 +278,9 @@ api_idnode_load
err = EPERM;
continue;
}
m = idnode_serialize0(in, flist, 0, perm->aa_lang);
m = idnode_serialize0(in, flist, 0, perm->aa_lang_ui);
if (meta > 0)
htsmsg_add_msg(m, "meta", idclass_serialize0(in->in_class, flist, 0, perm->aa_lang));
htsmsg_add_msg(m, "meta", idclass_serialize0(in->in_class, flist, 0, perm->aa_lang_ui));
htsmsg_add_msg(l, NULL, m);
count++;
idnode_perm_unset(in);
Expand All @@ -298,9 +298,9 @@ api_idnode_load
err = EPERM;
} else {
l = htsmsg_create_list();
m = idnode_serialize0(in, flist, 0, perm->aa_lang);
m = idnode_serialize0(in, flist, 0, perm->aa_lang_ui);
if (meta > 0)
htsmsg_add_msg(m, "meta", idclass_serialize0(in->in_class, flist, 0, perm->aa_lang));
htsmsg_add_msg(m, "meta", idclass_serialize0(in->in_class, flist, 0, perm->aa_lang_ui));
htsmsg_add_msg(l, NULL, m);
idnode_perm_unset(in);
}
Expand Down Expand Up @@ -345,9 +345,9 @@ api_idnode_load_simple

if (!idnode_perm(in, perm, NULL)) {
l = htsmsg_create_list();
m = idnode_serialize0(in, flist, 0, perm->aa_lang);
m = idnode_serialize0(in, flist, 0, perm->aa_lang_ui);
if (meta > 0)
htsmsg_add_msg(m, "meta", idclass_serialize0(in->in_class, flist, 0, perm->aa_lang));
htsmsg_add_msg(m, "meta", idclass_serialize0(in->in_class, flist, 0, perm->aa_lang_ui));
htsmsg_add_msg(l, NULL, m);
} else {
err = EPERM;
Expand Down Expand Up @@ -481,7 +481,7 @@ api_idnode_tree
if (isroot && !(root || rootfn))
return EINVAL;

pthread_mutex_lock(&global_lock);
pthread_mutex_lock(&global_lock);

if (!isroot || root) {
if (!(node = idnode_find(isroot ? root : uuid, NULL, NULL))) {
Expand All @@ -499,7 +499,7 @@ api_idnode_tree
pthread_mutex_unlock(&global_lock);
return EINVAL;
}
m = idnode_serialize(node, perm->aa_lang);
m = idnode_serialize(node, perm->aa_lang_ui);
idnode_perm_unset(node);
htsmsg_add_u32(m, "leaf", idnode_is_leaf(node));
htsmsg_add_msg(*resp, NULL, m);
Expand All @@ -509,13 +509,13 @@ api_idnode_tree
idnode_set_t *v = node ? idnode_get_childs(node) : rootfn(perm);
if (v) {
int i;
idnode_set_sort_by_title(v, perm->aa_lang);
idnode_set_sort_by_title(v, perm->aa_lang_ui);
for(i = 0; i < v->is_count; i++) {
idnode_t *in = v->is_array[i];
htsmsg_t *m;
if (idnode_perm(in, perm, NULL))
continue;
m = idnode_serialize(v->is_array[i], perm->aa_lang);
m = idnode_serialize(v->is_array[i], perm->aa_lang_ui);
idnode_perm_unset(in);
htsmsg_add_u32(m, "leaf", idnode_is_leaf(v->is_array[i]));
htsmsg_add_msg(*resp, NULL, m);
Expand Down Expand Up @@ -551,7 +551,7 @@ api_idnode_class
}

err = 0;
*resp = idclass_serialize0(idc, flist, 0, perm->aa_lang);
*resp = idclass_serialize0(idc, flist, 0, perm->aa_lang_ui);

exit:
pthread_mutex_unlock(&global_lock);
Expand Down
12 changes: 6 additions & 6 deletions src/api/api_mpegts.c
Expand Up @@ -84,7 +84,7 @@ api_mpegts_network_grid
mpegts_network_t *mn;

LIST_FOREACH(mn, &mpegts_network_all, mn_global_link) {
idnode_set_add(ins, (idnode_t*)mn, &conf->filter, perm->aa_lang);
idnode_set_add(ins, (idnode_t*)mn, &conf->filter, perm->aa_lang_ui);
}
}

Expand All @@ -98,7 +98,7 @@ api_mpegts_network_builders
/* List of available builder classes */
l = htsmsg_create_list();
LIST_FOREACH(mnb, &mpegts_network_builders, link)
if ((e = idclass_serialize(mnb->idc, perm->aa_lang)))
if ((e = idclass_serialize(mnb->idc, perm->aa_lang_ui)))
htsmsg_add_msg(l, NULL, e);

/* Output */
Expand Down Expand Up @@ -193,7 +193,7 @@ api_mpegts_network_muxclass
if (!(idc = mn->mn_mux_class(mn)))
goto exit;

*resp = idclass_serialize(idc, perm->aa_lang);
*resp = idclass_serialize(idc, perm->aa_lang_ui);
err = 0;

exit:
Expand Down Expand Up @@ -254,7 +254,7 @@ api_mpegts_mux_grid
//if (hide && !mn->mn_enabled) continue;
LIST_FOREACH(mm, &mn->mn_muxes, mm_network_link) {
if (hide == 2 && !mm->mm_is_enabled(mm)) continue;
idnode_set_add(ins, (idnode_t*)mm, &conf->filter, perm->aa_lang);
idnode_set_add(ins, (idnode_t*)mm, &conf->filter, perm->aa_lang_ui);
}
}
}
Expand Down Expand Up @@ -284,7 +284,7 @@ api_mpegts_service_grid
if (hide && !mm->mm_is_enabled(mm)) continue;
LIST_FOREACH(ms, &mm->mm_services, s_dvb_mux_link) {
if (hide == 2 && !ms->s_is_enabled((service_t*)ms, 0)) continue;
idnode_set_add(ins, (idnode_t*)ms, &conf->filter, perm->aa_lang);
idnode_set_add(ins, (idnode_t*)ms, &conf->filter, perm->aa_lang_ui);
}
}
}
Expand All @@ -299,7 +299,7 @@ api_mpegts_mux_sched_grid
{
mpegts_mux_sched_t *mms;
LIST_FOREACH(mms, &mpegts_mux_sched_all, mms_link)
idnode_set_add(ins, (idnode_t*)mms, &conf->filter, perm->aa_lang);
idnode_set_add(ins, (idnode_t*)mms, &conf->filter, perm->aa_lang_ui);
}

static int
Expand Down
2 changes: 1 addition & 1 deletion src/api/api_profile.c
Expand Up @@ -59,7 +59,7 @@ api_profile_builders
pthread_mutex_lock(&global_lock);
/* List of available builder classes */
LIST_FOREACH(pb, &profile_builders, link)
if ((e = idclass_serialize(pb->clazz, perm->aa_lang)))
if ((e = idclass_serialize(pb->clazz, perm->aa_lang_ui)))
htsmsg_add_msg(l, NULL, e);
pthread_mutex_unlock(&global_lock);

Expand Down

0 comments on commit 147841b

Please sign in to comment.