return save;
}
+static char *
+svcnamepicons(const char *svcname)
+{
+ const char *s;
+ char *r, *d;
+ int count;
+ char c;
+
+ for (s = svcname, count = 0; *s; s++) {
+ c = *s;
+ if (c == '&' || c == '+' || c == '*')
+ count++;
+ }
+ r = d = malloc(count * 4 + (s - svcname) + 1);
+ for (s = svcname; *s; s++) {
+ c = *s;
+ if (c == '&') {
+ d[0] = 'a'; d[1] = 'n'; d[2] = 'd'; d += 3;
+ } else if (c == '*') {
+ d[0] = 'p'; d[1] = 'l'; d[2] = 'u'; d[3] = 's'; d += 4;
+ } else if (c == '*') {
+ d[0] = 's'; d[1] = 't'; d[2] = 'a'; d[3] = 'r'; d += 4;
+ } else {
+ if (c >= 'a' && c <= 'z')
+ *d++ = c;
+ else if (c >= 'A' && c <= 'Z')
+ *d++ = c - 'A' + 'a';
+ else if (c >= '0' && c <= '9')
+ *d++ = c;
+ }
+ }
+ *d = '\0';
+ return r;
+}
+
static int
check_file( const char *url )
{
*icon = ch->ch_icon,
*chname, *icn;
uint32_t id, i, pick, prefer = config.prefer_picon ? 1 : 0;
+ char c;
if (icon && *icon == '\0')
icon = NULL;
/* Check for and replace placeholders */
if ((send = strstr(chi, "%C"))) {
+
sname = intlconv_utf8safestr(intlconv_charset_id("ASCII", 1, 1),
chname, strlen(chname) * 2);
if (sname == NULL)
sname = strdup(chname);
/* Remove problematic characters */
- s = sname;
- while (s && *s) {
- if (*s <= ' ' || *s > 122 ||
- strchr("/:\\<>|*?'\"", *s) != NULL)
- *(char *)s = '_';
- else if (config.chicon_lowercase && *s >= 'A' && *s <= 'Z')
- *(char *)s = *s - 'A' + 'a';
- s++;
+ if (config.chicon_scheme == CHICON_SVCNAME) {
+ s = svcnamepicons(sname);
+ free((char *)sname);
+ sname = s;
+ } else {
+ s = sname;
+ while (s && *s) {
+ c = *s;
+ if (c <= ' ' || c > 122 ||
+ strchr("/:\\<>|*?'\"", c) != NULL)
+ *(char *)s = '_';
+ else if (config.chicon_scheme == CHICON_LOWERCASE && c >= 'A' && c <= 'Z')
+ *(char *)s = c - 'A' + 'a';
+ s++;
+ }
}
- }
- else if((send = strstr(chi, "%c"))) {
+
+ } else if((send = strstr(chi, "%c"))) {
+
char *aname = intlconv_utf8safestr(intlconv_charset_id("ASCII", 1, 1),
chname, strlen(chname) * 2);
if (aname == NULL)
aname = strdup(chname);
- if (config.chicon_lowercase)
- for (s = aname; *s; s++)
- if (*s >= 'A' && *s <= 'Z')
- *(char *)s = *s - 'A' + 'a';
+ if (config.chicon_scheme == CHICON_LOWERCASE) {
+ for (s = aname; *s; s++) {
+ c = *s;
+ if (c >= 'A' && c <= 'Z')
+ *(char *)s = c - 'A' + 'a';
+ }
+ } else if (config.chicon_scheme == CHICON_SVCNAME) {
+ s = svcnamepicons(aname);
+ free((char *)aname);
+ aname = (char *)s;
+ }
sname = url_encode(aname);
free((char *)aname);
- }
- else {
+
+ } else {
buf[0] = '\0';
sname = "";
}
return strtab2htsmsg(tab, 1, lang);
}
+static htsmsg_t *
+config_class_chiconscheme_list ( void *o, const char *lang )
+{
+ static const struct strtab tab[] = {
+ { N_("No scheme"), CHICON_NONE },
+ { N_("All lower-case"), CHICON_LOWERCASE },
+ { N_("Service name picons"), CHICON_SVCNAME },
+ };
+ return strtab2htsmsg(tab, 1, lang);
+}
+
const idclass_t config_class = {
.ic_snode = &config.idnode,
.ic_class = "config",
.group = 6,
},
{
- .type = PT_BOOL,
- .id = "chiconlowercase",
- .name = N_("Channel icon name lower-case"),
- .desc = N_("Use icons with lower-case filenames only."),
- .off = offsetof(config_t, chicon_lowercase),
+ .type = PT_INT,
+ .id = "chiconscheme",
+ .name = N_("Channel icon name scheme"),
+ .desc = N_("Select scheme to generathe the channel icon names "
+ "(all lower-case, service name picons etc.)."),
+ .list = config_class_chiconscheme_list,
+ .off = offsetof(config_t, chicon_scheme),
.opts = PO_ADVANCED,
.group = 6,
},