Fix: download file with filename containing special characters / umlauts
Closed this issue · 12 comments
Hallo,
bei der Download Methode gab es leider noch ein Problem, sofern der Dateiname Umlaute enthalten hat.
Habe mal ein Diff erstellt, mit den notwendigen Änderung, hoffe dies ist verständlich.
--- /home/osmc/.kodi/addons/plugin.video.xstream/resources/lib/download.py 2016-03-27 21:36:14.704046179 +0200
+++ download.py 2016-03-27 21:36:51.433985488 +0200
@@ -17,12 +17,15 @@
self.__oDialog = oDialog
def __createDownloadFilename(self, sTitle):
- valid_chars = "-_.() %s%s" % (string.ascii_letters, string.digits)
- filename = ''.join(c for c in sTitle if c in valid_chars)
+ #valid_chars = "-_.() %s%s" % (string.ascii_letters, string.digits)
+ #filename = ''.join(c for c in sTitle if c in valid_chars)
+ filename = sTitle
filename = filename.replace(' ','_')
return filename
def download(self, url, sTitle, showDialog = True):
+ sTitle = u'%s' % sTitle.decode('utf-8')
+
self.__processIsCanceled = False
# extract header
try: header = dict([item.split('=') for item in (url.split('|')[1]).split('&')])
@@ -45,7 +48,7 @@
sPath = dialog.browse(3, 'Downloadfolder', 'files', '')
if (sPath != ''):
- sDownloadPath = xbmc.translatePath(sPath + '%s' % (self.__sTitle, )).decode('utf-8')
+ sDownloadPath = xbmc.translatePath(sPath + '%s' % (self.__sTitle, ))
self.__prepareDownload(url, header, sDownloadPath)
elif self.__sTitle != False:
@@ -76,7 +79,7 @@
iTotalSize = int(headers["Content-Length"])
chunk = 4096
- f = open(fpath, "wb")
+ f = open(r'%s' % fpath.decode('utf-8'), "wb")
iCount = 0
self._startTime = time.time()
while 1:
Mach ne Forke und ne Pull-Request :)
Weil so muss man das immer zusammen kopieren muss.
Hab mal ein Pull-Request erstellt, wie vorgeschlagen.
Macht vielleicht Sinn, dies darüber zu regeln, werde sicherlich noch mehr an Fixes einspielen, wenn notwendig. :)
👍🏼
Gut, ich frage mich ob denn eigentlich die Download Funktion benutzt wird? Ich kann mir vorstellen das einige xStream nur zum Streamen benutzen.
Auch wenn es nur ein paar benutzen sollte ja alles laufen :)
Richtig, wenn die Funktionalität gegeben ist, sollte diese auch funktionieren.
Ansonsten könnte man diese auch vollständig entfernen, ich selbst benötige sie nicht, hatte eben nur bei einem Check festgestellt, dass es hier Probleme gibt.
Natürlich, das finde ich auch ;)
Leider gibt es in meinem Pull-Request noch einen kleinen Encoding-Bug, auf dem Windows Rechner läuft es problemlos, der RaspberryPi streikt allerdings noch etwas.
Schaue mir dies aber dann noch an.
Und wie läuft sowas auf dem Fire TV bzw. Stick? Schon mal da getestet?
Habe die Funktion nie benutzt. Jedoch hat die FireTV auch ne "SD-Karte" (jedenfalls wird ein Speicherbereich so gemounted). Also vom Prinzip könntest du die Funktion benutzen. Musst die die dateinen dann halt irgend wie auf dem PC kopieren z.b mit nem ADB Pull
Am besten gleich direkt auf externen Speicher z.B. eine NAS...
fixed with #43