Compare commits
7 Commits
v2.0.6-bet
...
v2.0.7-bet
Author | SHA1 | Date | |
---|---|---|---|
![]() |
04d4ffb63d | ||
![]() |
80b318b45c | ||
![]() |
19969a8b1f | ||
![]() |
b84888356f | ||
![]() |
c9436195f3 | ||
![]() |
98cfb50571 | ||
![]() |
b67884ea7f |
11
CHANGELOG.md
11
CHANGELOG.md
@@ -1,5 +1,14 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## v2.0.7-beta (2018-01-01)
|
||||||
|
|
||||||
|
* Monitoring:
|
||||||
|
* Fix: Incorrect LAN/WAN location on activity cards.
|
||||||
|
* Fix: Paused time not recording correctly.
|
||||||
|
* Other:
|
||||||
|
* Fix: Failed to retrieve synced items when there are special characters in the title.
|
||||||
|
|
||||||
|
|
||||||
## v2.0.6-beta (2017-12-31)
|
## v2.0.6-beta (2017-12-31)
|
||||||
|
|
||||||
* Monitoring:
|
* Monitoring:
|
||||||
@@ -17,8 +26,8 @@
|
|||||||
* Fix: Error sending Join notifications.
|
* Fix: Error sending Join notifications.
|
||||||
* UI:
|
* UI:
|
||||||
* New: Added total required bandwidth in the activity header.
|
* New: Added total required bandwidth in the activity header.
|
||||||
* Fix: Failing to retrieve releases from GitHub.
|
|
||||||
* Other:
|
* Other:
|
||||||
|
* Fix: Failing to retrieve releases from GitHub.
|
||||||
* Fix: CherryPy SSL connection warning. (Thanks @felixbuenemann)
|
* Fix: CherryPy SSL connection warning. (Thanks @felixbuenemann)
|
||||||
* Fix: Sanitize script output in logs.
|
* Fix: Sanitize script output in logs.
|
||||||
* Change: Login sessions persists across server restarts.
|
* Change: Login sessions persists across server restarts.
|
||||||
|
@@ -64,7 +64,7 @@
|
|||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
</button>
|
</button>
|
||||||
<a class="navbar-brand svg" href="home">
|
<a class="navbar-brand" href="home" title="Tautulli">
|
||||||
<object data="${http_root}images/logo-tautulli.svg" type="image/svg+xml" style="height: 45px;"></object>
|
<object data="${http_root}images/logo-tautulli.svg" type="image/svg+xml" style="height: 45px;"></object>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -13,18 +13,6 @@ a:focus {
|
|||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
a.svg {
|
|
||||||
position: relative;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
a.svg:after {
|
|
||||||
content: "";
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
right: 0;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
}
|
|
||||||
select, .react-selectize.bootstrap3.root-node .react-selectize-control {
|
select, .react-selectize.bootstrap3.root-node .react-selectize-control {
|
||||||
margin: 5px 0 5px 0;
|
margin: 5px 0 5px 0;
|
||||||
border: 2px solid #444;
|
border: 2px solid #444;
|
||||||
@@ -118,6 +106,9 @@ img {
|
|||||||
-moz-box-sizing: content-box;
|
-moz-box-sizing: content-box;
|
||||||
box-sizing: content-box;
|
box-sizing: content-box;
|
||||||
}
|
}
|
||||||
|
object {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
.navbar {
|
.navbar {
|
||||||
background: #000;
|
background: #000;
|
||||||
-webkit-box-shadow: 0 0 0 3px rgba(0,0,0,.2);
|
-webkit-box-shadow: 0 0 0 3px rgba(0,0,0,.2);
|
||||||
|
@@ -272,7 +272,7 @@ DOCUMENTATION :: END
|
|||||||
<div class="sub-heading">Location</div>
|
<div class="sub-heading">Location</div>
|
||||||
<div class="sub-value">
|
<div class="sub-value">
|
||||||
% if data['ip_address'] != 'N/A':
|
% if data['ip_address'] != 'N/A':
|
||||||
${'LAN' if data['local'] == 1 else 'WAN'}: <span class="ip-container"><span class="ip-address">${data['ip_address']}</span></span>
|
${data['location'].upper()}: <span class="ip-container"><span class="ip-address">${data['ip_address']}</span></span>
|
||||||
<a href="#" class="external_ip-modal" data-toggle="modal" data-target="#ip-info-modal" data-ip="${data['ip_address']}">
|
<a href="#" class="external_ip-modal" data-toggle="modal" data-target="#ip-info-modal" data-ip="${data['ip_address']}">
|
||||||
<span id="external_ip-${sk}" class="external-ip-tooltip" data-toggle="tooltip" title="Lookup External IP" style="display: none;"><i class="fa fa-map-marker"></i></span>
|
<span id="external_ip-${sk}" class="external-ip-tooltip" data-toggle="tooltip" title="Lookup External IP" style="display: none;"><i class="fa fa-map-marker"></i></span>
|
||||||
</a>
|
</a>
|
||||||
|
@@ -460,7 +460,7 @@ class ActivityProcessor(object):
|
|||||||
if str(session_key).isdigit():
|
if str(session_key).isdigit():
|
||||||
self.db.action('DELETE FROM sessions WHERE session_key = ?', [session_key])
|
self.db.action('DELETE FROM sessions WHERE session_key = ?', [session_key])
|
||||||
|
|
||||||
def set_session_last_paused(self, session_key=None, timestamp=None ):
|
def set_session_last_paused(self, session_key=None, timestamp=None):
|
||||||
if str(session_key).isdigit():
|
if str(session_key).isdigit():
|
||||||
result = self.db.select('SELECT last_paused, paused_counter '
|
result = self.db.select('SELECT last_paused, paused_counter '
|
||||||
'FROM sessions '
|
'FROM sessions '
|
||||||
@@ -469,7 +469,7 @@ class ActivityProcessor(object):
|
|||||||
paused_counter = None
|
paused_counter = None
|
||||||
for session in result:
|
for session in result:
|
||||||
if session['last_paused']:
|
if session['last_paused']:
|
||||||
paused_offset = timestamp - int(session['last_paused'])
|
paused_offset = int(time.time()) - int(session['last_paused'])
|
||||||
if session['paused_counter']:
|
if session['paused_counter']:
|
||||||
paused_counter = int(session['paused_counter']) + int(paused_offset)
|
paused_counter = int(session['paused_counter']) + int(paused_offset)
|
||||||
else:
|
else:
|
||||||
|
@@ -149,17 +149,17 @@ class HTTPHandler(object):
|
|||||||
logger.warn(u"Failed to access uri endpoint %s. Status code %r" % (self.uri, response_status))
|
logger.warn(u"Failed to access uri endpoint %s. Status code %r" % (self.uri, response_status))
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def _http_format_output(self, response_content, response_headers):
|
def _http_format_output(self, response_content, response_headers):
|
||||||
"""Formats the request response to the desired type"""
|
"""Formats the request response to the desired type"""
|
||||||
try:
|
try:
|
||||||
if self.output_format == 'text':
|
if self.output_format == 'text':
|
||||||
output = response_content.decode('utf-8', 'ignore')
|
output = response_content.decode('utf-8', 'ignore')
|
||||||
if self.output_format == 'dict':
|
if self.output_format == 'dict':
|
||||||
output = helpers.convert_xml_to_dict(response_content.decode('utf-8', 'ignore'))
|
output = helpers.convert_xml_to_dict(response_content)
|
||||||
elif self.output_format == 'json':
|
elif self.output_format == 'json':
|
||||||
output = helpers.convert_xml_to_json(response_content.decode('utf-8', 'ignore'))
|
output = helpers.convert_xml_to_json(response_content)
|
||||||
elif self.output_format == 'xml':
|
elif self.output_format == 'xml':
|
||||||
output = helpers.parse_xml(response_content.decode('utf-8', 'ignore'))
|
output = helpers.parse_xml(response_content)
|
||||||
else:
|
else:
|
||||||
output = response_content
|
output = response_content
|
||||||
|
|
||||||
|
@@ -195,7 +195,6 @@ class PmsConnect(object):
|
|||||||
"""
|
"""
|
||||||
uri = '/hubs/metadata/' + rating_key + '/related'
|
uri = '/hubs/metadata/' + rating_key + '/related'
|
||||||
request = self.request_handler.make_request(uri=uri,
|
request = self.request_handler.make_request(uri=uri,
|
||||||
proto=self.protocol,
|
|
||||||
request_type='GET',
|
request_type='GET',
|
||||||
output_format=output_format)
|
output_format=output_format)
|
||||||
|
|
||||||
|
@@ -1,2 +1,2 @@
|
|||||||
PLEXPY_BRANCH = "beta"
|
PLEXPY_BRANCH = "beta"
|
||||||
PLEXPY_RELEASE_VERSION = "v2.0.6-beta"
|
PLEXPY_RELEASE_VERSION = "v2.0.7-beta"
|
||||||
|
@@ -178,6 +178,10 @@ def checkGithub(auto_update=False):
|
|||||||
url = 'https://api.github.com/repos/%s/plexpy/releases' % plexpy.CONFIG.GIT_USER
|
url = 'https://api.github.com/repos/%s/plexpy/releases' % plexpy.CONFIG.GIT_USER
|
||||||
releases = request.request_json(url, timeout=20, whitelist_status_code=404, validator=lambda x: type(x) == list)
|
releases = request.request_json(url, timeout=20, whitelist_status_code=404, validator=lambda x: type(x) == list)
|
||||||
|
|
||||||
|
if releases is None:
|
||||||
|
logger.warn('Could not get releases from GitHub.')
|
||||||
|
return plexpy.LATEST_VERSION
|
||||||
|
|
||||||
if plexpy.CONFIG.GIT_BRANCH == 'master':
|
if plexpy.CONFIG.GIT_BRANCH == 'master':
|
||||||
release = next((r for r in releases if not r['prerelease']), releases[0])
|
release = next((r for r in releases if not r['prerelease']), releases[0])
|
||||||
elif plexpy.CONFIG.GIT_BRANCH == 'beta':
|
elif plexpy.CONFIG.GIT_BRANCH == 'beta':
|
||||||
|
Reference in New Issue
Block a user