Kodi Community Forum

Full Version: Netflix Add-on [input-stream] confused by path substitution
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
We run a kodi in each room of the house and like to have the same settings on each.  When we install a new add-on, we experiment with settings and like these to be the same too, in all rooms.  So we use a file server with a "kodi clients" alias and each client has path substitution:
Code:
<advancedsettings>
  <pathsubstitution>  
    <substitute>
      <from>special://profile/addon_data/</from>
      <to>smb://fileserver/KodiClient/userdata/addon_data/</to>
    </substitute>
...
Unfortunatly, the netflix add on gets confused between the local addon_data directory and the shared directory :-(
log:
12:33:53.032 T:140259297527552 WARNING: SMBFile::OpenForWrite() called with overwriting enabled! - smb://fileserver/KodiClient/userdata/addon_data/plugin.video.netflix/settings.xml
12:34:16.822 T:140259297527552 WARNING: Previous line repeats 2 times.
12:34:16.822 T:140259297527552 WARNING: SMBFile::OpenForWrite() called with overwriting enabled! - smb://fileserver/KodiClient/userdata/addon_data/script.module.inputstreamhelper/settings.xml
12:34:19.504 T:140259297527552   ERROR: EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
                                             - NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
                                            Error Type: <type 'exceptions.IOError'>
                                            Error Contents: [Errno 2] No such file or directory: '/storage/.kodi/userdata/addon_data/script.module.inputstreamhelper/tmp/1.4.9.1088-linux-x64.zip'
                                            Traceback (most recent call last):
                                              File "/storage/.kodi/addons/plugin.video.netflix/addon.py", line 33, in <module>
                                                NAVIGATION.router(paramstring=REQUEST_PARAMS)
                                              File "/storage/.kodi/addons/plugin.video.netflix/resources/lib/utils.py", line 60, in wrapped
                                                result = func(*args, **kwargs)
                                              File "/storage/.kodi/addons/plugin.video.netflix/resources/lib/Navigation.py", line 253, in router
                                                infoLabels=params.get('infoLabels', {}))
                                              File "/storage/.kodi/addons/plugin.video.netflix/resources/lib/utils.py", line 60, in wrapped
                                                result = func(*args, **kwargs)
                                              File "/storage/.kodi/addons/plugin.video.netflix/resources/lib/Navigation.py", line 313, in play_video
                                                timeline_markers=self._get_timeline_markers(metadata))
                                              File "/storage/.kodi/addons/plugin.video.netflix/resources/lib/KodiHelper.py", line 908, in play_item
                                                if not is_helper.check_inputstream():
                                              File "/storage/.kodi/addons/script.module.inputstreamhelper/lib/inputstreamhelper.py", line 763, in check_inputstream
                                                return self._check_drm()
                                              File "/storage/.kodi/addons/script.module.inputstreamhelper/lib/inputstreamhelper.py", line 741, in _check_drm
                                                return self._check_widevine()
                                              File "/storage/.kodi/addons/script.module.inputstreamhelper/lib/inputstreamhelper.py", line 655, in _check_widevine
                                                return self._install_widevine()
                                              File "/storage/.kodi/addons/script.module.inputstreamhelper/lib/inputstreamhelper.py", line 540, in _install_widevine
                                                return self._install_widevine_x86()
                                              File "/storage/.kodi/addons/script.module.inputstreamhelper/lib/inputstreamhelper.py", line 442, in _install_widevine_x86
                                                downloaded = self._http_request(download=True)
                                              File "/storage/.kodi/addons/script.module.inputstreamhelper/lib/inputstreamhelper.py", line 304, in _http_request
                                                with open(self._download_path, 'wb') as f:
                                            IOError: [Errno 2] No such file or directory: '/storage/.kodi/userdata/addon_data/script.module.inputstreamhelper/tmp/1.4.9.1088-linux-x64.zip'
                                            -->End of Python script error report<--
12:34:19.702 T:140259297527552 WARNING: CPythonInvoker(4, /storage/.kodi/addons/plugin.video.netflix/addon.py): the python script "/storage/.kodi/addons/plugin.video.netflix/addon.py" has left several classes in memory that we couldn't clean up. The classes include: N9XBMCAddon9xbmcaddon5AddonE

There is in fact no local  '/storage/.kodi/userdata/addon_data/script.module.inputstreamhelper/' directory:
bash:
~/.kodi/userdata/addon_data # ls
browser.chrome              pvr.hts
peripheral.joystick         service.libreelec.settings
plugin.audio.radio_de       skin.estuary
but it can be found in the file server (with unfortunately an empty cdm and tmp directory):
bash:
/data/KodiClient/userdata/addon_data/script.module.inputstreamhelper# ls -lR
.:
total 12
drwxrwx--- 2 hts video 4096 feb 10 12:26 cdm
-rw-rw---- 1 hts video   88 feb 10 12:34 settings.xml
drwxrwx--- 2 hts video 4096 feb  9 22:52 tmp

./cdm:
total 0

./tmp:
total 0
The install of the netflix add on has correctly created and filled a cdm directory in ~/.kodi/

Oh, by the way, without the path substitution, the add on works very well (LibreELEC 9.0), but we'll go mad updating all the clients while we tweak the user interface.