Merge branch 'beta-version'
This commit is contained in:
commit
8bb6236c4a
8 changed files with 62 additions and 14 deletions
|
@ -1,5 +1,5 @@
|
|||
[![stable version](https://img.shields.io/badge/stable_version-2.1.3-blue.svg?maxAge=60&style=flat) ](https://github.com/croneter/binary_repo/raw/master/stable/repository.plexkodiconnect/repository.plexkodiconnect-1.0.2.zip)
|
||||
[![beta version](https://img.shields.io/badge/beta_version-2.2.10-red.svg?maxAge=60&style=flat) ](https://github.com/croneter/binary_repo/raw/master/beta/repository.plexkodiconnectbeta/repository.plexkodiconnectbeta-1.0.2.zip)
|
||||
[![stable version](https://img.shields.io/badge/stable_version-2.1.5-blue.svg?maxAge=60&style=flat) ](https://github.com/croneter/binary_repo/raw/master/stable/repository.plexkodiconnect/repository.plexkodiconnect-1.0.2.zip)
|
||||
[![beta version](https://img.shields.io/badge/beta_version-2.2.11-red.svg?maxAge=60&style=flat) ](https://github.com/croneter/binary_repo/raw/master/beta/repository.plexkodiconnectbeta/repository.plexkodiconnectbeta-1.0.2.zip)
|
||||
|
||||
[![Installation](https://img.shields.io/badge/wiki-installation-brightgreen.svg?maxAge=60&style=flat)](https://github.com/croneter/PlexKodiConnect/wiki/Installation)
|
||||
[![FAQ](https://img.shields.io/badge/wiki-FAQ-brightgreen.svg?maxAge=60&style=flat)](https://github.com/croneter/PlexKodiConnect/wiki/faq)
|
||||
|
|
12
addon.xml
12
addon.xml
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<addon id="plugin.video.plexkodiconnect" name="PlexKodiConnect" version="2.2.10" provider-name="croneter">
|
||||
<addon id="plugin.video.plexkodiconnect" name="PlexKodiConnect" version="2.2.11" provider-name="croneter">
|
||||
<requires>
|
||||
<import addon="xbmc.python" version="2.1.0"/>
|
||||
<import addon="script.module.requests" version="2.9.1" />
|
||||
|
@ -73,7 +73,15 @@
|
|||
<summary lang="uk_UA">Нативна інтеграція Plex в Kodi</summary>
|
||||
<description lang="uk_UA">Підключає Kodi до серверу Plex. Цей плагін передбачає, що ви керуєте всіма своїми відео за допомогою Plex (і ніяк не Kodi). Ви можете втратити дані, які вже зберігаються у відео та музичних БД Kodi (оскільки цей плагін безпосередньо їх змінює). Використовуйте на свій страх і ризик!</description>
|
||||
<disclaimer lang="uk_UA">Використовуйте на свій ризик</disclaimer>
|
||||
<news>version 2.2.10 (beta only):
|
||||
<news>version 2.2.11 (beta only):
|
||||
- Fix OnDeck widget for Direct Paths
|
||||
- Fix Plex Companion crashing when connected to Plex Web
|
||||
- Fix Plex Companion crash when connected to Plex Web playing playlist music
|
||||
- Improve Plex playback report when playing music playlist
|
||||
- Improve reliability in Kodi song playback
|
||||
- Catch some errors if user mixes audio and video in Kodi playqueue
|
||||
|
||||
version 2.2.10 (beta only):
|
||||
- Fix playlists getting recreated and deleted in an endless loop
|
||||
- Add some safety nets for playlist sync
|
||||
- Fix FutureWarning
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
version 2.2.11 (beta only):
|
||||
- Fix OnDeck widget for Direct Paths
|
||||
- Fix Plex Companion crashing when connected to Plex Web
|
||||
- Fix Plex Companion crash when connected to Plex Web playing playlist music
|
||||
- Improve Plex playback report when playing music playlist
|
||||
- Improve reliability in Kodi song playback
|
||||
- Catch some errors if user mixes audio and video in Kodi playqueue
|
||||
|
||||
version 2.2.10 (beta only):
|
||||
- Fix playlists getting recreated and deleted in an endless loop
|
||||
- Add some safety nets for playlist sync
|
||||
|
|
|
@ -13,11 +13,14 @@ from xbmcgui import ListItem
|
|||
|
||||
from . import utils
|
||||
from . import path_ops
|
||||
from . import initialsetup
|
||||
from .downloadutils import DownloadUtils as DU
|
||||
from .plex_api import API
|
||||
from . import plex_functions as PF
|
||||
from . import json_rpc as js
|
||||
from . import variables as v
|
||||
# Be careful - your using state in another Python instance!
|
||||
from . import state
|
||||
|
||||
###############################################################################
|
||||
LOG = getLogger('PLEX.entrypoint')
|
||||
|
@ -31,7 +34,6 @@ def choose_pms_server():
|
|||
"""
|
||||
LOG.info("Choosing PMS server requested, starting")
|
||||
|
||||
from . import initialsetup
|
||||
setup = initialsetup.InitialSetup()
|
||||
server = setup.pick_pms(showDialog=True)
|
||||
if server is None:
|
||||
|
@ -80,7 +82,6 @@ def toggle_plex_tv_sign_in():
|
|||
utils.plex_command('PLEX_USERNAME', '')
|
||||
else:
|
||||
LOG.info('Login to plex.tv')
|
||||
from . import initialsetup
|
||||
initialsetup.InitialSetup().plex_tv_sign_in()
|
||||
utils.dialog('notification',
|
||||
utils.lang(29999),
|
||||
|
@ -551,7 +552,15 @@ def on_deck_episodes(viewid, tagname, limit):
|
|||
LOG.error('Could not download PMS xml for view %s', viewid)
|
||||
xbmcplugin.endOfDirectory(int(argv[1]), False)
|
||||
return
|
||||
direct_paths = utils.settings('useDirectPaths') == '1'
|
||||
# We're using another python instance - need to load some vars
|
||||
if utils.settings('useDirectPaths') == '1':
|
||||
state.DIRECT_PATHS = True
|
||||
state.REPLACE_SMB_PATH = utils.settings('replaceSMB') == 'true'
|
||||
state.REMAP_PATH = utils.settings('remapSMB') == 'true'
|
||||
if state.REMAP_PATH:
|
||||
initialsetup.set_replace_paths()
|
||||
# Let's NOT check paths for widgets!
|
||||
state.PATH_VERIFIED = True
|
||||
counter = 0
|
||||
for item in xml:
|
||||
api = API(item)
|
||||
|
@ -560,7 +569,7 @@ def on_deck_episodes(viewid, tagname, limit):
|
|||
append_sxxexx=append_sxxexx)
|
||||
if api.resume_point():
|
||||
listitem.setProperty('resumetime', str(api.resume_point()))
|
||||
path = api.path(force_first_media=False, direct_paths=direct_paths)
|
||||
path = api.path(force_first_media=True)
|
||||
xbmcplugin.addDirectoryItem(
|
||||
handle=int(argv[1]),
|
||||
url=path,
|
||||
|
|
|
@ -425,6 +425,7 @@ class KodiMonitor(xbmc.Monitor):
|
|||
state.PLAYER_STATES[playerid] = copy.deepcopy(state.PLAYSTATE)
|
||||
return
|
||||
item = PL.init_plex_playqueue(playqueue, plex_id=plex_id)
|
||||
item.file = path
|
||||
# Set the Plex container key (e.g. using the Plex playqueue)
|
||||
container_key = None
|
||||
if info['playlistid'] != -1:
|
||||
|
|
|
@ -15,6 +15,7 @@ from . import utils
|
|||
from . import path_ops
|
||||
from . import json_rpc as js
|
||||
from . import variables as v
|
||||
from . import state
|
||||
|
||||
###############################################################################
|
||||
|
||||
|
@ -342,10 +343,18 @@ def verify_kodi_item(plex_id, kodi_item):
|
|||
if plex_id is not None or kodi_item.get('id') is not None:
|
||||
# Got all the info we need
|
||||
return kodi_item
|
||||
# Special case playlist startup - got type but no id
|
||||
if (not state.DIRECT_PATHS and state.ENABLE_MUSIC and
|
||||
kodi_item.get('type') == v.KODI_TYPE_SONG and
|
||||
kodi_item['file'].startswith('http')):
|
||||
kodi_item['id'], _ = kodidb.kodiid_from_filename(kodi_item['file'],
|
||||
v.KODI_TYPE_SONG)
|
||||
LOG.debug('Detected song. Research results: %s', kodi_item)
|
||||
return kodi_item
|
||||
# Need more info since we don't have kodi_id nor type. Use file path.
|
||||
if (kodi_item['file'].startswith('plugin') or
|
||||
kodi_item['file'].startswith('http')):
|
||||
LOG.error('kodi_item %s cannot be used for Plex playback', kodi_item)
|
||||
LOG.info('kodi_item %s cannot be used for Plex playback', kodi_item)
|
||||
raise PlaylistError
|
||||
LOG.debug('Starting research for Kodi id since we didnt get one: %s',
|
||||
kodi_item)
|
||||
|
|
|
@ -141,9 +141,14 @@ class PlayqueueMonitor(Thread):
|
|||
del old[j], index[j]
|
||||
break
|
||||
elif identical:
|
||||
LOG.debug('Detected playqueue item %s moved to position %s',
|
||||
LOG.debug('Playqueue item %s moved to position %s',
|
||||
i + j, i)
|
||||
try:
|
||||
PL.move_playlist_item(playqueue, i + j, i)
|
||||
except PL.PlaylistError:
|
||||
LOG.error('Could not modify playqueue positions')
|
||||
LOG.error('This is likely caused by mixing audio and '
|
||||
'video tracks in the Kodi playqueue')
|
||||
del old[j], index[j]
|
||||
break
|
||||
else:
|
||||
|
@ -175,7 +180,12 @@ class PlayqueueMonitor(Thread):
|
|||
# Kodi exit
|
||||
return
|
||||
LOG.debug('Detected deletion of playqueue element at pos %s', i)
|
||||
try:
|
||||
PL.delete_playlist_item_from_PMS(playqueue, i)
|
||||
except PL.PlaylistError:
|
||||
LOG.error('Could not delete PMS element from position %s', i)
|
||||
LOG.error('This is likely caused by mixing audio and '
|
||||
'video tracks in the Kodi playqueue')
|
||||
LOG.debug('Done comparing playqueues')
|
||||
|
||||
def run(self):
|
||||
|
|
|
@ -114,6 +114,7 @@ class SubscriptionMgr(object):
|
|||
self.server = ""
|
||||
self.protocol = "http"
|
||||
self.port = ""
|
||||
self.isplaying = False
|
||||
self.location = 'navigation'
|
||||
# In order to be able to signal a stop at the end
|
||||
self.last_params = {}
|
||||
|
@ -142,7 +143,7 @@ class SubscriptionMgr(object):
|
|||
if playqueue.kodi_playlist_playback:
|
||||
position = 0
|
||||
else:
|
||||
position = info['position']
|
||||
position = info['position'] or 0
|
||||
return position
|
||||
|
||||
def msg(self, players):
|
||||
|
@ -150,6 +151,7 @@ class SubscriptionMgr(object):
|
|||
Returns a timeline xml as str
|
||||
(xml containing video, audio, photo player state)
|
||||
"""
|
||||
self.isplaying = False
|
||||
self.location = 'navigation'
|
||||
answ = str(XML)
|
||||
timelines = {
|
||||
|
@ -198,10 +200,11 @@ class SubscriptionMgr(object):
|
|||
'type': ptype,
|
||||
'state': 'stopped'
|
||||
}
|
||||
self.isplaying = True
|
||||
self.stop_sent_to_web = False
|
||||
if ptype in (v.PLEX_PLAYLIST_TYPE_VIDEO,
|
||||
v.PLEX_PLAYLIST_TYPE_PHOTO):
|
||||
self.location = 'fullScreenVideo'
|
||||
self.stop_sent_to_web = False
|
||||
pbmc_server = utils.window('pms_server')
|
||||
if pbmc_server:
|
||||
(self.protocol, self.server, self.port) = pbmc_server.split(':')
|
||||
|
|
Loading…
Reference in a new issue