]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
xmltv: split names in credits, fixes #5359
authorJaroslav Kysela <perex@perex.cz>
Wed, 5 Dec 2018 11:26:28 +0000 (12:26 +0100)
committerJaroslav Kysela <perex@perex.cz>
Wed, 5 Dec 2018 11:38:49 +0000 (12:38 +0100)
src/epggrab/module/xmltv.c

index 829f058ae9c9b36db6cc4a5731e77e2474a2904d..d63ee994ed3709213fcbe87347a7c4850797b7a5 100644 (file)
@@ -573,21 +573,46 @@ _xmltv_parse_credits(htsmsg_t **out_credits, htsmsg_t *tags)
   htsmsg_field_t *f;
 
   HTSMSG_FOREACH(f, credits_tags) {
-    if ((!strcmp(htsmsg_field_name(f), "actor") ||
-         !strcmp(htsmsg_field_name(f), "director") ||
-         !strcmp(htsmsg_field_name(f), "guest") ||
-         !strcmp(htsmsg_field_name(f), "presenter") ||
-         !strcmp(htsmsg_field_name(f), "writer")
+    const char *fname = htsmsg_field_name(f);
+    if ((!strcmp(fname, "actor") ||
+         !strcmp(fname, "director") ||
+         !strcmp(fname, "guest") ||
+         !strcmp(fname, "presenter") ||
+         !strcmp(fname, "writer")
          ) &&
         (e = htsmsg_get_map_by_field(f)))  {
       const char* str = htsmsg_get_str(e, "cdata");
-      if (str) {
+      char *s, *str2 = NULL, *saveptr;
+      if (str == NULL) continue;
+      if (strstr(str, "|") == 0) {
+      
+        if (strlen(str) > 255) {
+          str2 = strdup(str);
+          str2[256] = '\0';
+          str = str2;
+        }
+      
         if (!credits_names) credits_names = string_list_create();
         string_list_insert(credits_names, str);
 
         if (!*out_credits) *out_credits = htsmsg_create_map();
-        htsmsg_add_str(*out_credits, str, htsmsg_field_name(f));
+        htsmsg_add_str(*out_credits, str, fname);
+      } else {
+        for (s = str2 = strdup(str); ; s = NULL) {
+          s = strtok_r(s, "|", &saveptr);
+          if (s == NULL) break;
+
+          if (strlen(s) > 255)
+            s[256] = '\0';
+
+          if (!credits_names) credits_names = string_list_create();
+          string_list_insert(credits_names, s);
+
+          if (!*out_credits) *out_credits = htsmsg_create_map();
+          htsmsg_add_str(*out_credits, s, fname);
+        }
       }
+      free(str2);
     }
   }