Custom smb path substitutions for direct paths

This commit is contained in:
tomkat83 2016-03-16 12:26:31 +01:00
parent d14e9b1d05
commit 32ddb6cb78
7 changed files with 107 additions and 30 deletions

View file

@ -57,7 +57,8 @@ Currently these features are working:
**Known Issues:** **Known Issues:**
- **Plex Music:** You must have a static IP address for your Plex media server if you plan to use Plex Music features. This is due to the way Kodi works and cannot be helped. - **Plex Music:** You must have a static IP address for your Plex media server if you plan to use Plex Music features. This is due to the way Kodi works and cannot be helped.
-**Plex updates:** PlexKodiConnect continuously polls the Plex Media Server for changes. If something on the PMS has changed, this change is synced to Kodi. Hence if you rescan your entire library, a long PlexKodiConnect re-sync is triggered. - **Plex updates:** PlexKodiConnect continuously polls the Plex Media Server for changes. If something on the PMS has changed, this change is synced to Kodi. Hence if you rescan your entire library, a long PlexKodiConnect re-sync is triggered.
- **Direct Paths:** If you use direct paths, your sync will be slower
**What could be in the pipeline?** **What could be in the pipeline?**
- Watch Later - Watch Later

View file

@ -375,9 +375,18 @@
<string id="39030">Add network credentials to allow Kodi access to your content? Note: Skipping this step may generate a message during the initial scan of your content if Kodi can't locate your content.</string> <string id="39030">Add network credentials to allow Kodi access to your content? Note: Skipping this step may generate a message during the initial scan of your content if Kodi can't locate your content.</string>
<string id="39031">Kodi can't locate file: </string> <string id="39031">Kodi can't locate file: </string>
<string id="39032">Please verify the path. You may need to verify your network credentials in the add-on settings or use different Plex paths. Stop syncing?</string> <string id="39032">Please verify the path. You may need to verify your network credentials in the add-on settings or use different Plex paths. Stop syncing?</string>
<string id="39033">Shall we transform Plex paths from e.g. \\myNas\mymovie.mkv to smb://myNas/mymovie.mkv? (recommended)</string> <string id="39033">Transform Plex UNC library paths \\myNas\mymovie.mkv automatically to smb paths, smb://myNas/mymovie.mkv? (recommended)</string>
<string id="39034">Replace Plex paths \\myNas with SMB paths smb://myNas</string> <string id="39034">Replace Plex UNC paths \\myNas with smb://myNas</string>
<string id="39035">Replace Plex paths /volume1/media or \\myserver\media with custom SMB paths smb://NAS/mystuff</string>
<string id="39037">Original Plex MOVIE path to replace:</string>
<string id="39038">Replace Plex MOVIE with:</string>
<string id="39039">Original Plex TV SHOWS path to replace:</string>
<string id="39040">Replace Plex TV SHOWS with:</string>
<string id="39041">Original Plex MUSIC path to replace:</string>
<string id="39042">Replace Plex MUSIC with:</string>
<string id="39043">Go a step further and complete replace all original Plex library paths (/volume1/media) with custom SMB paths (smb://NAS/MyStuff)?</string>
<string id="39044">Please enter your custom smb paths in the settings under "Sync Options" and then restart Kodi</string>
<!-- Plex Entrypoint.py --> <!-- Plex Entrypoint.py -->
<string id="39200">Switch Plex Home User</string> <string id="39200">Switch Plex Home User</string>

View file

@ -311,8 +311,18 @@
<string id="39030">Möchten Sie nun Netzwerk Zugangsdaten eingeben? Wenn Sie diesen Schritt überspringen, wird möglicherweise die Synchronisierung Ihrer Bibliothek fehlschlagen, wenn Kodi nicht auf Ihre Medien zugreifen kann.</string> <string id="39030">Möchten Sie nun Netzwerk Zugangsdaten eingeben? Wenn Sie diesen Schritt überspringen, wird möglicherweise die Synchronisierung Ihrer Bibliothek fehlschlagen, wenn Kodi nicht auf Ihre Medien zugreifen kann.</string>
<string id="39031">Kodi kann die folgende Datei nicht finden: </string> <string id="39031">Kodi kann die folgende Datei nicht finden: </string>
<string id="39032">Bitte verifizieren Sie den Pfad. Möglichweise müssen Sie in den Addon Einstellungen die Netzwerk Zugangsdaten korrekt eingeben, oder Plex muss andere Pfade nutzen. Soll Sync gestoppt werden?</string> <string id="39032">Bitte verifizieren Sie den Pfad. Möglichweise müssen Sie in den Addon Einstellungen die Netzwerk Zugangsdaten korrekt eingeben, oder Plex muss andere Pfade nutzen. Soll Sync gestoppt werden?</string>
<string id="39033">Sollen alle Plex Pfade \\meinNAS\meinFilm.mkv durch smb://meinNAS/meinFilm.mkv ersetzt werden? (empfohlen)</string> <string id="39033">Sollen alle Plex UNC Pfade \\meinNAS\meinFilm.mkv automatisch durch SMB Pfade smb://meinNAS/meinFilm.mkv ersetzt werden? (empfohlen)</string>
<string id="39034">Plex Pfade \\meinNAS durch SMB Pfade smb://meinNAS ersetzen</string> <string id="39034">Plex UNC Pfade \\meinNAS durch smb://meinNAS ersetzen</string>
<string id="39035">Benutzerdefinierte smb Pfade für z.B. /volume1/media erstellen</string>
<string id="39037">Ursprünglicher Plex Pfad für FILME:</string>
<string id="39038">Plex FILM Pfade ersetzen durch:</string>
<string id="39039">Ursprünglicher Plex Pfad für TV SERIEN:</string>
<string id="39040">Plex TV SERIEN Pfade ersetzen durch:</string>
<string id="39041">Ursprünglicher Plex Pfad für MUSIK:</string>
<string id="39042">Plex MUSIK Pfade ersetzen durch:</string>
<string id="39043">Sollen sogar sämtliche Plex Pfade wie /volume1/Hans/medien durch benutzerdefinierte smb Pfade wie smb://NAS/Filme ersetzt werden?</string>
<string id="39044">Bitte geben Sie Ihre benutzerdefinierten SMB Pfade nun in den Einstellungen unter Sync Optionen ein. Starten Sie dann Kodi neu.</string>
<!-- Plex Entrypoint.py --> <!-- Plex Entrypoint.py -->
<string id="39200">Plex Home Benutzer wechseln</string> <string id="39200">Plex Home Benutzer wechseln</string>

View file

@ -234,6 +234,7 @@ class InitialSetup():
if forcePlexTV: if forcePlexTV:
return return
goToSettings = False
# Direct paths (\\NAS\mymovie.mkv) or addon (http)? # Direct paths (\\NAS\mymovie.mkv) or addon (http)?
if dialog.yesno(heading=self.addonName, if dialog.yesno(heading=self.addonName,
line1=string(39027), line1=string(39027),
@ -247,6 +248,21 @@ class InitialSetup():
if dialog.yesno(heading=self.addonName, if dialog.yesno(heading=self.addonName,
line1=string(39033)): line1=string(39033)):
self.logMsg("User chose to replace paths with smb", 1) self.logMsg("User chose to replace paths with smb", 1)
else:
utils.settings('replaceSMB', value="false")
# complete replace all original Plex library paths with custom SMB
if dialog.yesno(heading=self.addonName,
line1=string(39043)):
self.logMsg("User chose custom smb paths", 1)
utils.settings('remapSMB', value="true")
# Please enter your custom smb paths in the settings under
# "Sync Options" and then restart Kodi
dialog.ok(heading=self.addonName,
line1=string(39044))
goToSettings = True
# Don't start anything because we need these paths first!
utils.window('emby_serverStatus', value="Stop")
# Go to network credentials? # Go to network credentials?
if dialog.yesno(heading=self.addonName, if dialog.yesno(heading=self.addonName,
@ -260,8 +276,12 @@ class InitialSetup():
self.logMsg("User opted to disable Plex music library.", 1) self.logMsg("User opted to disable Plex music library.", 1)
utils.settings('enableMusic', value="false") utils.settings('enableMusic', value="false")
# Open Settings page now? if goToSettings:
if dialog.yesno(heading=self.addonName,
line1=string(39017)):
xbmc.executebuiltin( xbmc.executebuiltin(
'Addon.OpenSettings(plugin.video.plexkodiconnect)') 'Addon.OpenSettings(plugin.video.plexkodiconnect)')
else:
# Open Settings page now?
if dialog.yesno(heading=self.addonName,
line1=string(39017)):
xbmc.executebuiltin(
'Addon.OpenSettings(plugin.video.plexkodiconnect)')

View file

@ -41,6 +41,8 @@ class Items(object):
else False else False
self.replaceSMB = True if utils.window('replaceSMB') == 'true' \ self.replaceSMB = True if utils.window('replaceSMB') == 'true' \
else False else False
self.remapSMB = True if utils.window('remapSMB') == 'true' \
else False
# self.music_enabled = utils.settings('enableMusic') == "true" # self.music_enabled = utils.settings('enableMusic') == "true"
# self.contentmsg = utils.settings('newContent') == "true" # self.contentmsg = utils.settings('newContent') == "true"
@ -88,6 +90,28 @@ class Items(object):
line2=string(39032)) line2=string(39032))
return resp return resp
def validatePlayurl(self, playurl, typus):
"""
If False is returned, itemtypes should return with False (stop sync)
typus: 'movie', 'tv', 'music'
"""
if self.remapSMB:
playurl = playurl.replace(utils.window('remapSMB%sOrg' % typus),
utils.window('remapSMB%sNew' % typus))
# There might be backslashes left over:
playurl = playurl.replace('\\', '/')
elif self.replaceSMB:
if playurl.startswith('\\\\'):
playurl = 'smb:' + playurl.replace('\\', '/')
if (utils.window('emby_pathverified') != "true" and
not xbmcvfs.exists(playurl.encode('utf-8'))):
# Validate the path is correct with user intervention
if self.askToValidate(playurl):
utils.window('emby_shouldStop', value="true")
playurl = False
return playurl
def itemsbyId(self, items, process, pdialog=None): def itemsbyId(self, items, process, pdialog=None):
# Process items by itemid. Process can be added, update, userdata, remove # Process items by itemid. Process can be added, update, userdata, remove
emby = self.emby emby = self.emby
@ -423,16 +447,9 @@ class Movies(Items):
# Something went wrong, trying to use non-direct paths # Something went wrong, trying to use non-direct paths
doIndirect = True doIndirect = True
else: else:
if self.replaceSMB: playurl = self.validatePlayurl(playurl, 'movie')
if playurl.startswith('\\\\'): if playurl is False:
playurl = playurl.replace('\\', '/') return False
playurl = 'smb:' + playurl
if (utils.window('emby_pathverified') != "true" and
not xbmcvfs.exists(playurl.encode('utf-8'))):
# Validate the path is correct with user intervention
if self.askToValidate(playurl):
utils.window('emby_shouldStop', value="true")
return False
if "\\" in playurl: if "\\" in playurl:
# Local path # Local path
filename = playurl.rsplit("\\", 1)[1] filename = playurl.rsplit("\\", 1)[1]
@ -1037,10 +1054,9 @@ class TVShows(Items):
# Something went wrong, trying to use non-direct paths # Something went wrong, trying to use non-direct paths
doIndirect = True doIndirect = True
else: else:
if self.replaceSMB: playurl = self.validatePlayurl(playurl, 'tv')
if playurl.startswith('\\\\'): if playurl is False:
playurl = playurl.replace('\\', '/') return False
playurl = 'smb:' + playurl
if "\\" in playurl: if "\\" in playurl:
# Local path # Local path
path = "%s\\" % playurl path = "%s\\" % playurl
@ -1341,10 +1357,9 @@ class TVShows(Items):
# Something went wrong, trying to use non-direct paths # Something went wrong, trying to use non-direct paths
doIndirect = True doIndirect = True
else: else:
if self.replaceSMB: playurl = self.validatePlayurl(playurl, 'tv')
if playurl.startswith('\\\\'): if playurl is False:
playurl = playurl.replace('\\', '/') return False
playurl = 'smb:' + playurl
if (utils.window('emby_pathverified') != "true" and if (utils.window('emby_pathverified') != "true" and
not xbmcvfs.exists(playurl.encode('utf-8'))): not xbmcvfs.exists(playurl.encode('utf-8'))):
# Validate the path is correct with user intervention # Validate the path is correct with user intervention
@ -2100,9 +2115,9 @@ class Music(Items):
# Something went wrong, trying to use non-direct paths # Something went wrong, trying to use non-direct paths
doIndirect = True doIndirect = True
else: else:
if self.replaceSMB: playurl = self.validatePlayurl(playurl, 'music')
playurl = playurl.replace('\\', '/') if playurl is False:
playurl = 'smb:' + playurl return False
if (utils.window('emby_pathverified') != "true" and if (utils.window('emby_pathverified') != "true" and
not xbmcvfs.exists(playurl.encode('utf-8'))): not xbmcvfs.exists(playurl.encode('utf-8'))):
# Validate the path is correct with user intervention # Validate the path is correct with user intervention

View file

@ -203,11 +203,25 @@ class UserClient(threading.Thread):
window('plex_machineIdentifier', value=self.machineIdentifier) window('plex_machineIdentifier', value=self.machineIdentifier)
window('plex_servername', value=self.servername) window('plex_servername', value=self.servername)
window('plex_authenticated', value='true') window('plex_authenticated', value='true')
# self.directpath
window('useDirectPaths', value='true' window('useDirectPaths', value='true'
if utils.settings('useDirectPaths') == "1" else 'false') if utils.settings('useDirectPaths') == "1" else 'false')
window('replaceSMB', value='true' window('replaceSMB', value='true'
if utils.settings('replaceSMB') == "true" else 'false') if utils.settings('replaceSMB') == "true" else 'false')
window('remapSMB', value='true'
if utils.settings('remapSMB') == "true" else 'false')
if window('remapSMB') == 'true':
items = ('movie', 'tv', 'music')
for item in items:
# Normalize! Get rid of potential (back)slashes at the end
org = settings('remapSMB%sOrg' % item)
new = settings('remapSMB%sNew' % item)
if org.endswith('\\') or org.endswith('/'):
org = org[:-1]
if new.endswith('\\') or new.endswith('/'):
new = new[:-1]
window('remapSMB%sOrg' % item, value=org)
window('remapSMB%sNew' % item, value=new)
# Set DownloadUtils values # Set DownloadUtils values
doUtils.setUsername(username) doUtils.setUsername(username)

View file

@ -61,6 +61,14 @@
<setting id="enableMusic" type="bool" label="30509" default="true" /> <setting id="enableMusic" type="bool" label="30509" default="true" />
<setting id="useDirectPaths" type="enum" label="30511" values="Addon(Default)|Native(Direct paths)" default="0" visible="true"/> <!-- Playback mode --> <setting id="useDirectPaths" type="enum" label="30511" values="Addon(Default)|Native(Direct paths)" default="0" visible="true"/> <!-- Playback mode -->
<setting id="replaceSMB" type="bool" label="39034" default="true" visible="eq(-1,1)"/> <!-- replace all Plex paths with SMB paths --> <setting id="replaceSMB" type="bool" label="39034" default="true" visible="eq(-1,1)"/> <!-- replace all Plex paths with SMB paths -->
<setting id="remapSMB" type="bool" label="39035" default="false" visible="eq(-2,1)"/> <!-- replace Plex paths /volume1/media or \\myserver\media with a custom SMB path smb://NAS/mystuff -->
<setting id="remapSMBmovieOrg" type="text" label="39037" default="" visible="eq(-1,true)"/> <!-- Original Plex MOVIE path to replace -->
<setting id="remapSMBmovieNew" type="text" label="39038" default="smb://" visible="eq(-2,true)"/> <!-- Replace Plex MOVIE with: -->
<setting id="remapSMBtvOrg" type="text" label="39039" default="" visible="eq(-3,true)"/> <!-- Original Plex TV SHOWS path to replace: -->
<setting id="remapSMBtvNew" type="text" label="39040" default="smb://" visible="eq(-4,true)"/> <!-- Replace Plex TV SHOWS with: -->
<setting id="remapSMBmusicOrg" type="text" label="39041" default="" visible="eq(-5,true)"/> <!-- Original Plex MUSIC path to replace: -->
<setting id="remapSMBmusicNew" type="text" label="39042" default="smb://" visible="eq(-6,true)"/> <!-- Replace Plex MUSIC with: -->
<setting id="streamMusic" type="bool" label="30510" default="false" visible="false" subsetting="true"/> <!-- Direct stream Music library --> <setting id="streamMusic" type="bool" label="30510" default="false" visible="false" subsetting="true"/> <!-- Direct stream Music library -->
<setting type="lsep" label="30523" visible="false"/> <!-- Music metadata options --> <setting type="lsep" label="30523" visible="false"/> <!-- Music metadata options -->
<setting id="enableImportSongRating" type="bool" label="30524" default="true" visible="false"/> <setting id="enableImportSongRating" type="bool" label="30524" default="true" visible="false"/>