Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
ffa208e73f | ||
![]() |
61ead15c38 | ||
![]() |
407e2ae481 | ||
![]() |
5fb16edf43 | ||
![]() |
8eb5c475bb | ||
![]() |
84090310f7 | ||
![]() |
fc98e2f052 | ||
![]() |
bedcfa9520 | ||
![]() |
bb152b590b | ||
![]() |
3623732cf7 | ||
![]() |
05ba89f164 | ||
![]() |
cee656a053 |
16
CHANGELOG.md
16
CHANGELOG.md
@@ -1,5 +1,21 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## v1.4.5 (2016-05-25)
|
||||||
|
|
||||||
|
* Fix: PlexPy unable to start if failed to get shared libraries for a user.
|
||||||
|
* Fix: Matching port number when retrieving the PMS url.
|
||||||
|
* Fix: Extract mapped IPv4 address in Plexivity import.
|
||||||
|
* Change: Revert back to internal url when retrieving PMS images.
|
||||||
|
|
||||||
|
|
||||||
|
## v1.4.4 (2016-05-24)
|
||||||
|
|
||||||
|
* Fix: Image queries crashing the PMS when playing clips from channels.
|
||||||
|
* Fix: Plexivity import if IP address is missing.
|
||||||
|
* Fix: Tooltips shown behind the datatable headers.
|
||||||
|
* Fix: Current activity instances rendered in a random order causing them to jump around.
|
||||||
|
|
||||||
|
|
||||||
## v1.4.3 (2016-05-22)
|
## v1.4.3 (2016-05-22)
|
||||||
|
|
||||||
* Fix: PlexPy not starting without any authentication method.
|
* Fix: PlexPy not starting without any authentication method.
|
||||||
|
@@ -61,6 +61,8 @@ DOCUMENTATION :: END
|
|||||||
|
|
||||||
% if data is not None:
|
% if data is not None:
|
||||||
<%
|
<%
|
||||||
|
from urllib import quote
|
||||||
|
|
||||||
from plexpy import helpers
|
from plexpy import helpers
|
||||||
data['indexes'] = helpers.cast_to_int(data['indexes'])
|
data['indexes'] = helpers.cast_to_int(data['indexes'])
|
||||||
%>
|
%>
|
||||||
@@ -90,9 +92,11 @@ DOCUMENTATION :: END
|
|||||||
<div class="dashboard-activity-poster-face" style="background-image: url(${data['thumb']});"></div>
|
<div class="dashboard-activity-poster-face" style="background-image: url(${data['thumb']});"></div>
|
||||||
% else:
|
% else:
|
||||||
% if data['art']:
|
% if data['art']:
|
||||||
<div class="dashboard-activity-poster-face" style="background-image: url(pms_image_proxy?img=${data['art']}&width=500&height=280&fallback=art);"></div>
|
<!--Hacky solution to escape the image url until I come up with something better-->
|
||||||
|
<div class="dashboard-activity-poster-face" style="background-image: url(pms_image_proxy?img=${quote(data['art'])}&width=500&height=280&fallback=art);"></div>
|
||||||
% else:
|
% else:
|
||||||
<div class="dashboard-activity-poster-face" style="background-image: url(pms_image_proxy?img=${data['thumb']}&width=500&height=280&fallback=art);"></div>
|
<!--Hacky solution to escape the image url until I come up with something better-->
|
||||||
|
<div class="dashboard-activity-poster-face" style="background-image: url(pms_image_proxy?img=${quote(data['thumb'])}&width=500&height=280&fallback=art);"></div>
|
||||||
% endif
|
% endif
|
||||||
% endif
|
% endif
|
||||||
% elif data['media_type'] == 'photo':
|
% elif data['media_type'] == 'photo':
|
||||||
|
@@ -448,10 +448,10 @@ function childTableOptions(rowData) {
|
|||||||
|
|
||||||
// Create the tooltips.
|
// Create the tooltips.
|
||||||
$('.expand-history-tooltip').tooltip({ container: 'body' });
|
$('.expand-history-tooltip').tooltip({ container: 'body' });
|
||||||
$('.external-ip-tooltip').tooltip();
|
$('.external-ip-tooltip').tooltip({ container: 'body' });
|
||||||
$('.transcode-tooltip').tooltip();
|
$('.transcode-tooltip').tooltip({ container: 'body' });
|
||||||
$('.media-type-tooltip').tooltip();
|
$('.media-type-tooltip').tooltip({ container: 'body' });
|
||||||
$('.watched-tooltip').tooltip();
|
$('.watched-tooltip').tooltip({ container: 'body' });
|
||||||
$('.thumb-tooltip').popover({
|
$('.thumb-tooltip').popover({
|
||||||
html: true,
|
html: true,
|
||||||
container: 'body',
|
container: 'body',
|
||||||
|
@@ -132,8 +132,8 @@ history_table_modal_options = {
|
|||||||
$('#ajaxMsg').fadeOut();
|
$('#ajaxMsg').fadeOut();
|
||||||
|
|
||||||
// Create the tooltips.
|
// Create the tooltips.
|
||||||
$('.transcode-tooltip').tooltip();
|
$('.transcode-tooltip').tooltip({ container: 'body' });
|
||||||
$('.media-type-tooltip').tooltip();
|
$('.media-type-tooltip').tooltip({ container: 'body' });
|
||||||
$('.thumb-tooltip').popover({
|
$('.thumb-tooltip').popover({
|
||||||
html: true,
|
html: true,
|
||||||
container: '#history-modal',
|
container: '#history-modal',
|
||||||
|
@@ -217,10 +217,10 @@ libraries_list_table_options = {
|
|||||||
$('#ajaxMsg').fadeOut();
|
$('#ajaxMsg').fadeOut();
|
||||||
|
|
||||||
// Create the tooltips.
|
// Create the tooltips.
|
||||||
$('.purge-tooltip').tooltip();
|
$('.purge-tooltip').tooltip({ container: 'body' });
|
||||||
$('.edit-tooltip').tooltip();
|
$('.edit-tooltip').tooltip({ container: 'body' });
|
||||||
$('.transcode-tooltip').tooltip();
|
$('.transcode-tooltip').tooltip({ container: 'body' });
|
||||||
$('.media-type-tooltip').tooltip();
|
$('.media-type-tooltip').tooltip({ container: 'body' });
|
||||||
$('.thumb-tooltip').popover({
|
$('.thumb-tooltip').popover({
|
||||||
html: true,
|
html: true,
|
||||||
container: 'body',
|
container: 'body',
|
||||||
|
@@ -220,13 +220,14 @@ users_list_table_options = {
|
|||||||
$('#ajaxMsg').fadeOut();
|
$('#ajaxMsg').fadeOut();
|
||||||
|
|
||||||
// Create the tooltips.
|
// Create the tooltips.
|
||||||
$('.purge-tooltip').tooltip();
|
$('.purge-tooltip').tooltip({ container: 'body' });
|
||||||
$('.edit-tooltip').tooltip();
|
$('.edit-tooltip').tooltip({ container: 'body' });
|
||||||
$('.transcode-tooltip').tooltip();
|
$('.transcode-tooltip').tooltip({ container: 'body' });
|
||||||
$('.media-type-tooltip').tooltip();
|
$('.media-type-tooltip').tooltip({ container: 'body' });
|
||||||
$('.watched-tooltip').tooltip();
|
$('.watched-tooltip').tooltip({ container: 'body' });
|
||||||
$('.thumb-tooltip').popover({
|
$('.thumb-tooltip').popover({
|
||||||
html: true,
|
html: true,
|
||||||
|
container: 'body',
|
||||||
trigger: 'hover',
|
trigger: 'hover',
|
||||||
placement: 'right',
|
placement: 'right',
|
||||||
template: '<div class="popover history-thumbnail-popover" role="tooltip"><div class="arrow" style="top: 50%;"></div><div class="popover-content"></div></div>',
|
template: '<div class="popover history-thumbnail-popover" role="tooltip"><div class="arrow" style="top: 50%;"></div><div class="popover-content"></div></div>',
|
||||||
|
@@ -100,6 +100,7 @@ def extract_plexivity_xml(xml=None):
|
|||||||
video_resolution = helpers.get_xml_attr(c, 'videoResolution')
|
video_resolution = helpers.get_xml_attr(c, 'videoResolution')
|
||||||
width = helpers.get_xml_attr(c, 'width')
|
width = helpers.get_xml_attr(c, 'width')
|
||||||
|
|
||||||
|
ip_address = ''
|
||||||
machine_id = ''
|
machine_id = ''
|
||||||
platform = ''
|
platform = ''
|
||||||
player = ''
|
player = ''
|
||||||
@@ -107,7 +108,7 @@ def extract_plexivity_xml(xml=None):
|
|||||||
if a.getElementsByTagName('Player'):
|
if a.getElementsByTagName('Player'):
|
||||||
player_elem = a.getElementsByTagName('Player')
|
player_elem = a.getElementsByTagName('Player')
|
||||||
for d in player_elem:
|
for d in player_elem:
|
||||||
ip_address = helpers.get_xml_attr(d, 'address')
|
ip_address = helpers.get_xml_attr(d, 'address').split('::ffff:')[-1]
|
||||||
machine_id = helpers.get_xml_attr(d, 'machineIdentifier')
|
machine_id = helpers.get_xml_attr(d, 'machineIdentifier')
|
||||||
platform = helpers.get_xml_attr(d, 'platform')
|
platform = helpers.get_xml_attr(d, 'platform')
|
||||||
player = helpers.get_xml_attr(d, 'title')
|
player = helpers.get_xml_attr(d, 'title')
|
||||||
|
@@ -44,7 +44,11 @@ def refresh_users():
|
|||||||
if user_tokens and user_tokens['server_token']:
|
if user_tokens and user_tokens['server_token']:
|
||||||
pms_connect = pmsconnect.PmsConnect(token=user_tokens['server_token'])
|
pms_connect = pmsconnect.PmsConnect(token=user_tokens['server_token'])
|
||||||
library_details = pms_connect.get_server_children()
|
library_details = pms_connect.get_server_children()
|
||||||
shared_libraries = ';'.join(d['section_id'] for d in library_details['libraries_list'])
|
|
||||||
|
if library_details:
|
||||||
|
shared_libraries = ';'.join(d['section_id'] for d in library_details['libraries_list'])
|
||||||
|
else:
|
||||||
|
shared_libraries = ''
|
||||||
|
|
||||||
control_value_dict = {"user_id": item['user_id']}
|
control_value_dict = {"user_id": item['user_id']}
|
||||||
new_value_dict = {"username": item['username'],
|
new_value_dict = {"username": item['username'],
|
||||||
@@ -109,7 +113,7 @@ def get_real_pms_url():
|
|||||||
if connections:
|
if connections:
|
||||||
# Get connection with matching address, otherwise return first connection
|
# Get connection with matching address, otherwise return first connection
|
||||||
conn = next((c for c in connections if c['address'] == plexpy.CONFIG.PMS_IP
|
conn = next((c for c in connections if c['address'] == plexpy.CONFIG.PMS_IP
|
||||||
and c['port'] == plexpy.CONFIG.PMS_PORT), connections[0])
|
and c['port'] == str(plexpy.CONFIG.PMS_PORT)), connections[0])
|
||||||
plexpy.CONFIG.__setattr__('PMS_URL', conn['uri'])
|
plexpy.CONFIG.__setattr__('PMS_URL', conn['uri'])
|
||||||
plexpy.CONFIG.write()
|
plexpy.CONFIG.write()
|
||||||
logger.info(u"PlexPy PlexTV :: Server URL retrieved.")
|
logger.info(u"PlexPy PlexTV :: Server URL retrieved.")
|
||||||
|
@@ -14,7 +14,7 @@
|
|||||||
# along with PlexPy. If not, see <http://www.gnu.org/licenses/>.
|
# along with PlexPy. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import threading
|
import threading
|
||||||
import urllib2
|
import urllib
|
||||||
from urlparse import urlparse
|
from urlparse import urlparse
|
||||||
|
|
||||||
import plexpy
|
import plexpy
|
||||||
@@ -387,7 +387,7 @@ class PmsConnect(object):
|
|||||||
|
|
||||||
Output: array
|
Output: array
|
||||||
"""
|
"""
|
||||||
uri = '/search?query=' + urllib2.quote(query.encode('utf8')) + track
|
uri = '/search?query=' + urllib.quote(query.encode('utf8')) + track
|
||||||
request = self.request_handler.make_request(uri=uri,
|
request = self.request_handler.make_request(uri=uri,
|
||||||
proto=self.protocol,
|
proto=self.protocol,
|
||||||
request_type='GET',
|
request_type='GET',
|
||||||
@@ -1021,6 +1021,8 @@ class PmsConnect(object):
|
|||||||
session_output = self.get_session_each(session_type, session_)
|
session_output = self.get_session_each(session_type, session_)
|
||||||
session_list.append(session_output)
|
session_list.append(session_output)
|
||||||
|
|
||||||
|
session_list = sorted(session_list, key=lambda k: k['session_key'])
|
||||||
|
|
||||||
output = {'stream_count': helpers.get_xml_attr(xml_head[0], 'size'),
|
output = {'stream_count': helpers.get_xml_attr(xml_head[0], 'size'),
|
||||||
'sessions': session.mask_session_info(session_list)
|
'sessions': session.mask_session_info(session_list)
|
||||||
}
|
}
|
||||||
@@ -1902,10 +1904,12 @@ class PmsConnect(object):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if img:
|
if img:
|
||||||
uri = '/photo/:/transcode?url=http://127.0.0.1:32400%s' % img
|
params = {'url': 'http://127.0.0.1:32400%s' % img}
|
||||||
if width.isdigit() and height.isdigit():
|
if width.isdigit() and height.isdigit():
|
||||||
uri += '&width=%s&height=%s' % (width, height)
|
params['width'] = width
|
||||||
|
params['height'] = height
|
||||||
|
|
||||||
|
uri = '/photo/:/transcode?%s' % urllib.urlencode(params)
|
||||||
result = self.request_handler.make_request(uri=uri,
|
result = self.request_handler.make_request(uri=uri,
|
||||||
proto=self.protocol,
|
proto=self.protocol,
|
||||||
request_type='GET',
|
request_type='GET',
|
||||||
|
@@ -1,2 +1,2 @@
|
|||||||
PLEXPY_VERSION = "master"
|
PLEXPY_VERSION = "master"
|
||||||
PLEXPY_RELEASE_VERSION = "1.4.3"
|
PLEXPY_RELEASE_VERSION = "1.4.5"
|
||||||
|
Reference in New Issue
Block a user