PlexKodiConnect/resources/lib/playlist.py

193 lines
5.2 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
2016-02-20 06:03:06 +11:00
###############################################################################
import json
2016-02-11 20:30:29 +11:00
from urllib import urlencode
import xbmc
import xbmcgui
import embydb_functions as embydb
import read_embyserver as embyserver
import utils
2016-02-11 20:30:29 +11:00
import PlexFunctions
import PlexAPI
2016-02-20 06:03:06 +11:00
###############################################################################
2016-01-27 03:20:13 +11:00
@utils.logging
class Playlist():
def __init__(self):
2016-03-11 02:02:46 +11:00
self.userid = utils.window('currUserId')
self.server = utils.window('pms_server')
self.emby = embyserver.Read_EmbyServer()
def playAll(self, itemids, startat):
2016-02-20 06:03:06 +11:00
log = self.logMsg
window = utils.window
2016-02-17 19:13:37 +11:00
embyconn = utils.kodiSQL('emby')
embycursor = embyconn.cursor()
emby_db = embydb.Embydb_Functions(embycursor)
player = xbmc.Player()
playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO)
playlist.clear()
2016-02-17 19:13:37 +11:00
log("---*** PLAY ALL ***---", 1)
log("Items: %s and start at: %s" % (itemids, startat), 1)
2016-02-04 12:06:12 +11:00
started = False
2016-02-17 19:13:37 +11:00
window('emby_customplaylist', value="true")
2016-02-04 12:06:12 +11:00
if startat != 0:
# Seek to the starting position
2016-02-17 19:13:37 +11:00
window('emby_customplaylist.seektime', str(startat))
with embydb.GetEmbyDB() as emby_db:
for itemid in itemids:
embydb_item = emby_db.getItem_byId(itemid)
try:
dbid = embydb_item[0]
mediatype = embydb_item[4]
except TypeError:
# Item is not found in our database, add item manually
2016-02-20 06:03:06 +11:00
log("Item was not found in the database, manually adding item.", 1)
2016-02-11 20:30:29 +11:00
item = PlexFunctions.GetPlexMetadata(itemid)
self.addtoPlaylist_xbmc(playlist, item)
else:
# Add to playlist
self.addtoPlaylist(dbid, mediatype)
2016-02-20 06:03:06 +11:00
log("Adding %s to playlist." % itemid, 1)
if not started:
started = True
player.play(playlist)
self.verifyPlaylist()
def modifyPlaylist(self, itemids):
2016-02-17 19:13:37 +11:00
log = self.logMsg
embyconn = utils.kodiSQL('emby')
embycursor = embyconn.cursor()
emby_db = embydb.Embydb_Functions(embycursor)
2016-02-17 19:13:37 +11:00
log("---*** ADD TO PLAYLIST ***---", 1)
log("Items: %s" % itemids, 1)
2016-02-20 06:03:06 +11:00
# player = xbmc.Player()
playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO)
for itemid in itemids:
embydb_item = emby_db.getItem_byId(itemid)
try:
dbid = embydb_item[0]
mediatype = embydb_item[4]
except TypeError:
# Item is not found in our database, add item manually
item = self.emby.getItem(itemid)
self.addtoPlaylist_xbmc(playlist, item)
else:
# Add to playlist
self.addtoPlaylist(dbid, mediatype)
2016-02-17 19:13:37 +11:00
log("Adding %s to playlist." % itemid, 1)
self.verifyPlaylist()
embycursor.close()
return playlist
def addtoPlaylist(self, dbid=None, mediatype=None, url=None):
pl = {
'jsonrpc': "2.0",
'id': 1,
'method': "Playlist.Add",
'params': {
'playlistid': 1
}
}
if dbid is not None:
pl['params']['item'] = {'%sid' % mediatype: int(dbid)}
else:
pl['params']['item'] = {'file': url}
result = xbmc.executeJSONRPC(json.dumps(pl))
self.logMsg(result, 2)
def addtoPlaylist_xbmc(self, playlist, item):
2016-02-11 20:30:29 +11:00
path = "plugin://plugin.video.plexkodiconnect.movies/"
params = {
'mode': "play",
'dbid': 999999999
}
API = PlexAPI.API(item[0])
params['id'] = API.getRatingKey()
params['filename'] = API.getKey()
playurl = path + '?' + urlencode(params)
listitem = xbmcgui.ListItem()
playlist.add(playurl, listitem)
def insertintoPlaylist(self, position, dbid=None, mediatype=None, url=None):
pl = {
'jsonrpc': "2.0",
'id': 1,
'method': "Playlist.Insert",
'params': {
'playlistid': 1,
'position': position
}
}
if dbid is not None:
pl['params']['item'] = {'%sid' % mediatype: int(dbid)}
else:
pl['params']['item'] = {'file': url}
result = xbmc.executeJSONRPC(json.dumps(pl))
self.logMsg(result, 2)
def verifyPlaylist(self):
pl = {
'jsonrpc': "2.0",
'id': 1,
'method': "Playlist.GetItems",
'params': {
2016-02-07 23:26:28 +11:00
'playlistid': 1,
'properties': ['title', 'file']
}
}
result = xbmc.executeJSONRPC(json.dumps(pl))
self.logMsg(result, 2)
def removefromPlaylist(self, position):
pl = {
'jsonrpc': "2.0",
'id': 1,
'method': "Playlist.Remove",
'params': {
'playlistid': 1,
'position': position
}
}
result = xbmc.executeJSONRPC(json.dumps(pl))
self.logMsg(result, 2)