Try to fix widget resume for episodes for addon paths
- By introducing a second file_id in file and bookmark table
This commit is contained in:
parent
ca1151bc6d
commit
95354fe564
5 changed files with 69 additions and 17 deletions
|
@ -137,7 +137,7 @@ class Items(object):
|
||||||
# Get key and db entry on the Kodi db side
|
# Get key and db entry on the Kodi db side
|
||||||
db_item = self.plex_db.getItem_byId(api.plex_id())
|
db_item = self.plex_db.getItem_byId(api.plex_id())
|
||||||
try:
|
try:
|
||||||
fileid = db_item[1]
|
fileid, fileid_2 = db_item[1], db_item[6]
|
||||||
except TypeError:
|
except TypeError:
|
||||||
continue
|
continue
|
||||||
# Grab the user's viewcount, resume points etc. from PMS' answer
|
# Grab the user's viewcount, resume points etc. from PMS' answer
|
||||||
|
@ -148,6 +148,13 @@ class Items(object):
|
||||||
userdata['Runtime'],
|
userdata['Runtime'],
|
||||||
userdata['PlayCount'],
|
userdata['PlayCount'],
|
||||||
userdata['LastPlayedDate'])
|
userdata['LastPlayedDate'])
|
||||||
|
if fileid_2:
|
||||||
|
# Widget hack for addon paths and episodes
|
||||||
|
self.kodi_db.addPlaystate(fileid_2,
|
||||||
|
userdata['Resume'],
|
||||||
|
userdata['Runtime'],
|
||||||
|
userdata['PlayCount'],
|
||||||
|
userdata['LastPlayedDate'])
|
||||||
if v.KODIVERSION >= 17:
|
if v.KODIVERSION >= 17:
|
||||||
self.kodi_db.update_userrating(db_item[0],
|
self.kodi_db.update_userrating(db_item[0],
|
||||||
db_item[4],
|
db_item[4],
|
||||||
|
@ -156,7 +163,8 @@ class Items(object):
|
||||||
def updatePlaystate(self, mark_played, view_count, resume, duration,
|
def updatePlaystate(self, mark_played, view_count, resume, duration,
|
||||||
file_id, lastViewedAt):
|
file_id, lastViewedAt):
|
||||||
"""
|
"""
|
||||||
Use with websockets, not xml
|
Use with websockets, not xml. This does NOT take care of the Kodi
|
||||||
|
widget hack for episodes & addon paths!
|
||||||
"""
|
"""
|
||||||
# If the playback was stopped, check whether we need to increment the
|
# If the playback was stopped, check whether we need to increment the
|
||||||
# playcount. PMS won't tell us the playcount via websockets
|
# playcount. PMS won't tell us the playcount via websockets
|
||||||
|
@ -779,6 +787,7 @@ class TVShows(Items):
|
||||||
episodeid = plex_dbitem[0]
|
episodeid = plex_dbitem[0]
|
||||||
old_fileid = plex_dbitem[1]
|
old_fileid = plex_dbitem[1]
|
||||||
pathid = plex_dbitem[2]
|
pathid = plex_dbitem[2]
|
||||||
|
old_fileid_2 = plex_dbitem[6]
|
||||||
except TypeError:
|
except TypeError:
|
||||||
update_item = False
|
update_item = False
|
||||||
# episodeid
|
# episodeid
|
||||||
|
@ -849,8 +858,6 @@ class TVShows(Items):
|
||||||
pathid = self.kodi_db.add_video_path(path,
|
pathid = self.kodi_db.add_video_path(path,
|
||||||
id_parent_path=parent_path_id)
|
id_parent_path=parent_path_id)
|
||||||
else:
|
else:
|
||||||
# Set plugin path - do NOT use "intermediate" paths for the show
|
|
||||||
# as with direct paths!
|
|
||||||
filename = api.file_name(force_first_media=True)
|
filename = api.file_name(force_first_media=True)
|
||||||
path = 'plugin://%s.tvshows/%s/' % (v.ADDON_ID, series_id)
|
path = 'plugin://%s.tvshows/%s/' % (v.ADDON_ID, series_id)
|
||||||
filename = ('%s?plex_id=%s&plex_type=%s&mode=play&filename=%s'
|
filename = ('%s?plex_id=%s&plex_type=%s&mode=play&filename=%s'
|
||||||
|
@ -863,12 +870,29 @@ class TVShows(Items):
|
||||||
# if the path or file already exists, the calls return current value
|
# if the path or file already exists, the calls return current value
|
||||||
fileid = self.kodi_db.add_file(filename, pathid, dateadded)
|
fileid = self.kodi_db.add_file(filename, pathid, dateadded)
|
||||||
|
|
||||||
|
# Hack for direct paths and Kodi episode widgets - resume won't work
|
||||||
|
# otherwise because widgets will look for paths like
|
||||||
|
# plugin://...tvshows/?plex_id=1&plex_type=episode&mode=play
|
||||||
|
# instead of
|
||||||
|
# plugin://...tvshows/431926/?plex_id=1&plex_type=episode&mode=play
|
||||||
|
# We need TWO entries in the file and bookmark tables! (and only there)
|
||||||
|
if not state.DIRECT_PATHS:
|
||||||
|
filename_2 = api.file_name(force_first_media=True)
|
||||||
|
path_2 = 'plugin://%s.tvshows/' % v.ADDON_ID
|
||||||
|
filename_2 = ('%s?plex_id=%s&plex_type=%s&mode=play&filename=%s'
|
||||||
|
% (path_2, itemid, v.PLEX_TYPE_EPISODE, filename_2))
|
||||||
|
pathid_2 = self.kodi_db.add_video_path(path_2)
|
||||||
|
fileid_2 = self.kodi_db.add_file(filename_2, pathid_2, dateadded)
|
||||||
|
else:
|
||||||
|
fileid_2 = None
|
||||||
|
|
||||||
# UPDATE THE EPISODE #####
|
# UPDATE THE EPISODE #####
|
||||||
if update_item:
|
if update_item:
|
||||||
LOG.info("UPDATE episode itemid: %s", itemid)
|
LOG.info("UPDATE episode itemid: %s", itemid)
|
||||||
if fileid != old_fileid:
|
if fileid != old_fileid:
|
||||||
LOG.debug('Removing old file entry: %s', old_fileid)
|
|
||||||
self.kodi_db.remove_file(old_fileid)
|
self.kodi_db.remove_file(old_fileid)
|
||||||
|
if old_fileid_2 and fileid_2 != old_fileid_2:
|
||||||
|
self.kodi_db.remove_file(old_fileid_2)
|
||||||
# Update the movie entry
|
# Update the movie entry
|
||||||
if v.KODIVERSION >= 17:
|
if v.KODIVERSION >= 17:
|
||||||
# update new ratings Kodi 17
|
# update new ratings Kodi 17
|
||||||
|
@ -972,6 +996,7 @@ class TVShows(Items):
|
||||||
episodeid,
|
episodeid,
|
||||||
v.KODI_TYPE_EPISODE,
|
v.KODI_TYPE_EPISODE,
|
||||||
kodi_fileid=fileid,
|
kodi_fileid=fileid,
|
||||||
|
kodi_fileid_2=fileid_2,
|
||||||
kodi_pathid=pathid,
|
kodi_pathid=pathid,
|
||||||
parent_id=seasonid,
|
parent_id=seasonid,
|
||||||
checksum=checksum,
|
checksum=checksum,
|
||||||
|
@ -990,6 +1015,12 @@ class TVShows(Items):
|
||||||
runtime,
|
runtime,
|
||||||
playcount,
|
playcount,
|
||||||
dateplayed)
|
dateplayed)
|
||||||
|
if not state.DIRECT_PATHS:
|
||||||
|
self.kodi_db.addPlaystate(fileid_2,
|
||||||
|
resume,
|
||||||
|
runtime,
|
||||||
|
playcount,
|
||||||
|
dateplayed)
|
||||||
|
|
||||||
@catch_exceptions(warnuser=True)
|
@catch_exceptions(warnuser=True)
|
||||||
def remove(self, plex_id):
|
def remove(self, plex_id):
|
||||||
|
|
|
@ -524,6 +524,13 @@ def _record_playstate(status, ended):
|
||||||
totaltime,
|
totaltime,
|
||||||
playcount,
|
playcount,
|
||||||
last_played)
|
last_played)
|
||||||
|
if kodi_db_item[6]:
|
||||||
|
# Kodi Widget hack
|
||||||
|
kodi_db.addPlaystate(kodi_db_item[6],
|
||||||
|
time,
|
||||||
|
totaltime,
|
||||||
|
playcount,
|
||||||
|
last_played)
|
||||||
# Hack to force "in progress" widget to appear if it wasn't visible before
|
# Hack to force "in progress" widget to appear if it wasn't visible before
|
||||||
if (state.FORCE_RELOAD_SKIN and
|
if (state.FORCE_RELOAD_SKIN and
|
||||||
xbmc.getCondVisibility('Window.IsVisible(Home.xml)')):
|
xbmc.getCondVisibility('Window.IsVisible(Home.xml)')):
|
||||||
|
|
|
@ -219,6 +219,7 @@ class LibrarySync(Thread):
|
||||||
kodi_type TEXT,
|
kodi_type TEXT,
|
||||||
kodi_id INTEGER,
|
kodi_id INTEGER,
|
||||||
kodi_fileid INTEGER,
|
kodi_fileid INTEGER,
|
||||||
|
kodi_fileid_2 INTEGER,
|
||||||
kodi_pathid INTEGER,
|
kodi_pathid INTEGER,
|
||||||
parent_id INTEGER,
|
parent_id INTEGER,
|
||||||
checksum INTEGER,
|
checksum INTEGER,
|
||||||
|
@ -1295,6 +1296,7 @@ class LibrarySync(Thread):
|
||||||
# Attach Kodi info to the session
|
# Attach Kodi info to the session
|
||||||
self.session_keys[session_key]['kodi_id'] = kodi_info[0]
|
self.session_keys[session_key]['kodi_id'] = kodi_info[0]
|
||||||
self.session_keys[session_key]['file_id'] = kodi_info[1]
|
self.session_keys[session_key]['file_id'] = kodi_info[1]
|
||||||
|
self.session_keys[session_key]['file_id_2'] = kodi_info[6]
|
||||||
self.session_keys[session_key]['kodi_type'] = kodi_info[4]
|
self.session_keys[session_key]['kodi_type'] = kodi_info[4]
|
||||||
session = self.session_keys[session_key]
|
session = self.session_keys[session_key]
|
||||||
if settings('plex_serverowned') != 'false':
|
if settings('plex_serverowned') != 'false':
|
||||||
|
@ -1356,13 +1358,21 @@ class LibrarySync(Thread):
|
||||||
state.PLEX_USERNAME, state.PLEX_USER_ID, plex_id)
|
state.PLEX_USERNAME, state.PLEX_USER_ID, plex_id)
|
||||||
item_fkt = getattr(itemtypes,
|
item_fkt = getattr(itemtypes,
|
||||||
v.ITEMTYPE_FROM_KODITYPE[session['kodi_type']])
|
v.ITEMTYPE_FROM_KODITYPE[session['kodi_type']])
|
||||||
|
time = utils.unix_date_to_kodi(utils.unix_timestamp())
|
||||||
with item_fkt() as fkt:
|
with item_fkt() as fkt:
|
||||||
fkt.updatePlaystate(mark_played,
|
fkt.updatePlaystate(mark_played,
|
||||||
session['viewCount'],
|
session['viewCount'],
|
||||||
resume,
|
resume,
|
||||||
session['duration'],
|
session['duration'],
|
||||||
session['file_id'],
|
session['file_id'],
|
||||||
utils.unix_date_to_kodi(utils.unix_timestamp()))
|
time)
|
||||||
|
if session['file_id_2']:
|
||||||
|
fkt.updatePlaystate(mark_played,
|
||||||
|
session['viewCount'],
|
||||||
|
resume,
|
||||||
|
session['duration'],
|
||||||
|
session['file_id_2'],
|
||||||
|
time)
|
||||||
|
|
||||||
def sync_fanart(self, missing_only=True, refresh=False):
|
def sync_fanart(self, missing_only=True, refresh=False):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -241,10 +241,11 @@ def _prep_playlist_stack(xml):
|
||||||
api.set_part_number(part)
|
api.set_part_number(part)
|
||||||
if kodi_id is None:
|
if kodi_id is None:
|
||||||
# Need to redirect again to PKC to conclude playback
|
# Need to redirect again to PKC to conclude playback
|
||||||
path = ('plugin://%s/?plex_id=%s&plex_type=%s&mode=play'
|
path = ('plugin://%s/?plex_id=%s&plex_type=%s&mode=play&filename=%s'
|
||||||
% (v.ADDON_TYPE[api.plex_type()],
|
% (v.ADDON_TYPE[api.plex_type()],
|
||||||
api.plex_id(),
|
api.plex_id(),
|
||||||
api.plex_type()))
|
api.plex_type(),
|
||||||
|
api.file_name(force_first_media=True)))
|
||||||
listitem = api.create_listitem()
|
listitem = api.create_listitem()
|
||||||
listitem.setPath(try_encode(path))
|
listitem.setPath(try_encode(path))
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -191,13 +191,14 @@ class Plex_DB_Functions():
|
||||||
def getItem_byId(self, plex_id):
|
def getItem_byId(self, plex_id):
|
||||||
"""
|
"""
|
||||||
For plex_id, returns the tuple
|
For plex_id, returns the tuple
|
||||||
(kodi_id, kodi_fileid, kodi_pathid, parent_id, kodi_type, plex_type)
|
(kodi_id, kodi_fileid, kodi_pathid, parent_id, kodi_type, plex_type,
|
||||||
|
kodi_fileid_2)
|
||||||
|
|
||||||
None if not found
|
None if not found
|
||||||
"""
|
"""
|
||||||
query = '''
|
query = '''
|
||||||
SELECT kodi_id, kodi_fileid, kodi_pathid, parent_id, kodi_type,
|
SELECT kodi_id, kodi_fileid, kodi_pathid, parent_id, kodi_type,
|
||||||
plex_type
|
plex_type, kodi_fileid_2
|
||||||
FROM plex WHERE plex_id = ?
|
FROM plex WHERE plex_id = ?
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
'''
|
'''
|
||||||
|
@ -281,20 +282,22 @@ class Plex_DB_Functions():
|
||||||
return self.plexcursor.fetchall()
|
return self.plexcursor.fetchall()
|
||||||
|
|
||||||
def addReference(self, plex_id, plex_type, kodi_id, kodi_type,
|
def addReference(self, plex_id, plex_type, kodi_id, kodi_type,
|
||||||
kodi_fileid=None, kodi_pathid=None, parent_id=None,
|
kodi_fileid=None, kodi_fileid_2=None, kodi_pathid=None,
|
||||||
checksum=None, view_id=None):
|
parent_id=None, checksum=None, view_id=None):
|
||||||
"""
|
"""
|
||||||
Appends or replaces an entry into the plex table
|
Appends or replaces an entry into the plex table
|
||||||
"""
|
"""
|
||||||
query = '''
|
query = '''
|
||||||
INSERT OR REPLACE INTO plex(
|
INSERT OR REPLACE INTO plex(
|
||||||
plex_id, kodi_id, kodi_fileid, kodi_pathid, plex_type,
|
plex_id, kodi_id, kodi_fileid, kodi_fileid_2, kodi_pathid,
|
||||||
kodi_type, parent_id, checksum, view_id, fanart_synced)
|
plex_type, kodi_type, parent_id, checksum, view_id,
|
||||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
fanart_synced)
|
||||||
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||||
'''
|
'''
|
||||||
self.plexcursor.execute(query, (plex_id, kodi_id, kodi_fileid,
|
self.plexcursor.execute(query, (plex_id, kodi_id, kodi_fileid,
|
||||||
kodi_pathid, plex_type, kodi_type,
|
kodi_fileid_2, kodi_pathid, plex_type,
|
||||||
parent_id, checksum, view_id, 0))
|
kodi_type, parent_id, checksum, view_id,
|
||||||
|
0))
|
||||||
|
|
||||||
def updateReference(self, plex_id, checksum):
|
def updateReference(self, plex_id, checksum):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in a new issue