Fix encoding of file paths

This commit is contained in:
croneter 2020-12-18 20:01:06 +01:00
parent a1f4bc75e6
commit dcd6756a7d
3 changed files with 20 additions and 22 deletions

View file

@ -20,7 +20,6 @@ from os import path # allows to use path_ops.path.join, for example
from distutils import dir_util from distutils import dir_util
import re import re
import xbmc
import xbmcvfs import xbmcvfs
from .tools import unicode_paths from .tools import unicode_paths
@ -56,8 +55,7 @@ def translate_path(path):
e.g. Converts 'special://masterprofile/script_data' e.g. Converts 'special://masterprofile/script_data'
-> '/home/user/XBMC/UserData/script_data' on Linux. -> '/home/user/XBMC/UserData/script_data' on Linux.
""" """
translated = xbmc.translatePath(path.encode(KODI_ENCODING, 'strict')) return xbmcvfs.translatePath(path)
return translated.decode(KODI_ENCODING, 'strict')
def exists(path): def exists(path):
@ -65,7 +63,7 @@ def exists(path):
Returns True if the path [unicode] exists. Folders NEED a trailing slash or Returns True if the path [unicode] exists. Folders NEED a trailing slash or
backslash!! backslash!!
""" """
return xbmcvfs.exists(path.encode(KODI_ENCODING, 'strict')) == 1 return xbmcvfs.exists(path) == 1
def rmtree(path, *args, **kwargs): def rmtree(path, *args, **kwargs):
@ -79,12 +77,12 @@ def rmtree(path, *args, **kwargs):
is false and onerror is None, an exception is raised. is false and onerror is None, an exception is raised.
""" """
return shutil.rmtree(encode_path(path), *args, **kwargs) return shutil.rmtree(path, *args, **kwargs)
def copyfile(src, dst): def copyfile(src, dst):
"""Copy data from src to dst""" """Copy data from src to dst"""
return shutil.copyfile(encode_path(src), encode_path(dst)) return shutil.copyfile(src, dst)
def makedirs(path, *args, **kwargs): def makedirs(path, *args, **kwargs):
@ -94,7 +92,7 @@ def makedirs(path, *args, **kwargs):
mkdir, except that any intermediate path segment (not just the rightmost) mkdir, except that any intermediate path segment (not just the rightmost)
will be created if it does not exist. This is recursive. will be created if it does not exist. This is recursive.
""" """
return os.makedirs(encode_path(path), *args, **kwargs) return os.makedirs(path, *args, **kwargs)
def remove(path): def remove(path):
@ -106,7 +104,7 @@ def remove(path):
removed but the storage allocated to the file is not made available until removed but the storage allocated to the file is not made available until
the original file is no longer in use. the original file is no longer in use.
""" """
return os.remove(encode_path(path)) return os.remove(path)
def walk(top, topdown=True, onerror=None, followlinks=False): def walk(top, topdown=True, onerror=None, followlinks=False):
@ -169,14 +167,14 @@ def walk(top, topdown=True, onerror=None, followlinks=False):
""" """
# Get all the results from os.walk and store them in a list # Get all the results from os.walk and store them in a list
walker = list(os.walk(encode_path(top), walker = list(os.walk(top,
topdown, topdown,
onerror, onerror,
followlinks)) followlinks))
for top, dirs, nondirs in walker: for top, dirs, nondirs in walker:
yield (decode_path(top), yield (top,
[decode_path(x) for x in dirs], [x for x in dirs],
[decode_path(x) for x in nondirs]) [x for x in nondirs])
def copy_tree(src, dst, *args, **kwargs): def copy_tree(src, dst, *args, **kwargs):
@ -200,8 +198,6 @@ def copy_tree(src, dst, *args, **kwargs):
(the default), the destination of the symlink will be copied. (the default), the destination of the symlink will be copied.
'update' and 'verbose' are the same as for 'copy_file'. 'update' and 'verbose' are the same as for 'copy_file'.
""" """
src = encode_path(src)
dst = encode_path(dst)
return dir_util.copy_tree(src, dst, *args, **kwargs) return dir_util.copy_tree(src, dst, *args, **kwargs)

View file

