mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-08-22 14:13:40 -07:00
mostly working server manager and multi server support
This commit is contained in:
parent
6d858367a4
commit
09faeaa985
25 changed files with 996 additions and 830 deletions
|
@ -69,67 +69,66 @@ DOCUMENTATION :: END
|
||||||
<%
|
<%
|
||||||
data = defaultdict(lambda: 'Unknown', **session)
|
data = defaultdict(lambda: 'Unknown', **session)
|
||||||
sk = data['session_key']
|
sk = data['session_key']
|
||||||
|
href = page('info', data['rating_key'], server_id=data['server_id'])
|
||||||
href = page('info', data['rating_key'])
|
parent_href = page('info', data['parent_rating_key'], server_id=data['server_id'])
|
||||||
parent_href = page('info', data['parent_rating_key'])
|
grandparent_href = page('info', data['grandparent_rating_key'], server_id=data['server_id'])
|
||||||
grandparent_href = page('info', data['grandparent_rating_key'])
|
|
||||||
user_href = page('user', data['user_id']) if data['user_id'] else '#'
|
user_href = page('user', data['user_id']) if data['user_id'] else '#'
|
||||||
season = short_season(data['parent_title'])
|
season = short_season(data['parent_title'])
|
||||||
%>
|
%>
|
||||||
<div class="dashboard-activity-instance" id="activity-instance-${sk}" data-key="${sk}" data-id="${data['session_id']}"
|
<div class="dashboard-activity-instance" id="activity-instance-${sk}" data-key="${sk}" data-id="${data['session_id']}"
|
||||||
data-rating_key="${data['rating_key']}" data-parent_rating_key="${data['parent_rating_key']}" data-grandparent_rating_key="${data['grandparent_rating_key']}"
|
data-rating_key="${data['rating_key']}" data-server_id="${data['server_id']}" data-parent_rating_key="${data['parent_rating_key']}" data-grandparent_rating_key="${data['grandparent_rating_key']}"
|
||||||
data-guid="${data['guid']}">
|
data-guid="${data['guid']}">
|
||||||
<div class="dashboard-activity-container">
|
<div class="dashboard-activity-container">
|
||||||
<%
|
<%
|
||||||
if data['live']:
|
if data['live']:
|
||||||
background_url = page('pms_image_proxy', data['art'], data['rating_key'], 500, 280, 40, '282828', 3, fallback='art-live', refresh=True)
|
background_url = page('pms_image_proxy', data['art'], data['rating_key'], 500, 280, 40, '282828', 3, fallback='art-live', refresh=True, server_id=data['server_id'])
|
||||||
elif data['channel_stream'] == 0:
|
elif data['channel_stream'] == 0:
|
||||||
background_url = page('pms_image_proxy', data['art'], data['rating_key'], 500, 280, 40, '282828', 3, fallback='art', refresh=True)
|
background_url = page('pms_image_proxy', data['art'], data['rating_key'], 500, 280, 40, '282828', 3, fallback='art', refresh=True, server_id=data['server_id'])
|
||||||
else:
|
else:
|
||||||
background_url = page('pms_image_proxy', data['art'] or data['thumb'], data['rating_key'], 500, 280, 40, '282828', 3, fallback='art', refresh=True, clip=True)
|
background_url = page('pms_image_proxy', data['art'] or data['thumb'], data['rating_key'], 500, 280, 40, '282828', 3, fallback='art', refresh=True, clip=True, server_id=data['server_id'])
|
||||||
%>
|
%>
|
||||||
<div id="background-${sk}" class="dashboard-activity-background" style="background-image: url(${background_url});">
|
<div id="background-${sk}" class="dashboard-activity-background" style="background-image: url(${background_url});">
|
||||||
<div class="dashboard-activity-poster-container hidden-xs">
|
<div class="dashboard-activity-poster-container hidden-xs">
|
||||||
% if data['media_type'] == 'track':
|
% if data['media_type'] == 'track':
|
||||||
<div id="poster-${sk}-bg" class="dashboard-activity-poster" style="background-image: url(${page('pms_image_proxy', data['parent_thumb'], data['parent_rating_key'], 300, 300, 60, '282828', 3, fallback='cover', refresh=True)});"></div>
|
<div id="poster-${sk}-bg" class="dashboard-activity-poster" style="background-image: url(${page('pms_image_proxy', data['parent_thumb'], data['parent_rating_key'], 300, 300, 60, '282828', 3, fallback='cover', refresh=True, server_id=data['server_id'])});"></div>
|
||||||
% endif
|
% endif
|
||||||
% if data['live']:
|
% if data['live']:
|
||||||
% if data['media_type'] == 'movie':
|
% if data['media_type'] == 'movie':
|
||||||
<a id="poster-url-${sk}" href="${href}" title="${data['title']}">
|
<a id="poster-url-${sk}" href="${href}" title="${data['title']}">
|
||||||
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(${page('pms_image_proxy', data['thumb'], data['rating_key'], 300, 450, fallback='poster-live', refresh=True)});"></div>
|
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(${page('pms_image_proxy', data['thumb'], data['rating_key'], 300, 450, fallback='poster-live', refresh=True, server_id=data['server_id'])});"></div>
|
||||||
</a>
|
</a>
|
||||||
% elif data['media_type'] == 'episode':
|
% elif data['media_type'] == 'episode':
|
||||||
<a id="poster-url-${sk}" href="${href}" title="${data['grandparent_title']}">
|
<a id="poster-url-${sk}" href="${href}" title="${data['grandparent_title']}">
|
||||||
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(${page('pms_image_proxy', data['grandparent_thumb'], data['rating_key'], 300, 450, fallback='poster-live', refresh=True)});"></div>
|
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(${page('pms_image_proxy', data['grandparent_thumb'], data['rating_key'], 300, 450, fallback='poster-live', refresh=True, server_id=data['server_id'])});"></div>
|
||||||
</a>
|
</a>
|
||||||
% else:
|
% else:
|
||||||
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(${page('pms_image_proxy', data['grandparent_thumb'] or data['thumb'], data['rating_key'], 300, 450, fallback='poster-live', refresh=True)});"></div>
|
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(${page('pms_image_proxy', data['grandparent_thumb'] or data['thumb'], data['rating_key'], 300, 450, fallback='poster-live', refresh=True, server_id=data['server_id'])});"></div>
|
||||||
% endif
|
% endif
|
||||||
% elif data['channel_stream'] == 0:
|
% elif data['channel_stream'] == 0:
|
||||||
% if data['media_type'] == 'movie':
|
% if data['media_type'] == 'movie':
|
||||||
<a id="poster-url-${sk}" href="${href}" title="${data['title']}">
|
<a id="poster-url-${sk}" href="${href}" title="${data['title']}">
|
||||||
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(${page('pms_image_proxy', data['thumb'], data['rating_key'], 300, 450, fallback='poster', refresh=True)});"></div>
|
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(${page('pms_image_proxy', data['thumb'], data['rating_key'], 300, 450, fallback='poster', refresh=True, server_id=data['server_id'])});"></div>
|
||||||
</a>
|
</a>
|
||||||
% elif data['media_type'] == 'episode':
|
% elif data['media_type'] == 'episode':
|
||||||
<a id="poster-url-${sk}" href="${grandparent_href}" title="${data['grandparent_title']}">
|
<a id="poster-url-${sk}" href="${grandparent_href}" title="${data['grandparent_title']}">
|
||||||
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(${page('pms_image_proxy', data['grandparent_thumb'], data['grandparent_rating_key'], 300, 450, fallback='poster', refresh=True)});"></div>
|
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(${page('pms_image_proxy', data['grandparent_thumb'], data['grandparent_rating_key'], 300, 450, fallback='poster', refresh=True, server_id=data['server_id'])});"></div>
|
||||||
</a>
|
</a>
|
||||||
% elif data['media_type'] == 'track':
|
% elif data['media_type'] == 'track':
|
||||||
<a id="poster-url-${sk}" href="${parent_href}" title="${data['parent_title']}">
|
<a id="poster-url-${sk}" href="${parent_href}" title="${data['parent_title']}">
|
||||||
<div id="poster-${sk}" class="dashboard-activity-cover" style="background-image: url(${page('pms_image_proxy', data['parent_thumb'], data['parent_rating_key'], 300, 300, fallback='cover', refresh=True)});"></div>
|
<div id="poster-${sk}" class="dashboard-activity-cover" style="background-image: url(${page('pms_image_proxy', data['parent_thumb'], data['parent_rating_key'], 300, 300, fallback='cover', refresh=True, server_id=data['server_id'])});"></div>
|
||||||
</a>
|
</a>
|
||||||
% elif data['media_type'] in ('photo', 'clip'):
|
% elif data['media_type'] in ('photo', 'clip'):
|
||||||
% if data['parent_thumb']:
|
% if data['parent_thumb']:
|
||||||
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(${page('pms_image_proxy', data['parent_thumb'], data['parent_rating_key'], 300, 450, fallback='poster', refresh=True)});"></div>
|
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(${page('pms_image_proxy', data['parent_thumb'], data['parent_rating_key'], 300, 450, fallback='poster', refresh=True, server_id=data['server_id'])});"></div>
|
||||||
% else:
|
% else:
|
||||||
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(${page('pms_image_proxy', data['thumb'], data['rating_key'], 300, 450, fallback='poster', refresh=True)});"></div>
|
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(${page('pms_image_proxy', data['thumb'], data['rating_key'], 300, 450, fallback='poster', refresh=True, server_id=data['server_id'])});"></div>
|
||||||
% endif
|
% endif
|
||||||
% else:
|
% else:
|
||||||
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(images/poster.png);"></div>
|
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(images/poster.png);"></div>
|
||||||
% endif
|
% endif
|
||||||
% else:
|
% else:
|
||||||
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(${page('pms_image_proxy', data['channel_icon'], data['rating_key'], 300, 300, 60, '282828', 3, fallback='cover', refresh=True)});"></div>
|
<div id="poster-${sk}" class="dashboard-activity-poster" style="background-image: url(${page('pms_image_proxy', data['channel_icon'], data['rating_key'], 300, 300, 60, '282828', 3, fallback='cover', refresh=True, server_id=data['server_id'])});"></div>
|
||||||
<div id="poster-${sk}" class="dashboard-activity-cover" style="background-image: url(${page('pms_image_proxy', data['channel_icon'], data['rating_key'], 300, 300, fallback='cover', refresh=True)});"></div>
|
<div id="poster-${sk}" class="dashboard-activity-cover" style="background-image: url(${page('pms_image_proxy', data['channel_icon'], data['rating_key'], 300, 300, fallback='cover', refresh=True, server_id=data['server_id'])});"></div>
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
<div class="dashboard-activity-info-icon">
|
<div class="dashboard-activity-info-icon">
|
||||||
|
@ -141,7 +140,7 @@ DOCUMENTATION :: END
|
||||||
%>
|
%>
|
||||||
<div id="platform-${sk}" class="dashboard-activity-info-platform${no_terminate} svg-icon platform-${data['platform_name']}" title="${data['platform']}"></div>
|
<div id="platform-${sk}" class="dashboard-activity-info-platform${no_terminate} svg-icon platform-${data['platform_name']}" title="${data['platform']}"></div>
|
||||||
% if _session['user_group'] == 'admin' and plexpy.CONFIG.PMS_PLEXPASS and data['session_id']:
|
% if _session['user_group'] == 'admin' and plexpy.CONFIG.PMS_PLEXPASS and data['session_id']:
|
||||||
<div class="dashboard-activity-terminate-session" id="terminate-button-${sk}" data-key="${sk}" data-id="${data['session_id']}" data-toggle="tooltip" title="Terminate Stream">
|
<div class="dashboard-activity-terminate-session" id="terminate-button-${sk}" data-key="${sk}" data-id="${data['session_id']}" data-toggle="tooltip" data-server_id="${data['server_id']}" title="Terminate Stream">
|
||||||
<i class="fa fa-times" style="padding-top: 10px;"></i>
|
<i class="fa fa-times" style="padding-top: 10px;"></i>
|
||||||
</div>
|
</div>
|
||||||
% endif
|
% endif
|
||||||
|
@ -179,6 +178,10 @@ DOCUMENTATION :: END
|
||||||
<span data-toggle="tooltip" title="Quality profile is only an estimate based on bitrate and may be incorrect"><i class="fa fa-exclamation-circle"></i></span>
|
<span data-toggle="tooltip" title="Quality profile is only an estimate based on bitrate and may be incorrect"><i class="fa fa-exclamation-circle"></i></span>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="dashboard-activity-info-item">
|
||||||
|
<div class="sub-heading">Server</div>
|
||||||
|
<div class="sub-value platform-right">${data['server_name']}(${data['server_ip']}:${data['server_port']})</div>
|
||||||
|
</li>
|
||||||
% if data['optimized_version'] == 1:
|
% if data['optimized_version'] == 1:
|
||||||
<li class="dashboard-activity-info-item">
|
<li class="dashboard-activity-info-item">
|
||||||
<div class="sub-heading">Optimized</div>
|
<div class="sub-heading">Optimized</div>
|
||||||
|
|
|
@ -70,17 +70,18 @@ DOCUMENTATION :: END
|
||||||
<%
|
<%
|
||||||
stat_id = top_stat['stat_id']
|
stat_id = top_stat['stat_id']
|
||||||
row0 = top_stat['rows'][0]
|
row0 = top_stat['rows'][0]
|
||||||
|
row0['server_id']="test"
|
||||||
%>
|
%>
|
||||||
<div class="dashboard-stats-instance" id="stats-instance-${stat_id}" data-stat_id="${stat_id}">
|
<div class="dashboard-stats-instance" id="stats-instance-${stat_id}" data-stat_id="${stat_id}">
|
||||||
<div class="dashboard-stats-container">
|
<div class="dashboard-stats-container">
|
||||||
% if stat_id in ('top_movies', 'popular_movies', 'top_tv', 'popular_tv', 'top_music', 'popular_music', 'last_watched'):
|
% if stat_id in ('top_movies', 'popular_movies', 'top_tv', 'popular_tv', 'top_music', 'popular_music', 'last_watched'):
|
||||||
<% fallback = 'art-live' if row0['live'] else 'art' %>
|
<% fallback = 'art-live' if row0['live'] else 'art' %>
|
||||||
<div id="stats-background-${stat_id}" class="dashboard-stats-background" style="background-image: url(${page('pms_image_proxy', row0['art'], row0['rating_key'], 500, 280, 40, '282828', 3, fallback=fallback)});">
|
<div id="stats-background-${stat_id}" class="dashboard-stats-background" style="background-image: url(${page('pms_image_proxy', row0['art'], row0['rating_key'], 500, 280, 40, '282828', 3, fallback=fallback, server_id=row0['server_id'])});">
|
||||||
% elif stat_id == 'top_libraries':
|
% elif stat_id == 'top_libraries':
|
||||||
<% fallback = 'art-live' if row0['live'] else row0['library_art'] %>
|
<% fallback = 'art-live' if row0['live'] else row0['library_art'] %>
|
||||||
<div id="stats-background-${stat_id}" class="dashboard-stats-background" style="background-image: url(${page('pms_image_proxy', row0['art'] or row0['library_art'], None, 500, 280, 40, '282828', 3, fallback=fallback)});" data-library_art="${row0['library_art']}">
|
<div id="stats-background-${stat_id}" class="dashboard-stats-background" style="background-image: url(${page('pms_image_proxy', row0['art'] or row0['library_art'], None, 500, 280, 40, '282828', 3, fallback=fallback, server_id=row0['server_id'])});" data-library_art="${row0['library_art']}">
|
||||||
% elif stat_id == 'top_users':
|
% elif stat_id == 'top_users':
|
||||||
<div id="stats-background-${stat_id}" class="dashboard-stats-background" data-blurhash="${page('pms_image_proxy', row0['user_thumb'] or 'interfaces/default/images/gravatar-default.png', None, 100, 100, 40, '282828', 0, fallback='user')}">
|
<div id="stats-background-${stat_id}" class="dashboard-stats-background" data-blurhash="${page('pms_image_proxy', row0['user_thumb'] or 'interfaces/default/images/gravatar-default.png', None, 100, 100, 40, '282828', 0, fallback='user', server_id=row0['server_id'])}">
|
||||||
% elif stat_id == 'top_platforms':
|
% elif stat_id == 'top_platforms':
|
||||||
<div id="stats-background-${stat_id}" class="dashboard-stats-background platform-${row0['platform_name']}-rgba no-image">
|
<div id="stats-background-${stat_id}" class="dashboard-stats-background platform-${row0['platform_name']}-rgba no-image">
|
||||||
% else:
|
% else:
|
||||||
|
@ -89,7 +90,7 @@ DOCUMENTATION :: END
|
||||||
% if stat_id in ('top_movies', 'popular_movies', 'top_tv', 'popular_tv', 'top_music', 'popular_music', 'last_watched'):
|
% if stat_id in ('top_movies', 'popular_movies', 'top_tv', 'popular_tv', 'top_music', 'popular_music', 'last_watched'):
|
||||||
<div class="dashboard-stats-poster-container hidden-xs">
|
<div class="dashboard-stats-poster-container hidden-xs">
|
||||||
% if stat_id in ('top_music', 'popular_music'):
|
% if stat_id in ('top_music', 'popular_music'):
|
||||||
<div id="stats-thumb-${stat_id}-bg" class="dashboard-stats-poster" style="background-image: url(${page('pms_image_proxy', row0['thumb'], row0['rating_key'], 300, 300, 60, '282828', 3, fallback='cover')});"></div>
|
<div id="stats-thumb-${stat_id}-bg" class="dashboard-stats-poster" style="background-image: url(${page('pms_image_proxy', row0['thumb'], row0['rating_key'], 300, 300, 60, '282828', 3, fallback='cover', server_id=row0['server_id'])});"></div>
|
||||||
% endif
|
% endif
|
||||||
<%
|
<%
|
||||||
height, fallback = ('450', 'poster')
|
height, fallback = ('450', 'poster')
|
||||||
|
@ -101,24 +102,24 @@ DOCUMENTATION :: END
|
||||||
href = '#'
|
href = '#'
|
||||||
if row0['rating_key']:
|
if row0['rating_key']:
|
||||||
if row0['live']:
|
if row0['live']:
|
||||||
href = page('info', row0['rating_key'], row0['guid'], history=True, live=row0['live'])
|
href = page('info', row0['rating_key'], row0['guid'], history=True, live=row0['live'], server_id=row0['server_id'])
|
||||||
else:
|
else:
|
||||||
href = page('info', row0['rating_key'], history=True)
|
href = page('info', row0['rating_key'], history=True, server_id=row0['server_id'])
|
||||||
%>
|
%>
|
||||||
<a id="stats-thumb-url-${stat_id}" href="${href}" title="${row0['title']}">
|
<a id="stats-thumb-url-${stat_id}" href="${href}" title="${row0['title']}">
|
||||||
<div id="stats-thumb-${stat_id}" class="dashboard-stats-${fallback.split('-')[0]}" style="background-image: url(${page('pms_image_proxy', row0['thumb'], row0['grandparent_rating_key'] or row0['rating_key'], 300, height, fallback=fallback)});"></div>
|
<div id="stats-thumb-${stat_id}" class="dashboard-stats-${fallback.split('-')[0]}" style="background-image: url(${page('pms_image_proxy', row0['thumb'], row0['grandparent_rating_key'] or row0['rating_key'], 300, height, fallback=fallback, server_id=row0['server_id'])});"></div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
% elif stat_id == 'top_libraries':
|
% elif stat_id == 'top_libraries':
|
||||||
% if row0['library_thumb'].startswith('http'):
|
% if row0['library_thumb'].startswith('http'):
|
||||||
<div id="stats-thumb-${stat_id}" class="dashboard-stats-flat hidden-xs" style="background-image: url(${page('pms_image_proxy', row0['library_thumb'], None, 100, 100, fallback='cover')});"></div>
|
<div id="stats-thumb-${stat_id}" class="dashboard-stats-flat hidden-xs" style="background-image: url(${page('pms_image_proxy', row0['library_thumb'], None, 100, 100, fallback='cover', server_id=row0['server_id'])});"></div>
|
||||||
% else:
|
% else:
|
||||||
<div id="stats-thumb-${stat_id}" class="dashboard-stats-flat svg-icon library-${row0['section_type']} hidden-xs"></div>
|
<div id="stats-thumb-${stat_id}" class="dashboard-stats-flat svg-icon library-${row0['section_type']} hidden-xs"></div>
|
||||||
% endif
|
% endif
|
||||||
% elif stat_id == 'top_users':
|
% elif stat_id == 'top_users':
|
||||||
<% user_href = page('user', row0['user_id']) if row0['user_id'] else '#' %>
|
<% user_href = page('user', row0['user_id']) if row0['user_id'] else '#' %>
|
||||||
<a id="stats-thumb-url-${stat_id}" href="${user_href}" title="${row0['user']}" class="hidden-xs">
|
<a id="stats-thumb-url-${stat_id}" href="${user_href}" title="${row0['user']}" class="hidden-xs">
|
||||||
<div id="stats-thumb-${stat_id}" class="dashboard-stats-circle" style="background-image: url(${page('pms_image_proxy', row0['user_thumb'] or 'interfaces/default/images/gravatar-default.png', None, 100, 100, fallback='user')})"></div>
|
<div id="stats-thumb-${stat_id}" class="dashboard-stats-circle" style="background-image: url(${page('pms_image_proxy', row0['user_thumb'] or 'interfaces/default/images/gravatar-default.png', None, 100, 100, fallback='user', server_id=row0['server_id'])})"></div>
|
||||||
</a>
|
</a>
|
||||||
% elif stat_id == 'top_platforms':
|
% elif stat_id == 'top_platforms':
|
||||||
<div id="stats-thumb-${stat_id}" class="dashboard-stats-flat svg-icon platform-${row0['platform_name']} transparent hidden-xs"></div>
|
<div id="stats-thumb-${stat_id}" class="dashboard-stats-flat svg-icon platform-${row0['platform_name']} transparent hidden-xs"></div>
|
||||||
|
@ -157,15 +158,15 @@ DOCUMENTATION :: END
|
||||||
href = '#'
|
href = '#'
|
||||||
if row['rating_key']:
|
if row['rating_key']:
|
||||||
if row['live']:
|
if row['live']:
|
||||||
href = page('info', row['rating_key'], row['guid'], history=True, live=row['live'])
|
href = page('info', row['rating_key'], row['guid'], history=True, live=row['live'], server_id=row['server_id'])
|
||||||
else:
|
else:
|
||||||
href = page('info', row['rating_key'], history=True)
|
href = page('info', row['rating_key'], history=True, server_id=row['server_id'])
|
||||||
%>
|
%>
|
||||||
<a href="${href}" title="${row['title']}">
|
<a href="${href}" title="${row['title']}">
|
||||||
${row['title']}
|
${row['title']}
|
||||||
</a>
|
</a>
|
||||||
% elif stat_id == 'top_libraries':
|
% elif stat_id == 'top_libraries':
|
||||||
<% library_href = page('library', row['section_id']) %>
|
<% library_href = page('library', row['section_id'], server_id=row['server_id']) %>
|
||||||
<a href="${library_href}" title="${row['section_name']}">
|
<a href="${library_href}" title="${row['section_name']}">
|
||||||
${row['section_name']}
|
${row['section_name']}
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -71,9 +71,6 @@
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="home-padded-header padded-header" id="library-statistics-header">
|
<div class="home-padded-header padded-header" id="library-statistics-header">
|
||||||
<h3 class="pull-left">Library Statistics</h3>
|
<h3 class="pull-left">Library Statistics</h3>
|
||||||
<div class="button-bar">
|
|
||||||
<span class="btn btn-dark active" style="cursor: default">${config['pms_name']}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -757,7 +754,8 @@
|
||||||
data: {
|
data: {
|
||||||
session_key: key,
|
session_key: key,
|
||||||
session_id: session_id,
|
session_id: session_id,
|
||||||
message: message
|
message: message,
|
||||||
|
server_id: "test1"
|
||||||
},
|
},
|
||||||
async: true,
|
async: true,
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
|
|
|
@ -93,7 +93,7 @@ DOCUMENTATION :: END
|
||||||
<div class="row">
|
<div class="row">
|
||||||
% if data['media_type'] not in ('photo_album', 'photo', 'playlist'):
|
% if data['media_type'] not in ('photo_album', 'photo', 'playlist'):
|
||||||
<% fallback = 'art-live-full' if data['live'] else None %>
|
<% fallback = 'art-live-full' if data['live'] else None %>
|
||||||
<div class="art-face" style="background-image:url(${page('pms_image_proxy', data['art'], data['rating_key'], 1920, 1080, fallback=fallback)})"></div>
|
<div class="art-face" style="background-image:url(${page('pms_image_proxy', data['art'], data['rating_key'], 1920, 1080, fallback=fallback, server_id=data['server_id'])})"></div>
|
||||||
% endif
|
% endif
|
||||||
% if _session['user_group'] == 'admin':
|
% if _session['user_group'] == 'admin':
|
||||||
<span class="overlay-refresh-image info-art" title="Refresh background image"><i class="fa fa-refresh refresh_pms_image"></i></span>
|
<span class="overlay-refresh-image info-art" title="Refresh background image"><i class="fa fa-refresh refresh_pms_image"></i></span>
|
||||||
|
@ -104,7 +104,7 @@ DOCUMENTATION :: END
|
||||||
<div class="summary-navbar-list">
|
<div class="summary-navbar-list">
|
||||||
<ul class="list-unstyled breadcrumb">
|
<ul class="list-unstyled breadcrumb">
|
||||||
% if data['live']:
|
% if data['live']:
|
||||||
<li><a href="${page('library', data['section_id'])}">${data['library_name']}</a></li>
|
<li><a href="${page('library', data['section_id'], server_id=data['server_id'])}">${data['library_name']}</a></li>
|
||||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
% if data['media_type'] == 'movie':
|
% if data['media_type'] == 'movie':
|
||||||
<li class="active metadata-xml">${data['title']}</li>
|
<li class="active metadata-xml">${data['title']}</li>
|
||||||
|
@ -120,57 +120,57 @@ DOCUMENTATION :: END
|
||||||
% endif
|
% endif
|
||||||
% endif
|
% endif
|
||||||
% elif data['media_type'] in ('movie', 'collection'):
|
% elif data['media_type'] in ('movie', 'collection'):
|
||||||
<li><a href="${page('library', data['section_id'])}">${data['library_name']}</a></li>
|
<li><a href="${page('library', data['section_id'], server_id=data['server_id'])}">${data['library_name']}</a></li>
|
||||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
<li class="active metadata-xml">${data['title']}</li>
|
<li class="active metadata-xml">${data['title']}</li>
|
||||||
% elif data['media_type'] == 'show':
|
% elif data['media_type'] == 'show':
|
||||||
<li><a href="${page('library', data['section_id'])}">${data['library_name']}</a></li>
|
<li><a href="${page('library', data['section_id'], server_id=data['server_id'])}">${data['library_name']}</a></li>
|
||||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
<li class="active metadata-xml">${data['title']}</li>
|
<li class="active metadata-xml">${data['title']}</li>
|
||||||
% elif data['media_type'] == 'season':
|
% elif data['media_type'] == 'season':
|
||||||
<li class="hidden-xs hidden-sm"><a href="${page('library', data['section_id'])}">${data['library_name']}</a></li>
|
<li class="hidden-xs hidden-sm"><a href="${page('library', data['section_id'], server_id=data['server_id'])}">${data['library_name']}</a></li>
|
||||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
<li><a href="${page('info', data['parent_rating_key'])}">${data['parent_title']}</a></li>
|
<li><a href="${page('info', data['parent_rating_key'], server_id=data['server_id'])}">${data['parent_title']}</a></li>
|
||||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
<li class="active metadata-xml">${data['title']}</li>
|
<li class="active metadata-xml">${data['title']}</li>
|
||||||
% elif data['media_type'] == 'episode':
|
% elif data['media_type'] == 'episode':
|
||||||
<li class="hidden-xs hidden-sm"><a href="${page('library', data['section_id'])}">${data['library_name']}</a></li>
|
<li class="hidden-xs hidden-sm"><a href="${page('library', data['section_id'], server_id=data['server_id'])}">${data['library_name']}</a></li>
|
||||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
<li class="hidden-xs hidden-sm"><a href="${page('info', data['grandparent_rating_key'])}">${data['grandparent_title']}</a></li>
|
<li class="hidden-xs hidden-sm"><a href="${page('info', data['grandparent_rating_key'], server_id=data['server_id'])}">${data['grandparent_title']}</a></li>
|
||||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
<li><a href="${page('info', data['parent_rating_key'])}">${data['parent_title']}</a></li>
|
<li><a href="${page('info', data['parent_rating_key'], server_id=data['server_id'])}">${data['parent_title']}</a></li>
|
||||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
<li class="active metadata-xml">Episode ${data['media_index']} - ${data['title']}</li>
|
<li class="active metadata-xml">Episode ${data['media_index']} - ${data['title']}</li>
|
||||||
% elif data['media_type'] == 'artist':
|
% elif data['media_type'] == 'artist':
|
||||||
<li><a href="${page('library', data['section_id'])}">${data['library_name']}</a></li>
|
<li><a href="${page('library', data['section_id'], server_id=data['server_id'])}">${data['library_name']}</a></li>
|
||||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
<li class="active metadata-xml">${data['title']}</li>
|
<li class="active metadata-xml">${data['title']}</li>
|
||||||
% elif data['media_type'] == 'album':
|
% elif data['media_type'] == 'album':
|
||||||
<li class="hidden-xs hidden-sm"><a href="${page('library', data['section_id'])}">${data['library_name']}</a></li>
|
<li class="hidden-xs hidden-sm"><a href="${page('library', data['section_id'], server_id=data['server_id'])}">${data['library_name']}</a></li>
|
||||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
<li><a href="${page('info', data['parent_rating_key'])}">${data['parent_title']}</a></li>
|
<li><a href="${page('info', data['parent_rating_key'], server_id=data['server_id'])}">${data['parent_title']}</a></li>
|
||||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
<li class="active metadata-xml">${data['title']}</li>
|
<li class="active metadata-xml">${data['title']}</li>
|
||||||
% elif data['media_type'] == 'track':
|
% elif data['media_type'] == 'track':
|
||||||
<li class="hidden-xs hidden-sm"><a href="${page('library', data['section_id'])}">${data['library_name']}</a></li>
|
<li class="hidden-xs hidden-sm"><a href="${page('library', data['section_id'], server_id=data['server_id'])}">${data['library_name']}</a></li>
|
||||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
<li class="hidden-xs hidden-sm"><a href="${page('info', data['grandparent_rating_key'])}">${data['grandparent_title']}</a></li>
|
<li class="hidden-xs hidden-sm"><a href="${page('info', data['grandparent_rating_key'], server_id=data['server_id'])}">${data['grandparent_title']}</a></li>
|
||||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
<li><a href="${page('info', data['parent_rating_key'])}">${data['parent_title']}</a></li>
|
<li><a href="${page('info', data['parent_rating_key'], server_id=data['server_id'])}">${data['parent_title']}</a></li>
|
||||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
<li class="active metadata-xml">Track ${data['media_index']} - ${data['title']}</li>
|
<li class="active metadata-xml">Track ${data['media_index']} - ${data['title']}</li>
|
||||||
% elif data['media_type'] == 'photo_album':
|
% elif data['media_type'] == 'photo_album':
|
||||||
<li><a href="${page('library', data['section_id'])}">${data['library_name']}</a></li>
|
<li><a href="${page('library', data['section_id'], server_id=data['server_id'])}">${data['library_name']}</a></li>
|
||||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
% if data['parent_title']:
|
% if data['parent_title']:
|
||||||
<li><a href="${page('info', data['parent_rating_key'])}">${data['parent_title']}</a></li>
|
<li><a href="${page('info', data['parent_rating_key'], server_id=data['server_id'])}">${data['parent_title']}</a></li>
|
||||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
% endif
|
% endif
|
||||||
<li class="active metadata-xml">${data['title']}</li>
|
<li class="active metadata-xml">${data['title']}</li>
|
||||||
% elif data['media_type'] in ('photo', 'clip'):
|
% elif data['media_type'] in ('photo', 'clip'):
|
||||||
<li class="hidden-xs hidden-sm"><a href="${page('library', data['section_id'])}">${data['library_name']}</a></li>
|
<li class="hidden-xs hidden-sm"><a href="${page('library', data['section_id'], server_id=data['server_id'])}">${data['library_name']}</a></li>
|
||||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
<li><a href="${page('info', data['parent_rating_key'])}">${data['parent_title']}</a></li>
|
<li><a href="${page('info', data['parent_rating_key'], server_id=data['server_id'])}">${data['parent_title']}</a></li>
|
||||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
<li class="active metadata-xml">${data['title']}</li>
|
<li class="active metadata-xml">${data['title']}</li>
|
||||||
% elif data['media_type'] == 'playlist':
|
% elif data['media_type'] == 'playlist':
|
||||||
|
@ -178,7 +178,7 @@ DOCUMENTATION :: END
|
||||||
<li><a href="${page('user', user_info.get('user_id'))}">${user_info.get('friendly_name')}</a></li>
|
<li><a href="${page('user', user_info.get('user_id'))}">${user_info.get('friendly_name')}</a></li>
|
||||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
% elif data['section_id']:
|
% elif data['section_id']:
|
||||||
<li><a href="${page('library', data['section_id'])}">${data['library_name']}</a></li>
|
<li><a href="${page('library', data['section_id'], server_id=data['server_id'])}">${data['library_name']}</a></li>
|
||||||
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
<span class="breadcrumb-arrow"><i class="fa fa-chevron-right"></i></span>
|
||||||
% endif
|
% endif
|
||||||
<li class="active metadata-xml">${data['title']}</li>
|
<li class="active metadata-xml">${data['title']}</li>
|
||||||
|
@ -192,21 +192,21 @@ DOCUMENTATION :: END
|
||||||
<div class="summary-content-poster hidden-xs hidden-sm">
|
<div class="summary-content-poster hidden-xs hidden-sm">
|
||||||
<% legacy = '&legacy=1' if data['media_type'] in ('photo_album', 'photo', 'clip') else '' %>
|
<% legacy = '&legacy=1' if data['media_type'] in ('photo_album', 'photo', 'clip') else '' %>
|
||||||
% if data['media_type'] in ('track', 'photo'):
|
% if data['media_type'] in ('track', 'photo'):
|
||||||
<a href="${config['pms_web_url']}#!/server/${config['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${data['parent_rating_key']}${legacy}" target="_blank" rel="noreferrer" title="View on Plex Web">
|
<a href="${config['pms_web_url']}#!/server/${data['server_id']}/details?key=%2Flibrary%2Fmetadata%2F${data['parent_rating_key']}${legacy}" target="_blank" rel="noreferrer" title="View on Plex Web">
|
||||||
% elif data['media_type'] == 'playlist':
|
% elif data['media_type'] == 'playlist':
|
||||||
<a href="${config['pms_web_url']}#!/server/${config['pms_identifier']}/playlist?key=%2Fplaylists%2F${data['rating_key']}" target="_blank" rel="noreferrer" title="View on Plex Web">
|
<a href="${config['pms_web_url']}#!/server/${data['server_id']}/playlist?key=%2Fplaylists%2F${data['rating_key']}" target="_blank" rel="noreferrer" title="View on Plex Web">
|
||||||
% elif not data['live']:
|
% elif not data['live']:
|
||||||
<a href="${config['pms_web_url']}#!/server/${config['pms_identifier']}/details?key=%2Flibrary%2Fmetadata%2F${data['rating_key']}${legacy}" target="_blank" rel="noreferrer" title="View on Plex Web">
|
<a href="${config['pms_web_url']}#!/server/${data['server_id']}/details?key=%2Flibrary%2Fmetadata%2F${data['rating_key']}${legacy}" target="_blank" rel="noreferrer" title="View on Plex Web">
|
||||||
% endif
|
% endif
|
||||||
% if data['live']:
|
% if data['live']:
|
||||||
<div class="summary-poster-face" style="background-image: url(${page('pms_image_proxy', data['grandparent_thumb'] or data['thumb'], data['rating_key'], 300, 450, fallback='poster-live')});">
|
<div class="summary-poster-face" style="background-image: url(${page('pms_image_proxy', data['grandparent_thumb'] or data['thumb'], data['rating_key'], 300, 450, fallback='poster-live', server_id=data['server_id'])});">
|
||||||
<div class="summary-poster-face-overlay">
|
<div class="summary-poster-face-overlay">
|
||||||
<span></span>
|
<span></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
% else:
|
% else:
|
||||||
% if data['media_type'] == 'episode':
|
% if data['media_type'] == 'episode':
|
||||||
<div class="summary-poster-face-episode" style="background-image: url(${page('pms_image_proxy', data['thumb'], data['rating_key'], 500, 280, fallback='art')});">
|
<div class="summary-poster-face-episode" style="background-image: url(${page('pms_image_proxy', data['thumb'], data['rating_key'], 500, 280, fallback='art', server_id=data['server_id'])});">
|
||||||
<div class="summary-poster-face-overlay">
|
<div class="summary-poster-face-overlay">
|
||||||
<span></span>
|
<span></span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -215,7 +215,7 @@ DOCUMENTATION :: END
|
||||||
<span class="overlay-refresh-image" title="Refresh image"><i class="fa fa-refresh refresh_pms_image"></i></span>
|
<span class="overlay-refresh-image" title="Refresh image"><i class="fa fa-refresh refresh_pms_image"></i></span>
|
||||||
% endif
|
% endif
|
||||||
% elif data['media_type'] in ('artist', 'album', 'track', 'playlist', 'photo_album', 'photo', 'clip') or data['sub_media_type'] in ('artist', 'album', 'track'):
|
% elif data['media_type'] in ('artist', 'album', 'track', 'playlist', 'photo_album', 'photo', 'clip') or data['sub_media_type'] in ('artist', 'album', 'track'):
|
||||||
<div class="summary-poster-face-track" style="background-image: url(${page('pms_image_proxy', data['thumb'], data['rating_key'], 300, 300, fallback='cover')});">
|
<div class="summary-poster-face-track" style="background-image: url(${page('pms_image_proxy', data['thumb'], data['rating_key'], 300, 300, fallback='cover', server_id=data['server_id'])});">
|
||||||
<div class="summary-poster-face-overlay">
|
<div class="summary-poster-face-overlay">
|
||||||
<span></span>
|
<span></span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -227,7 +227,7 @@ DOCUMENTATION :: END
|
||||||
<span class="overlay-refresh-image" title="Refresh image"><i class="fa fa-refresh refresh_pms_image"></i></span>
|
<span class="overlay-refresh-image" title="Refresh image"><i class="fa fa-refresh refresh_pms_image"></i></span>
|
||||||
% endif
|
% endif
|
||||||
% else:
|
% else:
|
||||||
<div class="summary-poster-face" style="background-image: url(${page('pms_image_proxy', data['thumb'], data['rating_key'], 300, 450, fallback='poster')});">
|
<div class="summary-poster-face" style="background-image: url(${page('pms_image_proxy', data['thumb'], data['rating_key'], 300, 450, fallback='poster', server_id=data['server_id'])});">
|
||||||
<div class="summary-poster-face-overlay">
|
<div class="summary-poster-face-overlay">
|
||||||
<span></span>
|
<span></span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -258,21 +258,21 @@ DOCUMENTATION :: END
|
||||||
% elif data['media_type'] in ('movie', 'show', 'artist', 'collection', 'playlist', 'photo_album'):
|
% elif data['media_type'] in ('movie', 'show', 'artist', 'collection', 'playlist', 'photo_album'):
|
||||||
<h1> </h1><h1>${data['title']}</h1>
|
<h1> </h1><h1>${data['title']}</h1>
|
||||||
% elif data['media_type'] == 'season':
|
% elif data['media_type'] == 'season':
|
||||||
<h1> </h1><h1><a href="${page('info', data['parent_rating_key'])}">${data['parent_title']}</a></h1>
|
<h1> </h1><h1><a href="${page('info', data['parent_rating_key'], server_id=data['server_id'])}">${data['parent_title']}</a></h1>
|
||||||
<h3 class="hidden-xs">${season}</h3>
|
<h3 class="hidden-xs">${season}</h3>
|
||||||
% elif data['media_type'] == 'episode':
|
% elif data['media_type'] == 'episode':
|
||||||
<h1><a href="${page('info', data['grandparent_rating_key'])}">${data['grandparent_title']}</a></h1>
|
<h1><a href="${page('info', data['grandparent_rating_key'], server_id=data['server_id'])}">${data['grandparent_title']}</a></h1>
|
||||||
<h2>${data['title']}</h2>
|
<h2>${data['title']}</h2>
|
||||||
<h3 class="hidden-xs">${season} · E${data['media_index']}</h3>
|
<h3 class="hidden-xs">${season} · E${data['media_index']}</h3>
|
||||||
% elif data['media_type'] == 'album':
|
% elif data['media_type'] == 'album':
|
||||||
<h1><a href="${page('info', data['parent_rating_key'])}">${data['parent_title']}</a></h1>
|
<h1><a href="${page('info', data['parent_rating_key'], server_id=data['server_id'])}">${data['parent_title']}</a></h1>
|
||||||
<h2>${data['title']}</h2>
|
<h2>${data['title']}</h2>
|
||||||
% elif data['media_type'] == 'track':
|
% elif data['media_type'] == 'track':
|
||||||
<h1><a href="${page('info', data['grandparent_rating_key'])}">${data['grandparent_title']}</a></h1>
|
<h1><a href="${page('info', data['grandparent_rating_key'], server_id=data['server_id'])}">${data['grandparent_title']}</a></h1>
|
||||||
<h2><a href="${page('info', data['parent_rating_key'])}">${data['parent_title']}</a> - ${data['title']}</h2>
|
<h2><a href="${page('info', data['parent_rating_key'], server_id=data['server_id'])}">${data['parent_title']}</a> - ${data['title']}</h2>
|
||||||
<h3 class="hidden-xs">T${data['media_index']}</h3>
|
<h3 class="hidden-xs">T${data['media_index']}</h3>
|
||||||
% elif data['media_type'] in ('photo', 'clip'):
|
% elif data['media_type'] in ('photo', 'clip'):
|
||||||
<h1><a href="${page('info', data['parent_rating_key'])}">${data['parent_title']}</a></h1>
|
<h1><a href="${page('info', data['parent_rating_key'], server_id=data['server_id'])}">${data['parent_title']}</a></h1>
|
||||||
<h2>${data['title']}</h2>
|
<h2>${data['title']}</h2>
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
|
@ -878,17 +878,18 @@ DOCUMENTATION :: END
|
||||||
transcode_decision: transcode_decision,
|
transcode_decision: transcode_decision,
|
||||||
user_id: "${history_user_id}",
|
user_id: "${history_user_id}",
|
||||||
% if data['live']:
|
% if data['live']:
|
||||||
guid: "${data['guid']}
|
guid: "${data['guid']}",
|
||||||
% elif data['media_type'] in ('show', 'artist'):
|
% elif data['media_type'] in ('show', 'artist'):
|
||||||
grandparent_rating_key: "${data['rating_key']}"
|
grandparent_rating_key: "${data['rating_key']}",
|
||||||
% elif data['media_type'] in ('season', 'album'):
|
% elif data['media_type'] in ('season', 'album'):
|
||||||
parent_rating_key: "${data['rating_key']}"
|
parent_rating_key: "${data['rating_key']}",
|
||||||
% elif data['media_type'] in ('movie', 'episode', 'track'):
|
% elif data['media_type'] in ('movie', 'episode', 'track'):
|
||||||
rating_key: "${data['rating_key']}"
|
rating_key: "${data['rating_key']}",
|
||||||
% elif data['media_type'] in ('collection', 'playlist'):
|
% elif data['media_type'] in ('collection', 'playlist'):
|
||||||
media_type: "${data['media_type']}",
|
media_type: "${data['media_type']}",
|
||||||
rating_key: "${data['rating_key']}"
|
rating_key: "${data['rating_key']}",
|
||||||
% endif
|
% endif
|
||||||
|
server_id: "${data['server_id']}"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -932,7 +933,8 @@ DOCUMENTATION :: END
|
||||||
async: true,
|
async: true,
|
||||||
data: {
|
data: {
|
||||||
rating_key: "${data['rating_key']}",
|
rating_key: "${data['rating_key']}",
|
||||||
media_type: "${data['media_type']}"
|
media_type: "${data['media_type']}",
|
||||||
|
server_id: "${data['server_id']}"
|
||||||
},
|
},
|
||||||
complete: function(xhr, status) {
|
complete: function(xhr, status) {
|
||||||
$("#children-list").html(xhr.responseText);
|
$("#children-list").html(xhr.responseText);
|
||||||
|
@ -948,7 +950,8 @@ DOCUMENTATION :: END
|
||||||
async: true,
|
async: true,
|
||||||
data: {
|
data: {
|
||||||
rating_key: "${data['rating_key']}",
|
rating_key: "${data['rating_key']}",
|
||||||
media_type: "${data['media_type']}"
|
media_type: "${data['media_type']}",
|
||||||
|
server_id: "${data['server_id']}"
|
||||||
},
|
},
|
||||||
complete: function(xhr, status) {
|
complete: function(xhr, status) {
|
||||||
$("#watch-time-stats").html(xhr.responseText);
|
$("#watch-time-stats").html(xhr.responseText);
|
||||||
|
@ -960,7 +963,8 @@ DOCUMENTATION :: END
|
||||||
async: true,
|
async: true,
|
||||||
data: {
|
data: {
|
||||||
rating_key: "${data['rating_key']}",
|
rating_key: "${data['rating_key']}",
|
||||||
media_type: "${data['media_type']}"
|
media_type: "${data['media_type']}",
|
||||||
|
server_id: "${data['server_id']}"
|
||||||
},
|
},
|
||||||
complete: function(xhr, status) {
|
complete: function(xhr, status) {
|
||||||
$("#user-stats").html(xhr.responseText);
|
$("#user-stats").html(xhr.responseText);
|
||||||
|
@ -976,7 +980,8 @@ DOCUMENTATION :: END
|
||||||
async: true,
|
async: true,
|
||||||
data: {
|
data: {
|
||||||
rating_key: "${data['rating_key']}",
|
rating_key: "${data['rating_key']}",
|
||||||
title: "${data['title']}"
|
title: "${data['title']}",
|
||||||
|
server_id: "${data['server_id']}"
|
||||||
},
|
},
|
||||||
complete: function(xhr, status) {
|
complete: function(xhr, status) {
|
||||||
$("#collection-related-list-container").html(xhr.responseText).show();
|
$("#collection-related-list-container").html(xhr.responseText).show();
|
||||||
|
@ -1064,7 +1069,7 @@ DOCUMENTATION :: END
|
||||||
data: function ( d ) {
|
data: function ( d ) {
|
||||||
return {
|
return {
|
||||||
json_data: JSON.stringify( d ),
|
json_data: JSON.stringify( d ),
|
||||||
rating_key: "${data['rating_key']}"
|
rating_key: "${data['rating_key']}",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -48,61 +48,61 @@ DOCUMENTATION :: END
|
||||||
<span class="item-children-list-item-title">
|
<span class="item-children-list-item-title">
|
||||||
% if child['media_type'] == 'movie':
|
% if child['media_type'] == 'movie':
|
||||||
<span class="media-type-tooltip" data-toggle="tooltip" title="Movie"><i class="fa fa-film fa-fw"></i></span>
|
<span class="media-type-tooltip" data-toggle="tooltip" title="Movie"><i class="fa fa-film fa-fw"></i></span>
|
||||||
<a href="${page('info', child['rating_key'])}" title="${child['title']}">
|
<a href="${page('info', child['rating_key'], server_id=child['server_id'])}" title="${child['title']}">
|
||||||
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['thumb'], child['rating_key'], 300, 450, fallback='poster')}" data-height="120" data-width="80">
|
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['thumb'], child['rating_key'], 300, 450, fallback='poster', server_id=child['server_id'])}" data-height="120" data-width="80">
|
||||||
${child['title']}
|
${child['title']}
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
<span class="text-muted"> (${child['year']})</span>
|
<span class="text-muted"> (${child['year']})</span>
|
||||||
% elif child['media_type'] == 'episode':
|
% elif child['media_type'] == 'episode':
|
||||||
<span class="media-type-tooltip" data-toggle="tooltip" title="Episode"><i class="fa fa-television fa-fw"></i></span>
|
<span class="media-type-tooltip" data-toggle="tooltip" title="Episode"><i class="fa fa-television fa-fw"></i></span>
|
||||||
<a href="${page('info', child['grandparent_rating_key'])}" title="${child['grandparent_title']}">
|
<a href="${page('info', child['grandparent_rating_key'], server_id=child['server_id'])}" title="${child['grandparent_title']}">
|
||||||
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['grandparent_thumb'], child['grandparent_rating_key'], 300, 450, fallback='poster')}" data-height="120" data-width="80">
|
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['grandparent_thumb'], child['grandparent_rating_key'], 300, 450, fallback='poster', server_id=child['server_id'])}" data-height="120" data-width="80">
|
||||||
${child['grandparent_title']}
|
${child['grandparent_title']}
|
||||||
</span>
|
</span>
|
||||||
</a> -
|
</a> -
|
||||||
<a href="${page('info', child['rating_key'])}" title="${child['title']}">
|
<a href="${page('info', child['rating_key'], server_id=child['server_id'])}" title="${child['title']}">
|
||||||
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['parent_thumb'], child['parent_rating_key'], 300, 450, fallback='poster')}" data-height="120" data-width="80">
|
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['parent_thumb'], child['parent_rating_key'], 300, 450, fallback='poster', server_id=child['server_id'])}" data-height="120" data-width="80">
|
||||||
${child['title']}
|
${child['title']}
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
<span class="text-muted"> (<a class="no-highlight" href="${page('info', child['parent_rating_key'])}" title="${child['parent_title']}">${short_season(child['parent_title'])}</a> · <a class="no-highlight" href="${page('info', child['rating_key'])}" title="${child['title']}">E${child['media_index']}</a>)</span>
|
<span class="text-muted"> (<a class="no-highlight" href="${page('info', child['parent_rating_key'], server_id=child['server_id'])}" title="${child['parent_title']}">${short_season(child['parent_title'])}</a> · <a class="no-highlight" href="${page('info', child['rating_key'], server_id=child['server_id'])}" title="${child['title']}">E${child['media_index']}</a>)</span>
|
||||||
% elif child['media_type'] == 'track':
|
% elif child['media_type'] == 'track':
|
||||||
<span class="media-type-tooltip" data-toggle="tooltip" title="Track"><i class="fa fa-music fa-fw"></i></span>
|
<span class="media-type-tooltip" data-toggle="tooltip" title="Track"><i class="fa fa-music fa-fw"></i></span>
|
||||||
<a href="${page('info', child['rating_key'])}" title="${child['title']}">
|
<a href="${page('info', child['rating_key'], server_id=child['server_id'])}" title="${child['title']}">
|
||||||
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['parent_thumb'], child['parent_rating_key'], 300, 300, fallback='cover')}" data-height="80" data-width="80">
|
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['parent_thumb'], child['parent_rating_key'], 300, 300, fallback='cover', server_id=child['server_id'])}" data-height="80" data-width="80">
|
||||||
${child['title']}
|
${child['title']}
|
||||||
</span>
|
</span>
|
||||||
</a> -
|
</a> -
|
||||||
<a href="${page('info', child['grandparent_rating_key'])}" title="${child['grandparent_title']}">
|
<a href="${page('info', child['grandparent_rating_key'])}" title="${child['grandparent_title']}">
|
||||||
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['grandparent_thumb'], child['grandparent_rating_key'], 300, 300, fallback='cover')}" data-height="80" data-width="80">
|
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['grandparent_thumb'], child['grandparent_rating_key'], 300, 300, fallback='cover', server_id=child['server_id'])}" data-height="80" data-width="80">
|
||||||
${child['grandparent_title']}
|
${child['grandparent_title']}
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
<span class="text-muted"> (<a class="no-highlight" href="${page('info', child['parent_rating_key'])}" title="${child['parent_title']}">${child['parent_title']}</a>)</span>
|
<span class="text-muted"> (<a class="no-highlight" href="${page('info', child['parent_rating_key'], server_id=child['server_id'])}" title="${child['parent_title']}">${child['parent_title']}</a>)</span>
|
||||||
% elif child['media_type'] == 'photo':
|
% elif child['media_type'] == 'photo':
|
||||||
<span class="media-type-tooltip" data-toggle="tooltip" title="Photo"><i class="fa fa-picture-o fa-fw"></i></span>
|
<span class="media-type-tooltip" data-toggle="tooltip" title="Photo"><i class="fa fa-picture-o fa-fw"></i></span>
|
||||||
<a href="${page('info', child['rating_key'])}" title="${child['title']}">
|
<a href="${page('info', child['rating_key'], server_id=child['server_id'])}" title="${child['title']}">
|
||||||
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['thumb'], child['rating_key'], 300, 300, fallback='cover')}" data-height="80" data-width="80">
|
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['thumb'], child['rating_key'], 300, 300, fallback='cover', server_id=child['server_id'])}" data-height="80" data-width="80">
|
||||||
${child['title']}
|
${child['title']}
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
% if child['grandparent_title']:
|
% if child['grandparent_title']:
|
||||||
- <a href="${page('info', child['grandparent_rating_key'])}" title="${child['grandparent_title']}">
|
- <a href="${page('info', child['grandparent_rating_key'], server_id=child['server_id'])}" title="${child['grandparent_title']}">
|
||||||
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['grandparent_thumb'], child['grandparent_rating_key'], 300, 300, fallback='cover')}" data-height="80" data-width="80">
|
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['grandparent_thumb'], child['grandparent_rating_key'], 300, 300, fallback='cover', server_id=child['server_id'])}" data-height="80" data-width="80">
|
||||||
${child['grandparent_title']}
|
${child['grandparent_title']}
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
% endif
|
% endif
|
||||||
<span class="text-muted"> (<a class="no-highlight" href="${page('info', child['parent_rating_key'])}" title="${child['parent_title']}">${child['parent_title']}</a>)</span>
|
<span class="text-muted"> (<a class="no-highlight" href="${page('info', child['parent_rating_key'], server_id=child['server_id'])}" title="${child['parent_title']}">${child['parent_title']}</a>)</span>
|
||||||
% elif child['media_type'] == 'clip':
|
% elif child['media_type'] == 'clip':
|
||||||
<span class="media-type-tooltip" data-toggle="tooltip" title="Video"><i class="fa fa-video-camera fa-fw"></i></span>
|
<span class="media-type-tooltip" data-toggle="tooltip" title="Video"><i class="fa fa-video-camera fa-fw"></i></span>
|
||||||
<a href="${page('info', child['rating_key'])}" title="${child['title']}">
|
<a href="${page('info', child['rating_key'], server_id=child['server_id'])}" title="${child['title']}">
|
||||||
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['thumb'], child['rating_key'], 300, 300, fallback='cover')}" data-height="80" data-width="80">
|
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['thumb'], child['rating_key'], 300, 300, fallback='cover', server_id=child['server_id'])}" data-height="80" data-width="80">
|
||||||
${child['title']}
|
${child['title']}
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
<span class="text-muted"> (<a class="no-highlight" href="${page('info', child['parent_rating_key'])}" title="${child['parent_title']}">${child['parent_title']}</a>)</span>
|
<span class="text-muted"> (<a class="no-highlight" href="${page('info', child['parent_rating_key'], server_id=child['server_id'])}" title="${child['parent_title']}">${child['parent_title']}</a>)</span>
|
||||||
% endif
|
% endif
|
||||||
</span>
|
</span>
|
||||||
% if child['duration']:
|
% if child['duration']:
|
||||||
|
@ -113,9 +113,9 @@ DOCUMENTATION :: END
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
% elif child['media_type'] == 'movie':
|
% elif child['media_type'] == 'movie':
|
||||||
<a href="${page('info', child['rating_key'])}" title="${child['title']}">
|
<a href="${page('info', child['rating_key'], server_id=child['server_id'])}" title="${child['title']}">
|
||||||
<div class="item-children-poster">
|
<div class="item-children-poster">
|
||||||
<div class="item-children-poster-face poster-item" style="background-image: url(${page('pms_image_proxy', child['thumb'], child['rating_key'], 300, 450, fallback='poster')});"></div>
|
<div class="item-children-poster-face poster-item" style="background-image: url(${page('pms_image_proxy', child['thumb'], child['rating_key'], 300, 450, fallback='poster', server_id=child['server_id'])});"></div>
|
||||||
% if _session['user_group'] == 'admin':
|
% if _session['user_group'] == 'admin':
|
||||||
<span class="overlay-refresh-image" title="Refresh image"><i class="fa fa-refresh refresh_pms_image"></i></span>
|
<span class="overlay-refresh-image" title="Refresh image"><i class="fa fa-refresh refresh_pms_image"></i></span>
|
||||||
% endif
|
% endif
|
||||||
|
@ -123,14 +123,14 @@ DOCUMENTATION :: END
|
||||||
</a>
|
</a>
|
||||||
<div class="item-children-instance-text-wrapper poster-item">
|
<div class="item-children-instance-text-wrapper poster-item">
|
||||||
<h3>
|
<h3>
|
||||||
<a href="${page('info', child['rating_key'])}" title="${child['title']}">${child['title']}</a>
|
<a href="${page('info', child['rating_key'], server_id=child['server_id'])}" title="${child['title']}">${child['title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
<h3 class="text-muted">${child['year']}</h3>
|
<h3 class="text-muted">${child['year']}</h3>
|
||||||
</div>
|
</div>
|
||||||
% elif child['media_type'] == 'show':
|
% elif child['media_type'] == 'show':
|
||||||
<a href="${page('info', child['rating_key'])}" title="${child['title']}">
|
<a href="${page('info', child['rating_key'], server_id=child['server_id'])}" title="${child['title']}">
|
||||||
<div class="item-children-poster">
|
<div class="item-children-poster">
|
||||||
<div class="item-children-poster-face poster-item" style="background-image: url(${page('pms_image_proxy', child['thumb'], child['rating_key'], 300, 450, fallback='poster')});"></div>
|
<div class="item-children-poster-face poster-item" style="background-image: url(${page('pms_image_proxy', child['thumb'], child['rating_key'], 300, 450, fallback='poster', server_id=child['server_id'])});"></div>
|
||||||
% if _session['user_group'] == 'admin':
|
% if _session['user_group'] == 'admin':
|
||||||
<span class="overlay-refresh-image" title="Refresh image"><i class="fa fa-refresh refresh_pms_image"></i></span>
|
<span class="overlay-refresh-image" title="Refresh image"><i class="fa fa-refresh refresh_pms_image"></i></span>
|
||||||
% endif
|
% endif
|
||||||
|
@ -138,16 +138,16 @@ DOCUMENTATION :: END
|
||||||
</a>
|
</a>
|
||||||
<div class="item-children-instance-text-wrapper poster-item">
|
<div class="item-children-instance-text-wrapper poster-item">
|
||||||
<h3>
|
<h3>
|
||||||
<a href="${page('info', child['rating_key'])}" title="${child['title']}">${child['title']}</a>
|
<a href="${page('info', child['rating_key'], server_id=child['server_id'])}" title="${child['title']}">${child['title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
% elif child['media_type'] == 'season':
|
% elif child['media_type'] == 'season':
|
||||||
<a href="${page('info', child['rating_key'])}" title="${child['title']}">
|
<a href="${page('info', child['rating_key'], server_id=child['server_id'])}" title="${child['title']}">
|
||||||
<div class="item-children-poster">
|
<div class="item-children-poster">
|
||||||
% if child['thumb']:
|
% if child['thumb']:
|
||||||
<div class="item-children-poster-face poster-item" style="background-image: url(${page('pms_image_proxy', child['thumb'], child['rating_key'], 300, 450, fallback='poster')});">
|
<div class="item-children-poster-face poster-item" style="background-image: url(${page('pms_image_proxy', child['thumb'], child['rating_key'], 300, 450, fallback='poster', server_id=child['server_id'])});">
|
||||||
% else:
|
% else:
|
||||||
<div class="item-children-poster-face poster-item" style="background-image: url(${page('pms_image_proxy', child['parent_thumb'], child['parent_rating_key'], 300, 450, fallback='poster')});">
|
<div class="item-children-poster-face poster-item" style="background-image: url(${page('pms_image_proxy', child['parent_thumb'], child['parent_rating_key'], 300, 450, fallback='poster', server_id=child['server_id'])});">
|
||||||
% endif
|
% endif
|
||||||
<div class="item-children-card-overlay">
|
<div class="item-children-card-overlay">
|
||||||
<div class="item-children-overlay-text">
|
<div class="item-children-overlay-text">
|
||||||
|
@ -162,18 +162,18 @@ DOCUMENTATION :: END
|
||||||
</a>
|
</a>
|
||||||
<div class="item-children-instance-text-wrapper poster-item">
|
<div class="item-children-instance-text-wrapper poster-item">
|
||||||
<h3>
|
<h3>
|
||||||
<a href="${page('info', child['rating_key'])}" title="${child['title']}">${child['title']}</a>
|
<a href="${page('info', child['rating_key'], server_id=child['server_id'])}" title="${child['title']}">${child['title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
% if media_type == 'collection':
|
% if media_type == 'collection':
|
||||||
<h3 class="text-muted">
|
<h3 class="text-muted">
|
||||||
<a class="text-muted" href="${page('info', child['parent_rating_key'])}" title="${child['parent_title']}">${child['parent_title']}</a>
|
<a class="text-muted" href="${page('info', child['parent_rating_key'], server_id=child['server_id'])}" title="${child['parent_title']}">${child['parent_title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
% elif child['media_type'] == 'episode':
|
% elif child['media_type'] == 'episode':
|
||||||
<a href="${page('info', child['rating_key'])}" title="Episode ${child['media_index']}">
|
<a href="${page('info', child['rating_key'], server_id=child['server_id'])}" title="Episode ${child['media_index']}">
|
||||||
<div class="item-children-poster">
|
<div class="item-children-poster">
|
||||||
<div class="item-children-poster-face episode-item" style="background-image: url(${page('pms_image_proxy', child['thumb'], child['rating_key'], 500, 280, fallback='art')});">
|
<div class="item-children-poster-face episode-item" style="background-image: url(${page('pms_image_proxy', child['thumb'], child['rating_key'], 500, 280, fallback='art', server_id=child['server_id'])});">
|
||||||
<div class="item-children-card-overlay">
|
<div class="item-children-card-overlay">
|
||||||
<div class="item-children-overlay-text">
|
<div class="item-children-overlay-text">
|
||||||
Episode ${child['media_index'] or child['originally_available_at']}
|
Episode ${child['media_index'] or child['originally_available_at']}
|
||||||
|
@ -187,22 +187,22 @@ DOCUMENTATION :: END
|
||||||
</a>
|
</a>
|
||||||
<div class="item-children-instance-text-wrapper episode-item">
|
<div class="item-children-instance-text-wrapper episode-item">
|
||||||
<h3>
|
<h3>
|
||||||
<a href="${page('info', child['rating_key'])}" title="${child['title']}">${child['title']}</a>
|
<a href="${page('info', child['rating_key'], server_id=child['server_id'])}" title="${child['title']}">${child['title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
% if media_type == 'collection':
|
% if media_type == 'collection':
|
||||||
<h3 class="text-muted">
|
<h3 class="text-muted">
|
||||||
<a href="${page('info', child['grandparent_rating_key'])}" title="${child['grandparent_title']}">${child['grandparent_title']}</a>
|
<a href="${page('info', child['grandparent_rating_key'], server_id=child['server_id'])}" title="${child['grandparent_title']}">${child['grandparent_title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
<h3 class="text-muted">
|
<h3 class="text-muted">
|
||||||
<a href="${page('info', child['parent_rating_key'])}" title="${child['parent_title']}">${short_season(child['parent_title'])}</a>
|
<a href="${page('info', child['parent_rating_key'], server_id=child['server_id'])}" title="${child['parent_title']}">${short_season(child['parent_title'])}</a>
|
||||||
· <a href="${page('info', child['rating_key'])}" title="Episode ${child['media_index']}">E${child['media_index']}</a>
|
· <a href="${page('info', child['rating_key'], server_id=child['server_id'])}" title="Episode ${child['media_index']}">E${child['media_index']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
% elif child['media_type'] == 'artist':
|
% elif child['media_type'] == 'artist':
|
||||||
<a href="${page('info', child['rating_key'])}" title="${child['title']}">
|
<a href="${page('info', child['rating_key'], server_id=child['server_id'])}" title="${child['title']}">
|
||||||
<div class="item-children-poster">
|
<div class="item-children-poster">
|
||||||
<div class="item-children-poster-face cover-item" style="background-image: url(${page('pms_image_proxy', child['thumb'], child['rating_key'], 300, 300, fallback='cover')});"></div>
|
<div class="item-children-poster-face cover-item" style="background-image: url(${page('pms_image_proxy', child['thumb'], child['rating_key'], 300, 300, fallback='cover', server_id=child['server_id'])});"></div>
|
||||||
% if _session['user_group'] == 'admin':
|
% if _session['user_group'] == 'admin':
|
||||||
<span class="overlay-refresh-image" title="Refresh image"><i class="fa fa-refresh refresh_pms_image"></i></span>
|
<span class="overlay-refresh-image" title="Refresh image"><i class="fa fa-refresh refresh_pms_image"></i></span>
|
||||||
% endif
|
% endif
|
||||||
|
@ -210,13 +210,13 @@ DOCUMENTATION :: END
|
||||||
</a>
|
</a>
|
||||||
<div class="item-children-instance-text-wrapper cover-item">
|
<div class="item-children-instance-text-wrapper cover-item">
|
||||||
<h3>
|
<h3>
|
||||||
<a href="${page('info', child['rating_key'])}" title="${child['title']}">${child['title']}</a>
|
<a href="${page('info', child['rating_key'], server_id=child['server_id'])}" title="${child['title']}">${child['title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
% elif child['media_type'] == 'album':
|
% elif child['media_type'] == 'album':
|
||||||
<a href="${page('info', child['rating_key'])}" title="${child['title']}">
|
<a href="${page('info', child['rating_key'], server_id=child['server_id'])}" title="${child['title']}">
|
||||||
<div class="item-children-poster">
|
<div class="item-children-poster">
|
||||||
<div class="item-children-poster-face cover-item" style="background-image: url(${page('pms_image_proxy', child['thumb'], child['rating_key'], 300, 300, fallback='cover')});"></div>
|
<div class="item-children-poster-face cover-item" style="background-image: url(${page('pms_image_proxy', child['thumb'], child['rating_key'], 300, 300, fallback='cover', server_id=child['server_id'])});"></div>
|
||||||
% if _session['user_group'] == 'admin':
|
% if _session['user_group'] == 'admin':
|
||||||
<span class="overlay-refresh-image" title="Refresh image"><i class="fa fa-refresh refresh_pms_image"></i></span>
|
<span class="overlay-refresh-image" title="Refresh image"><i class="fa fa-refresh refresh_pms_image"></i></span>
|
||||||
% endif
|
% endif
|
||||||
|
@ -224,11 +224,11 @@ DOCUMENTATION :: END
|
||||||
</a>
|
</a>
|
||||||
<div class="item-children-instance-text-wrapper cover-item">
|
<div class="item-children-instance-text-wrapper cover-item">
|
||||||
<h3>
|
<h3>
|
||||||
<a href="${page('info', child['rating_key'])}" title="${child['title']}">${child['title']}</a>
|
<a href="${page('info', child['rating_key'], server_id=child['server_id'])}" title="${child['title']}">${child['title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
% if media_type == 'collection':
|
% if media_type == 'collection':
|
||||||
<h3 class="text-muted">
|
<h3 class="text-muted">
|
||||||
<a class="text-muted" href="${page('info', child['parent_rating_key'])}" title="${child['parent_title']}">${child['parent_title']}</a>
|
<a class="text-muted" href="${page('info', child['parent_rating_key'], server_id=child['server_id'])}" title="${child['parent_title'], server_id=child['server_id']}">${child['parent_title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
|
@ -238,19 +238,19 @@ DOCUMENTATION :: END
|
||||||
<span class="item-children-list-item-index">${child['media_index']}</span>
|
<span class="item-children-list-item-index">${child['media_index']}</span>
|
||||||
<span class="item-children-list-item-title">
|
<span class="item-children-list-item-title">
|
||||||
<span class="media-type-tooltip" data-toggle="tooltip" title="Track"><i class="fa fa-music fa-fw"></i></span>
|
<span class="media-type-tooltip" data-toggle="tooltip" title="Track"><i class="fa fa-music fa-fw"></i></span>
|
||||||
<a href="${page('info', child['rating_key'])}" title="${child['title']}">
|
<a href="${page('info', child['rating_key'], server_id=child['server_id'])}" title="${child['title']}">
|
||||||
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['parent_thumb'], child['parent_rating_key'], 300, 300, fallback='cover')}" data-height="80" data-width="80">
|
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['parent_thumb'], child['parent_rating_key'], 300, 300, fallback='cover', server_id=child['server_id'])}" data-height="80" data-width="80">
|
||||||
${child['title']}
|
${child['title']}
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
% if media_type == 'collection':
|
% if media_type == 'collection':
|
||||||
-
|
-
|
||||||
<a href="${page('info', child['grandparent_rating_key'])}" title="${child['grandparent_title']}">
|
<a href="${page('info', child['grandparent_rating_key'], server_id=child['server_id'])}" title="${child['grandparent_title'], server_id=child['server_id']}">
|
||||||
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['grandparent_thumb'], child['grandparent_rating_key'], 300, 300, fallback='cover')}" data-height="80" data-width="80">
|
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['grandparent_thumb'], child['grandparent_rating_key'], 300, 300, fallback='cover')}" data-height="80" data-width="80">
|
||||||
${child['grandparent_title']}
|
${child['grandparent_title']}
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
<span class="text-muted"> (<a class="no-highlight" href="${page('info', child['parent_rating_key'])}" title="${child['parent_title']}">${child['parent_title']}</a>)</span>
|
<span class="text-muted"> (<a class="no-highlight" href="${page('info', child['parent_rating_key'], server_id=child['server_id'])}" title="${child['parent_title']}">${child['parent_title']}</a>)</span>
|
||||||
% elif child['original_title']:
|
% elif child['original_title']:
|
||||||
<span class="text-muted"> - ${child['original_title']}</span>
|
<span class="text-muted"> - ${child['original_title']}</span>
|
||||||
% endif
|
% endif
|
||||||
|
@ -272,8 +272,8 @@ DOCUMENTATION :: END
|
||||||
% else:
|
% else:
|
||||||
<span class="media-type-tooltip" data-toggle="tooltip" title="Photo"><i class="fa fa-picture-o fa-fw"></i></span>
|
<span class="media-type-tooltip" data-toggle="tooltip" title="Photo"><i class="fa fa-picture-o fa-fw"></i></span>
|
||||||
% endif
|
% endif
|
||||||
<a href="${page('info', child['rating_key'])}" title="${child['title']}">
|
<a href="${page('info', child['rating_key'], server_id=child['server_id'])}" title="${child['title']}">
|
||||||
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['thumb'], child['rating_key'], 300, 300, fallback='cover')}" data-height="80" data-width="80">
|
<span class="thumb-tooltip" data-toggle="popover" data-img="${page('pms_image_proxy', child['thumb'], child['rating_key'], 300, 300, fallback='cover', server_id=child['server_id'])}" data-height="80" data-width="80">
|
||||||
${child['title']}
|
${child['title']}
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -784,7 +784,7 @@ function page(endpoint, ...args) {
|
||||||
return endpoint + '?' + $.param(params).replace(/'/g, '%27');
|
return endpoint + '?' + $.param(params).replace(/'/g, '%27');
|
||||||
}
|
}
|
||||||
|
|
||||||
function pms_image_proxy(img, rating_key, width, height, opacity, background, blur, fallback, refresh, clip, img_format) {
|
function pms_image_proxy(img, rating_key, width, height, opacity, background, blur, fallback, refresh, clip, img_format, server_id) {
|
||||||
var params = {};
|
var params = {};
|
||||||
|
|
||||||
if (img != null) { params.img = img; }
|
if (img != null) { params.img = img; }
|
||||||
|
@ -798,11 +798,12 @@ function pms_image_proxy(img, rating_key, width, height, opacity, background, bl
|
||||||
if (refresh != null) { params.refresh = true; }
|
if (refresh != null) { params.refresh = true; }
|
||||||
if (clip != null) { params.clip = true; }
|
if (clip != null) { params.clip = true; }
|
||||||
if (img_format != null) { params.img_format = img_format; }
|
if (img_format != null) { params.img_format = img_format; }
|
||||||
|
if (server_id != null) { params.server_id = server_id; }
|
||||||
|
|
||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
|
||||||
function info_page(rating_key, guid, history, live) {
|
function info_page(rating_key, guid, history, live, server_id) {
|
||||||
var params = {};
|
var params = {};
|
||||||
|
|
||||||
if (live && history) {
|
if (live && history) {
|
||||||
|
@ -813,13 +814,16 @@ function info_page(rating_key, guid, history, live) {
|
||||||
|
|
||||||
if (history) { params.source = 'history'; }
|
if (history) { params.source = 'history'; }
|
||||||
|
|
||||||
|
if (server_id != null) { params.server_id = server_id; }
|
||||||
|
|
||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
|
||||||
function library_page(section_id) {
|
function library_page(section_id, server_id) {
|
||||||
var params = {};
|
var params = {};
|
||||||
|
|
||||||
if (section_id != null) { params.section_id = section_id; }
|
if (section_id != null) { params.section_id = section_id; }
|
||||||
|
if (server_id != null) { params.server_id = server_id; }
|
||||||
|
|
||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,12 +49,12 @@ libraries_list_table_options = {
|
||||||
if (!rowData['is_active']) { inactive = '<span class="inactive-library-tooltip" data-toggle="tooltip" title="Library not on Plex server"><i class="fa fa-exclamation-triangle"></i></span>'; }
|
if (!rowData['is_active']) { inactive = '<span class="inactive-library-tooltip" data-toggle="tooltip" title="Library not on Plex server"><i class="fa fa-exclamation-triangle"></i></span>'; }
|
||||||
if (cellData !== null && cellData !== '') {
|
if (cellData !== null && cellData !== '') {
|
||||||
if (rowData['library_thumb'].substring(0, 4) == "http") {
|
if (rowData['library_thumb'].substring(0, 4) == "http") {
|
||||||
$(td).html('<a href="' + page('library', rowData['section_id']) + '"><div class="libraries-poster-face" style="background-image: url(' + rowData['library_thumb'] + ');">' + inactive + '</div></a>');
|
$(td).html('<a href="' + page('library', rowData['section_id'], rowData['server_id']) + '"><div class="libraries-poster-face" style="background-image: url(' + rowData['library_thumb'] + ');">' + inactive + '</div></a>');
|
||||||
} else {
|
} else {
|
||||||
$(td).html('<a href="' + page('library', rowData['section_id']) + '"><div class="libraries-poster-face svg-icon library-' + rowData['section_type'] + '">' + inactive + '</div></a>');
|
$(td).html('<a href="' + page('library', rowData['section_id'], rowData['server_id']) + '"><div class="libraries-poster-face svg-icon library-' + rowData['section_type'] + '">' + inactive + '</div></a>');
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$(td).html('<a href="' + page('library', rowData['section_id']) + '"><div class="libraries-poster-face" style="background-image: url(../../images/cover.png);">' + inactive + '</div></a>');
|
$(td).html('<a href="' + page('library', rowData['section_id'], rowData['server_id']) + '"><div class="libraries-poster-face" style="background-image: url(../../images/cover.png);">' + inactive + '</div></a>');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"orderable": false,
|
"orderable": false,
|
||||||
|
@ -68,7 +68,7 @@ libraries_list_table_options = {
|
||||||
"createdCell": function (td, cellData, rowData, row, col) {
|
"createdCell": function (td, cellData, rowData, row, col) {
|
||||||
if (cellData !== null && cellData !== '') {
|
if (cellData !== null && cellData !== '') {
|
||||||
$(td).html('<div data-id="' + rowData['row_id'] + '">' +
|
$(td).html('<div data-id="' + rowData['row_id'] + '">' +
|
||||||
'<a href="' + page('library', rowData['section_id']) + '">' + cellData + '</a>' +
|
'<a href="' + page('library', rowData['section_id'], rowData['server_id']) + '">' + cellData + '</a>' +
|
||||||
'</div>');
|
'</div>');
|
||||||
} else {
|
} else {
|
||||||
$(td).html('n/a');
|
$(td).html('n/a');
|
||||||
|
@ -154,23 +154,23 @@ libraries_list_table_options = {
|
||||||
icon_title = (rowData['live']) ? 'Live TV' : 'Movie';
|
icon_title = (rowData['live']) ? 'Live TV' : 'Movie';
|
||||||
if (rowData['year']) { parent_info = ' (' + rowData['year'] + ')'; }
|
if (rowData['year']) { parent_info = ' (' + rowData['year'] + ')'; }
|
||||||
media_type = '<span class="media-type-tooltip" data-toggle="tooltip" title="' + icon_title + '"><i class="fa ' + icon + ' fa-fw"></i></span>';
|
media_type = '<span class="media-type-tooltip" data-toggle="tooltip" title="' + icon_title + '"><i class="fa ' + icon + ' fa-fw"></i></span>';
|
||||||
thumb_popover = '<span class="thumb-tooltip" data-toggle="popover" data-img="' + page('pms_image_proxy', rowData['thumb'], rowData['rating_key'], 300, 450, null, null, null, fallback) + '" data-height="120" data-width="80">' + cellData + parent_info + '</span>';
|
thumb_popover = '<span class="thumb-tooltip" data-toggle="popover" data-img="' + page('pms_image_proxy', rowData['thumb'], rowData['rating_key'], 300, 450, null, null, null, fallback, rowData['server_id']) + '" data-height="120" data-width="80">' + cellData + parent_info + '</span>';
|
||||||
$(td).html('<div class="history-title"><a href="' + page('info', rowData['rating_key'], rowData['guid'], true, rowData['live']) + '"><div style="float: left;">' + media_type + ' ' + thumb_popover + '</div></a></div>');
|
$(td).html('<div class="history-title"><a href="' + page('info', rowData['rating_key'], rowData['guid'], true, rowData['live'], rowData['server_id']) + '"><div style="float: left;">' + media_type + ' ' + thumb_popover + '</div></a></div>');
|
||||||
} else if (rowData['media_type'] === 'episode') {
|
} else if (rowData['media_type'] === 'episode') {
|
||||||
icon = (rowData['live']) ? 'fa-broadcast-tower' : 'fa-television';
|
icon = (rowData['live']) ? 'fa-broadcast-tower' : 'fa-television';
|
||||||
icon_title = (rowData['live']) ? 'Live TV' : 'Episode';
|
icon_title = (rowData['live']) ? 'Live TV' : 'Episode';
|
||||||
if (!isNaN(parseInt(rowData['parent_media_index'])) && !isNaN(parseInt(rowData['media_index']))) { parent_info = ' (' + short_season(rowData['parent_title']) + ' · E' + rowData['media_index'] + ')'; }
|
if (!isNaN(parseInt(rowData['parent_media_index'])) && !isNaN(parseInt(rowData['media_index']))) { parent_info = ' (' + short_season(rowData['parent_title']) + ' · E' + rowData['media_index'] + ')'; }
|
||||||
else if (rowData['live'] && rowData['originally_available_at']) { parent_info = ' (' + rowData['originally_available_at'] + ')'; }
|
else if (rowData['live'] && rowData['originally_available_at']) { parent_info = ' (' + rowData['originally_available_at'] + ')'; }
|
||||||
media_type = '<span class="media-type-tooltip" data-toggle="tooltip" title="' + icon_title + '"><i class="fa ' + icon + ' fa-fw"></i></span>';
|
media_type = '<span class="media-type-tooltip" data-toggle="tooltip" title="' + icon_title + '"><i class="fa ' + icon + ' fa-fw"></i></span>';
|
||||||
thumb_popover = '<span class="thumb-tooltip" data-toggle="popover" data-img="' + page('pms_image_proxy', rowData['thumb'], rowData['rating_key'], 300, 450, null, null, null, fallback) + '" data-height="120" data-width="80">' + cellData + parent_info + '</span>';
|
thumb_popover = '<span class="thumb-tooltip" data-toggle="popover" data-img="' + page('pms_image_proxy', rowData['thumb'], rowData['rating_key'], 300, 450, null, null, null, fallback, rowData['server_id']) + '" data-height="120" data-width="80">' + cellData + parent_info + '</span>';
|
||||||
$(td).html('<div class="history-title"><a href="' + page('info', rowData['rating_key'], rowData['guid'], true, rowData['live']) + '"><div style="float: left;" >' + media_type + ' ' + thumb_popover + '</div></a></div>');
|
$(td).html('<div class="history-title"><a href="' + page('info', rowData['rating_key'], rowData['guid'], true, rowData['live'], rowData['server_id']) + '"><div style="float: left;" >' + media_type + ' ' + thumb_popover + '</div></a></div>');
|
||||||
} else if (rowData['media_type'] === 'track') {
|
} else if (rowData['media_type'] === 'track') {
|
||||||
if (rowData['parent_title']) { parent_info = ' (' + rowData['parent_title'] + ')'; }
|
if (rowData['parent_title']) { parent_info = ' (' + rowData['parent_title'] + ')'; }
|
||||||
media_type = '<span class="media-type-tooltip" data-toggle="tooltip" title="Track"><i class="fa fa-music fa-fw"></i></span>';
|
media_type = '<span class="media-type-tooltip" data-toggle="tooltip" title="Track"><i class="fa fa-music fa-fw"></i></span>';
|
||||||
thumb_popover = '<span class="thumb-tooltip" data-toggle="popover" data-img="' + page('pms_image_proxy', rowData['thumb'], rowData['rating_key'], 300, 300, null, null, null, 'cover') + '" data-height="80" data-width="80">' + cellData + parent_info + '</span>';
|
thumb_popover = '<span class="thumb-tooltip" data-toggle="popover" data-img="' + page('pms_image_proxy', rowData['thumb'], rowData['rating_key'], 300, 300, null, null, null, 'cover', rowData['server_id']) + '" data-height="80" data-width="80">' + cellData + parent_info + '</span>';
|
||||||
$(td).html('<div class="history-title"><a href="' + page('info', rowData['rating_key'], rowData['guid'], true, rowData['live']) + '"><div style="float: left;">' + media_type + ' ' + thumb_popover + '</div></a></div>');
|
$(td).html('<div class="history-title"><a href="' + page('info', rowData['rating_key'], rowData['guid'], true, rowData['live'], rowData['server_id']) + '"><div style="float: left;">' + media_type + ' ' + thumb_popover + '</div></a></div>');
|
||||||
} else if (rowData['media_type']) {
|
} else if (rowData['media_type']) {
|
||||||
$(td).html('<a href="' + page('info', rowData['rating_key']) + '">' + cellData + '</a>');
|
$(td).html('<a href="' + page('info', rowData['rating_key'], rowData['server_id']) + '">' + cellData + '</a>');
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$(td).html('n/a');
|
$(td).html('n/a');
|
||||||
|
|
|
@ -548,6 +548,7 @@ DOCUMENTATION :: END
|
||||||
% endif
|
% endif
|
||||||
var section_name = '${data['section_name'].replace("'", "\\'")}';
|
var section_name = '${data['section_name'].replace("'", "\\'")}';
|
||||||
var refresh_table = false;
|
var refresh_table = false;
|
||||||
|
var server_id = "${data['server_id']}";
|
||||||
|
|
||||||
% if config['get_file_sizes']:
|
% if config['get_file_sizes']:
|
||||||
var get_file_sizes = false;
|
var get_file_sizes = false;
|
||||||
|
@ -577,7 +578,8 @@ DOCUMENTATION :: END
|
||||||
json_data: JSON.stringify( d ),
|
json_data: JSON.stringify( d ),
|
||||||
section_id: section_id,
|
section_id: section_id,
|
||||||
user_id: "${history_user_id}",
|
user_id: "${history_user_id}",
|
||||||
transcode_decision: transcode_decision
|
transcode_decision: transcode_decision,
|
||||||
|
server_id: server_id
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -625,7 +627,8 @@ DOCUMENTATION :: END
|
||||||
data: function ( d ) {
|
data: function ( d ) {
|
||||||
return {
|
return {
|
||||||
json_data: JSON.stringify( d ),
|
json_data: JSON.stringify( d ),
|
||||||
section_id: section_id
|
section_id: section_id,
|
||||||
|
server_id: server_id
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -657,7 +660,8 @@ DOCUMENTATION :: END
|
||||||
data: function ( d ) {
|
data: function ( d ) {
|
||||||
return {
|
return {
|
||||||
json_data: JSON.stringify( d ),
|
json_data: JSON.stringify( d ),
|
||||||
section_id: section_id
|
section_id: section_id,
|
||||||
|
server_id: server_id
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -686,7 +690,8 @@ DOCUMENTATION :: END
|
||||||
async: true,
|
async: true,
|
||||||
data: {
|
data: {
|
||||||
section_id: section_id,
|
section_id: section_id,
|
||||||
limit: 50
|
limit: 50,
|
||||||
|
server_id: server_id
|
||||||
},
|
},
|
||||||
complete: function(xhr, status) {
|
complete: function(xhr, status) {
|
||||||
$("#library-recently-watched").html(xhr.responseText);
|
$("#library-recently-watched").html(xhr.responseText);
|
||||||
|
@ -702,7 +707,8 @@ DOCUMENTATION :: END
|
||||||
async: true,
|
async: true,
|
||||||
data: {
|
data: {
|
||||||
section_id: section_id,
|
section_id: section_id,
|
||||||
limit: 50
|
limit: 50,
|
||||||
|
server_id: server_id
|
||||||
},
|
},
|
||||||
complete: function(xhr, status) {
|
complete: function(xhr, status) {
|
||||||
$("#library-recently-added").html(xhr.responseText);
|
$("#library-recently-added").html(xhr.responseText);
|
||||||
|
@ -811,7 +817,10 @@ DOCUMENTATION :: END
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: 'library_watch_time_stats',
|
url: 'library_watch_time_stats',
|
||||||
async: true,
|
async: true,
|
||||||
data: { section_id: section_id },
|
data: {
|
||||||
|
section_id: section_id,
|
||||||
|
server_id: server_id
|
||||||
|
},
|
||||||
complete: function(xhr, status) {
|
complete: function(xhr, status) {
|
||||||
$("#library-time-stats").html(xhr.responseText);
|
$("#library-time-stats").html(xhr.responseText);
|
||||||
}
|
}
|
||||||
|
@ -821,7 +830,10 @@ DOCUMENTATION :: END
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: 'library_user_stats',
|
url: 'library_user_stats',
|
||||||
async: true,
|
async: true,
|
||||||
data: { section_id: section_id },
|
data: {
|
||||||
|
section_id: section_id,
|
||||||
|
server_id: server_id
|
||||||
|
},
|
||||||
complete: function(xhr, status) {
|
complete: function(xhr, status) {
|
||||||
$("#library-user-stats").html(xhr.responseText);
|
$("#library-user-stats").html(xhr.responseText);
|
||||||
}
|
}
|
||||||
|
@ -840,7 +852,8 @@ DOCUMENTATION :: END
|
||||||
return {
|
return {
|
||||||
json_data: JSON.stringify( d ),
|
json_data: JSON.stringify( d ),
|
||||||
section_id: section_id,
|
section_id: section_id,
|
||||||
refresh: refresh_table
|
refresh: refresh_table,
|
||||||
|
server_id: server_id
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -874,7 +887,8 @@ DOCUMENTATION :: END
|
||||||
data: function ( d ) {
|
data: function ( d ) {
|
||||||
return {
|
return {
|
||||||
json_data: JSON.stringify( d ),
|
json_data: JSON.stringify( d ),
|
||||||
section_id: section_id
|
section_id: section_id,
|
||||||
|
server_id: server_id
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -904,7 +918,10 @@ DOCUMENTATION :: END
|
||||||
$("#edit-library-tooltip").tooltip('hide');
|
$("#edit-library-tooltip").tooltip('hide');
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: 'edit_library_dialog',
|
url: 'edit_library_dialog',
|
||||||
data: { section_id: section_id },
|
data: {
|
||||||
|
section_id: section_id,
|
||||||
|
server_id: server_id
|
||||||
|
},
|
||||||
cache: false,
|
cache: false,
|
||||||
async: true,
|
async: true,
|
||||||
complete: function(xhr, status) {
|
complete: function(xhr, status) {
|
||||||
|
@ -920,7 +937,8 @@ DOCUMENTATION :: END
|
||||||
section_id: $(this).data('section_id'),
|
section_id: $(this).data('section_id'),
|
||||||
media_type: $(this).data('media_type'),
|
media_type: $(this).data('media_type'),
|
||||||
sub_media_type: $(this).data('sub_media_type'),
|
sub_media_type: $(this).data('sub_media_type'),
|
||||||
export_type: $(this).data('export_type')
|
export_type: $(this).data('export_type'),
|
||||||
|
server_id: server_id
|
||||||
},
|
},
|
||||||
cache: false,
|
cache: false,
|
||||||
async: true,
|
async: true,
|
||||||
|
@ -941,7 +959,10 @@ DOCUMENTATION :: END
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: 'delete_history_rows',
|
url: 'delete_history_rows',
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
data: { row_ids: history_to_delete.join(',') },
|
data: {
|
||||||
|
row_ids: history_to_delete.join(','),
|
||||||
|
server_id: server_id
|
||||||
|
},
|
||||||
async: true,
|
async: true,
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
var msg = "History deleted";
|
var msg = "History deleted";
|
||||||
|
|
|
@ -42,19 +42,19 @@ DOCUMENTATION :: END
|
||||||
<li>
|
<li>
|
||||||
% if item['media_type'] == 'episode' or item['media_type'] == 'movie':
|
% if item['media_type'] == 'episode' or item['media_type'] == 'movie':
|
||||||
% if item['media_type'] == 'movie':
|
% if item['media_type'] == 'movie':
|
||||||
<a href="${page('info', item['rating_key'])}" title="${item['title']}">
|
<a href="${page('info', item['rating_key'], server_id=item['server_id'])}" title="${item['title']}">
|
||||||
% elif item['media_type'] == 'episode':
|
% elif item['media_type'] == 'episode':
|
||||||
<a href="${page('info', item['rating_key'])}" title="${item['grandparent_title']}">
|
<a href="${page('info', item['rating_key'], server_id=item['server_id'])}" title="${item['grandparent_title']}">
|
||||||
% endif
|
% endif
|
||||||
<div class="dashboard-recent-media-poster">
|
<div class="dashboard-recent-media-poster">
|
||||||
% if item['media_type'] == 'episode':
|
% if item['media_type'] == 'episode':
|
||||||
% if item['parent_thumb']:
|
% if item['parent_thumb']:
|
||||||
<div class="dashboard-recent-media-poster-face" style="background-image: url(${page('pms_image_proxy', item['parent_thumb'], item['parent_rating_key'], 300, 450, fallback='poster')});">
|
<div class="dashboard-recent-media-poster-face" style="background-image: url(${page('pms_image_proxy', item['parent_thumb'], item['parent_rating_key'], 300, 450, fallback='poster', server_id=item['server_id'])});">
|
||||||
% else:
|
% else:
|
||||||
<div class="dashboard-recent-media-poster-face" style="background-image: url(${page('pms_image_proxy', item['grandparent_thumb'], item['grandparent_rating_key'], 300, 450, fallback='poster')});">
|
<div class="dashboard-recent-media-poster-face" style="background-image: url(${page('pms_image_proxy', item['grandparent_thumb'], item['grandparent_rating_key'], 300, 450, fallback='poster', server_id=item['server_id'])});">
|
||||||
% endif
|
% endif
|
||||||
% elif item['media_type'] == 'movie':
|
% elif item['media_type'] == 'movie':
|
||||||
<div class="dashboard-recent-media-poster-face" style="background-image: url(${page('pms_image_proxy', item['thumb'], item['rating_key'], 300, 450, fallback='poster')});">
|
<div class="dashboard-recent-media-poster-face" style="background-image: url(${page('pms_image_proxy', item['thumb'], item['rating_key'], 300, 450, fallback='poster', server_id=item['server_id'])});">
|
||||||
% endif
|
% endif
|
||||||
<div class="dashboard-recent-media-overlay">
|
<div class="dashboard-recent-media-overlay">
|
||||||
<div class="dashboard-recent-media-overlay-text" id="added_at-${item['rating_key']}">
|
<div class="dashboard-recent-media-overlay-text" id="added_at-${item['rating_key']}">
|
||||||
|
@ -72,27 +72,27 @@ DOCUMENTATION :: END
|
||||||
<div class="dashboard-recent-media-metacontainer">
|
<div class="dashboard-recent-media-metacontainer">
|
||||||
% if item['media_type'] == 'episode':
|
% if item['media_type'] == 'episode':
|
||||||
<h3>
|
<h3>
|
||||||
<a href="${page('info', item['grandparent_rating_key'])}" title="${item['grandparent_title']}">${item['grandparent_title']}</a>
|
<a href="${page('info', item['grandparent_rating_key'], server_id=item['server_id'])}" title="${item['grandparent_title']}">${item['grandparent_title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
<h3 class="text-muted">
|
<h3 class="text-muted">
|
||||||
<a href="${page('info', item['rating_key'])}" title="${item['title']}">${item['title']}</a>
|
<a href="${page('info', item['rating_key'], server_id=item['server_id'])}" title="${item['title']}">${item['title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
<h3 class="text-muted">
|
<h3 class="text-muted">
|
||||||
<a href="${page('info', item['parent_rating_key'])}" title="${item['parent_title']}">${short_season(item['parent_title'])}</a>
|
<a href="${page('info', item['parent_rating_key'], server_id=item['server_id'])}" title="${item['parent_title']}">${short_season(item['parent_title'])}</a>
|
||||||
· <a href="${page('info', item['rating_key'])}" title="Episode ${item['media_index']}">E${item['media_index']}</a>
|
· <a href="${page('info', item['rating_key'], server_id=item['server_id'])}" title="Episode ${item['media_index']}">E${item['media_index']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
% elif item['media_type'] == 'movie':
|
% elif item['media_type'] == 'movie':
|
||||||
<h3>
|
<h3>
|
||||||
<a href="${page('info', item['rating_key'])}" title="${item['title']}">${item['title']}</a>
|
<a href="${page('info', item['rating_key'], server_id=item['server_id'])}" title="${item['title']}">${item['title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
<h3 class="text-muted">${item['year']}</h3>
|
<h3 class="text-muted">${item['year']}</h3>
|
||||||
<h3 class="text-muted"> </h3>
|
<h3 class="text-muted"> </h3>
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
% elif item['media_type'] == 'album':
|
% elif item['media_type'] == 'album':
|
||||||
<a href="${page('info', item['rating_key'])}" title="${item['title']}">
|
<a href="${page('info', item['rating_key'], server_id=item['server_id'])}" title="${item['title']}">
|
||||||
<div class="dashboard-recent-media-cover">
|
<div class="dashboard-recent-media-cover">
|
||||||
<div class="dashboard-recent-media-cover-face" style="background-image: url(${page('pms_image_proxy', item['thumb'], item['rating_key'], 300, 300, fallback='cover')});">
|
<div class="dashboard-recent-media-cover-face" style="background-image: url(${page('pms_image_proxy', item['thumb'], item['rating_key'], 300, 300, fallback='cover', server_id=item['server_id'])});">
|
||||||
<div class="dashboard-recent-media-overlay">
|
<div class="dashboard-recent-media-overlay">
|
||||||
<div class="dashboard-recent-media-overlay-text" id="added_at-${item['rating_key']}">
|
<div class="dashboard-recent-media-overlay-text" id="added_at-${item['rating_key']}">
|
||||||
<script>
|
<script>
|
||||||
|
@ -104,10 +104,10 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
<div class="dashboard-recent-media-metacontainer">
|
<div class="dashboard-recent-media-metacontainer">
|
||||||
<h3>
|
<h3>
|
||||||
<a href="${page('info', item['parent_rating_key'])}" title="${item['parent_title']}">${item['parent_title']}</a>
|
<a href="${page('info', item['parent_rating_key'], server_id=item['server_id'])}" title="${item['parent_title']}">${item['parent_title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
<h3 class="text-muted">
|
<h3 class="text-muted">
|
||||||
<a class="text-muted" href="${page('info', item['rating_key'])}" title="${item['title']}">${item['title']}</a>
|
<a class="text-muted" href="${page('info', item['rating_key'], server_id=item['server_id'])}" title="${item['title']}">${item['title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
<h3 class="text-muted"> </h3>
|
<h3 class="text-muted"> </h3>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -42,9 +42,9 @@ DOCUMENTATION :: END
|
||||||
<div class="dashboard-recent-media-instance">
|
<div class="dashboard-recent-media-instance">
|
||||||
<li data-type="${item['media_type']}">
|
<li data-type="${item['media_type']}">
|
||||||
% if item['media_type'] == 'movie':
|
% if item['media_type'] == 'movie':
|
||||||
<a href="${page('info', item['rating_key'])}" title="${item['title']}">
|
<a href="${page('info', item['rating_key'], server_id=item['server_id'])}" title="${item['title']}">
|
||||||
<div class="dashboard-recent-media-poster">
|
<div class="dashboard-recent-media-poster">
|
||||||
<div class="dashboard-recent-media-poster-face" style="background-image: url(${page('pms_image_proxy', item['thumb'], item['rating_key'], 300, 450, fallback='poster')});">
|
<div class="dashboard-recent-media-poster-face" style="background-image: url(${page('pms_image_proxy', item['thumb'], item['rating_key'], 300, 450, fallback='poster', server_id=item['server_id'])});">
|
||||||
<div class="dashboard-recent-media-overlay">
|
<div class="dashboard-recent-media-overlay">
|
||||||
<div class="dashboard-recent-media-overlay-text" id="added_at-${item['rating_key']}">
|
<div class="dashboard-recent-media-overlay-text" id="added_at-${item['rating_key']}">
|
||||||
<script>
|
<script>
|
||||||
|
@ -60,15 +60,15 @@ DOCUMENTATION :: END
|
||||||
</a>
|
</a>
|
||||||
<div class="dashboard-recent-media-metacontainer">
|
<div class="dashboard-recent-media-metacontainer">
|
||||||
<h3>
|
<h3>
|
||||||
<a href="${page('info', item['rating_key'])}" title="${item['title']}">${item['title']}</a>
|
<a href="${page('info', item['rating_key'], server_id=item['server_id'])}" title="${item['title']}">${item['title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
<h3 class="text-muted">${item['year']}</h3>
|
<h3 class="text-muted">${item['year']}</h3>
|
||||||
<h3 class="text-muted"> </h3>
|
<h3 class="text-muted"> </h3>
|
||||||
</div>
|
</div>
|
||||||
% elif item['media_type'] == 'show':
|
% elif item['media_type'] == 'show':
|
||||||
<a href="${page('info', item['rating_key'])}" title="${item['title']}">
|
<a href="${page('info', item['rating_key'], server_id=item['server_id'])}" title="${item['title']}">
|
||||||
<div class="dashboard-recent-media-poster">
|
<div class="dashboard-recent-media-poster">
|
||||||
<div class="dashboard-recent-media-poster-face" style="background-image: url(${page('pms_image_proxy', item['thumb'], item['rating_key'], 300, 450, fallback='poster')});">
|
<div class="dashboard-recent-media-poster-face" style="background-image: url(${page('pms_image_proxy', item['thumb'], item['rating_key'], 300, 450, fallback='poster', server_id=item['server_id'])});">
|
||||||
<div class="dashboard-recent-media-overlay">
|
<div class="dashboard-recent-media-overlay">
|
||||||
<div class="dashboard-recent-media-overlay-text" id="added_at-${item['rating_key']}">
|
<div class="dashboard-recent-media-overlay-text" id="added_at-${item['rating_key']}">
|
||||||
<script>
|
<script>
|
||||||
|
@ -84,7 +84,7 @@ DOCUMENTATION :: END
|
||||||
</a>
|
</a>
|
||||||
<div class="dashboard-recent-media-metacontainer">
|
<div class="dashboard-recent-media-metacontainer">
|
||||||
<h3>
|
<h3>
|
||||||
<a href="${page('info', item['rating_key'])}" title="${item['title']}">${item['title']}</a>
|
<a href="${page('info', item['rating_key'], server_id=item['server_id'])}" title="${item['title']}">${item['title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
<h3 class="text-muted">
|
<h3 class="text-muted">
|
||||||
${item['child_count']} Season${'s' if cast_to_int(item['child_count']) > 1 else ''}
|
${item['child_count']} Season${'s' if cast_to_int(item['child_count']) > 1 else ''}
|
||||||
|
@ -92,12 +92,12 @@ DOCUMENTATION :: END
|
||||||
<h3 class="text-muted"> </h3>
|
<h3 class="text-muted"> </h3>
|
||||||
</div>
|
</div>
|
||||||
% elif item['media_type'] == 'season':
|
% elif item['media_type'] == 'season':
|
||||||
<a href="${page('info', item['rating_key'])}" title="${item['parent_title']}">
|
<a href="${page('info', item['rating_key'], server_id=item['server_id'])}" title="${item['parent_title']}">
|
||||||
<div class="dashboard-recent-media-poster">
|
<div class="dashboard-recent-media-poster">
|
||||||
% if item['thumb']:
|
% if item['thumb']:
|
||||||
<div class="dashboard-recent-media-poster-face" style="background-image: url(${page('pms_image_proxy', item['thumb'], item['rating_key'], 300, 450, fallback='poster')});">
|
<div class="dashboard-recent-media-poster-face" style="background-image: url(${page('pms_image_proxy', item['thumb'], item['rating_key'], 300, 450, fallback='poster', server_id=item['server_id'])});">
|
||||||
% else:
|
% else:
|
||||||
<div class="dashboard-recent-media-poster-face" style="background-image: url(${page('pms_image_proxy', item['parent_thumb'], item['parent_rating_key'], 300, 450, fallback='poster')});">
|
<div class="dashboard-recent-media-poster-face" style="background-image: url(${page('pms_image_proxy', item['parent_thumb'], item['parent_rating_key'], 300, 450, fallback='poster', server_id=item['server_id'])});">
|
||||||
% endif
|
% endif
|
||||||
<div class="dashboard-recent-media-overlay">
|
<div class="dashboard-recent-media-overlay">
|
||||||
<div class="dashboard-recent-media-overlay-text" id="added_at-${item['rating_key']}">
|
<div class="dashboard-recent-media-overlay-text" id="added_at-${item['rating_key']}">
|
||||||
|
@ -114,17 +114,17 @@ DOCUMENTATION :: END
|
||||||
</a>
|
</a>
|
||||||
<div class="dashboard-recent-media-metacontainer">
|
<div class="dashboard-recent-media-metacontainer">
|
||||||
<h3>
|
<h3>
|
||||||
<a href="${page('info', item['parent_rating_key'])}" title="${item['parent_title']}">${item['parent_title']}</a>
|
<a href="${page('info', item['parent_rating_key'], server_id=item['server_id'])}" title="${item['parent_title']}">${item['parent_title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
<h3 class="text-muted">
|
<h3 class="text-muted">
|
||||||
<a class="text-muted" href="${page('info', item['rating_key'])}" title="${item['title']}">${item['title']}</a>
|
<a class="text-muted" href="${page('info', item['rating_key'], server_id=item['server_id'])}" title="${item['title']}">${item['title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
<h3 class="text-muted"> </h3>
|
<h3 class="text-muted"> </h3>
|
||||||
</div>
|
</div>
|
||||||
% elif item['media_type'] == 'episode':
|
% elif item['media_type'] == 'episode':
|
||||||
<a href="${page('info', item['rating_key'])}" title="${item['title']}">
|
<a href="${page('info', item['rating_key'], server_id=item['server_id'])}" title="${item['title']}">
|
||||||
<div class="dashboard-recent-media-poster">
|
<div class="dashboard-recent-media-poster">
|
||||||
<div class="dashboard-recent-media-poster-face" style="background-image: url(${page('pms_image_proxy', item['grandparent_thumb'], item['grandparent_rating_key'], 300, 450, fallback='poster')});">
|
<div class="dashboard-recent-media-poster-face" style="background-image: url(${page('pms_image_proxy', item['grandparent_thumb'], item['grandparent_rating_key'], 300, 450, fallback='poster', server_id=item['server_id'])});">
|
||||||
<div class="dashboard-recent-media-overlay">
|
<div class="dashboard-recent-media-overlay">
|
||||||
<div class="dashboard-recent-media-overlay-text" id="added_at-${item['rating_key']}">
|
<div class="dashboard-recent-media-overlay-text" id="added_at-${item['rating_key']}">
|
||||||
<script>
|
<script>
|
||||||
|
@ -140,21 +140,21 @@ DOCUMENTATION :: END
|
||||||
</a>
|
</a>
|
||||||
<div class="dashboard-recent-media-metacontainer">
|
<div class="dashboard-recent-media-metacontainer">
|
||||||
<h3>
|
<h3>
|
||||||
<a href="${page('info', item['grandparent_rating_key'])}" title="${item['grandparent_title']}">${item['grandparent_title']}</a>
|
<a href="${page('info', item['grandparent_rating_key'], server_id=item['server_id'])}" title="${item['grandparent_title']}">${item['grandparent_title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
<h3 class="text-muted">
|
<h3 class="text-muted">
|
||||||
<a href="${page('info', item['rating_key'])}" title="${item['title']}">${item['title']}</a>
|
<a href="${page('info', item['rating_key'], server_id=item['server_id'])}" title="${item['title']}">${item['title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
<h3 class="text-muted">
|
<h3 class="text-muted">
|
||||||
<a href="${page('info', item['parent_rating_key'])}" title="${item['parent_title']}">${short_season(item['parent_title'])}</a>
|
<a href="${page('info', item['parent_rating_key'], server_id=item['server_id'])}" title="${item['parent_title']}">${short_season(item['parent_title'])}</a>
|
||||||
·
|
·
|
||||||
<a href="${page('info', item['rating_key'])}" title="Episode ${item['media_index']}">E${item['media_index']}</a>
|
<a href="${page('info', item['rating_key'], server_id=item['server_id'])}" title="Episode ${item['media_index']}">E${item['media_index']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
% elif item['media_type'] == 'album':
|
% elif item['media_type'] == 'album':
|
||||||
<a href="${page('info', item['rating_key'])}" title="${item['parent_title']}">
|
<a href="${page('info', item['rating_key'], server_id=item['server_id'])}" title="${item['parent_title']}">
|
||||||
<div class="dashboard-recent-media-cover">
|
<div class="dashboard-recent-media-cover">
|
||||||
<div class="dashboard-recent-media-cover-face" style="background-image: url(${page('pms_image_proxy', item['thumb'], item['rating_key'], 300, 300, fallback='cover')});">
|
<div class="dashboard-recent-media-cover-face" style="background-image: url(${page('pms_image_proxy', item['thumb'], item['rating_key'], 300, 300, fallback='cover', server_id=item['server_id'])});">
|
||||||
<div class="dashboard-recent-media-overlay">
|
<div class="dashboard-recent-media-overlay">
|
||||||
<div class="dashboard-recent-media-overlay-text" id="added_at-${item['rating_key']}">
|
<div class="dashboard-recent-media-overlay-text" id="added_at-${item['rating_key']}">
|
||||||
<script>
|
<script>
|
||||||
|
@ -170,10 +170,10 @@ DOCUMENTATION :: END
|
||||||
</a>
|
</a>
|
||||||
<div class="dashboard-recent-media-metacontainer">
|
<div class="dashboard-recent-media-metacontainer">
|
||||||
<h3>
|
<h3>
|
||||||
<a href="${page('info', item['parent_rating_key'])}" title="${item['parent_title']}">${item['parent_title']}</a>
|
<a href="${page('info', item['parent_rating_key'], server_id=item['server_id'])}" title="${item['parent_title']}">${item['parent_title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
<h3 class="text-muted">
|
<h3 class="text-muted">
|
||||||
<a class="text-muted" href="${page('info', item['rating_key'])}" title="${item['title']}">${item['title']}</a>
|
<a class="text-muted" href="${page('info', item['rating_key'], server_id=item['server_id'])}" title="${item['title']}">${item['title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
<h3 class="text-muted"> </h3>
|
<h3 class="text-muted"> </h3>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -38,12 +38,12 @@ DOCUMENTATION :: END
|
||||||
% if item['media_type'] == 'episode' or item['media_type'] == 'movie':
|
% if item['media_type'] == 'episode' or item['media_type'] == 'movie':
|
||||||
% if item['rating_key']:
|
% if item['rating_key']:
|
||||||
% if item['media_type'] == 'movie':
|
% if item['media_type'] == 'movie':
|
||||||
<a href="${page('info', item['rating_key'], history=True, live=item['live'])}" title="${item['title']}">
|
<a href="${page('info', item['rating_key'], history=True, live=item['live'], server_id=item['server_id'])}" title="${item['title']}">
|
||||||
% elif item['media_type'] == 'episode':
|
% elif item['media_type'] == 'episode':
|
||||||
<a href="${page('info', item['rating_key'], history=True, live=item['live'])}" title="${item['grandparent_title']}">
|
<a href="${page('info', item['rating_key'], history=True, live=item['live'], server_id=item['server_id'])}" title="${item['grandparent_title']}">
|
||||||
% endif
|
% endif
|
||||||
<div class="dashboard-recent-media-poster">
|
<div class="dashboard-recent-media-poster">
|
||||||
<div class="dashboard-recent-media-poster-face" style="background-image: url(${page('pms_image_proxy', item['thumb'], item['rating_key'], 300, 450, fallback='poster')});">
|
<div class="dashboard-recent-media-poster-face" style="background-image: url(${page('pms_image_proxy', item['thumb'], item['rating_key'], 300, 450, fallback='poster', server_id=item['server_id'])});">
|
||||||
<div class="dashboard-recent-media-overlay">
|
<div class="dashboard-recent-media-overlay">
|
||||||
<div class="dashboard-recent-media-overlay-text" id="time-${item['time']}">
|
<div class="dashboard-recent-media-overlay-text" id="time-${item['time']}">
|
||||||
<script>
|
<script>
|
||||||
|
@ -61,36 +61,36 @@ DOCUMENTATION :: END
|
||||||
% if item['media_type'] == 'episode':
|
% if item['media_type'] == 'episode':
|
||||||
% if item['live']:
|
% if item['live']:
|
||||||
<h3>
|
<h3>
|
||||||
<a href="${page('info', item['rating_key'], history=True, live=item['live'])}" title="${item['grandparent_title']}">${item['grandparent_title']}</a>
|
<a href="${page('info', item['rating_key'], history=True, live=item['live'], server_id=item['server_id'])}" title="${item['grandparent_title']}">${item['grandparent_title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
<h3 class="text-muted" title="${item['title']}">
|
<h3 class="text-muted" title="${item['title']}">
|
||||||
<a href="${page('info', item['rating_key'], history=True, live=item['live'])}" title="${item['title']}">${item['title']}</a>
|
<a href="${page('info', item['rating_key'], history=True, live=item['live'], server_id=item['server_id'])}" title="${item['title']}">${item['title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
% if item['media_index']:
|
% if item['media_index']:
|
||||||
<h3 class="text-muted">
|
<h3 class="text-muted">
|
||||||
<a href="${page('info', item['rating_key'], history=True, live=item['live'])}" title="${item['parent_title']}">${short_season(item['parent_title'])}</a>
|
<a href="${page('info', item['rating_key'], history=True, live=item['live'], server_id=item['server_id'])}" title="${item['parent_title']}">${short_season(item['parent_title'])}</a>
|
||||||
· <a href="${page('info', item['rating_key'], history=True, live=item['live'])}" title="Episode ${item['media_index']}">E${item['media_index']}</a>
|
· <a href="${page('info', item['rating_key'], history=True, live=item['live'], server_id=item['server_id'])}" title="Episode ${item['media_index']}">E${item['media_index']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
% else:
|
% else:
|
||||||
<h3 class="text-muted">
|
<h3 class="text-muted">
|
||||||
<a href="${page('info', item['rating_key'], history=True, live=item['live'])}" title="${item['originally_available_at']}">${item['originally_available_at']}</a>
|
<a href="${page('info', item['rating_key'], history=True, live=item['live'], server_id=item['server_id'])}" title="${item['originally_available_at']}">${item['originally_available_at']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
% endif
|
% endif
|
||||||
% else:
|
% else:
|
||||||
<h3>
|
<h3>
|
||||||
<a href="${page('info', item['grandparent_rating_key'])}" title="${item['grandparent_title']}">${item['grandparent_title']}</a>
|
<a href="${page('info', item['grandparent_rating_key'], server_id=item['server_id'])}" title="${item['grandparent_title']}">${item['grandparent_title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
<h3 class="text-muted" title="${item['title']}">
|
<h3 class="text-muted" title="${item['title']}">
|
||||||
<a href="${page('info', item['rating_key'], history=True, live=item['live'])}" title="${item['title']}">${item['title']}</a>
|
<a href="${page('info', item['rating_key'], history=True, live=item['live'], server_id=item['server_id'])}" title="${item['title']}">${item['title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
<h3 class="text-muted">
|
<h3 class="text-muted">
|
||||||
<a href="${page('info', item['parent_rating_key'])}" title="${item['parent_title']}">${short_season(item['parent_title'])}</a>
|
<a href="${page('info', item['parent_rating_key'], server_id=item['server_id'])}" title="${item['parent_title']}">${short_season(item['parent_title'])}</a>
|
||||||
· <a href="${page('info', item['rating_key'], history=True, live=item['live'])}" title="Episode ${item['media_index']}">E${item['media_index']}</a>
|
· <a href="${page('info', item['rating_key'], history=True, live=item['live'], server_id=item['server_id'])}" title="Episode ${item['media_index']}">E${item['media_index']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
% endif
|
% endif
|
||||||
% elif item['media_type'] == 'movie':
|
% elif item['media_type'] == 'movie':
|
||||||
<h3 title="${item['title']}">
|
<h3 title="${item['title']}">
|
||||||
<a href="${page('info', item['rating_key'], history=True, live=item['live'])}" title="${item['title']}">${item['title']}</a>
|
<a href="${page('info', item['rating_key'], history=True, live=item['live'], server_id=item['server_id'])}" title="${item['title']}">${item['title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
<h3 class="text-muted">${item['year']}</h3>
|
<h3 class="text-muted">${item['year']}</h3>
|
||||||
<h3 class="text-muted"> </h3>
|
<h3 class="text-muted"> </h3>
|
||||||
|
@ -116,9 +116,9 @@ DOCUMENTATION :: END
|
||||||
% endif
|
% endif
|
||||||
% elif item['media_type'] == 'track':
|
% elif item['media_type'] == 'track':
|
||||||
% if item['rating_key']:
|
% if item['rating_key']:
|
||||||
<a href="${page('info', item['rating_key'], history=True, live=item['live'])}" title="${item['parent_title']}">
|
<a href="${page('info', item['rating_key'], history=True, live=item['live'], server_id=item['server_id'])}" title="${item['parent_title']}">
|
||||||
<div class="dashboard-recent-media-cover">
|
<div class="dashboard-recent-media-cover">
|
||||||
<div class="dashboard-recent-media-cover-face" style="background-image: url(${page('pms_image_proxy', item['thumb'], item['rating_key'], 300, 300, fallback='cover')});">
|
<div class="dashboard-recent-media-cover-face" style="background-image: url(${page('pms_image_proxy', item['thumb'], item['rating_key'], 300, 300, fallback='cover', server_id=item['server_id'])});">
|
||||||
<div class="dashboard-recent-media-overlay">
|
<div class="dashboard-recent-media-overlay">
|
||||||
<div class="dashboard-recent-media-overlay-text" id="time-${item['time']}">
|
<div class="dashboard-recent-media-overlay-text" id="time-${item['time']}">
|
||||||
<script>
|
<script>
|
||||||
|
@ -131,13 +131,13 @@ DOCUMENTATION :: END
|
||||||
</a>
|
</a>
|
||||||
<div class="dashboard-recent-media-metacontainer">
|
<div class="dashboard-recent-media-metacontainer">
|
||||||
<h3 title="${item['original_title'] or item['grandparent_title']}">
|
<h3 title="${item['original_title'] or item['grandparent_title']}">
|
||||||
<a href="${page('info', item['grandparent_rating_key'])}" title="${item['original_title'] or item['grandparent_title']}">${item['original_title'] or item['grandparent_title']}</a>
|
<a href="${page('info', item['grandparent_rating_key'], server_id=item['server_id'])}" title="${item['original_title'] or item['grandparent_title']}">${item['original_title'] or item['grandparent_title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
<h3 class="text-muted" title="${item['title']}">
|
<h3 class="text-muted" title="${item['title']}">
|
||||||
<a href="${page('info', item['rating_key'], history=True, live=item['live'])}" title="${item['title']}">${item['title']}</a>
|
<a href="${page('info', item['rating_key'], history=True, live=item['live'], server_id=item['server_id'])}" title="${item['title']}">${item['title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
<h3 class="text-muted">
|
<h3 class="text-muted">
|
||||||
<a href="${page('info', item['parent_rating_key'])}" title="${item['parent_title']}">${item['parent_title']}</a>
|
<a href="${page('info', item['parent_rating_key'], server_id=item['server_id'])}" title="${item['parent_title']}">${item['parent_title']}</a>
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
% else:
|
% else:
|
||||||
|
|
|
@ -662,13 +662,14 @@ def dbcheck():
|
||||||
"buffer_count INTEGER DEFAULT 0, buffer_last_triggered INTEGER, last_paused INTEGER, watched INTEGER DEFAULT 0, "
|
"buffer_count INTEGER DEFAULT 0, buffer_last_triggered INTEGER, last_paused INTEGER, watched INTEGER DEFAULT 0, "
|
||||||
"intro INTEGER DEFAULT 0, credits INTEGER DEFAULT 0, commercial INTEGER DEFAULT 0, marker INTEGER DEFAULT 0, "
|
"intro INTEGER DEFAULT 0, credits INTEGER DEFAULT 0, commercial INTEGER DEFAULT 0, marker INTEGER DEFAULT 0, "
|
||||||
"initial_stream INTEGER DEFAULT 1, write_attempts INTEGER DEFAULT 0, raw_stream_info TEXT, "
|
"initial_stream INTEGER DEFAULT 1, write_attempts INTEGER DEFAULT 0, raw_stream_info TEXT, "
|
||||||
"rating_key_websocket TEXT)"
|
"rating_key_websocket TEXT, "
|
||||||
|
"server_id TEXT)"
|
||||||
)
|
)
|
||||||
|
|
||||||
# sessions_continued table :: This is a temp table that keeps track of continued streaming sessions
|
# sessions_continued table :: This is a temp table that keeps track of continued streaming sessions
|
||||||
c_db.execute(
|
c_db.execute(
|
||||||
"CREATE TABLE IF NOT EXISTS sessions_continued (id INTEGER PRIMARY KEY AUTOINCREMENT, "
|
"CREATE TABLE IF NOT EXISTS sessions_continued (id INTEGER PRIMARY KEY AUTOINCREMENT, "
|
||||||
"user_id INTEGER, machine_id TEXT, media_type TEXT, stopped INTEGER)"
|
"user_id INTEGER, machine_id TEXT, media_type TEXT, stopped INTEGER, server_id TEXT)"
|
||||||
)
|
)
|
||||||
|
|
||||||
# session_history table :: This is a history table which logs essential stream details
|
# session_history table :: This is a history table which logs essential stream details
|
||||||
|
@ -679,7 +680,7 @@ def dbcheck():
|
||||||
"platform TEXT, platform_version TEXT, profile TEXT, machine_id TEXT, "
|
"platform TEXT, platform_version TEXT, profile TEXT, machine_id TEXT, "
|
||||||
"bandwidth INTEGER, location TEXT, quality_profile TEXT, secure INTEGER, relayed INTEGER, "
|
"bandwidth INTEGER, location TEXT, quality_profile TEXT, secure INTEGER, relayed INTEGER, "
|
||||||
"parent_rating_key INTEGER, grandparent_rating_key INTEGER, media_type TEXT, section_id INTEGER, "
|
"parent_rating_key INTEGER, grandparent_rating_key INTEGER, media_type TEXT, section_id INTEGER, "
|
||||||
"view_offset INTEGER DEFAULT 0)"
|
"view_offset INTEGER DEFAULT 0, server_id TEXT)"
|
||||||
)
|
)
|
||||||
|
|
||||||
# session_history_media_info table :: This is a table which logs each session"s media info
|
# session_history_media_info table :: This is a table which logs each session"s media info
|
||||||
|
@ -705,7 +706,7 @@ def dbcheck():
|
||||||
"stream_subtitle_decision TEXT, stream_subtitle_codec TEXT, "
|
"stream_subtitle_decision TEXT, stream_subtitle_codec TEXT, "
|
||||||
"stream_subtitle_container TEXT, stream_subtitle_forced INTEGER, stream_subtitle_language TEXT, "
|
"stream_subtitle_container TEXT, stream_subtitle_forced INTEGER, stream_subtitle_language TEXT, "
|
||||||
"synced_version INTEGER, synced_version_profile TEXT, "
|
"synced_version INTEGER, synced_version_profile TEXT, "
|
||||||
"optimized_version INTEGER, optimized_version_profile TEXT, optimized_version_title TEXT)"
|
"optimized_version INTEGER, optimized_version_profile TEXT, optimized_version_title TEXT, server_id TEXT)"
|
||||||
)
|
)
|
||||||
|
|
||||||
# session_history_metadata table :: This is a table which logs each session"s media metadata
|
# session_history_metadata table :: This is a table which logs each session"s media metadata
|
||||||
|
@ -719,7 +720,7 @@ def dbcheck():
|
||||||
"last_viewed_at INTEGER, content_rating TEXT, summary TEXT, tagline TEXT, rating TEXT, "
|
"last_viewed_at INTEGER, content_rating TEXT, summary TEXT, tagline TEXT, rating TEXT, "
|
||||||
"duration INTEGER DEFAULT 0, guid TEXT, directors TEXT, writers TEXT, actors TEXT, genres TEXT, studio TEXT, "
|
"duration INTEGER DEFAULT 0, guid TEXT, directors TEXT, writers TEXT, actors TEXT, genres TEXT, studio TEXT, "
|
||||||
"labels TEXT, live INTEGER DEFAULT 0, channel_call_sign TEXT, channel_identifier TEXT, channel_thumb TEXT, "
|
"labels TEXT, live INTEGER DEFAULT 0, channel_call_sign TEXT, channel_identifier TEXT, channel_thumb TEXT, "
|
||||||
"marker_credits_first INTEGER DEFAULT NULL, marker_credits_final INTEGER DEFAULT NULL)"
|
"marker_credits_first INTEGER DEFAULT NULL, marker_credits_final INTEGER DEFAULT NULL, server_id TEXT)"
|
||||||
)
|
)
|
||||||
|
|
||||||
# users table :: This table keeps record of the friends list
|
# users table :: This table keeps record of the friends list
|
||||||
|
@ -731,7 +732,8 @@ def dbcheck():
|
||||||
"is_allow_sync INTEGER DEFAULT NULL, is_restricted INTEGER DEFAULT NULL, "
|
"is_allow_sync INTEGER DEFAULT NULL, is_restricted INTEGER DEFAULT NULL, "
|
||||||
"do_notify INTEGER DEFAULT 1, keep_history INTEGER DEFAULT 1, deleted_user INTEGER DEFAULT 0, "
|
"do_notify INTEGER DEFAULT 1, keep_history INTEGER DEFAULT 1, deleted_user INTEGER DEFAULT 0, "
|
||||||
"allow_guest INTEGER DEFAULT 0, user_token TEXT, server_token TEXT, shared_libraries TEXT, "
|
"allow_guest INTEGER DEFAULT 0, user_token TEXT, server_token TEXT, shared_libraries TEXT, "
|
||||||
"filter_all TEXT, filter_movies TEXT, filter_tv TEXT, filter_music TEXT, filter_photos TEXT)"
|
"filter_all TEXT, filter_movies TEXT, filter_tv TEXT, filter_music TEXT, filter_photos TEXT, "
|
||||||
|
"server_id TEXT )"
|
||||||
)
|
)
|
||||||
|
|
||||||
# library_sections table :: This table keeps record of the servers library sections
|
# library_sections table :: This table keeps record of the servers library sections
|
||||||
|
@ -813,7 +815,7 @@ def dbcheck():
|
||||||
"CREATE TABLE IF NOT EXISTS recently_added (id INTEGER PRIMARY KEY AUTOINCREMENT, "
|
"CREATE TABLE IF NOT EXISTS recently_added (id INTEGER PRIMARY KEY AUTOINCREMENT, "
|
||||||
"added_at INTEGER, pms_identifier TEXT, section_id INTEGER, "
|
"added_at INTEGER, pms_identifier TEXT, section_id INTEGER, "
|
||||||
"rating_key INTEGER, parent_rating_key INTEGER, grandparent_rating_key INTEGER, media_type TEXT, "
|
"rating_key INTEGER, parent_rating_key INTEGER, grandparent_rating_key INTEGER, media_type TEXT, "
|
||||||
"media_info TEXT)"
|
"media_info TEXT, server_id TEXT)"
|
||||||
)
|
)
|
||||||
|
|
||||||
# mobile_devices table :: This table keeps record of devices linked with the mobile app
|
# mobile_devices table :: This table keeps record of devices linked with the mobile app
|
||||||
|
|
|
@ -32,7 +32,7 @@ if plexpy.PYTHON2:
|
||||||
import helpers
|
import helpers
|
||||||
import logger
|
import logger
|
||||||
import notification_handler
|
import notification_handler
|
||||||
import pmsconnect
|
import server_manager
|
||||||
else:
|
else:
|
||||||
from plexpy import activity_processor
|
from plexpy import activity_processor
|
||||||
from plexpy import common
|
from plexpy import common
|
||||||
|
@ -40,7 +40,7 @@ else:
|
||||||
from plexpy import helpers
|
from plexpy import helpers
|
||||||
from plexpy import logger
|
from plexpy import logger
|
||||||
from plexpy import notification_handler
|
from plexpy import notification_handler
|
||||||
from plexpy import pmsconnect
|
from plexpy import server_manager
|
||||||
|
|
||||||
|
|
||||||
ACTIVITY_SCHED = None
|
ACTIVITY_SCHED = None
|
||||||
|
@ -78,14 +78,14 @@ class ActivityHandler(object):
|
||||||
def get_metadata(self, skip_cache=False):
|
def get_metadata(self, skip_cache=False):
|
||||||
if self.metadata is None:
|
if self.metadata is None:
|
||||||
cache_key = None if skip_cache else self.session_key
|
cache_key = None if skip_cache else self.session_key
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
for pms_connect in server_manager.ServerManger().get_server_list():
|
||||||
metadata = pms_connect.get_metadata_details(rating_key=self.rating_key, cache_key=cache_key)
|
metadata = pms_connect.get_metadata_details(rating_key=self.rating_key, cache_key=cache_key)
|
||||||
|
|
||||||
if metadata:
|
if metadata:
|
||||||
self.metadata = metadata
|
self.metadata = metadata
|
||||||
|
|
||||||
def get_live_session(self, skip_cache=False):
|
def get_live_session(self, skip_cache=False):
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
for pms_connect in server_manager.ServerManger().get_server_list():
|
||||||
session_list = pms_connect.get_current_activity(skip_cache=skip_cache)
|
session_list = pms_connect.get_current_activity(skip_cache=skip_cache)
|
||||||
|
|
||||||
if session_list:
|
if session_list:
|
||||||
|
@ -552,7 +552,7 @@ class ReachabilityHandler(object):
|
||||||
self.is_reachable = self.data.get('reachable', False)
|
self.is_reachable = self.data.get('reachable', False)
|
||||||
|
|
||||||
def remote_access_enabled(self):
|
def remote_access_enabled(self):
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
for pms_connect in server_manager.ServerManger().get_server_list():
|
||||||
pref = pms_connect.get_server_pref(pref='PublishServerOnPlexOnlineKey')
|
pref = pms_connect.get_server_pref(pref='PublishServerOnPlexOnlineKey')
|
||||||
return helpers.bool_true(pref)
|
return helpers.bool_true(pref)
|
||||||
|
|
||||||
|
@ -571,7 +571,7 @@ class ReachabilityHandler(object):
|
||||||
if self.is_reachable and plexpy.PLEX_REMOTE_ACCESS_UP:
|
if self.is_reachable and plexpy.PLEX_REMOTE_ACCESS_UP:
|
||||||
return
|
return
|
||||||
|
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
for pms_connect in server_manager.ServerManger().get_server_list():
|
||||||
server_response = pms_connect.get_server_response()
|
server_response = pms_connect.get_server_response()
|
||||||
|
|
||||||
if not server_response:
|
if not server_response:
|
||||||
|
@ -702,7 +702,7 @@ def clear_recently_added_queue(rating_key, title):
|
||||||
|
|
||||||
|
|
||||||
def on_created(rating_key, **kwargs):
|
def on_created(rating_key, **kwargs):
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
for pms_connect in server_manager.ServerManger().get_server_list():
|
||||||
metadata = pms_connect.get_metadata_details(rating_key)
|
metadata = pms_connect.get_metadata_details(rating_key)
|
||||||
|
|
||||||
logger.debug("Tautulli TimelineHandler :: Library item '%s' (%s) added to Plex.",
|
logger.debug("Tautulli TimelineHandler :: Library item '%s' (%s) added to Plex.",
|
||||||
|
|
|
@ -28,8 +28,8 @@ if plexpy.PYTHON2:
|
||||||
import logger
|
import logger
|
||||||
import notification_handler
|
import notification_handler
|
||||||
import plextv
|
import plextv
|
||||||
import pmsconnect
|
|
||||||
import web_socket
|
import web_socket
|
||||||
|
import server_manager
|
||||||
else:
|
else:
|
||||||
from plexpy import activity_handler
|
from plexpy import activity_handler
|
||||||
from plexpy import activity_processor
|
from plexpy import activity_processor
|
||||||
|
@ -39,8 +39,9 @@ else:
|
||||||
from plexpy import logger
|
from plexpy import logger
|
||||||
from plexpy import notification_handler
|
from plexpy import notification_handler
|
||||||
from plexpy import plextv
|
from plexpy import plextv
|
||||||
from plexpy import pmsconnect
|
|
||||||
from plexpy import web_socket
|
from plexpy import web_socket
|
||||||
|
from plexpy import server_manager
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
monitor_lock = threading.Lock()
|
monitor_lock = threading.Lock()
|
||||||
|
@ -60,7 +61,8 @@ def check_active_sessions(ws_request=False):
|
||||||
for stream in db_streams:
|
for stream in db_streams:
|
||||||
activity_handler.delete_metadata_cache(stream['session_key'])
|
activity_handler.delete_metadata_cache(stream['session_key'])
|
||||||
|
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
session_list = []
|
||||||
|
for pms_connect in server_manager.ServerManger().get_server_list():
|
||||||
session_list = pms_connect.get_current_activity()
|
session_list = pms_connect.get_current_activity()
|
||||||
|
|
||||||
logger.debug("Tautulli Monitor :: Checking for active streams.")
|
logger.debug("Tautulli Monitor :: Checking for active streams.")
|
||||||
|
|
|
@ -26,15 +26,15 @@ if plexpy.PYTHON2:
|
||||||
import helpers
|
import helpers
|
||||||
import libraries
|
import libraries
|
||||||
import logger
|
import logger
|
||||||
import pmsconnect
|
|
||||||
import users
|
import users
|
||||||
|
import server_manager
|
||||||
else:
|
else:
|
||||||
from plexpy import database
|
from plexpy import database
|
||||||
from plexpy import helpers
|
from plexpy import helpers
|
||||||
from plexpy import libraries
|
from plexpy import libraries
|
||||||
from plexpy import logger
|
from plexpy import logger
|
||||||
from plexpy import pmsconnect
|
|
||||||
from plexpy import users
|
from plexpy import users
|
||||||
|
from plexpy import server_manager
|
||||||
|
|
||||||
|
|
||||||
class ActivityProcessor(object):
|
class ActivityProcessor(object):
|
||||||
|
@ -273,7 +273,8 @@ class ActivityProcessor(object):
|
||||||
# Fetch metadata first so we can return false if it fails
|
# Fetch metadata first so we can return false if it fails
|
||||||
if not is_import:
|
if not is_import:
|
||||||
logger.debug("Tautulli ActivityProcessor :: Fetching metadata for item ratingKey %s" % session['rating_key'])
|
logger.debug("Tautulli ActivityProcessor :: Fetching metadata for item ratingKey %s" % session['rating_key'])
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
|
||||||
|
for pms_connect in server_manager.ServerManger().get_server_list():
|
||||||
if session['live']:
|
if session['live']:
|
||||||
metadata = pms_connect.get_metadata_details(rating_key=str(session['rating_key']),
|
metadata = pms_connect.get_metadata_details(rating_key=str(session['rating_key']),
|
||||||
cache_key=session['session_key'],
|
cache_key=session['session_key'],
|
||||||
|
|
|
@ -32,7 +32,7 @@ if plexpy.PYTHON2:
|
||||||
import libraries
|
import libraries
|
||||||
import helpers
|
import helpers
|
||||||
import logger
|
import logger
|
||||||
import pmsconnect
|
import server_manager
|
||||||
import session
|
import session
|
||||||
import users
|
import users
|
||||||
else:
|
else:
|
||||||
|
@ -42,7 +42,7 @@ else:
|
||||||
from plexpy import datatables
|
from plexpy import datatables
|
||||||
from plexpy import helpers
|
from plexpy import helpers
|
||||||
from plexpy import logger
|
from plexpy import logger
|
||||||
from plexpy import pmsconnect
|
from plexpy import server_manager
|
||||||
from plexpy import session
|
from plexpy import session
|
||||||
from plexpy import users
|
from plexpy import users
|
||||||
|
|
||||||
|
@ -1214,9 +1214,9 @@ class DataFactory(object):
|
||||||
group_by = 'session_history.reference_id' if grouping else 'session_history.id'
|
group_by = 'session_history.reference_id' if grouping else 'session_history.id'
|
||||||
|
|
||||||
if media_type in ('collection', 'playlist'):
|
if media_type in ('collection', 'playlist'):
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
for pms_connect in server_manager.ServerManger().get_server_list():
|
||||||
result = pms_connect.get_item_children(rating_key=rating_key, media_type=media_type)
|
result += pms_connect.get_item_children(rating_key=rating_key, media_type=media_type)
|
||||||
rating_keys = [child['rating_key'] for child in result['children_list']]
|
rating_keys += [child['rating_key'] for child in result['children_list']]
|
||||||
else:
|
else:
|
||||||
rating_keys = [rating_key]
|
rating_keys = [rating_key]
|
||||||
|
|
||||||
|
@ -1298,9 +1298,9 @@ class DataFactory(object):
|
||||||
group_by = 'session_history.reference_id' if grouping else 'session_history.id'
|
group_by = 'session_history.reference_id' if grouping else 'session_history.id'
|
||||||
|
|
||||||
if media_type in ('collection', 'playlist'):
|
if media_type in ('collection', 'playlist'):
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
for pms_connect in server_manager.ServerManger().get_server_list():
|
||||||
result = pms_connect.get_item_children(rating_key=rating_key, media_type=media_type)
|
result += pms_connect.get_item_children(rating_key=rating_key, media_type=media_type)
|
||||||
rating_keys = [child['rating_key'] for child in result['children_list']]
|
rating_keys += [child['rating_key'] for child in result['children_list']]
|
||||||
else:
|
else:
|
||||||
rating_keys = [rating_key]
|
rating_keys = [rating_key]
|
||||||
|
|
||||||
|
@ -2029,8 +2029,8 @@ class DataFactory(object):
|
||||||
|
|
||||||
return key_list
|
return key_list
|
||||||
|
|
||||||
def update_metadata(self, old_key_list='', new_key_list='', media_type='', single_update=False):
|
def update_metadata(self, old_key_list='', new_key_list='', media_type='', single_update=False, server_id=None):
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
pms_connect = server_manager.ServerManger().get_server(server_id=server_id)
|
||||||
monitor_db = database.MonitorDatabase()
|
monitor_db = database.MonitorDatabase()
|
||||||
|
|
||||||
# function to map rating keys pairs
|
# function to map rating keys pairs
|
||||||
|
@ -2400,10 +2400,10 @@ class DataFactory(object):
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def set_recently_added_item(self, rating_key=''):
|
def set_recently_added_item(self, rating_key='', server_id=None):
|
||||||
monitor_db = database.MonitorDatabase()
|
monitor_db = database.MonitorDatabase()
|
||||||
|
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
pms_connect = server_manager.ServerManger().get_server(server_id=server_id)
|
||||||
metadata = pms_connect.get_metadata_details(rating_key)
|
metadata = pms_connect.get_metadata_details(rating_key)
|
||||||
|
|
||||||
keys = {'rating_key': metadata['rating_key']}
|
keys = {'rating_key': metadata['rating_key']}
|
||||||
|
|
|
@ -1578,7 +1578,7 @@ def page(endpoint, *args, **kwargs):
|
||||||
|
|
||||||
def pms_image_proxy(img=None, rating_key=None, width=None, height=None,
|
def pms_image_proxy(img=None, rating_key=None, width=None, height=None,
|
||||||
opacity=None, background=None, blur=None, img_format=None,
|
opacity=None, background=None, blur=None, img_format=None,
|
||||||
fallback=None, refresh=None, clip=None):
|
fallback=None, refresh=None, clip=None, server_id=None):
|
||||||
params = {}
|
params = {}
|
||||||
|
|
||||||
if img is not None:
|
if img is not None:
|
||||||
|
@ -1603,11 +1603,13 @@ def pms_image_proxy(img=None, rating_key=None, width=None, height=None,
|
||||||
params['refresh'] = 'true'
|
params['refresh'] = 'true'
|
||||||
if clip is not None:
|
if clip is not None:
|
||||||
params['clip'] = 'true'
|
params['clip'] = 'true'
|
||||||
|
if server_id is not None:
|
||||||
|
params['server_id'] = server_id
|
||||||
|
|
||||||
return params
|
return params
|
||||||
|
|
||||||
|
|
||||||
def info_page(rating_key=None, guid=None, history=None, live=None):
|
def info_page(rating_key=None, guid=None, history=None, live=None, server_id=None):
|
||||||
params = {}
|
params = {}
|
||||||
|
|
||||||
if live and history:
|
if live and history:
|
||||||
|
@ -1618,15 +1620,21 @@ def info_page(rating_key=None, guid=None, history=None, live=None):
|
||||||
if history:
|
if history:
|
||||||
params['source'] = 'history'
|
params['source'] = 'history'
|
||||||
|
|
||||||
|
if server_id is not None:
|
||||||
|
params['server_id'] = server_id
|
||||||
|
|
||||||
return params
|
return params
|
||||||
|
|
||||||
|
|
||||||
def library_page(section_id=None):
|
def library_page(section_id=None, server_id=None):
|
||||||
params = {}
|
params = {}
|
||||||
|
|
||||||
if section_id is not None:
|
if section_id is not None:
|
||||||
params['section_id'] = section_id
|
params['section_id'] = section_id
|
||||||
|
|
||||||
|
if server_id is not None:
|
||||||
|
params['server_id'] = server_id
|
||||||
|
|
||||||
return params
|
return params
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -32,9 +32,9 @@ if plexpy.PYTHON2:
|
||||||
import helpers
|
import helpers
|
||||||
import logger
|
import logger
|
||||||
import plextv
|
import plextv
|
||||||
import pmsconnect
|
|
||||||
import session
|
import session
|
||||||
import users
|
import users
|
||||||
|
import server_manager
|
||||||
from plex import Plex
|
from plex import Plex
|
||||||
else:
|
else:
|
||||||
from plexpy import common
|
from plexpy import common
|
||||||
|
@ -43,21 +43,24 @@ else:
|
||||||
from plexpy import helpers
|
from plexpy import helpers
|
||||||
from plexpy import logger
|
from plexpy import logger
|
||||||
from plexpy import plextv
|
from plexpy import plextv
|
||||||
from plexpy import pmsconnect
|
|
||||||
from plexpy import session
|
from plexpy import session
|
||||||
from plexpy import users
|
from plexpy import users
|
||||||
|
from plexpy import server_manager
|
||||||
from plexpy.plex import Plex
|
from plexpy.plex import Plex
|
||||||
|
|
||||||
|
|
||||||
def refresh_libraries():
|
def refresh_libraries():
|
||||||
logger.info("Tautulli Libraries :: Requesting libraries list refresh...")
|
logger.info("Tautulli Libraries :: Requesting libraries list refresh...")
|
||||||
|
|
||||||
server_id = plexpy.CONFIG.PMS_IDENTIFIER
|
passed = True
|
||||||
|
|
||||||
|
for server in server_manager.ServerManger().get_server_list():
|
||||||
|
library_sections = server.get_library_details()
|
||||||
|
|
||||||
|
server_id = server.get_server_identity()["machine_identifier"]
|
||||||
if not server_id:
|
if not server_id:
|
||||||
logger.error("Tautulli Libraries :: No PMS identifier, cannot refresh libraries. Verify server in settings.")
|
logger.error("Tautulli Libraries :: No PMS identifier, cannot refresh libraries. Verify server in settings.")
|
||||||
return
|
continue
|
||||||
|
|
||||||
library_sections = pmsconnect.PmsConnect().get_library_details()
|
|
||||||
|
|
||||||
if library_sections:
|
if library_sections:
|
||||||
monitor_db = database.MonitorDatabase()
|
monitor_db = database.MonitorDatabase()
|
||||||
|
@ -95,19 +98,20 @@ def refresh_libraries():
|
||||||
|
|
||||||
add_live_tv_library(refresh=True)
|
add_live_tv_library(refresh=True)
|
||||||
|
|
||||||
query = "UPDATE library_sections SET is_active = 0 WHERE server_id != ? OR " \
|
# query = "UPDATE library_sections SET is_active = 0 WHERE server_id != ? OR " \
|
||||||
"section_id NOT IN ({})".format(", ".join(["?"] * len(section_ids)))
|
# "section_id NOT IN ({})".format(", ".join(["?"] * len(section_ids)))
|
||||||
monitor_db.action(query=query, args=[plexpy.CONFIG.PMS_IDENTIFIER] + section_ids)
|
# monitor_db.action(query=query, args=[plexpy.CONFIG.PMS_IDENTIFIER] + section_ids)
|
||||||
|
|
||||||
new_keys = plexpy.CONFIG.HOME_LIBRARY_CARDS + new_keys
|
new_keys = plexpy.CONFIG.HOME_LIBRARY_CARDS + new_keys
|
||||||
plexpy.CONFIG.__setattr__('HOME_LIBRARY_CARDS', new_keys)
|
plexpy.CONFIG.__setattr__('HOME_LIBRARY_CARDS', new_keys)
|
||||||
plexpy.CONFIG.write()
|
plexpy.CONFIG.write()
|
||||||
|
|
||||||
logger.info("Tautulli Libraries :: Libraries list refreshed.")
|
logger.info("Tautulli Libraries :: Libraries list refreshed.")
|
||||||
return True
|
|
||||||
else:
|
else:
|
||||||
logger.warn("Tautulli Libraries :: Unable to refresh libraries list.")
|
logger.warn("Tautulli Libraries :: Unable to refresh libraries list.")
|
||||||
return False
|
passed = False
|
||||||
|
|
||||||
|
return passed
|
||||||
|
|
||||||
|
|
||||||
def add_live_tv_library(refresh=False):
|
def add_live_tv_library(refresh=False):
|
||||||
|
@ -439,7 +443,8 @@ class Libraries(object):
|
||||||
'do_notify': item['do_notify'],
|
'do_notify': item['do_notify'],
|
||||||
'do_notify_created': item['do_notify_created'],
|
'do_notify_created': item['do_notify_created'],
|
||||||
'keep_history': item['keep_history'],
|
'keep_history': item['keep_history'],
|
||||||
'is_active': item['is_active']
|
'is_active': item['is_active'],
|
||||||
|
'server_id': item['server_id']
|
||||||
}
|
}
|
||||||
|
|
||||||
rows.append(row)
|
rows.append(row)
|
||||||
|
@ -519,9 +524,8 @@ class Libraries(object):
|
||||||
|
|
||||||
# If no cache was imported, get all library children items
|
# If no cache was imported, get all library children items
|
||||||
cached_items = {d['rating_key']: d['file_size'] for d in rows} if not refresh else {}
|
cached_items = {d['rating_key']: d['file_size'] for d in rows} if not refresh else {}
|
||||||
|
for pms_connect in server_manager.ServerManger().get_server_list():
|
||||||
if refresh or not rows:
|
if refresh or not rows:
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
|
||||||
|
|
||||||
if rating_key:
|
if rating_key:
|
||||||
library_children = pms_connect.get_library_children_details(rating_key=rating_key,
|
library_children = pms_connect.get_library_children_details(rating_key=rating_key,
|
||||||
|
@ -670,8 +674,7 @@ class Libraries(object):
|
||||||
elif section_id:
|
elif section_id:
|
||||||
logger.debug("Tautulli Libraries :: Fetting file sizes for section_id %s." % section_id)
|
logger.debug("Tautulli Libraries :: Fetting file sizes for section_id %s." % section_id)
|
||||||
|
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
for pms_connect in server_manager.ServerManger().get_server_list():
|
||||||
|
|
||||||
for item in rows:
|
for item in rows:
|
||||||
if item['rating_key'] and not item['file_size']:
|
if item['rating_key'] and not item['file_size']:
|
||||||
file_size = 0
|
file_size = 0
|
||||||
|
@ -1018,7 +1021,7 @@ class Libraries(object):
|
||||||
|
|
||||||
return session.mask_session_info(user_stats, mask_metadata=False)
|
return session.mask_session_info(user_stats, mask_metadata=False)
|
||||||
|
|
||||||
def get_recently_watched(self, section_id=None, limit='10'):
|
def get_recently_watched(self, section_id=None, limit='10', server_id=None):
|
||||||
if not session.allow_session_library(section_id):
|
if not session.allow_session_library(section_id):
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
@ -1037,7 +1040,7 @@ class Libraries(object):
|
||||||
"year, originally_available_at, added_at, live, started, user, content_rating, labels, section_id " \
|
"year, originally_available_at, added_at, live, started, user, content_rating, labels, section_id " \
|
||||||
"FROM session_history_metadata " \
|
"FROM session_history_metadata " \
|
||||||
"JOIN session_history ON session_history_metadata.id = session_history.id " \
|
"JOIN session_history ON session_history_metadata.id = session_history.id " \
|
||||||
"WHERE section_id = ? " \
|
"WHERE section_id = ? and server_id = '" + server_id + "' " \
|
||||||
"GROUP BY session_history.rating_key " \
|
"GROUP BY session_history.rating_key " \
|
||||||
"ORDER BY MAX(started) DESC LIMIT ?"
|
"ORDER BY MAX(started) DESC LIMIT ?"
|
||||||
result = monitor_db.select(query, args=[section_id, limit])
|
result = monitor_db.select(query, args=[section_id, limit])
|
||||||
|
@ -1075,6 +1078,7 @@ class Libraries(object):
|
||||||
'user': row['user'],
|
'user': row['user'],
|
||||||
'section_id': row['section_id'],
|
'section_id': row['section_id'],
|
||||||
'content_rating': row['content_rating'],
|
'content_rating': row['content_rating'],
|
||||||
|
'server_id': row['server_id'],
|
||||||
'labels': row['labels'].split(';') if row['labels'] else (),
|
'labels': row['labels'].split(';') if row['labels'] else (),
|
||||||
}
|
}
|
||||||
recently_watched.append(recent_output)
|
recently_watched.append(recent_output)
|
||||||
|
|
|
@ -37,7 +37,7 @@ if plexpy.PYTHON2:
|
||||||
import libraries
|
import libraries
|
||||||
import logger
|
import logger
|
||||||
import newsletter_handler
|
import newsletter_handler
|
||||||
import pmsconnect
|
import server_manager
|
||||||
from notifiers import send_notification, EMAIL
|
from notifiers import send_notification, EMAIL
|
||||||
else:
|
else:
|
||||||
from plexpy import common
|
from plexpy import common
|
||||||
|
@ -46,7 +46,7 @@ else:
|
||||||
from plexpy import libraries
|
from plexpy import libraries
|
||||||
from plexpy import logger
|
from plexpy import logger
|
||||||
from plexpy import newsletter_handler
|
from plexpy import newsletter_handler
|
||||||
from plexpy import pmsconnect
|
from plexpy import server_manager
|
||||||
from plexpy.notifiers import send_notification, EMAIL
|
from plexpy.notifiers import send_notification, EMAIL
|
||||||
|
|
||||||
|
|
||||||
|
@ -706,7 +706,7 @@ class RecentlyAdded(Newsletter):
|
||||||
def _get_recently_added(self, media_type=None):
|
def _get_recently_added(self, media_type=None):
|
||||||
from plexpy.notification_handler import format_group_index
|
from plexpy.notification_handler import format_group_index
|
||||||
|
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
for pms_connect in server_manager.ServerManger().get_server_list():
|
||||||
|
|
||||||
recently_added = []
|
recently_added = []
|
||||||
done = False
|
done = False
|
||||||
|
@ -733,7 +733,7 @@ class RecentlyAdded(Newsletter):
|
||||||
if self.start_time < helpers.cast_to_int(item['added_at']) < self.end_time:
|
if self.start_time < helpers.cast_to_int(item['added_at']) < self.end_time:
|
||||||
movie_list.append(item)
|
movie_list.append(item)
|
||||||
|
|
||||||
recently_added = movie_list
|
recently_added += movie_list
|
||||||
|
|
||||||
if media_type == 'show':
|
if media_type == 'show':
|
||||||
shows_list = []
|
shows_list = []
|
||||||
|
@ -783,7 +783,7 @@ class RecentlyAdded(Newsletter):
|
||||||
shows_list.append(show_metadata)
|
shows_list.append(show_metadata)
|
||||||
show_rating_keys.append(show_rating_key)
|
show_rating_keys.append(show_rating_key)
|
||||||
|
|
||||||
recently_added = shows_list
|
recently_added += shows_list
|
||||||
|
|
||||||
if media_type == 'artist':
|
if media_type == 'artist':
|
||||||
artists_list = []
|
artists_list = []
|
||||||
|
@ -824,7 +824,7 @@ class RecentlyAdded(Newsletter):
|
||||||
artists_list.append(artist_metadata)
|
artists_list.append(artist_metadata)
|
||||||
artist_rating_keys.append(artist_rating_key)
|
artist_rating_keys.append(artist_rating_key)
|
||||||
|
|
||||||
recently_added = artists_list
|
recently_added += artists_list
|
||||||
|
|
||||||
return recently_added
|
return recently_added
|
||||||
|
|
||||||
|
|
|
@ -47,8 +47,8 @@ if plexpy.PYTHON2:
|
||||||
import logger
|
import logger
|
||||||
import helpers
|
import helpers
|
||||||
import notifiers
|
import notifiers
|
||||||
import pmsconnect
|
|
||||||
import request
|
import request
|
||||||
|
import server_manager
|
||||||
from newsletter_handler import notify as notify_newsletter
|
from newsletter_handler import notify as notify_newsletter
|
||||||
else:
|
else:
|
||||||
from plexpy import activity_processor
|
from plexpy import activity_processor
|
||||||
|
@ -58,8 +58,8 @@ else:
|
||||||
from plexpy import logger
|
from plexpy import logger
|
||||||
from plexpy import helpers
|
from plexpy import helpers
|
||||||
from plexpy import notifiers
|
from plexpy import notifiers
|
||||||
from plexpy import pmsconnect
|
|
||||||
from plexpy import request
|
from plexpy import request
|
||||||
|
from plexpy import server_manager
|
||||||
from plexpy.newsletter_handler import notify as notify_newsletter
|
from plexpy.newsletter_handler import notify as notify_newsletter
|
||||||
|
|
||||||
|
|
||||||
|
@ -180,7 +180,7 @@ def notify_conditions(notify_action=None, stream_data=None, timeline_data=None,
|
||||||
# return False
|
# return False
|
||||||
|
|
||||||
if notify_action == 'on_concurrent':
|
if notify_action == 'on_concurrent':
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
for pms_connect in server_manager.ServerManger().get_server_list():
|
||||||
result = pms_connect.get_current_activity()
|
result = pms_connect.get_current_activity()
|
||||||
|
|
||||||
user_sessions = []
|
user_sessions = []
|
||||||
|
@ -595,16 +595,16 @@ def build_media_notify_params(notify_action=None, session=None, timeline=None, m
|
||||||
|
|
||||||
notify_params.update(media_info)
|
notify_params.update(media_info)
|
||||||
notify_params.update(media_part_info)
|
notify_params.update(media_part_info)
|
||||||
|
for pmsconnect in server_manager.ServerManger().get_server_list():
|
||||||
metadata = pmsconnect.PmsConnect().get_metadata_details(rating_key=rating_key)
|
metadata = pmsconnect.get_metadata_details(rating_key=rating_key)
|
||||||
|
|
||||||
child_metadata = grandchild_metadata = []
|
child_metadata = grandchild_metadata = []
|
||||||
for key in kwargs.pop('child_keys', []):
|
for key in kwargs.pop('child_keys', []):
|
||||||
child = pmsconnect.PmsConnect().get_metadata_details(rating_key=key)
|
child = pmsconnect.get_metadata_details(rating_key=key)
|
||||||
if child:
|
if child:
|
||||||
child_metadata.append(child)
|
child_metadata.append(child)
|
||||||
for key in kwargs.pop('grandchild_keys', []):
|
for key in kwargs.pop('grandchild_keys', []):
|
||||||
grandchild = pmsconnect.PmsConnect().get_metadata_details(rating_key=key)
|
grandchild = pmsconnect.get_metadata_details(rating_key=key)
|
||||||
if grandchild:
|
if grandchild:
|
||||||
grandchild_metadata.append(grandchild)
|
grandchild_metadata.append(grandchild)
|
||||||
|
|
||||||
|
@ -1235,7 +1235,8 @@ def build_server_notify_params(notify_action=None, **kwargs):
|
||||||
date_format = plexpy.CONFIG.DATE_FORMAT.replace('Do','')
|
date_format = plexpy.CONFIG.DATE_FORMAT.replace('Do','')
|
||||||
time_format = plexpy.CONFIG.TIME_FORMAT.replace('Do','')
|
time_format = plexpy.CONFIG.TIME_FORMAT.replace('Do','')
|
||||||
|
|
||||||
update_channel = pmsconnect.PmsConnect().get_server_update_channel()
|
for pmsconnect in server_manager.ServerManger().get_server_list():
|
||||||
|
update_channel = pmsconnect.get_server_update_channel()
|
||||||
|
|
||||||
pms_download_info = defaultdict(str, kwargs.pop('pms_download_info', {}))
|
pms_download_info = defaultdict(str, kwargs.pop('pms_download_info', {}))
|
||||||
plexpy_download_info = defaultdict(str, kwargs.pop('plexpy_download_info', {}))
|
plexpy_download_info = defaultdict(str, kwargs.pop('plexpy_download_info', {}))
|
||||||
|
@ -1551,7 +1552,7 @@ def get_img_info(img=None, rating_key=None, title='', width=1000, height=1500,
|
||||||
img_info = database_img_info[0]
|
img_info = database_img_info[0]
|
||||||
|
|
||||||
elif not database_img_info and img:
|
elif not database_img_info and img:
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
for pms_connect in server_manager.ServerManger().get_server_list():
|
||||||
result = pms_connect.get_image(refresh=True, **image_info)
|
result = pms_connect.get_image(refresh=True, **image_info)
|
||||||
|
|
||||||
if result and result[0]:
|
if result and result[0]:
|
||||||
|
|
|
@ -67,7 +67,7 @@ if plexpy.PYTHON2:
|
||||||
import helpers
|
import helpers
|
||||||
import logger
|
import logger
|
||||||
import mobile_app
|
import mobile_app
|
||||||
import pmsconnect
|
import server_manager
|
||||||
import request
|
import request
|
||||||
import users
|
import users
|
||||||
else:
|
else:
|
||||||
|
@ -76,7 +76,7 @@ else:
|
||||||
from plexpy import helpers
|
from plexpy import helpers
|
||||||
from plexpy import logger
|
from plexpy import logger
|
||||||
from plexpy import mobile_app
|
from plexpy import mobile_app
|
||||||
from plexpy import pmsconnect
|
from plexpy import server_manager
|
||||||
from plexpy import request
|
from plexpy import request
|
||||||
from plexpy import users
|
from plexpy import users
|
||||||
|
|
||||||
|
|
|
@ -603,6 +603,7 @@ class PmsConnect(object):
|
||||||
for guid in m.getElementsByTagName('Guid'):
|
for guid in m.getElementsByTagName('Guid'):
|
||||||
guids.append(helpers.get_xml_attr(guid, 'id'))
|
guids.append(helpers.get_xml_attr(guid, 'id'))
|
||||||
|
|
||||||
|
server_info = self.get_server_info()
|
||||||
recent_item = {'media_type': helpers.get_xml_attr(m, 'type'),
|
recent_item = {'media_type': helpers.get_xml_attr(m, 'type'),
|
||||||
'section_id': helpers.get_xml_attr(m, 'librarySectionID'),
|
'section_id': helpers.get_xml_attr(m, 'librarySectionID'),
|
||||||
'library_name': helpers.get_xml_attr(m, 'librarySectionTitle'),
|
'library_name': helpers.get_xml_attr(m, 'librarySectionTitle'),
|
||||||
|
@ -645,7 +646,8 @@ class PmsConnect(object):
|
||||||
'collections': collections,
|
'collections': collections,
|
||||||
'guids': guids,
|
'guids': guids,
|
||||||
'full_title': helpers.get_xml_attr(m, 'title'),
|
'full_title': helpers.get_xml_attr(m, 'title'),
|
||||||
'child_count': helpers.get_xml_attr(m, 'childCount')
|
'child_count': helpers.get_xml_attr(m, 'childCount'),
|
||||||
|
'server_id': server_info['machine_identifier']
|
||||||
}
|
}
|
||||||
|
|
||||||
recents_list.append(recent_item)
|
recents_list.append(recent_item)
|
||||||
|
@ -2294,6 +2296,7 @@ class PmsConnect(object):
|
||||||
synced_version_profile = ''
|
synced_version_profile = ''
|
||||||
optimized_version_profile = ''
|
optimized_version_profile = ''
|
||||||
|
|
||||||
|
server_info = self.get_server_info()
|
||||||
# Entire session output (single dict for backwards compatibility)
|
# Entire session output (single dict for backwards compatibility)
|
||||||
session_output = {'session_key': session_key,
|
session_output = {'session_key': session_key,
|
||||||
'media_type': media_type,
|
'media_type': media_type,
|
||||||
|
@ -2303,7 +2306,11 @@ class PmsConnect(object):
|
||||||
'synced_version_profile': synced_version_profile,
|
'synced_version_profile': synced_version_profile,
|
||||||
'optimized_version_profile': optimized_version_profile,
|
'optimized_version_profile': optimized_version_profile,
|
||||||
'user': user_details['username'], # Keep for backwards compatibility
|
'user': user_details['username'], # Keep for backwards compatibility
|
||||||
'channel_stream': channel_stream
|
'channel_stream': channel_stream,
|
||||||
|
'server_id': server_info['machine_identifier'],
|
||||||
|
'server_name': server_info['name'],
|
||||||
|
'server_ip': server_info['host'],
|
||||||
|
'server_port': server_info['port'],
|
||||||
}
|
}
|
||||||
|
|
||||||
session_output.update(metadata_details)
|
session_output.update(metadata_details)
|
||||||
|
@ -2492,7 +2499,8 @@ class PmsConnect(object):
|
||||||
'genres': genres,
|
'genres': genres,
|
||||||
'labels': labels,
|
'labels': labels,
|
||||||
'collections': collections,
|
'collections': collections,
|
||||||
'full_title': helpers.get_xml_attr(m, 'title')
|
'full_title': helpers.get_xml_attr(m, 'title'),
|
||||||
|
'server_id': self.get_server_info()['machine_identifier']
|
||||||
}
|
}
|
||||||
children_list.append(children_output)
|
children_list.append(children_output)
|
||||||
|
|
||||||
|
@ -2597,6 +2605,20 @@ class PmsConnect(object):
|
||||||
|
|
||||||
return server_info
|
return server_info
|
||||||
|
|
||||||
|
def get_server_info(self):
|
||||||
|
"""
|
||||||
|
Return the base info of the current pms connection.
|
||||||
|
|
||||||
|
Output: dict
|
||||||
|
"""
|
||||||
|
server_info = {}
|
||||||
|
servers = self.get_servers_info()
|
||||||
|
current = self.get_server_identity()
|
||||||
|
for server in servers:
|
||||||
|
if server['machine_identifier'] == current['machine_identifier']:
|
||||||
|
server_info = server
|
||||||
|
return server_info
|
||||||
|
|
||||||
def get_server_identity(self):
|
def get_server_identity(self):
|
||||||
"""
|
"""
|
||||||
Return the local machine identity.
|
Return the local machine identity.
|
||||||
|
@ -2614,7 +2636,7 @@ class PmsConnect(object):
|
||||||
server_identity = {}
|
server_identity = {}
|
||||||
for a in xml_head:
|
for a in xml_head:
|
||||||
server_identity = {"machine_identifier": helpers.get_xml_attr(a, 'machineIdentifier'),
|
server_identity = {"machine_identifier": helpers.get_xml_attr(a, 'machineIdentifier'),
|
||||||
"version": helpers.get_xml_attr(a, 'version')
|
"version": helpers.get_xml_attr(a, 'version'),
|
||||||
}
|
}
|
||||||
|
|
||||||
return server_identity
|
return server_identity
|
||||||
|
|
44
plexpy/server_manager.py
Normal file
44
plexpy/server_manager.py
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# This file is part of Tautulli.
|
||||||
|
#
|
||||||
|
# Tautulli is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Tautulli is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with Tautulli. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import plexpy
|
||||||
|
if plexpy.PYTHON2:
|
||||||
|
import pmsconnect
|
||||||
|
else:
|
||||||
|
from plexpy import pmsconnect
|
||||||
|
|
||||||
|
class ServerManger(object):
|
||||||
|
"""
|
||||||
|
Return processed and validated library statistics.
|
||||||
|
|
||||||
|
Output: array
|
||||||
|
|
||||||
|
"""
|
||||||
|
def get_server_list(self):
|
||||||
|
pmsServers = []
|
||||||
|
for server in pmsconnect.PmsConnect().get_servers_info():
|
||||||
|
url = 'http://{hostname}:{port}'.format(hostname=server["host"], port=server["port"])
|
||||||
|
pmsServers.append(pmsconnect.PmsConnect(url=url))
|
||||||
|
return pmsServers
|
||||||
|
|
||||||
|
def get_server(self, server_id):
|
||||||
|
if server_id is not None:
|
||||||
|
for server in pmsconnect.PmsConnect().get_servers_info():
|
||||||
|
if server['machine_identifier'] == server_id:
|
||||||
|
url = 'http://{hostname}:{port}'.format(hostname=server["host"], port=server["port"])
|
||||||
|
return pmsconnect.PmsConnect(url=url)
|
||||||
|
return None
|
|
@ -35,12 +35,14 @@ if plexpy.PYTHON2:
|
||||||
import activity_processor
|
import activity_processor
|
||||||
import database
|
import database
|
||||||
import logger
|
import logger
|
||||||
|
import server_manager
|
||||||
else:
|
else:
|
||||||
from plexpy import activity_handler
|
from plexpy import activity_handler
|
||||||
from plexpy import activity_pinger
|
from plexpy import activity_pinger
|
||||||
from plexpy import activity_processor
|
from plexpy import activity_processor
|
||||||
from plexpy import database
|
from plexpy import database
|
||||||
from plexpy import logger
|
from plexpy import logger
|
||||||
|
from plexpy import server_manager
|
||||||
|
|
||||||
|
|
||||||
name = 'websocket'
|
name = 'websocket'
|
||||||
|
|
|
@ -76,6 +76,7 @@ if plexpy.PYTHON2:
|
||||||
import versioncheck
|
import versioncheck
|
||||||
import web_socket
|
import web_socket
|
||||||
import webstart
|
import webstart
|
||||||
|
import server_manager
|
||||||
from api2 import API2
|
from api2 import API2
|
||||||
from helpers import checked, addtoapi, get_ip, create_https_certificates, build_datatables_json, sanitize_out
|
from helpers import checked, addtoapi, get_ip, create_https_certificates, build_datatables_json, sanitize_out
|
||||||
from session import get_session_info, get_session_user_id, allow_session_user, allow_session_library
|
from session import get_session_info, get_session_user_id, allow_session_user, allow_session_library
|
||||||
|
@ -111,6 +112,7 @@ else:
|
||||||
from plexpy import versioncheck
|
from plexpy import versioncheck
|
||||||
from plexpy import web_socket
|
from plexpy import web_socket
|
||||||
from plexpy import webstart
|
from plexpy import webstart
|
||||||
|
from plexpy import server_manager
|
||||||
from plexpy.api2 import API2
|
from plexpy.api2 import API2
|
||||||
from plexpy.helpers import checked, addtoapi, get_ip, create_https_certificates, build_datatables_json, sanitize_out
|
from plexpy.helpers import checked, addtoapi, get_ip, create_https_certificates, build_datatables_json, sanitize_out
|
||||||
from plexpy.session import get_session_info, get_session_user_id, allow_session_user, allow_session_library
|
from plexpy.session import get_session_info, get_session_user_id, allow_session_user, allow_session_library
|
||||||
|
@ -141,7 +143,7 @@ def serve_template(template_name, **kwargs):
|
||||||
try:
|
try:
|
||||||
template = TEMPLATE_LOOKUP.get_template(template_name)
|
template = TEMPLATE_LOOKUP.get_template(template_name)
|
||||||
return template.render(http_root=http_root, server_name=server_name, cache_param=cache_param,
|
return template.render(http_root=http_root, server_name=server_name, cache_param=cache_param,
|
||||||
_session=_session, **kwargs)
|
_session=_session, server_id="test2", **kwargs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception("WebUI :: Mako template render error: %s" % e)
|
logger.exception("WebUI :: Mako template render error: %s" % e)
|
||||||
return mako.exceptions.html_error_template().render()
|
return mako.exceptions.html_error_template().render()
|
||||||
|
@ -333,10 +335,17 @@ class WebInterface(object):
|
||||||
@cherrypy.expose
|
@cherrypy.expose
|
||||||
@requireAuth()
|
@requireAuth()
|
||||||
def get_current_activity(self, **kwargs):
|
def get_current_activity(self, **kwargs):
|
||||||
|
result = {
|
||||||
|
'stream_count':0,
|
||||||
|
'sessions': []
|
||||||
|
}
|
||||||
|
|
||||||
pms_connect = pmsconnect.PmsConnect(token=plexpy.CONFIG.PMS_TOKEN)
|
for server in server_manager.ServerManger().get_server_list():
|
||||||
result = pms_connect.get_current_activity()
|
res = server.get_current_activity()
|
||||||
|
if len(res['sessions']) > 0:
|
||||||
|
result['sessions'] += res['sessions']
|
||||||
|
|
||||||
|
result['stream_count'] = len(result['sessions'])
|
||||||
if result:
|
if result:
|
||||||
return serve_template(template_name="current_activity.html", data=result)
|
return serve_template(template_name="current_activity.html", data=result)
|
||||||
else:
|
else:
|
||||||
|
@ -347,9 +356,17 @@ class WebInterface(object):
|
||||||
@requireAuth()
|
@requireAuth()
|
||||||
def get_current_activity_instance(self, session_key=None, **kwargs):
|
def get_current_activity_instance(self, session_key=None, **kwargs):
|
||||||
|
|
||||||
pms_connect = pmsconnect.PmsConnect(token=plexpy.CONFIG.PMS_TOKEN)
|
result = {
|
||||||
result = pms_connect.get_current_activity()
|
'stream_count':0,
|
||||||
|
'sessions': []
|
||||||
|
}
|
||||||
|
|
||||||
|
for server in server_manager.ServerManger().get_server_list():
|
||||||
|
res = server.get_current_activity()
|
||||||
|
if len(res['sessions']) > 0:
|
||||||
|
result['sessions'] += res['sessions']
|
||||||
|
|
||||||
|
result['stream_count'] = len(result['sessions'])
|
||||||
if result:
|
if result:
|
||||||
session = next((s for s in result['sessions'] if s['session_key'] == session_key), None)
|
session = next((s for s in result['sessions'] if s['session_key'] == session_key), None)
|
||||||
return serve_template(template_name="current_activity_instance.html", session=session)
|
return serve_template(template_name="current_activity_instance.html", session=session)
|
||||||
|
@ -360,7 +377,7 @@ class WebInterface(object):
|
||||||
@cherrypy.tools.json_out()
|
@cherrypy.tools.json_out()
|
||||||
@requireAuth(member_of("admin"))
|
@requireAuth(member_of("admin"))
|
||||||
@addtoapi()
|
@addtoapi()
|
||||||
def terminate_session(self, session_key='', session_id='', message='', **kwargs):
|
def terminate_session(self, session_key='', session_id='', message='', server_id=None, **kwargs):
|
||||||
""" Stop a streaming session.
|
""" Stop a streaming session.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -375,7 +392,7 @@ class WebInterface(object):
|
||||||
None
|
None
|
||||||
```
|
```
|
||||||
"""
|
"""
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
pms_connect = server_manager.ServerManger().get_server(server_id=server_id)
|
||||||
result = pms_connect.terminate_session(session_key=session_key, session_id=session_id, message=message)
|
result = pms_connect.terminate_session(session_key=session_key, session_id=session_id, message=message)
|
||||||
|
|
||||||
if isinstance(result, str):
|
if isinstance(result, str):
|
||||||
|
@ -422,14 +439,18 @@ class WebInterface(object):
|
||||||
|
|
||||||
@cherrypy.expose
|
@cherrypy.expose
|
||||||
@requireAuth()
|
@requireAuth()
|
||||||
def get_recently_added(self, count='0', media_type='', **kwargs):
|
def get_recently_added(self, count='0', media_type='', server_id=None, **kwargs):
|
||||||
|
|
||||||
|
results =[]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
for pms_connect in server_manager.ServerManger().get_server_list():
|
||||||
result = pms_connect.get_recently_added_details(count=count, media_type=media_type)
|
results += pms_connect.get_recently_added_details(count=count, media_type=media_type)['recently_added']
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
return serve_template(template_name="recently_added.html", data=None)
|
return serve_template(template_name="recently_added.html", data=None)
|
||||||
|
|
||||||
|
result = {'recently_added': results}
|
||||||
|
|
||||||
if result and 'recently_added' in result:
|
if result and 'recently_added' in result:
|
||||||
return serve_template(template_name="recently_added.html", data=result['recently_added'])
|
return serve_template(template_name="recently_added.html", data=result['recently_added'])
|
||||||
else:
|
else:
|
||||||
|
@ -619,7 +640,7 @@ class WebInterface(object):
|
||||||
|
|
||||||
@cherrypy.expose
|
@cherrypy.expose
|
||||||
@requireAuth()
|
@requireAuth()
|
||||||
def library(self, section_id=None, **kwargs):
|
def library(self, section_id=None, server_id=None, **kwargs):
|
||||||
if not allow_session_library(section_id):
|
if not allow_session_library(section_id):
|
||||||
raise cherrypy.HTTPRedirect(plexpy.HTTP_ROOT)
|
raise cherrypy.HTTPRedirect(plexpy.HTTP_ROOT)
|
||||||
|
|
||||||
|
@ -631,7 +652,7 @@ class WebInterface(object):
|
||||||
if section_id:
|
if section_id:
|
||||||
try:
|
try:
|
||||||
library_data = libraries.Libraries()
|
library_data = libraries.Libraries()
|
||||||
library_details = library_data.get_details(section_id=section_id)
|
library_details = library_data.get_details(section_id=section_id, server_id=server_id)
|
||||||
except:
|
except:
|
||||||
logger.warn("Unable to retrieve library details for section_id %s " % section_id)
|
logger.warn("Unable to retrieve library details for section_id %s " % section_id)
|
||||||
return serve_template(template_name="library.html", title="Library", data=None, config=config)
|
return serve_template(template_name="library.html", title="Library", data=None, config=config)
|
||||||
|
@ -733,13 +754,13 @@ class WebInterface(object):
|
||||||
|
|
||||||
@cherrypy.expose
|
@cherrypy.expose
|
||||||
@requireAuth()
|
@requireAuth()
|
||||||
def library_recently_watched(self, section_id=None, limit='10', **kwargs):
|
def library_recently_watched(self, section_id=None, limit='10', server_id=None, **kwargs):
|
||||||
if not allow_session_library(section_id):
|
if not allow_session_library(section_id):
|
||||||
return serve_template(template_name="user_recently_watched.html", data=None, title="Recently Watched")
|
return serve_template(template_name="user_recently_watched.html", data=None, title="Recently Watched")
|
||||||
|
|
||||||
if section_id:
|
if section_id:
|
||||||
library_data = libraries.Libraries()
|
library_data = libraries.Libraries()
|
||||||
result = library_data.get_recently_watched(section_id=section_id, limit=limit)
|
result = library_data.get_recently_watched(section_id=section_id, limit=limit, server_id=server_id)
|
||||||
else:
|
else:
|
||||||
result = None
|
result = None
|
||||||
|
|
||||||
|
@ -751,12 +772,13 @@ class WebInterface(object):
|
||||||
|
|
||||||
@cherrypy.expose
|
@cherrypy.expose
|
||||||
@requireAuth()
|
@requireAuth()
|
||||||
def library_recently_added(self, section_id=None, limit='10', **kwargs):
|
def library_recently_added(self, section_id=None, limit='10', server_id=None, **kwargs):
|
||||||
if not allow_session_library(section_id):
|
if not allow_session_library(section_id):
|
||||||
return serve_template(template_name="library_recently_added.html", data=None, title="Recently Added")
|
return serve_template(template_name="library_recently_added.html", data=None, title="Recently Added")
|
||||||
|
|
||||||
|
result = []
|
||||||
if section_id:
|
if section_id:
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
pms_connect = server_manager.ServerManger().get_server(server_id=server_id)
|
||||||
result = pms_connect.get_recently_added_details(section_id=section_id, count=limit)
|
result = pms_connect.get_recently_added_details(section_id=section_id, count=limit)
|
||||||
else:
|
else:
|
||||||
result = None
|
result = None
|
||||||
|
@ -1900,7 +1922,7 @@ class WebInterface(object):
|
||||||
@requireAuth()
|
@requireAuth()
|
||||||
@sanitize_out()
|
@sanitize_out()
|
||||||
@addtoapi()
|
@addtoapi()
|
||||||
def get_history(self, user=None, user_id=None, grouping=None, include_activity=None, **kwargs):
|
def get_history(self, user=None, user_id=None, grouping=None, include_activity=None, server_id=None, **kwargs):
|
||||||
""" Get the Tautulli history.
|
""" Get the Tautulli history.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -2017,7 +2039,7 @@ class WebInterface(object):
|
||||||
custom_where.append(['session_history.user', user])
|
custom_where.append(['session_history.user', user])
|
||||||
if 'rating_key' in kwargs:
|
if 'rating_key' in kwargs:
|
||||||
if kwargs.get('media_type') in ('collection', 'playlist') and kwargs.get('rating_key'):
|
if kwargs.get('media_type') in ('collection', 'playlist') and kwargs.get('rating_key'):
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
pms_connect = server_manager.ServerManger().get_server(server_id=server_id)
|
||||||
result = pms_connect.get_item_children(rating_key=kwargs.pop('rating_key'), media_type=kwargs.pop('media_type'))
|
result = pms_connect.get_item_children(rating_key=kwargs.pop('rating_key'), media_type=kwargs.pop('media_type'))
|
||||||
rating_keys = [child['rating_key'] for child in result['children_list']]
|
rating_keys = [child['rating_key'] for child in result['children_list']]
|
||||||
custom_where.append(['session_history_metadata.rating_key OR', rating_keys])
|
custom_where.append(['session_history_metadata.rating_key OR', rating_keys])
|
||||||
|
@ -4385,7 +4407,7 @@ class WebInterface(object):
|
||||||
|
|
||||||
@cherrypy.expose
|
@cherrypy.expose
|
||||||
@requireAuth()
|
@requireAuth()
|
||||||
def info(self, rating_key=None, guid=None, source=None, section_id=None, user_id=None, **kwargs):
|
def info(self, rating_key=None, guid=None, source=None, section_id=None, user_id=None, server_id=None, **kwargs):
|
||||||
if rating_key and not str(rating_key).isdigit():
|
if rating_key and not str(rating_key).isdigit():
|
||||||
raise cherrypy.HTTPRedirect(plexpy.HTTP_ROOT)
|
raise cherrypy.HTTPRedirect(plexpy.HTTP_ROOT)
|
||||||
|
|
||||||
|
@ -4404,8 +4426,9 @@ class WebInterface(object):
|
||||||
|
|
||||||
# Try to get metadata from the Plex server first
|
# Try to get metadata from the Plex server first
|
||||||
if rating_key:
|
if rating_key:
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
pms_connect = server_manager.ServerManger().get_server(server_id=server_id)
|
||||||
metadata = pms_connect.get_metadata_details(rating_key=rating_key, section_id=section_id)
|
metadata = pms_connect.get_metadata_details(rating_key=rating_key, section_id=section_id)
|
||||||
|
metadata['server_id'] = pms_connect.get_server_info()['machine_identifier']
|
||||||
|
|
||||||
# If the item is not found on the Plex server, get the metadata from history
|
# If the item is not found on the Plex server, get the metadata from history
|
||||||
if not metadata and source == 'history':
|
if not metadata and source == 'history':
|
||||||
|
@ -4433,9 +4456,11 @@ class WebInterface(object):
|
||||||
|
|
||||||
@cherrypy.expose
|
@cherrypy.expose
|
||||||
@requireAuth()
|
@requireAuth()
|
||||||
def get_item_children(self, rating_key='', media_type=None, **kwargs):
|
def get_item_children(self, rating_key='', media_type=None, server_id=None, **kwargs):
|
||||||
|
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
result = None
|
||||||
|
pms_connect = server_manager.ServerManger().get_server(server_id=server_id)
|
||||||
|
if pms_connect is not None:
|
||||||
result = pms_connect.get_item_children(rating_key=rating_key, media_type=media_type)
|
result = pms_connect.get_item_children(rating_key=rating_key, media_type=media_type)
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
|
@ -4447,9 +4472,9 @@ class WebInterface(object):
|
||||||
|
|
||||||
@cherrypy.expose
|
@cherrypy.expose
|
||||||
@requireAuth()
|
@requireAuth()
|
||||||
def get_item_children_related(self, rating_key='', title='', **kwargs):
|
def get_item_children_related(self, rating_key='', title='', server_id=None, **kwargs):
|
||||||
|
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
pms_connect = server_manager.ServerManger().get_server(server_id=server_id)
|
||||||
result = pms_connect.get_item_children_related(rating_key=rating_key)
|
result = pms_connect.get_item_children_related(rating_key=rating_key)
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
|
@ -4601,7 +4626,7 @@ class WebInterface(object):
|
||||||
@cherrypy.tools.json_out()
|
@cherrypy.tools.json_out()
|
||||||
@requireAuth(member_of("admin"))
|
@requireAuth(member_of("admin"))
|
||||||
@addtoapi("get_children_metadata")
|
@addtoapi("get_children_metadata")
|
||||||
def get_children_metadata_details(self, rating_key='', media_type=None, **kwargs):
|
def get_children_metadata_details(self, rating_key='', media_type=None, server_id=None, **kwargs):
|
||||||
""" Get the metadata for the children of a media item.
|
""" Get the metadata for the children of a media item.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -4667,7 +4692,7 @@ class WebInterface(object):
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
"""
|
"""
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
pms_connect = server_manager.ServerManger().get_server(server_id=server_id)
|
||||||
metadata = pms_connect.get_item_children(rating_key=rating_key,
|
metadata = pms_connect.get_item_children(rating_key=rating_key,
|
||||||
media_type=media_type)
|
media_type=media_type)
|
||||||
|
|
||||||
|
@ -4681,7 +4706,7 @@ class WebInterface(object):
|
||||||
@cherrypy.tools.json_out()
|
@cherrypy.tools.json_out()
|
||||||
@requireAuth(member_of("admin"))
|
@requireAuth(member_of("admin"))
|
||||||
@addtoapi('notify_recently_added')
|
@addtoapi('notify_recently_added')
|
||||||
def send_manual_on_created(self, notifier_id='', rating_key='', **kwargs):
|
def send_manual_on_created(self, notifier_id='', rating_key='', server_id=None, **kwargs):
|
||||||
""" Send a recently added notification using Tautulli.
|
""" Send a recently added notification using Tautulli.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -4700,7 +4725,7 @@ class WebInterface(object):
|
||||||
```
|
```
|
||||||
"""
|
"""
|
||||||
if rating_key:
|
if rating_key:
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
pms_connect = server_manager.ServerManger().get_server(server_id=server_id)
|
||||||
metadata = pms_connect.get_metadata_details(rating_key=rating_key)
|
metadata = pms_connect.get_metadata_details(rating_key=rating_key)
|
||||||
data = {'timeline_data': metadata, 'notify_action': 'on_created', 'manual_trigger': True}
|
data = {'timeline_data': metadata, 'notify_action': 'on_created', 'manual_trigger': True}
|
||||||
|
|
||||||
|
@ -4733,7 +4758,7 @@ class WebInterface(object):
|
||||||
@addtoapi('pms_image_proxy')
|
@addtoapi('pms_image_proxy')
|
||||||
def real_pms_image_proxy(self, img=None, rating_key=None, width=750, height=1000,
|
def real_pms_image_proxy(self, img=None, rating_key=None, width=750, height=1000,
|
||||||
opacity=100, background='000000', blur=0, img_format='png',
|
opacity=100, background='000000', blur=0, img_format='png',
|
||||||
fallback=None, refresh=False, clip=False, **kwargs):
|
fallback=None, refresh=False, clip=False, server_id=None, **kwargs):
|
||||||
""" Gets an image from the PMS and saves it to the image cache directory.
|
""" Gets an image from the PMS and saves it to the image cache directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -4817,7 +4842,8 @@ class WebInterface(object):
|
||||||
except NotFound:
|
except NotFound:
|
||||||
# the image does not exist, download it from pms
|
# the image does not exist, download it from pms
|
||||||
try:
|
try:
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
pms_connect = server_manager.ServerManger().get_server(server_id=server_id)
|
||||||
|
if pms_connect is not None:
|
||||||
pms_connect.request_handler._silent = True
|
pms_connect.request_handler._silent = True
|
||||||
result = pms_connect.get_image(img=img,
|
result = pms_connect.get_image(img=img,
|
||||||
width=width,
|
width=width,
|
||||||
|
@ -4838,6 +4864,8 @@ class WebInterface(object):
|
||||||
return result[0]
|
return result[0]
|
||||||
else:
|
else:
|
||||||
raise Exception('PMS image request failed')
|
raise Exception('PMS image request failed')
|
||||||
|
else:
|
||||||
|
raise Exception('PMS server not found')
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warn("Failed to get image %s, falling back to %s." % (img, fallback))
|
logger.warn("Failed to get image %s, falling back to %s." % (img, fallback))
|
||||||
|
@ -5141,8 +5169,9 @@ class WebInterface(object):
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
"""
|
"""
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
result = []
|
||||||
result = pms_connect.get_search_results(query=query, limit=limit)
|
for pms_connect in server_manager.ServerManger().get_server_list():
|
||||||
|
result += pms_connect.get_search_results(query=query, limit=limit)
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
return result
|
return result
|
||||||
|
@ -5154,8 +5183,9 @@ class WebInterface(object):
|
||||||
@requireAuth()
|
@requireAuth()
|
||||||
def get_search_results_children(self, query='', limit='', media_type=None, season_index=None, **kwargs):
|
def get_search_results_children(self, query='', limit='', media_type=None, season_index=None, **kwargs):
|
||||||
|
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
result = []
|
||||||
result = pms_connect.get_search_results(query=query, limit=limit)
|
for pms_connect in server_manager.ServerManger().get_server_list():
|
||||||
|
result += pms_connect.get_search_results(query=query, limit=limit)
|
||||||
|
|
||||||
if media_type:
|
if media_type:
|
||||||
result['results_list'] = {media_type: result['results_list'][media_type]}
|
result['results_list'] = {media_type: result['results_list'][media_type]}
|
||||||
|
@ -5193,7 +5223,7 @@ class WebInterface(object):
|
||||||
@cherrypy.tools.json_out()
|
@cherrypy.tools.json_out()
|
||||||
@requireAuth(member_of("admin"))
|
@requireAuth(member_of("admin"))
|
||||||
@addtoapi()
|
@addtoapi()
|
||||||
def update_metadata_details(self, old_rating_key, new_rating_key, media_type, single_update=False, **kwargs):
|
def update_metadata_details(self, old_rating_key, new_rating_key, media_type, single_update=False, server_id=None, **kwargs):
|
||||||
""" Update the metadata in the Tautulli database by matching rating keys.
|
""" Update the metadata in the Tautulli database by matching rating keys.
|
||||||
Also updates all parents or children of the media item if it is a show/season/episode
|
Also updates all parents or children of the media item if it is a show/season/episode
|
||||||
or artist/album/track.
|
or artist/album/track.
|
||||||
|
@ -5215,7 +5245,7 @@ class WebInterface(object):
|
||||||
|
|
||||||
if new_rating_key:
|
if new_rating_key:
|
||||||
data_factory = datafactory.DataFactory()
|
data_factory = datafactory.DataFactory()
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
pms_connect = server_manager.ServerManger().get_server(server_id=server_id)
|
||||||
|
|
||||||
old_key_list = data_factory.get_rating_keys_list(rating_key=old_rating_key, media_type=media_type)
|
old_key_list = data_factory.get_rating_keys_list(rating_key=old_rating_key, media_type=media_type)
|
||||||
new_key_list = pms_connect.get_rating_keys_list(rating_key=new_rating_key, media_type=media_type)
|
new_key_list = pms_connect.get_rating_keys_list(rating_key=new_rating_key, media_type=media_type)
|
||||||
|
@ -5235,7 +5265,7 @@ class WebInterface(object):
|
||||||
@cherrypy.tools.json_out()
|
@cherrypy.tools.json_out()
|
||||||
@requireAuth(member_of("admin"))
|
@requireAuth(member_of("admin"))
|
||||||
@addtoapi()
|
@addtoapi()
|
||||||
def get_new_rating_keys(self, rating_key='', media_type='', **kwargs):
|
def get_new_rating_keys(self, rating_key='', media_type='', server_id=None, **kwargs):
|
||||||
""" Get a list of new rating keys for the PMS of all of the item's parent/children.
|
""" Get a list of new rating keys for the PMS of all of the item's parent/children.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -5252,7 +5282,7 @@ class WebInterface(object):
|
||||||
```
|
```
|
||||||
"""
|
"""
|
||||||
|
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
pms_connect = server_manager.ServerManger().get_server(server_id=server_id)
|
||||||
result = pms_connect.get_rating_keys_list(rating_key=rating_key, media_type=media_type)
|
result = pms_connect.get_rating_keys_list(rating_key=rating_key, media_type=media_type)
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
|
@ -5296,8 +5326,9 @@ class WebInterface(object):
|
||||||
@requireAuth(member_of("admin"))
|
@requireAuth(member_of("admin"))
|
||||||
def get_pms_sessions_json(self, **kwargs):
|
def get_pms_sessions_json(self, **kwargs):
|
||||||
""" Get all the current sessions. """
|
""" Get all the current sessions. """
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
result = []
|
||||||
result = pms_connect.get_sessions('json')
|
for pms_connect in server_manager.ServerManger().get_server_list():
|
||||||
|
result += pms_connect.get_sessions('json')
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
return result
|
return result
|
||||||
|
@ -5309,7 +5340,7 @@ class WebInterface(object):
|
||||||
@cherrypy.tools.json_out()
|
@cherrypy.tools.json_out()
|
||||||
@requireAuth(member_of("admin"))
|
@requireAuth(member_of("admin"))
|
||||||
@addtoapi("get_metadata")
|
@addtoapi("get_metadata")
|
||||||
def get_metadata_details(self, rating_key='', sync_id='', **kwargs):
|
def get_metadata_details(self, rating_key='', sync_id='', server_id=None, **kwargs):
|
||||||
""" Get the metadata for a media item.
|
""" Get the metadata for a media item.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -5505,7 +5536,7 @@ class WebInterface(object):
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
"""
|
"""
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
pms_connect = server_manager.ServerManger().get_server(server_id=server_id)
|
||||||
metadata = pms_connect.get_metadata_details(rating_key=rating_key,
|
metadata = pms_connect.get_metadata_details(rating_key=rating_key,
|
||||||
sync_id=sync_id)
|
sync_id=sync_id)
|
||||||
|
|
||||||
|
@ -5600,7 +5631,10 @@ class WebInterface(object):
|
||||||
if 'type' in kwargs:
|
if 'type' in kwargs:
|
||||||
media_type = kwargs['type']
|
media_type = kwargs['type']
|
||||||
|
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
result =[]
|
||||||
|
|
||||||
|
|
||||||
|
for pms_connect in server_manager.ServerManger().get_server_list():
|
||||||
result = pms_connect.get_recently_added_details(start=start, count=count, media_type=media_type, section_id=section_id)
|
result = pms_connect.get_recently_added_details(start=start, count=count, media_type=media_type, section_id=section_id)
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
|
@ -5668,7 +5702,8 @@ class WebInterface(object):
|
||||||
@cherrypy.tools.json_out()
|
@cherrypy.tools.json_out()
|
||||||
@requireAuth(member_of("admin"))
|
@requireAuth(member_of("admin"))
|
||||||
def get_servers(self, **kwargs):
|
def get_servers(self, **kwargs):
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
# just grab first one
|
||||||
|
pms_connect = server_manager.ServerManger().get_server_list()[0]
|
||||||
result = pms_connect.get_server_list(output_format='json')
|
result = pms_connect.get_server_list(output_format='json')
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
|
@ -5701,7 +5736,7 @@ class WebInterface(object):
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
"""
|
"""
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
pms_connect = server_manager.ServerManger().get_server_list()[0]
|
||||||
result = pms_connect.get_servers_info()
|
result = pms_connect.get_servers_info()
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
|
@ -5890,6 +5925,7 @@ class WebInterface(object):
|
||||||
"relay": 0,
|
"relay": 0,
|
||||||
"section_id": "2",
|
"section_id": "2",
|
||||||
"secure": 1,
|
"secure": 1,
|
||||||
|
"server_id": XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
|
||||||
"session_id": "helf15l3rxgw01xxe0jf3l3d",
|
"session_id": "helf15l3rxgw01xxe0jf3l3d",
|
||||||
"session_key": "27",
|
"session_key": "27",
|
||||||
"shared_libraries": [
|
"shared_libraries": [
|
||||||
|
@ -6033,8 +6069,18 @@ class WebInterface(object):
|
||||||
```
|
```
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
pms_connect = pmsconnect.PmsConnect(token=plexpy.CONFIG.PMS_TOKEN)
|
|
||||||
result = pms_connect.get_current_activity()
|
result = {
|
||||||
|
'stream_count':0,
|
||||||
|
'sessions': []
|
||||||
|
}
|
||||||
|
|
||||||
|
for server in server_manager.ServerManger().get_server_list():
|
||||||
|
res = server.get_current_activity()
|
||||||
|
if len(res['sessions']) > 0:
|
||||||
|
result['sessions'] += res['sessions']
|
||||||
|
|
||||||
|
result['stream_count'] = len(result['sessions'])
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
if session_key:
|
if session_key:
|
||||||
|
@ -6103,8 +6149,9 @@ class WebInterface(object):
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
"""
|
"""
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
result=[]
|
||||||
result = pms_connect.get_library_details()
|
for pms_connect in server_manager.ServerManger().get_server_list():
|
||||||
|
result += pms_connect.get_library_details()
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
return result
|
return result
|
||||||
|
@ -6224,8 +6271,9 @@ class WebInterface(object):
|
||||||
@requireAuth(member_of("admin"))
|
@requireAuth(member_of("admin"))
|
||||||
def get_sync_transcode_queue(self, **kwargs):
|
def get_sync_transcode_queue(self, **kwargs):
|
||||||
""" Return details for currently syncing items. """
|
""" Return details for currently syncing items. """
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
result =[]
|
||||||
result = pms_connect.get_sync_transcode_queue(output_format='json')
|
for pms_connect in server_manager.ServerManger().get_server_list():
|
||||||
|
result += pms_connect.get_sync_transcode_queue(output_format='json')
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
return result
|
return result
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue