Utiliser 'special://' dans un cheminLes dernières releases de XBMC ont introduit un nouveau format dans le type de chemins, ceux-ci peuvent etre désormais identifies par
special:// qui remplace les anciens
Q:, P:, T:, U:, Z:Voici un petit résumé mais je vous conseille de lire les informations tres importante du
Blog XBMC de jmarshall sur
ce sujet et ce sujet sur le forum officiel:
- Utilisez special://home/ (anciennement U:\\) si vous avez besoin de lire/écrire dans la partie modifiable de l'installation de XBMC
- Utilisez special://profile/ (anciennement P:\\) si vous avez besoin de lire/écrire dans le répertoire userdata de l'utilisateur courrant.
- Utilisez special://temp/ (anciennement Z:\\) si vous avez besoin de lire/écrire a dans un emplacement temporaire.
Si vous en avez réellement besoin vous pouvez aussi:
- Utilisez special://xbmc/ (anciennement Q:\\) pour lire dans le répertoire même d'installation de XBMC.
- Utilisez special://masterprofile/ (anciennement T:\\) pour lire pour dans le répertoire userdata de l'utilisateur maître/principal (master users)
Attention: Utilisez
xbmc.translatePath() pour traduire tout chemin (XBMC) vers son réel chemin (au niveau OS) lorsque vous avez besoin lire ou écrire dans le systeme de fichier (dépendant donc de l'OS).
Maintenant voici un snippet sur la facon de couvir tous les cas, car certains version de XBMC (sur certains OS ou trop anciennes) ne supportent pas bien le chemin '
special://'.
Cet exemple est une librairie réalisée par Frost (merci a lui) dans l'installer Passion-XBMC qui couvre je pense tous les cas:
(Python):
# If the dir exists with the requested name, simply return it
__all__ = [
# public names
"XBMC_IS_HOME",
"SPECIAL_XBMC_DIR",
"SPECIAL_HOME_DIR",
"SPECIAL_TEMP_DIR",
"SPECIAL_PROFILE_DIR",
"SPECIAL_MASTERPROFILE_DIR",
"SPECIAL_XBMC_HOME",
"SPECIAL_SCRIPT_DATA",
]
import os
import sys
from xbmc import translatePath
PLATFORM_MAC = os.environ.get( "OS", "" ).lower() == "os x"
try: scriptname = sys.modules[ "__main__" ].__script__
except: scriptname = os.path.basename( os.getcwd() )
SPECIAL_XBMC_DIR = translatePath( "special://xbmc/" )
if PLATFORM_MAC or not os.path.isdir( SPECIAL_XBMC_DIR ): SPECIAL_XBMC_DIR = translatePath( "Q:\\" )
SPECIAL_HOME_DIR = translatePath( "special://home/" )
if PLATFORM_MAC or not os.path.isdir( SPECIAL_HOME_DIR ): SPECIAL_HOME_DIR = translatePath( "U:\\" )
SPECIAL_TEMP_DIR = translatePath( "special://temp/" )
if PLATFORM_MAC or not os.path.isdir( SPECIAL_TEMP_DIR ): SPECIAL_TEMP_DIR = translatePath( "Z:\\" )
SPECIAL_PROFILE_DIR = translatePath( "special://profile/" )
if PLATFORM_MAC or not os.path.isdir( SPECIAL_PROFILE_DIR ): SPECIAL_PROFILE_DIR = translatePath( "P:\\" )
SPECIAL_MASTERPROFILE_DIR = translatePath( "special://masterprofile/" )
if PLATFORM_MAC or not os.path.isdir( SPECIAL_MASTERPROFILE_DIR ): SPECIAL_MASTERPROFILE_DIR = translatePath( "T:\\" )
SPECIAL_XBMC_HOME = ( SPECIAL_HOME_DIR, SPECIAL_XBMC_DIR )[ ( os.environ.get( "OS", "xbox" ).lower() == "xbox" ) ]
XBMC_IS_HOME = SPECIAL_HOME_DIR == SPECIAL_XBMC_DIR
SPECIAL_SCRIPT_DATA = os.path.join( SPECIAL_PROFILE_DIR, "script_data", scriptname )
if not os.path.isdir( SPECIAL_SCRIPT_DATA ): os.makedirs( SPECIAL_SCRIPT_DATA )
Vous pouvez constater le cas particulier de XBMC sur Mac, pour une raison obscure a l'heure actuel le test
os.path.isdir sur les chemins '
special://' ne fonctionne pas proprement, aussi on contourne ce problème en verifiant si on est sur Mac.
Sinon on vérifie si XBMC reconnaît un chemin '
special://' et si ce n'est pas le cas, on utilise l'ancien format des chemins
Q:, P:, T:, U:, Z:[edit]Voici un nouveau fil de discutions sur ce sujet :
changement des chemins internes à XBMC