Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
cfd3099626 | ||
![]() |
3db6c98c27 | ||
![]() |
5417747473 | ||
![]() |
cf6847d777 | ||
![]() |
464fa1f8a3 | ||
![]() |
665a6435ef | ||
![]() |
2d64ba4a0e | ||
![]() |
8a556a50ab | ||
![]() |
532ff59dfe | ||
![]() |
b3fe6145e2 |
12
CHANGELOG.md
12
CHANGELOG.md
@@ -1,5 +1,17 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## v1.4.25 (2017-10-02)
|
||||||
|
|
||||||
|
* Fix: Tab instead of spaces preventing startup.
|
||||||
|
|
||||||
|
|
||||||
|
## v1.4.24 (2017-10-01)
|
||||||
|
|
||||||
|
* Fix: New Plex Web urls. (Thanks @Joshua1337)
|
||||||
|
* Fix: Fallback to the product name if the player title is blank.
|
||||||
|
* New: Added no forking option to startup arguments. (Thanks @Vashypooh)
|
||||||
|
|
||||||
|
|
||||||
## v1.4.23 (2017-09-30)
|
## v1.4.23 (2017-09-30)
|
||||||
|
|
||||||
* Fix: Playstation 4 platform name.
|
* Fix: Playstation 4 platform name.
|
||||||
|
@@ -92,6 +92,8 @@ def main():
|
|||||||
'--nolaunch', action='store_true', help='Prevent browser from launching on startup')
|
'--nolaunch', action='store_true', help='Prevent browser from launching on startup')
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--pidfile', help='Create a pid file (only relevant when running as a daemon)')
|
'--pidfile', help='Create a pid file (only relevant when running as a daemon)')
|
||||||
|
parser.add_argument(
|
||||||
|
'--nofork', action='store_true', help='Start PlexPy as a service, do not fork when restarting')
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
@@ -116,6 +118,10 @@ def main():
|
|||||||
plexpy.DAEMON = True
|
plexpy.DAEMON = True
|
||||||
plexpy.QUIET = True
|
plexpy.QUIET = True
|
||||||
|
|
||||||
|
if args.nofork:
|
||||||
|
plexpy.NOFORK = True
|
||||||
|
logger.info("PlexPy is running as a service, it will not fork when restarted.")
|
||||||
|
|
||||||
if args.pidfile:
|
if args.pidfile:
|
||||||
plexpy.PIDFILE = str(args.pidfile)
|
plexpy.PIDFILE = str(args.pidfile)
|
||||||
|
|
||||||
|
@@ -115,9 +115,9 @@ DOCUMENTATION :: END
|
|||||||
<div class="col-md-9">
|
<div class="col-md-9">
|
||||||
<div class="summary-content-poster hidden-xs hidden-sm">
|
<div class="summary-content-poster hidden-xs hidden-sm">
|
||||||
% if data['media_type'] == 'track':
|
% if data['media_type'] == 'track':
|
||||||
<a href="https://app.plex.tv/web/app#!/server/${config['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${data['parent_rating_key']}" target="_blank" title="View in Plex Web">
|
<a href="https://app.plex.tv/desktop#!/server/${config['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${data['parent_rating_key']}" target="_blank" title="View in Plex Web">
|
||||||
% else:
|
% else:
|
||||||
<a href="https://app.plex.tv/web/app#!/server/${config['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${data['rating_key']}" target="_blank" title="View in Plex Web">
|
<a href="https://app.plex.tv/desktop#!/server/${config['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${data['rating_key']}" target="_blank" title="View in Plex Web">
|
||||||
% endif
|
% endif
|
||||||
% if data['media_type'] == 'episode':
|
% if data['media_type'] == 'episode':
|
||||||
<div class="summary-poster-face-episode" style="background-image: url(pms_image_proxy?img=${data['thumb']}&width=500&height=280&fallback=art);">
|
<div class="summary-poster-face-episode" style="background-image: url(pms_image_proxy?img=${data['thumb']}&width=500&height=280&fallback=art);">
|
||||||
|
@@ -54,6 +54,7 @@ VERBOSE = True
|
|||||||
DAEMON = False
|
DAEMON = False
|
||||||
CREATEPID = False
|
CREATEPID = False
|
||||||
PIDFILE = None
|
PIDFILE = None
|
||||||
|
NOFORK = False
|
||||||
|
|
||||||
SCHED = BackgroundScheduler()
|
SCHED = BackgroundScheduler()
|
||||||
SCHED_LOCK = threading.Lock()
|
SCHED_LOCK = threading.Lock()
|
||||||
@@ -989,13 +990,16 @@ def shutdown(restart=False, update=False):
|
|||||||
args += ARGS
|
args += ARGS
|
||||||
if '--nolaunch' not in args:
|
if '--nolaunch' not in args:
|
||||||
args += ['--nolaunch']
|
args += ['--nolaunch']
|
||||||
logger.info('Restarting PlexPy with %s', args)
|
|
||||||
|
|
||||||
# os.execv fails with spaced names on Windows
|
# os.execv fails with spaced names on Windows
|
||||||
# https://bugs.python.org/issue19066
|
# https://bugs.python.org/issue19066
|
||||||
if os.name == 'nt':
|
if NOFORK:
|
||||||
|
logger.info('Running as service, not forking. Exiting...')
|
||||||
|
elif os.name == 'nt':
|
||||||
|
logger.info('Restarting PlexPy with %s', args)
|
||||||
subprocess.Popen(args, cwd=os.getcwd())
|
subprocess.Popen(args, cwd=os.getcwd())
|
||||||
else:
|
else:
|
||||||
|
logger.info('Restarting PlexPy with %s', args)
|
||||||
os.execv(exe, args)
|
os.execv(exe, args)
|
||||||
|
|
||||||
os._exit(0)
|
os._exit(0)
|
||||||
|
@@ -666,7 +666,7 @@ def build_notify_text(session=None, timeline=None, notify_action=None, agent_id=
|
|||||||
remaining_duration = duration - view_offset
|
remaining_duration = duration - view_offset
|
||||||
|
|
||||||
# Build Plex URL
|
# Build Plex URL
|
||||||
metadata['plex_url'] = 'https://app.plex.tv/web/app#!/server/{0}/details?key=%2Flibrary%2Fmetadata%2F{1}'.format(
|
metadata['plex_url'] = 'https://app.plex.tv/desktop#!/server/{0}/details?key=%2Flibrary%2Fmetadata%2F{1}'.format(
|
||||||
plexpy.CONFIG.PMS_IDENTIFIER, str(rating_key))
|
plexpy.CONFIG.PMS_IDENTIFIER, str(rating_key))
|
||||||
|
|
||||||
# Get media IDs from guid and build URLs
|
# Get media IDs from guid and build URLs
|
||||||
|
@@ -1115,7 +1115,8 @@ class PmsConnect(object):
|
|||||||
'friendly_name': user_details['friendly_name'],
|
'friendly_name': user_details['friendly_name'],
|
||||||
'user_thumb': user_details['user_thumb'],
|
'user_thumb': user_details['user_thumb'],
|
||||||
'ip_address': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'address').split('::ffff:')[-1],
|
'ip_address': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'address').split('::ffff:')[-1],
|
||||||
'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title'),
|
'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title')
|
||||||
|
or helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'product'),
|
||||||
'platform': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'),
|
'platform': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'),
|
||||||
'machine_id': machine_id,
|
'machine_id': machine_id,
|
||||||
'state': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'),
|
'state': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'),
|
||||||
@@ -1258,7 +1259,8 @@ class PmsConnect(object):
|
|||||||
'friendly_name': user_details['friendly_name'],
|
'friendly_name': user_details['friendly_name'],
|
||||||
'user_thumb': user_details['user_thumb'],
|
'user_thumb': user_details['user_thumb'],
|
||||||
'ip_address': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'address').split('::ffff:')[-1],
|
'ip_address': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'address').split('::ffff:')[-1],
|
||||||
'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title'),
|
'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title')
|
||||||
|
or helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'product'),
|
||||||
'platform': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'),
|
'platform': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'),
|
||||||
'machine_id': machine_id,
|
'machine_id': machine_id,
|
||||||
'state': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'),
|
'state': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'),
|
||||||
@@ -1322,7 +1324,8 @@ class PmsConnect(object):
|
|||||||
'friendly_name': user_details['friendly_name'],
|
'friendly_name': user_details['friendly_name'],
|
||||||
'user_thumb': user_details['user_thumb'],
|
'user_thumb': user_details['user_thumb'],
|
||||||
'ip_address': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'address').split('::ffff:')[-1],
|
'ip_address': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'address').split('::ffff:')[-1],
|
||||||
'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title'),
|
'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title')
|
||||||
|
or helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'product'),
|
||||||
'platform': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'),
|
'platform': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'),
|
||||||
'machine_id': machine_id,
|
'machine_id': machine_id,
|
||||||
'state': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'),
|
'state': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'),
|
||||||
@@ -1385,7 +1388,8 @@ class PmsConnect(object):
|
|||||||
'friendly_name': user_details['friendly_name'],
|
'friendly_name': user_details['friendly_name'],
|
||||||
'user_thumb': user_details['user_thumb'],
|
'user_thumb': user_details['user_thumb'],
|
||||||
'ip_address': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'address').split('::ffff:')[-1],
|
'ip_address': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'address').split('::ffff:')[-1],
|
||||||
'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title'),
|
'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title')
|
||||||
|
or helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'product'),
|
||||||
'platform': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'),
|
'platform': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'),
|
||||||
'machine_id': machine_id,
|
'machine_id': machine_id,
|
||||||
'state': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'),
|
'state': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'),
|
||||||
@@ -1491,7 +1495,8 @@ class PmsConnect(object):
|
|||||||
'friendly_name': user_details['friendly_name'],
|
'friendly_name': user_details['friendly_name'],
|
||||||
'user_thumb': user_details['user_thumb'],
|
'user_thumb': user_details['user_thumb'],
|
||||||
'ip_address': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'address').split('::ffff:')[-1],
|
'ip_address': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'address').split('::ffff:')[-1],
|
||||||
'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title'),
|
'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title')
|
||||||
|
or helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'product'),
|
||||||
'platform': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'),
|
'platform': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'platform'),
|
||||||
'machine_id': machine_id,
|
'machine_id': machine_id,
|
||||||
'state': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'),
|
'state': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'state'),
|
||||||
|
@@ -1,2 +1,2 @@
|
|||||||
PLEXPY_VERSION = "master"
|
PLEXPY_VERSION = "master"
|
||||||
PLEXPY_RELEASE_VERSION = "1.4.23"
|
PLEXPY_RELEASE_VERSION = "1.4.25"
|
||||||
|
Reference in New Issue
Block a user