mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-15 09:42:57 -07:00
Merge branch 'dev'
This commit is contained in:
commit
3fcc44aacf
14 changed files with 180 additions and 106 deletions
11
CHANGELOG.md
11
CHANGELOG.md
|
@ -1,5 +1,16 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## v1.1.7 (2015-09-07)
|
||||||
|
|
||||||
|
* Show tagline in info screens for movies. Thanks @JonnyWong.
|
||||||
|
* Add play/pause/buffer icon to activity pane. Thanks @JonnyWong.
|
||||||
|
* Add transcoder info in activity pane info. Thanks @JonnyWong.
|
||||||
|
* Show transcoder progress on activity progress bar. Thanks @JonnyWong.
|
||||||
|
* Fix bug where custom notification strings would be ignored if unicode characters were present.
|
||||||
|
* Fix text overflow issue on home stats cards. Thanks @JonnyWong.
|
||||||
|
* Fix regression with user friendly name change input in edit screen. Thanks @JonnyWong.
|
||||||
|
|
||||||
|
|
||||||
## v1.1.6 (2015-09-06)
|
## v1.1.6 (2015-09-06)
|
||||||
|
|
||||||
* Home stats cards are now expandable to show multiple items. Configurable in settings. Thanks @JonnyWong.
|
* Home stats cards are now expandable to show multiple items. Configurable in settings. Thanks @JonnyWong.
|
||||||
|
|
|
@ -683,6 +683,13 @@ a:hover .dashboard-activity-poster {
|
||||||
-webkit-transition: all 0s;
|
-webkit-transition: all 0s;
|
||||||
transition: all 0s;
|
transition: all 0s;
|
||||||
}
|
}
|
||||||
|
.dashboard-activity-progress .bufferbar {
|
||||||
|
padding-top: 6px;
|
||||||
|
background-color: #444;
|
||||||
|
position: absolute;
|
||||||
|
height: 6px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
.dashboard-activity-progress .bar {
|
.dashboard-activity-progress .bar {
|
||||||
padding-top: 6px;
|
padding-top: 6px;
|
||||||
background-color: #faa732;
|
background-color: #faa732;
|
||||||
|
@ -693,6 +700,9 @@ a:hover .dashboard-activity-poster {
|
||||||
background-image: linear-gradient(to bottom, #fbb450, #f89406);
|
background-image: linear-gradient(to bottom, #fbb450, #f89406);
|
||||||
background-repeat: repeat-x;
|
background-repeat: repeat-x;
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);
|
||||||
|
position: absolute;
|
||||||
|
height: 6px;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
.dashboard-activity-metadata-wrapper {
|
.dashboard-activity-metadata-wrapper {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -1541,6 +1551,7 @@ a .season-episodes-card-overlay:hover {
|
||||||
-webkit-box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
-webkit-box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
||||||
-moz-box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
-moz-box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
||||||
box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
||||||
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
.home-platforms-instance li {
|
.home-platforms-instance li {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -1553,7 +1564,6 @@ a .season-episodes-card-overlay:hover {
|
||||||
height: 120px;
|
height: 120px;
|
||||||
}
|
}
|
||||||
.home-platforms-instance-name {
|
.home-platforms-instance-name {
|
||||||
float: left;
|
|
||||||
color: #fff;
|
color: #fff;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
@ -1565,53 +1575,20 @@ a .season-episodes-card-overlay:hover {
|
||||||
padding: 0 0 0 20px;
|
padding: 0 0 0 20px;
|
||||||
}
|
}
|
||||||
.home-platforms-instance-name h4 {
|
.home-platforms-instance-name h4 {
|
||||||
margin: 10px 0 20px 0;
|
margin: 10px 0 4px 0;
|
||||||
}
|
|
||||||
.home-platforms-instance-name h5 {
|
|
||||||
font-size: 14px;
|
|
||||||
line-height: 16px;
|
|
||||||
margin: 15px 0 2px 0;
|
|
||||||
white-space: nowrap;
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
}
|
|
||||||
.home-platforms-instance-name2 {
|
|
||||||
position: absolute;
|
|
||||||
top: 34px;
|
|
||||||
left: 215px;
|
|
||||||
}
|
|
||||||
.home-platforms-instance-name2 h5 {
|
|
||||||
font-size: 14px;
|
|
||||||
line-height: 16px;
|
|
||||||
margin: 15px 0 2px 0;
|
|
||||||
white-space: nowrap;
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
}
|
|
||||||
.home-platforms-instance-name2 h3 {
|
|
||||||
font-size: 30px;
|
|
||||||
font-weight: bold;
|
|
||||||
color: #F9AA03;
|
|
||||||
line-height: 22px;
|
|
||||||
position: relative;
|
|
||||||
top: 5px;
|
|
||||||
margin: 0 5px 0 0;
|
|
||||||
padding-top: 6px;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
.home-platforms-instance-name2 p {
|
|
||||||
color: #aaa;
|
|
||||||
font-size: 12px;
|
|
||||||
float: left;
|
|
||||||
position: relative;
|
|
||||||
top: 21px;
|
|
||||||
left: 0px;
|
|
||||||
}
|
}
|
||||||
.home-platforms-instance-playcount {
|
.home-platforms-instance-playcount {
|
||||||
float: left;
|
display: inline-block;
|
||||||
position: relative;
|
position: relative;
|
||||||
padding: 6px 0 0 20px;
|
padding: 6px 0 0 20px;
|
||||||
width: 100%;
|
}
|
||||||
|
.home-platforms-instance-playcount h4 {
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 16px;
|
||||||
|
margin: 10px 0 10px 0;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
}
|
}
|
||||||
.home-platforms-instance-playcount h3 {
|
.home-platforms-instance-playcount h3 {
|
||||||
font-size: 30px;
|
font-size: 30px;
|
||||||
|
@ -1638,6 +1615,14 @@ a .season-episodes-card-overlay:hover {
|
||||||
padding: 6px 0 0 20px;
|
padding: 6px 0 0 20px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
.home-platforms-instance-last-user h4 {
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 16px;
|
||||||
|
margin: 10px 0 10px 0;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
.home-platforms-instance-last-user h5 {
|
.home-platforms-instance-last-user h5 {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -2220,6 +2205,9 @@ a .home-platforms-instance-list-oval:hover,
|
||||||
color: #fff;
|
color: #fff;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
.edit-user-name > input[type='text'] {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
.popover {
|
.popover {
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,9 @@ title Returns the name of the episode, movie or music trac
|
||||||
year Returns the year of the episode, movie, or clip.
|
year Returns the year of the episode, movie, or clip.
|
||||||
player Returns the name of the platform used to play the stream.
|
player Returns the name of the platform used to play the stream.
|
||||||
platform Returns the type of platform used to play the stream.
|
platform Returns the type of platform used to play the stream.
|
||||||
|
throttled Returns true if the transcode session is throttled.
|
||||||
|
transcode_progress Returns the current transcode progress of the item. 0 to 100.
|
||||||
|
transcode_speed Returns the current transcode speed of the item.
|
||||||
audio_decision Returns the audio transcode decision. Either 'transcode', 'copy' or 'direct play'.
|
audio_decision Returns the audio transcode decision. Either 'transcode', 'copy' or 'direct play'.
|
||||||
audio_codec Returns the name of the audio codec.
|
audio_codec Returns the name of the audio codec.
|
||||||
audio_channels Returns the number of audio channels.
|
audio_channels Returns the number of audio channels.
|
||||||
|
@ -68,7 +71,6 @@ DOCUMENTATION :: END
|
||||||
<a href="info?item_id=${a['rating_key']}">
|
<a href="info?item_id=${a['rating_key']}">
|
||||||
% endif
|
% endif
|
||||||
<div class="dashboard-activity-poster">
|
<div class="dashboard-activity-poster">
|
||||||
<script>console.log('${a['indexes']}');</script>
|
|
||||||
% if a['type'] == 'movie' and not a['indexes']:
|
% if a['type'] == 'movie' and not a['indexes']:
|
||||||
<div class="dashboard-activity-poster-face" style="background-image: url(pms_image_proxy?img=${a['art']}&width=500&height=280);"></div>
|
<div class="dashboard-activity-poster-face" style="background-image: url(pms_image_proxy?img=${a['art']}&width=500&height=280);"></div>
|
||||||
% elif a['type'] == 'episode' and not a['indexes']:
|
% elif a['type'] == 'episode' and not a['indexes']:
|
||||||
|
@ -116,7 +118,12 @@ DOCUMENTATION :: END
|
||||||
% if a['audio_decision'] == 'direct play':
|
% if a['audio_decision'] == 'direct play':
|
||||||
Stream <strong>Direct Play</strong>
|
Stream <strong>Direct Play</strong>
|
||||||
% else:
|
% else:
|
||||||
Stream <strong>Transcoding</strong>
|
Stream <strong>Transcoding
|
||||||
|
(Speed: ${a['transcode_speed']})
|
||||||
|
% if a['throttled'] == '1':
|
||||||
|
(Throttled)
|
||||||
|
% endif
|
||||||
|
</strong>
|
||||||
% endif
|
% endif
|
||||||
<br />
|
<br />
|
||||||
% if a['audio_decision'] == 'direct play':
|
% if a['audio_decision'] == 'direct play':
|
||||||
|
@ -130,7 +137,12 @@ DOCUMENTATION :: END
|
||||||
% if a['video_decision'] == 'direct play':
|
% if a['video_decision'] == 'direct play':
|
||||||
Stream <strong>Direct Play</strong>
|
Stream <strong>Direct Play</strong>
|
||||||
% else:
|
% else:
|
||||||
Stream <strong>Transcoding</strong>
|
Stream <strong>Transcoding
|
||||||
|
(Speed: ${a['transcode_speed']})
|
||||||
|
% if a['throttled'] == '1':
|
||||||
|
(Throttled)
|
||||||
|
% endif
|
||||||
|
</strong>
|
||||||
% endif
|
% endif
|
||||||
<br />
|
<br />
|
||||||
% if a['video_decision'] == 'direct play':
|
% if a['video_decision'] == 'direct play':
|
||||||
|
@ -163,6 +175,7 @@ DOCUMENTATION :: END
|
||||||
% endif
|
% endif
|
||||||
<div class="dashboard-activity-progress">
|
<div class="dashboard-activity-progress">
|
||||||
<div class="dashboard-activity-progress-bar">
|
<div class="dashboard-activity-progress-bar">
|
||||||
|
<div class="bufferbar" style="width: ${a['transcode_progress']}%">${a['transcode_progress']}%</div>
|
||||||
<div class="bar" style="width: ${a['progress_percent']}%">${a['progress_percent']}%</div>
|
<div class="bar" style="width: ${a['progress_percent']}%">${a['progress_percent']}%</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -171,6 +184,13 @@ DOCUMENTATION :: END
|
||||||
<div class="dashboard-activity-metadata-user-thumb" style="background-image: url(${a['user_thumb']});"></div>
|
<div class="dashboard-activity-metadata-user-thumb" style="background-image: url(${a['user_thumb']});"></div>
|
||||||
</a>
|
</a>
|
||||||
<div class="dashboard-activity-metadata-title">
|
<div class="dashboard-activity-metadata-title">
|
||||||
|
% if a['state'] == 'playing':
|
||||||
|
<i class="fa fa-play"></i>
|
||||||
|
% elif a['state'] == 'paused':
|
||||||
|
<i class="fa fa-pause"></i>
|
||||||
|
% elif a['state'] == 'buffering':
|
||||||
|
<i class="fa fa-spinner"></i>
|
||||||
|
% endif
|
||||||
% if a['type'] == 'episode':
|
% if a['type'] == 'episode':
|
||||||
<a href="info?item_id=${a['rating_key']}">${a['grandparent_title']} - ${a['title']}</a>
|
<a href="info?item_id=${a['rating_key']}">${a['grandparent_title']} - ${a['title']}</a>
|
||||||
% elif a['type'] == 'movie':
|
% elif a['type'] == 'movie':
|
||||||
|
|
|
@ -73,13 +73,13 @@ DOCUMENTATION :: END
|
||||||
<div class="home-platforms-instance-info">
|
<div class="home-platforms-instance-info">
|
||||||
<div class="home-platforms-instance-name">
|
<div class="home-platforms-instance-name">
|
||||||
<h4>Most Watched TV</h4>
|
<h4>Most Watched TV</h4>
|
||||||
<h5>
|
</div>
|
||||||
|
<div class="home-platforms-instance-playcount">
|
||||||
|
<h4>
|
||||||
<a href="info?item_id=${top_stat['rows'][0]['rating_key']}">
|
<a href="info?item_id=${top_stat['rows'][0]['rating_key']}">
|
||||||
${top_stat['rows'][0]['title']}
|
${top_stat['rows'][0]['title']}
|
||||||
</a>
|
</a>
|
||||||
</h5>
|
</h4>
|
||||||
</div>
|
|
||||||
<div class="home-platforms-instance-playcount">
|
|
||||||
% if top_stat['stat_type'] == 'total_plays':
|
% if top_stat['stat_type'] == 'total_plays':
|
||||||
<h3>${top_stat['rows'][0]['total_plays']}</h3>
|
<h3>${top_stat['rows'][0]['total_plays']}</h3>
|
||||||
<p> plays</p>
|
<p> plays</p>
|
||||||
|
@ -153,13 +153,13 @@ DOCUMENTATION :: END
|
||||||
<div class="home-platforms-instance-info">
|
<div class="home-platforms-instance-info">
|
||||||
<div class="home-platforms-instance-name">
|
<div class="home-platforms-instance-name">
|
||||||
<h4>Most Popular TV</h4>
|
<h4>Most Popular TV</h4>
|
||||||
<h5>
|
</div>
|
||||||
|
<div class="home-platforms-instance-playcount">
|
||||||
|
<h4>
|
||||||
<a href="info?item_id=${top_stat['rows'][0]['rating_key']}">
|
<a href="info?item_id=${top_stat['rows'][0]['rating_key']}">
|
||||||
${top_stat['rows'][0]['title']}
|
${top_stat['rows'][0]['title']}
|
||||||
</a>
|
</a>
|
||||||
</h5>
|
</h4>
|
||||||
</div>
|
|
||||||
<div class="home-platforms-instance-playcount">
|
|
||||||
<h3>${top_stat['rows'][0]['users_watched']}</h3>
|
<h3>${top_stat['rows'][0]['users_watched']}</h3>
|
||||||
<p> users</p>
|
<p> users</p>
|
||||||
</div>
|
</div>
|
||||||
|
@ -225,13 +225,13 @@ DOCUMENTATION :: END
|
||||||
<div class="home-platforms-instance-info">
|
<div class="home-platforms-instance-info">
|
||||||
<div class="home-platforms-instance-name">
|
<div class="home-platforms-instance-name">
|
||||||
<h4>Most Watched Movie</h4>
|
<h4>Most Watched Movie</h4>
|
||||||
<h5>
|
</div>
|
||||||
|
<div class="home-platforms-instance-playcount">
|
||||||
|
<h4>
|
||||||
<a href="info?item_id=${top_stat['rows'][0]['rating_key']}">
|
<a href="info?item_id=${top_stat['rows'][0]['rating_key']}">
|
||||||
${top_stat['rows'][0]['title']}
|
${top_stat['rows'][0]['title']}
|
||||||
</a>
|
</a>
|
||||||
</h5>
|
</h4>
|
||||||
</div>
|
|
||||||
<div class="home-platforms-instance-playcount">
|
|
||||||
% if top_stat['stat_type'] == 'total_plays':
|
% if top_stat['stat_type'] == 'total_plays':
|
||||||
<h3>${top_stat['rows'][0]['total_plays']}</h3>
|
<h3>${top_stat['rows'][0]['total_plays']}</h3>
|
||||||
<p> plays</p>
|
<p> plays</p>
|
||||||
|
@ -305,13 +305,13 @@ DOCUMENTATION :: END
|
||||||
<div class="home-platforms-instance-info">
|
<div class="home-platforms-instance-info">
|
||||||
<div class="home-platforms-instance-name">
|
<div class="home-platforms-instance-name">
|
||||||
<h4>Most Popular Movie</h4>
|
<h4>Most Popular Movie</h4>
|
||||||
<h5>
|
</div>
|
||||||
|
<div class="home-platforms-instance-playcount">
|
||||||
|
<h4>
|
||||||
<a href="info?item_id=${top_stat['rows'][0]['rating_key']}">
|
<a href="info?item_id=${top_stat['rows'][0]['rating_key']}">
|
||||||
${top_stat['rows'][0]['title']}
|
${top_stat['rows'][0]['title']}
|
||||||
</a>
|
</a>
|
||||||
</h5>
|
</h4>
|
||||||
</div>
|
|
||||||
<div class="home-platforms-instance-playcount">
|
|
||||||
<h3>${top_stat['rows'][0]['users_watched']}</h3>
|
<h3>${top_stat['rows'][0]['users_watched']}</h3>
|
||||||
<p> users</p>
|
<p> users</p>
|
||||||
</div>
|
</div>
|
||||||
|
@ -377,17 +377,17 @@ DOCUMENTATION :: END
|
||||||
<div class="home-platforms-instance-info">
|
<div class="home-platforms-instance-info">
|
||||||
<div class="home-platforms-instance-name">
|
<div class="home-platforms-instance-name">
|
||||||
<h4>Most Active User</h4>
|
<h4>Most Active User</h4>
|
||||||
<h5>
|
|
||||||
% if top_stat['rows'][0]['user_id']:
|
|
||||||
<a href="user?user_id=${top_stat['rows'][0]['user_id']}">
|
|
||||||
% else:
|
|
||||||
<a href="user?user=${top_stat['rows'][0]['user']}">
|
|
||||||
% endif
|
|
||||||
${top_stat['rows'][0]['friendly_name']}
|
|
||||||
</a>
|
|
||||||
</h5>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="home-platforms-instance-playcount">
|
<div class="home-platforms-instance-playcount">
|
||||||
|
<h4>
|
||||||
|
% if top_stat['rows'][0]['user_id']:
|
||||||
|
<a href="user?user_id=${top_stat['rows'][0]['user_id']}">
|
||||||
|
% else:
|
||||||
|
<a href="user?user=${top_stat['rows'][0]['user']}">
|
||||||
|
% endif
|
||||||
|
${top_stat['rows'][0]['friendly_name']}
|
||||||
|
</a>
|
||||||
|
</h4>
|
||||||
% if top_stat['stat_type'] == 'total_plays':
|
% if top_stat['stat_type'] == 'total_plays':
|
||||||
<h3>${top_stat['rows'][0]['total_plays']}</h3>
|
<h3>${top_stat['rows'][0]['total_plays']}</h3>
|
||||||
<p> plays</p>
|
<p> plays</p>
|
||||||
|
@ -473,9 +473,9 @@ DOCUMENTATION :: END
|
||||||
<div class="home-platforms-instance-info">
|
<div class="home-platforms-instance-info">
|
||||||
<div class="home-platforms-instance-name">
|
<div class="home-platforms-instance-name">
|
||||||
<h4>Most Active Platform</h4>
|
<h4>Most Active Platform</h4>
|
||||||
<h5>${top_stat['rows'][0]['platform_type']}</h5>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="home-platforms-instance-playcount">
|
<div class="home-platforms-instance-playcount">
|
||||||
|
<h4>${top_stat['rows'][0]['platform_type']}</h4>
|
||||||
% if top_stat['stat_type'] == 'total_plays':
|
% if top_stat['stat_type'] == 'total_plays':
|
||||||
<h3>${top_stat['rows'][0]['total_plays']}</h3>
|
<h3>${top_stat['rows'][0]['total_plays']}</h3>
|
||||||
<p> plays</p>
|
<p> plays</p>
|
||||||
|
@ -535,13 +535,13 @@ DOCUMENTATION :: END
|
||||||
<div class="home-platforms-instance-info">
|
<div class="home-platforms-instance-info">
|
||||||
<div class="home-platforms-instance-name">
|
<div class="home-platforms-instance-name">
|
||||||
<h4>Last Watched</h4>
|
<h4>Last Watched</h4>
|
||||||
<h5>
|
</div>
|
||||||
|
<div class="home-platforms-instance-last-user">
|
||||||
|
<h4>
|
||||||
<a href="info?source=history&item_id=${top_stat['rows'][0]['row_id']}">
|
<a href="info?source=history&item_id=${top_stat['rows'][0]['row_id']}">
|
||||||
${top_stat['rows'][0]['title']}
|
${top_stat['rows'][0]['title']}
|
||||||
</a>
|
</a>
|
||||||
</h5>
|
</h4>
|
||||||
</div>
|
|
||||||
<div class="home-platforms-instance-last-user">
|
|
||||||
<h5>
|
<h5>
|
||||||
% if top_stat['rows'][0]['user_id']:
|
% if top_stat['rows'][0]['user_id']:
|
||||||
<a href="user?user_id=${top_stat['rows'][0]['user_id']}">
|
<a href="user?user_id=${top_stat['rows'][0]['user_id']}">
|
||||||
|
|
|
@ -144,6 +144,11 @@ DOCUMENTATION :: END
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
% if data['type'] == 'movie' and data['tagline']:
|
||||||
|
<div class="summary-content-summary">
|
||||||
|
<p><strong> ${data['tagline']} </strong></p>
|
||||||
|
</div>
|
||||||
|
% endif
|
||||||
<div class="summary-content-summary">
|
<div class="summary-content-summary">
|
||||||
<p> ${data['summary']} </p>
|
<p> ${data['summary']} </p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -38,21 +38,21 @@ DOCUMENTATION :: END
|
||||||
<div class="home-platforms-instance-info">
|
<div class="home-platforms-instance-info">
|
||||||
<div class="home-platforms-instance-name">
|
<div class="home-platforms-instance-name">
|
||||||
<h4>${library['rows']['title']}</h4>
|
<h4>${library['rows']['title']}</h4>
|
||||||
<h5>${library['rows']['count_type']}</h5>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="home-platforms-instance-playcount">
|
<div class="home-platforms-instance-playcount">
|
||||||
|
<h5>${library['rows']['count_type']}</h5>
|
||||||
<h3>${library['rows']['count']}</h3>
|
<h3>${library['rows']['count']}</h3>
|
||||||
<p> items</p>
|
<p> items</p>
|
||||||
</div>
|
</div>
|
||||||
% if library['type'] == 'show':
|
% if library['type'] == 'show':
|
||||||
<div class="home-platforms-instance-name2">
|
<div class="home-platforms-instance-playcount" style="padding-left: 10px;">
|
||||||
<h5>${library['rows']['episode_count_type']}</h5>
|
<h5>${library['rows']['episode_count_type']}</h5>
|
||||||
<h3>${library['rows']['episode_count']}</h3>
|
<h3>${library['rows']['episode_count']}</h3>
|
||||||
<p> items</p>
|
<p> items</p>
|
||||||
</div>
|
</div>
|
||||||
% endif
|
% endif
|
||||||
% if library['type'] == 'artist':
|
% if library['type'] == 'artist':
|
||||||
<div class="home-platforms-instance-name2">
|
<div class="home-platforms-instance-playcount" style="padding-left: 10px;">
|
||||||
<h5>${library['rows']['album_count_type']}</h5>
|
<h5>${library['rows']['album_count_type']}</h5>
|
||||||
<h3>${library['rows']['album_count']}</h3>
|
<h3>${library['rows']['album_count']}</h3>
|
||||||
<p> items</p>
|
<p> items</p>
|
||||||
|
|
|
@ -321,7 +321,7 @@ available_notification_agents = notifiers.available_notification_agents()
|
||||||
|
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<label>
|
<label>
|
||||||
<input type="checkbox" id="pms_use_bif" name="pms_use_bif" value="1" ${config['pms_use_bif']}> Use BIF thumbs
|
<input type="checkbox" id="pms_use_bif" name="pms_use_bif" value="1" ${config['pms_use_bif']}> Use video preview thumbnails (BIF)
|
||||||
</label>
|
</label>
|
||||||
<p class="help-block">If you have media indexing enabled on your server, use these on the activity pane.</p>
|
<p class="help-block">If you have media indexing enabled on your server, use these on the activity pane.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
<button class="btn btn-danger btn-edit" data-toggle="button" aria-pressed="false" autocomplete="off" id="row-edit-mode">
|
<button class="btn btn-danger btn-edit" data-toggle="button" aria-pressed="false" autocomplete="off" id="row-edit-mode">
|
||||||
<i class="fa fa-pencil"></i> Edit mode
|
<i class="fa fa-pencil"></i> Edit mode
|
||||||
</button> 
|
</button> 
|
||||||
<div class="alert alert-danger alert-edit" role="alert" id="row-edit-mode-alert"><i class="fa fa-exclamation-triangle"></i> Select rows to delete. Data is deleted upon exiting delete mode.</div>
|
<div class="alert alert-danger alert-edit" role="alert" id="row-edit-mode-alert"><i class="fa fa-exclamation-triangle"></i> Select users to purge. Data is purged upon exiting edit mode.</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class='table-card-back'>
|
<div class='table-card-back'>
|
||||||
|
@ -119,6 +119,13 @@
|
||||||
$(this).addClass('hidden');
|
$(this).addClass('hidden');
|
||||||
$('#row-edit-mode-alert').fadeOut(200);
|
$('#row-edit-mode-alert').fadeOut(200);
|
||||||
});
|
});
|
||||||
|
$('.edit-user-control > .edit-user-name').each(function () {
|
||||||
|
a = $(this).children('a');
|
||||||
|
input = $(this).children('input');
|
||||||
|
a.text(input.val());
|
||||||
|
a.removeClass('hidden');
|
||||||
|
input.addClass('hidden');
|
||||||
|
});
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
users_to_purge = [];
|
users_to_purge = [];
|
||||||
|
@ -126,6 +133,10 @@
|
||||||
$(this).find('button.btn-danger').toggleClass('btn-warning').toggleClass('btn-danger');
|
$(this).find('button.btn-danger').toggleClass('btn-warning').toggleClass('btn-danger');
|
||||||
$(this).removeClass('hidden');
|
$(this).removeClass('hidden');
|
||||||
});
|
});
|
||||||
|
$('.edit-user-control > .edit-user-name').each(function () {
|
||||||
|
$(this).children('a').addClass('hidden');
|
||||||
|
$(this).children('input').removeClass('hidden');
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# This file is part of PlexPy.
|
# This file is part of PlexPy.
|
||||||
#
|
#
|
||||||
# PlexPy is free software: you can redistribute it and/or modify
|
# PlexPy is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@ -377,7 +377,7 @@ def dbcheck():
|
||||||
'title TEXT, parent_title TEXT, grandparent_title TEXT, full_title TEXT, media_index INTEGER, '
|
'title TEXT, parent_title TEXT, grandparent_title TEXT, full_title TEXT, media_index INTEGER, '
|
||||||
'parent_media_index INTEGER, thumb TEXT, parent_thumb TEXT, grandparent_thumb TEXT, art TEXT, media_type TEXT, '
|
'parent_media_index INTEGER, thumb TEXT, parent_thumb TEXT, grandparent_thumb TEXT, art TEXT, media_type TEXT, '
|
||||||
'year INTEGER, originally_available_at TEXT, added_at INTEGER, updated_at INTEGER, last_viewed_at INTEGER, '
|
'year INTEGER, originally_available_at TEXT, added_at INTEGER, updated_at INTEGER, last_viewed_at INTEGER, '
|
||||||
'content_rating TEXT, summary TEXT, rating TEXT, duration INTEGER DEFAULT 0, guid TEXT, '
|
'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)'
|
'directors TEXT, writers TEXT, actors TEXT, genres TEXT, studio TEXT)'
|
||||||
''
|
''
|
||||||
)
|
)
|
||||||
|
@ -517,15 +517,24 @@ def dbcheck():
|
||||||
'ALTER TABLE sessions ADD COLUMN transcode_height INTEGER'
|
'ALTER TABLE sessions ADD COLUMN transcode_height INTEGER'
|
||||||
)
|
)
|
||||||
|
|
||||||
# Upgrade sessions table from earlier versions
|
# Upgrade session_history_metadata table from earlier versions
|
||||||
try:
|
try:
|
||||||
c_db.execute('SELECT full_title from session_history_metadata')
|
c_db.execute('SELECT full_title from session_history_metadata')
|
||||||
except sqlite3.OperationalError:
|
except sqlite3.OperationalError:
|
||||||
logger.debug(u"Altering database. Updating database table sessions.")
|
logger.debug(u"Altering database. Updating database table session_history_metadata.")
|
||||||
c_db.execute(
|
c_db.execute(
|
||||||
'ALTER TABLE session_history_metadata ADD COLUMN full_title TEXT'
|
'ALTER TABLE session_history_metadata ADD COLUMN full_title TEXT'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Upgrade session_history_metadata table from earlier versions
|
||||||
|
try:
|
||||||
|
c_db.execute('SELECT tagline from session_history_metadata')
|
||||||
|
except sqlite3.OperationalError:
|
||||||
|
logger.debug(u"Altering database. Updating database table session_history_metadata.")
|
||||||
|
c_db.execute(
|
||||||
|
'ALTER TABLE session_history_metadata ADD COLUMN tagline TEXT'
|
||||||
|
)
|
||||||
|
|
||||||
# notify_log table :: This is a table which logs notifications sent
|
# notify_log table :: This is a table which logs notifications sent
|
||||||
c_db.execute(
|
c_db.execute(
|
||||||
'CREATE TABLE IF NOT EXISTS notify_log (id INTEGER PRIMARY KEY AUTOINCREMENT, '
|
'CREATE TABLE IF NOT EXISTS notify_log (id INTEGER PRIMARY KEY AUTOINCREMENT, '
|
||||||
|
|
|
@ -578,8 +578,8 @@ class DataFactory(object):
|
||||||
if row_id:
|
if row_id:
|
||||||
query = 'SELECT rating_key, parent_rating_key, grandparent_rating_key, title, parent_title, grandparent_title, ' \
|
query = 'SELECT rating_key, parent_rating_key, grandparent_rating_key, title, parent_title, grandparent_title, ' \
|
||||||
'full_title, media_index, parent_media_index, thumb, parent_thumb, grandparent_thumb, art, media_type, ' \
|
'full_title, media_index, parent_media_index, thumb, parent_thumb, grandparent_thumb, art, media_type, ' \
|
||||||
'year, originally_available_at, added_at, updated_at, last_viewed_at, content_rating, summary, rating, ' \
|
'year, originally_available_at, added_at, updated_at, last_viewed_at, content_rating, summary, tagline, ' \
|
||||||
'duration, guid, directors, writers, actors, genres, studio ' \
|
'rating, duration, guid, directors, writers, actors, genres, studio ' \
|
||||||
'FROM session_history_metadata ' \
|
'FROM session_history_metadata ' \
|
||||||
'WHERE id = ?'
|
'WHERE id = ?'
|
||||||
result = monitor_db.select(query=query, args=[row_id])
|
result = monitor_db.select(query=query, args=[row_id])
|
||||||
|
@ -605,6 +605,7 @@ class DataFactory(object):
|
||||||
'title': item['title'],
|
'title': item['title'],
|
||||||
'content_rating': item['content_rating'],
|
'content_rating': item['content_rating'],
|
||||||
'summary': item['summary'],
|
'summary': item['summary'],
|
||||||
|
'tagline': item['tagline'],
|
||||||
'rating': item['rating'],
|
'rating': item['rating'],
|
||||||
'duration': item['duration'],
|
'duration': item['duration'],
|
||||||
'year': item['year'],
|
'year': item['year'],
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# This file is part of PlexPy.
|
# This file is part of PlexPy.
|
||||||
#
|
#
|
||||||
# PlexPy is free software: you can redistribute it and/or modify
|
# PlexPy is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@ -343,17 +343,17 @@ class MonitorProcessing(object):
|
||||||
'grandparent_rating_key, title, parent_title, grandparent_title, full_title, media_index, ' \
|
'grandparent_rating_key, title, parent_title, grandparent_title, full_title, media_index, ' \
|
||||||
'parent_media_index, thumb, parent_thumb, grandparent_thumb, art, media_type, year, ' \
|
'parent_media_index, thumb, parent_thumb, grandparent_thumb, art, media_type, year, ' \
|
||||||
'originally_available_at, added_at, updated_at, last_viewed_at, content_rating, summary, ' \
|
'originally_available_at, added_at, updated_at, last_viewed_at, content_rating, summary, ' \
|
||||||
'rating, duration, guid, directors, writers, actors, genres, studio) VALUES ' \
|
'tagline, rating, duration, guid, directors, writers, actors, genres, studio) VALUES ' \
|
||||||
'(last_insert_rowid(), ' \
|
'(last_insert_rowid(), ' \
|
||||||
'?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
|
'?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
|
||||||
|
|
||||||
args = [session['rating_key'], session['parent_rating_key'], session['grandparent_rating_key'],
|
args = [session['rating_key'], session['parent_rating_key'], session['grandparent_rating_key'],
|
||||||
session['title'], session['parent_title'], session['grandparent_title'], full_title,
|
session['title'], session['parent_title'], session['grandparent_title'], full_title,
|
||||||
metadata['index'], metadata['parent_index'], metadata['thumb'], metadata['parent_thumb'],
|
metadata['index'], metadata['parent_index'], metadata['thumb'], metadata['parent_thumb'],
|
||||||
metadata['grandparent_thumb'], metadata['art'], session['media_type'], metadata['year'],
|
metadata['grandparent_thumb'], metadata['art'], session['media_type'], metadata['year'],
|
||||||
metadata['originally_available_at'], metadata['added_at'], metadata['updated_at'],
|
metadata['originally_available_at'], metadata['added_at'], metadata['updated_at'],
|
||||||
metadata['last_viewed_at'], metadata['content_rating'], metadata['summary'], metadata['rating'],
|
metadata['last_viewed_at'], metadata['content_rating'], metadata['summary'], metadata['tagline'],
|
||||||
metadata['duration'], metadata['guid'], directors, writers, actors, genres, metadata['studio']]
|
metadata['rating'], metadata['duration'], metadata['guid'], directors, writers, actors, genres, metadata['studio']]
|
||||||
|
|
||||||
# logger.debug(u"PlexPy Monitor :: Writing session_history_metadata transaction...")
|
# logger.debug(u"PlexPy Monitor :: Writing session_history_metadata transaction...")
|
||||||
self.db.action(query=query, args=args)
|
self.db.action(query=query, args=args)
|
||||||
|
|
|
@ -349,14 +349,14 @@ def build_notify_text(session, state):
|
||||||
|
|
||||||
if on_start_subject and on_start_body:
|
if on_start_subject and on_start_body:
|
||||||
try:
|
try:
|
||||||
subject_text = on_start_subject.format(**available_params)
|
subject_text = unicode(on_start_subject).format(**available_params)
|
||||||
except LookupError, e:
|
except LookupError, e:
|
||||||
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification subject. Using fallback." % e)
|
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification subject. Using fallback." % e)
|
||||||
except:
|
except:
|
||||||
logger.error(u"PlexPy Notifier :: Unable to parse custom notification subject. Using fallback.")
|
logger.error(u"PlexPy Notifier :: Unable to parse custom notification subject. Using fallback.")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
body_text = on_start_body.format(**available_params)
|
body_text = unicode(on_start_body).format(**available_params)
|
||||||
except LookupError, e:
|
except LookupError, e:
|
||||||
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification body. Using fallback." % e)
|
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification body. Using fallback." % e)
|
||||||
except:
|
except:
|
||||||
|
@ -373,14 +373,14 @@ def build_notify_text(session, state):
|
||||||
|
|
||||||
if on_stop_subject and on_stop_body:
|
if on_stop_subject and on_stop_body:
|
||||||
try:
|
try:
|
||||||
subject_text = on_stop_subject.format(**available_params)
|
subject_text = unicode(on_stop_subject).format(**available_params)
|
||||||
except LookupError, e:
|
except LookupError, e:
|
||||||
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification subject. Using fallback." % e)
|
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification subject. Using fallback." % e)
|
||||||
except:
|
except:
|
||||||
logger.error(u"PlexPy Notifier :: Unable to parse custom notification subject. Using fallback.")
|
logger.error(u"PlexPy Notifier :: Unable to parse custom notification subject. Using fallback.")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
body_text = on_stop_body.format(**available_params)
|
body_text = unicode(on_stop_body).format(**available_params)
|
||||||
except LookupError, e:
|
except LookupError, e:
|
||||||
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification body. Using fallback." % e)
|
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification body. Using fallback." % e)
|
||||||
except:
|
except:
|
||||||
|
@ -397,14 +397,14 @@ def build_notify_text(session, state):
|
||||||
|
|
||||||
if on_pause_subject and on_pause_body:
|
if on_pause_subject and on_pause_body:
|
||||||
try:
|
try:
|
||||||
subject_text = on_pause_subject.format(**available_params)
|
subject_text = unicode(on_pause_subject).format(**available_params)
|
||||||
except LookupError, e:
|
except LookupError, e:
|
||||||
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification subject. Using fallback." % e)
|
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification subject. Using fallback." % e)
|
||||||
except:
|
except:
|
||||||
logger.error(u"PlexPy Notifier :: Unable to parse custom notification subject. Using fallback.")
|
logger.error(u"PlexPy Notifier :: Unable to parse custom notification subject. Using fallback.")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
body_text = on_pause_body.format(**available_params)
|
body_text = unicode(on_pause_body).format(**available_params)
|
||||||
except LookupError, e:
|
except LookupError, e:
|
||||||
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification body. Using fallback." % e)
|
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification body. Using fallback." % e)
|
||||||
except:
|
except:
|
||||||
|
@ -421,14 +421,14 @@ def build_notify_text(session, state):
|
||||||
|
|
||||||
if on_resume_subject and on_resume_body:
|
if on_resume_subject and on_resume_body:
|
||||||
try:
|
try:
|
||||||
subject_text = on_resume_subject.format(**available_params)
|
subject_text = unicode(on_resume_subject).format(**available_params)
|
||||||
except LookupError, e:
|
except LookupError, e:
|
||||||
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification subject. Using fallback." % e)
|
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification subject. Using fallback." % e)
|
||||||
except:
|
except:
|
||||||
logger.error(u"PlexPy Notifier :: Unable to parse custom notification subject. Using fallback.")
|
logger.error(u"PlexPy Notifier :: Unable to parse custom notification subject. Using fallback.")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
body_text = on_resume_body.format(**available_params)
|
body_text = unicode(on_resume_body).format(**available_params)
|
||||||
except LookupError, e:
|
except LookupError, e:
|
||||||
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification body. Using fallback." % e)
|
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification body. Using fallback." % e)
|
||||||
except:
|
except:
|
||||||
|
@ -445,14 +445,14 @@ def build_notify_text(session, state):
|
||||||
|
|
||||||
if on_buffer_subject and on_buffer_body:
|
if on_buffer_subject and on_buffer_body:
|
||||||
try:
|
try:
|
||||||
subject_text = on_buffer_subject.format(**available_params)
|
subject_text = unicode(on_buffer_subject).format(**available_params)
|
||||||
except LookupError, e:
|
except LookupError, e:
|
||||||
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification subject. Using fallback." % e)
|
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification subject. Using fallback." % e)
|
||||||
except:
|
except:
|
||||||
logger.error(u"PlexPy Notifier :: Unable to parse custom notification subject. Using fallback.")
|
logger.error(u"PlexPy Notifier :: Unable to parse custom notification subject. Using fallback.")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
body_text = on_buffer_body.format(**available_params)
|
body_text = unicode(on_buffer_body).format(**available_params)
|
||||||
except LookupError, e:
|
except LookupError, e:
|
||||||
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification body. Using fallback." % e)
|
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification body. Using fallback." % e)
|
||||||
except:
|
except:
|
||||||
|
@ -469,14 +469,14 @@ def build_notify_text(session, state):
|
||||||
|
|
||||||
if on_watched_subject and on_watched_body:
|
if on_watched_subject and on_watched_body:
|
||||||
try:
|
try:
|
||||||
subject_text = on_watched_subject.format(**available_params)
|
subject_text = unicode(on_watched_subject).format(**available_params)
|
||||||
except LookupError, e:
|
except LookupError, e:
|
||||||
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification subject. Using fallback." % e)
|
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification subject. Using fallback." % e)
|
||||||
except:
|
except:
|
||||||
logger.error(u"PlexPy Notifier :: Unable to parse custom notification subject. Using fallback.")
|
logger.error(u"PlexPy Notifier :: Unable to parse custom notification subject. Using fallback.")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
body_text = on_watched_body.format(**available_params)
|
body_text = unicode(on_watched_body).format(**available_params)
|
||||||
except LookupError, e:
|
except LookupError, e:
|
||||||
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification body. Using fallback." % e)
|
logger.error(u"PlexPy Notifier :: Unable to parse field %s in notification body. Using fallback." % e)
|
||||||
except:
|
except:
|
||||||
|
|
|
@ -362,6 +362,7 @@ class PmsConnect(object):
|
||||||
'title': helpers.get_xml_attr(metadata_main, 'title'),
|
'title': helpers.get_xml_attr(metadata_main, 'title'),
|
||||||
'content_rating': helpers.get_xml_attr(metadata_main, 'contentRating'),
|
'content_rating': helpers.get_xml_attr(metadata_main, 'contentRating'),
|
||||||
'summary': helpers.get_xml_attr(metadata_main, 'summary'),
|
'summary': helpers.get_xml_attr(metadata_main, 'summary'),
|
||||||
|
'tagline': helpers.get_xml_attr(metadata_main, 'tagline'),
|
||||||
'rating': helpers.get_xml_attr(metadata_main, 'rating'),
|
'rating': helpers.get_xml_attr(metadata_main, 'rating'),
|
||||||
'duration': helpers.get_xml_attr(metadata_main, 'duration'),
|
'duration': helpers.get_xml_attr(metadata_main, 'duration'),
|
||||||
'year': helpers.get_xml_attr(metadata_main, 'year'),
|
'year': helpers.get_xml_attr(metadata_main, 'year'),
|
||||||
|
@ -393,6 +394,7 @@ class PmsConnect(object):
|
||||||
'title': helpers.get_xml_attr(metadata_main, 'title'),
|
'title': helpers.get_xml_attr(metadata_main, 'title'),
|
||||||
'content_rating': helpers.get_xml_attr(metadata_main, 'contentRating'),
|
'content_rating': helpers.get_xml_attr(metadata_main, 'contentRating'),
|
||||||
'summary': helpers.get_xml_attr(metadata_main, 'summary'),
|
'summary': helpers.get_xml_attr(metadata_main, 'summary'),
|
||||||
|
'tagline': helpers.get_xml_attr(metadata_main, 'tagline'),
|
||||||
'rating': helpers.get_xml_attr(metadata_main, 'rating'),
|
'rating': helpers.get_xml_attr(metadata_main, 'rating'),
|
||||||
'duration': helpers.get_xml_attr(metadata_main, 'duration'),
|
'duration': helpers.get_xml_attr(metadata_main, 'duration'),
|
||||||
'year': helpers.get_xml_attr(metadata_main, 'year'),
|
'year': helpers.get_xml_attr(metadata_main, 'year'),
|
||||||
|
@ -422,6 +424,7 @@ class PmsConnect(object):
|
||||||
'title': helpers.get_xml_attr(metadata_main, 'title'),
|
'title': helpers.get_xml_attr(metadata_main, 'title'),
|
||||||
'content_rating': helpers.get_xml_attr(metadata_main, 'contentRating'),
|
'content_rating': helpers.get_xml_attr(metadata_main, 'contentRating'),
|
||||||
'summary': helpers.get_xml_attr(metadata_main, 'summary'),
|
'summary': helpers.get_xml_attr(metadata_main, 'summary'),
|
||||||
|
'tagline': helpers.get_xml_attr(metadata_main, 'tagline'),
|
||||||
'rating': helpers.get_xml_attr(metadata_main, 'rating'),
|
'rating': helpers.get_xml_attr(metadata_main, 'rating'),
|
||||||
'duration': helpers.get_xml_attr(metadata_main, 'duration'),
|
'duration': helpers.get_xml_attr(metadata_main, 'duration'),
|
||||||
'year': helpers.get_xml_attr(metadata_main, 'year'),
|
'year': helpers.get_xml_attr(metadata_main, 'year'),
|
||||||
|
@ -454,6 +457,7 @@ class PmsConnect(object):
|
||||||
'title': helpers.get_xml_attr(metadata_main, 'title'),
|
'title': helpers.get_xml_attr(metadata_main, 'title'),
|
||||||
'content_rating': helpers.get_xml_attr(metadata_main, 'contentRating'),
|
'content_rating': helpers.get_xml_attr(metadata_main, 'contentRating'),
|
||||||
'summary': show_details['metadata']['summary'],
|
'summary': show_details['metadata']['summary'],
|
||||||
|
'tagline': helpers.get_xml_attr(metadata_main, 'tagline'),
|
||||||
'rating': helpers.get_xml_attr(metadata_main, 'rating'),
|
'rating': helpers.get_xml_attr(metadata_main, 'rating'),
|
||||||
'duration': show_details['metadata']['duration'],
|
'duration': show_details['metadata']['duration'],
|
||||||
'year': helpers.get_xml_attr(metadata_main, 'year'),
|
'year': helpers.get_xml_attr(metadata_main, 'year'),
|
||||||
|
@ -483,6 +487,7 @@ class PmsConnect(object):
|
||||||
'title': helpers.get_xml_attr(metadata_main, 'title'),
|
'title': helpers.get_xml_attr(metadata_main, 'title'),
|
||||||
'content_rating': helpers.get_xml_attr(metadata_main, 'contentRating'),
|
'content_rating': helpers.get_xml_attr(metadata_main, 'contentRating'),
|
||||||
'summary': helpers.get_xml_attr(metadata_main, 'summary'),
|
'summary': helpers.get_xml_attr(metadata_main, 'summary'),
|
||||||
|
'tagline': helpers.get_xml_attr(metadata_main, 'tagline'),
|
||||||
'rating': helpers.get_xml_attr(metadata_main, 'rating'),
|
'rating': helpers.get_xml_attr(metadata_main, 'rating'),
|
||||||
'duration': helpers.get_xml_attr(metadata_main, 'duration'),
|
'duration': helpers.get_xml_attr(metadata_main, 'duration'),
|
||||||
'year': helpers.get_xml_attr(metadata_main, 'year'),
|
'year': helpers.get_xml_attr(metadata_main, 'year'),
|
||||||
|
@ -573,6 +578,9 @@ class PmsConnect(object):
|
||||||
|
|
||||||
if session.getElementsByTagName('TranscodeSession'):
|
if session.getElementsByTagName('TranscodeSession'):
|
||||||
transcode_session = session.getElementsByTagName('TranscodeSession')[0]
|
transcode_session = session.getElementsByTagName('TranscodeSession')[0]
|
||||||
|
throttled = helpers.get_xml_attr(transcode_session, 'throttled')
|
||||||
|
transcode_progress = helpers.get_xml_attr(transcode_session, 'progress')
|
||||||
|
transcode_speed = helpers.get_xml_attr(transcode_session, 'speed')
|
||||||
audio_decision = helpers.get_xml_attr(transcode_session, 'audioDecision')
|
audio_decision = helpers.get_xml_attr(transcode_session, 'audioDecision')
|
||||||
transcode_audio_channels = helpers.get_xml_attr(transcode_session, 'audioChannels')
|
transcode_audio_channels = helpers.get_xml_attr(transcode_session, 'audioChannels')
|
||||||
transcode_audio_codec = helpers.get_xml_attr(transcode_session, 'audioCodec')
|
transcode_audio_codec = helpers.get_xml_attr(transcode_session, 'audioCodec')
|
||||||
|
@ -580,6 +588,9 @@ class PmsConnect(object):
|
||||||
transcode_protocol = helpers.get_xml_attr(transcode_session, 'protocol')
|
transcode_protocol = helpers.get_xml_attr(transcode_session, 'protocol')
|
||||||
duration = helpers.get_xml_attr(transcode_session, 'duration')
|
duration = helpers.get_xml_attr(transcode_session, 'duration')
|
||||||
else:
|
else:
|
||||||
|
throttled = '0'
|
||||||
|
transcode_progress = '0'
|
||||||
|
transcode_speed = ''
|
||||||
transcode_audio_channels = ''
|
transcode_audio_channels = ''
|
||||||
transcode_audio_codec = ''
|
transcode_audio_codec = ''
|
||||||
transcode_container = ''
|
transcode_container = ''
|
||||||
|
@ -615,6 +626,9 @@ class PmsConnect(object):
|
||||||
'rating_key': helpers.get_xml_attr(session, 'ratingKey'),
|
'rating_key': helpers.get_xml_attr(session, 'ratingKey'),
|
||||||
'parent_rating_key': helpers.get_xml_attr(session, 'parentRatingKey'),
|
'parent_rating_key': helpers.get_xml_attr(session, 'parentRatingKey'),
|
||||||
'grandparent_rating_key': helpers.get_xml_attr(session, 'grandparentRatingKey'),
|
'grandparent_rating_key': helpers.get_xml_attr(session, 'grandparentRatingKey'),
|
||||||
|
'throttled': throttled,
|
||||||
|
'transcode_progress': transcode_progress,
|
||||||
|
'transcode_speed': str(round(helpers.cast_to_float(transcode_speed), 1)),
|
||||||
'audio_decision': audio_decision,
|
'audio_decision': audio_decision,
|
||||||
'audio_channels': audio_channels,
|
'audio_channels': audio_channels,
|
||||||
'audio_codec': audio_codec,
|
'audio_codec': audio_codec,
|
||||||
|
@ -659,6 +673,9 @@ class PmsConnect(object):
|
||||||
|
|
||||||
if session.getElementsByTagName('TranscodeSession'):
|
if session.getElementsByTagName('TranscodeSession'):
|
||||||
transcode_session = session.getElementsByTagName('TranscodeSession')[0]
|
transcode_session = session.getElementsByTagName('TranscodeSession')[0]
|
||||||
|
throttled = helpers.get_xml_attr(transcode_session, 'throttled')
|
||||||
|
transcode_progress = helpers.get_xml_attr(transcode_session, 'progress')
|
||||||
|
transcode_speed = helpers.get_xml_attr(transcode_session, 'speed')
|
||||||
audio_decision = helpers.get_xml_attr(transcode_session, 'audioDecision')
|
audio_decision = helpers.get_xml_attr(transcode_session, 'audioDecision')
|
||||||
transcode_audio_channels = helpers.get_xml_attr(transcode_session, 'audioChannels')
|
transcode_audio_channels = helpers.get_xml_attr(transcode_session, 'audioChannels')
|
||||||
transcode_audio_codec = helpers.get_xml_attr(transcode_session, 'audioCodec')
|
transcode_audio_codec = helpers.get_xml_attr(transcode_session, 'audioCodec')
|
||||||
|
@ -669,6 +686,9 @@ class PmsConnect(object):
|
||||||
transcode_container = helpers.get_xml_attr(transcode_session, 'container')
|
transcode_container = helpers.get_xml_attr(transcode_session, 'container')
|
||||||
transcode_protocol = helpers.get_xml_attr(transcode_session, 'protocol')
|
transcode_protocol = helpers.get_xml_attr(transcode_session, 'protocol')
|
||||||
else:
|
else:
|
||||||
|
throttled = '0'
|
||||||
|
transcode_progress = '0'
|
||||||
|
transcode_speed = ''
|
||||||
transcode_audio_channels = ''
|
transcode_audio_channels = ''
|
||||||
transcode_audio_codec = ''
|
transcode_audio_codec = ''
|
||||||
transcode_video_codec = ''
|
transcode_video_codec = ''
|
||||||
|
@ -726,6 +746,9 @@ class PmsConnect(object):
|
||||||
'rating_key': helpers.get_xml_attr(session, 'ratingKey'),
|
'rating_key': helpers.get_xml_attr(session, 'ratingKey'),
|
||||||
'parent_rating_key': helpers.get_xml_attr(session, 'parentRatingKey'),
|
'parent_rating_key': helpers.get_xml_attr(session, 'parentRatingKey'),
|
||||||
'grandparent_rating_key': helpers.get_xml_attr(session, 'grandparentRatingKey'),
|
'grandparent_rating_key': helpers.get_xml_attr(session, 'grandparentRatingKey'),
|
||||||
|
'throttled': throttled,
|
||||||
|
'transcode_progress': transcode_progress,
|
||||||
|
'transcode_speed': str(round(helpers.cast_to_float(transcode_speed), 1)),
|
||||||
'audio_decision': audio_decision,
|
'audio_decision': audio_decision,
|
||||||
'audio_channels': audio_channels,
|
'audio_channels': audio_channels,
|
||||||
'audio_codec': audio_codec,
|
'audio_codec': audio_codec,
|
||||||
|
@ -779,6 +802,9 @@ class PmsConnect(object):
|
||||||
'rating_key': helpers.get_xml_attr(session, 'ratingKey'),
|
'rating_key': helpers.get_xml_attr(session, 'ratingKey'),
|
||||||
'parent_rating_key': helpers.get_xml_attr(session, 'parentRatingKey'),
|
'parent_rating_key': helpers.get_xml_attr(session, 'parentRatingKey'),
|
||||||
'grandparent_rating_key': helpers.get_xml_attr(session, 'grandparentRatingKey'),
|
'grandparent_rating_key': helpers.get_xml_attr(session, 'grandparentRatingKey'),
|
||||||
|
'throttled': throttled,
|
||||||
|
'transcode_progress': transcode_progress,
|
||||||
|
'transcode_speed': str(round(helpers.cast_to_float(transcode_speed), 1)),
|
||||||
'audio_decision': audio_decision,
|
'audio_decision': audio_decision,
|
||||||
'audio_channels': audio_channels,
|
'audio_channels': audio_channels,
|
||||||
'audio_codec': audio_codec,
|
'audio_codec': audio_codec,
|
||||||
|
@ -832,6 +858,9 @@ class PmsConnect(object):
|
||||||
'rating_key': helpers.get_xml_attr(session, 'ratingKey'),
|
'rating_key': helpers.get_xml_attr(session, 'ratingKey'),
|
||||||
'parent_rating_key': helpers.get_xml_attr(session, 'parentRatingKey'),
|
'parent_rating_key': helpers.get_xml_attr(session, 'parentRatingKey'),
|
||||||
'grandparent_rating_key': helpers.get_xml_attr(session, 'grandparentRatingKey'),
|
'grandparent_rating_key': helpers.get_xml_attr(session, 'grandparentRatingKey'),
|
||||||
|
'throttled': throttled,
|
||||||
|
'transcode_progress': transcode_progress,
|
||||||
|
'transcode_speed': str(round(helpers.cast_to_float(transcode_speed), 1)),
|
||||||
'audio_decision': audio_decision,
|
'audio_decision': audio_decision,
|
||||||
'audio_channels': audio_channels,
|
'audio_channels': audio_channels,
|
||||||
'audio_codec': audio_codec,
|
'audio_codec': audio_codec,
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
PLEXPY_VERSION = "master"
|
PLEXPY_VERSION = "master"
|
||||||
PLEXPY_RELEASE_VERSION = "1.1.6"
|
PLEXPY_RELEASE_VERSION = "1.1.7"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue