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,15 +1629,9 @@ 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)
if playurl is None:
# Something went wrong, trying to use non-direct paths
doIndirect = True
else:
playurl = API.validatePlayurl(playurl, API.getType()) playurl = API.validatePlayurl(playurl, API.getType())
if playurl is None: if playurl is None:
return False return False
@ -1640,13 +1642,18 @@ class Music(Items):
# Network share # Network share
filename = playurl.rsplit("/", 1)[1] filename = playurl.rsplit("/", 1)[1]
path = playurl.replace(filename, "") path = playurl.replace(filename, "")
if doIndirect: else:
# Plex works a bit differently # now using .strm files instead to circumvent the inability to
path = "%s%s" % (self.server, item[0][0].attrib.get('key')) # launch plugins directly from the library for music files
path = API.addPlexCredentialsToUrl(path) filename = '%s.strm' % songid
filename = path.rsplit('/', 1)[1] with open(translatePath(
path = path.replace(filename, '') '%s%s' % (SONG_STREAM_DIR, filename)), 'w') as file:
file.write('plugin://%s?dbid=%s&mode=play&id=%s'
% (v.ADDON_ID, songid, itemid))
# Avoid telling kodi in which folder the music files are, so the
# scraper can't find them (and delete them)
path = ''
filename = '%s%s' % (SONG_STREAM_DIR, 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"