Music: use strm files for addon paths

This commit is contained in:
tomkat83 2017-04-11 19:16:03 +02:00
parent 7a58c9ddb9
commit 2d3f19b536

View file

@ -6,10 +6,12 @@ import logging
from urllib import urlencode from urllib import urlencode
from ntpath import dirname from ntpath import dirname
from datetime import datetime from datetime import datetime
from xbmc import sleep from xbmc import sleep, translatePath
from os import path as os_path, makedirs
import artwork import artwork
from utils import tryEncode, tryDecode, window, kodiSQL, CatchExceptions from utils import tryEncode, tryDecode, window, kodiSQL, CatchExceptions, \
settings
import plexdb_functions as plexdb import plexdb_functions as plexdb
import kodidb_functions as kodidb import kodidb_functions as kodidb
@ -22,6 +24,12 @@ import variables as v
log = logging.getLogger("PLEX."+__name__) log = logging.getLogger("PLEX."+__name__)
MARK_PLAYED_AT = 0.90 MARK_PLAYED_AT = 0.90
if settings('enableMusic') == "true":
SONG_STREAM_DIR = ('special://userdata/addon_data/%s/musicstreamfiles/'
% v.ADDON_ID)
if not os_path.exists(translatePath(SONG_STREAM_DIR)):
makedirs(translatePath(SONG_STREAM_DIR))
############################################################################### ###############################################################################
@ -1621,32 +1629,31 @@ class Music(Items):
moods.append(entry.attrib['tag']) moods.append(entry.attrib['tag'])
mood = ' / '.join(moods) mood = ' / '.join(moods)
# GET THE FILE AND PATH #####
doIndirect = not self.directpath
if self.directpath: if self.directpath:
# Direct paths is set the Kodi way # Direct paths is set the Kodi way
playurl = API.getFilePath(forceFirstMediaStream=True) playurl = API.getFilePath(forceFirstMediaStream=True)
playurl = API.validatePlayurl(playurl, API.getType())
if playurl is None: if playurl is None:
# Something went wrong, trying to use non-direct paths return False
doIndirect = True if "\\" in playurl:
# Local path
filename = playurl.rsplit("\\", 1)[1]
else: else:
playurl = API.validatePlayurl(playurl, API.getType()) # Network share
if playurl is None: filename = playurl.rsplit("/", 1)[1]
return False path = playurl.replace(filename, "")
if "\\" in playurl: else:
# Local path # now using .strm files instead to circumvent the inability to
filename = playurl.rsplit("\\", 1)[1] # launch plugins directly from the library for music files
else: filename = '%s.strm' % songid
# Network share with open(translatePath(
filename = playurl.rsplit("/", 1)[1] '%s%s' % (SONG_STREAM_DIR, filename)), 'w') as file:
path = playurl.replace(filename, "") file.write('plugin://%s?dbid=%s&mode=play&id=%s'
if doIndirect: % (v.ADDON_ID, songid, itemid))
# Plex works a bit differently # Avoid telling kodi in which folder the music files are, so the
path = "%s%s" % (self.server, item[0][0].attrib.get('key')) # scraper can't find them (and delete them)
path = API.addPlexCredentialsToUrl(path) path = ''
filename = path.rsplit('/', 1)[1] filename = '%s%s' % (SONG_STREAM_DIR, filename)
path = path.replace(filename, '')
# UPDATE THE SONG ##### # UPDATE THE SONG #####
if update_item: if update_item:
log.info("UPDATE song itemid: %s - Title: %s with path: %s" log.info("UPDATE song itemid: %s - Title: %s with path: %s"