@ -3,6 +3,7 @@
import logging import logging
import sys import sys
import xbmc import xbmc
import xbmcvfs
from . import utils, clientinfo from . import utils, clientinfo
from . import initialsetup from . import initialsetup
@ -37,7 +38,7 @@ class Service(object):
def __init__(self): def __init__(self):
self._init_done = False self._init_done = False
# Detect switch of Kodi profile - a second instance of PKC is started # Detect switch of Kodi profile - a second instance of PKC is started
self.profile = xbmc.translatePath('special://profile') self.profile = xbmcvfs.translatePath('special://profile')
utils.window('plex_kodi_profilepath', value=self.profile) utils.window('plex_kodi_profilepath', value=self.profile)
# Kodi Version supported by PKC? # Kodi Version supported by PKC?

View file

@ -5,6 +5,7 @@ import sys
import platform import platform
import xbmc import xbmc
import xbmcvfs
from xbmcaddon import Addon from xbmcaddon import Addon
from . import path_ops from . import path_ops
@ -41,13 +42,13 @@ ADDON_NAME = 'PlexKodiConnect'
ADDON_ID = 'plugin.video.plexkodiconnect' ADDON_ID = 'plugin.video.plexkodiconnect'
ADDON_VERSION = _ADDON.getAddonInfo('version') ADDON_VERSION = _ADDON.getAddonInfo('version')
ADDON_PATH = try_decode(_ADDON.getAddonInfo('path')) ADDON_PATH = try_decode(_ADDON.getAddonInfo('path'))
ADDON_FOLDER = try_decode(xbmc.translatePath('special://home')) ADDON_FOLDER = try_decode(xbmcvfs.translatePath('special://home'))
ADDON_PROFILE = try_decode(xbmc.translatePath(_ADDON.getAddonInfo('profile'))) ADDON_PROFILE = try_decode(xbmcvfs.translatePath(_ADDON.getAddonInfo('profile')))
KODILANGUAGE = xbmc.getLanguage(xbmc.ISO_639_1) KODILANGUAGE = xbmc.getLanguage(xbmc.ISO_639_1)
KODIVERSION = int(xbmc.getInfoLabel("System.BuildVersion")[:2]) KODIVERSION = int(xbmc.getInfoLabel("System.BuildVersion")[:2])
KODILONGVERSION = xbmc.getInfoLabel('System.BuildVersion') KODILONGVERSION = xbmc.getInfoLabel('System.BuildVersion')
KODI_PROFILE = try_decode(xbmc.translatePath("special://profile")) KODI_PROFILE = try_decode(xbmcvfs.translatePath("special://profile"))
if xbmc.getCondVisibility('system.platform.osx'): if xbmc.getCondVisibility('system.platform.osx'):
DEVICE = "MacOSX" DEVICE = "MacOSX"
@ -120,10 +121,10 @@ DB_MUSIC_VERSION = None
DB_MUSIC_PATH = None DB_MUSIC_PATH = None
DB_TEXTURE_VERSION = None DB_TEXTURE_VERSION = None
DB_TEXTURE_PATH = None DB_TEXTURE_PATH = None
DB_PLEX_PATH = try_decode(xbmc.translatePath("special://database/plex.db")) DB_PLEX_PATH = try_decode(xbmcvfs.translatePath("special://database/plex.db"))
DB_PLEX_COPY_PATH = try_decode(xbmc.translatePath("special://database/plex-copy.db")) DB_PLEX_COPY_PATH = try_decode(xbmcvfs.translatePath("special://database/plex-copy.db"))
EXTERNAL_SUBTITLE_TEMP_PATH = try_decode(xbmc.translatePath( EXTERNAL_SUBTITLE_TEMP_PATH = try_decode(xbmcvfs.translatePath(
"special://profile/addon_data/%s/temp/" % ADDON_ID)) "special://profile/addon_data/%s/temp/" % ADDON_ID))
@ -698,7 +699,7 @@ def database_paths():
if KODIVERSION not in (19, ): if KODIVERSION not in (19, ):
raise RuntimeError('Kodiversion %s not supported by PKC' % KODIVERSION) raise RuntimeError('Kodiversion %s not supported by PKC' % KODIVERSION)
database_path = try_decode(xbmc.translatePath('special://database')) database_path = try_decode(xbmcvfs.translatePath('special://database'))
thismodule = sys.modules[__name__] thismodule = sys.modules[__name__]
types = (('MyVideos%s.db', SUPPORTED_VIDEO_DB, types = (('MyVideos%s.db', SUPPORTED_VIDEO_DB,
'DB_VIDEO_VERSION', 'DB_VIDEO_PATH'), 'DB_VIDEO_VERSION', 'DB_VIDEO_PATH'),