]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
WEBUI: dvrfile - convert back the subscription file id to utf8
authorJaroslav Kysela <perex@perex.cz>
Tue, 20 Oct 2015 12:01:48 +0000 (14:01 +0200)
committerJaroslav Kysela <perex@perex.cz>
Tue, 20 Oct 2015 12:01:48 +0000 (14:01 +0200)
src/webui/webui.c

index d1362675fab1d7fa834318e326f7c47332485bfd..5ea3d8242f692e89519840aeece6636a81ebf4af 100644 (file)
@@ -1468,7 +1468,7 @@ page_dvrfile(http_connection_t *hc, const char *remain, void *opaque)
   struct stat st;
   const char *content = NULL, *range, *filename;
   dvr_entry_t *de;
-  char *fname;
+  char *fname, *charset;
   char *basename;
   char *str, *str0;
   char range_buf[255];
@@ -1510,6 +1510,7 @@ page_dvrfile(http_connection_t *hc, const char *remain, void *opaque)
 
   fname = tvh_strdupa(filename);
   content = muxer_container_type2mime(de->de_mc, 1);
+  charset = de->de_config ? de->de_config->dvr_charset_id : NULL;
 
   pthread_mutex_unlock(&global_lock);
 
@@ -1585,10 +1586,17 @@ page_dvrfile(http_connection_t *hc, const char *remain, void *opaque)
       http_stream_postop(tcp_id);
       tcp_id = NULL;
     } else {
-      basename = malloc(strlen(fname) + 7 + 1);
+      str = intlconv_to_utf8safestr(charset, fname, strlen(fname) * 3);
+      if (str == NULL)
+        str = intlconv_to_utf8safestr(intlconv_charset_id("ASCII", 1, 1),
+                                      fname, strlen(fname) * 3);
+      if (str == NULL)
+        str = strdup("error");
+      basename = malloc(strlen(str) + 7 + 1);
       strcpy(basename, "file://");
-      strcat(basename, fname);
+      strcat(basename, str);
       sub->ths_dvrfile = basename;
+      free(str);
     }
   }
   pthread_mutex_unlock(&global_lock);