Compare commits

...

7 Commits

Author SHA1 Message Date
JonnyWong16
04d4ffb63d v2.0.7-beta 2018-01-01 18:05:26 -08:00
JonnyWong16
80b318b45c Check for failed to retrieve releases from GitHub 2018-01-01 16:09:26 -08:00
JonnyWong16
19969a8b1f Clickable logo using pointer-events 2018-01-01 11:11:17 -08:00
JonnyWong16
b84888356f Don't decode http response content 2017-12-31 22:13:39 -08:00
JonnyWong16
c9436195f3 Fix session pause timestamp 2017-12-31 20:50:03 -08:00
JonnyWong16
98cfb50571 Fix hub related request 2017-12-31 20:32:52 -08:00
JonnyWong16
b67884ea7f Fix LAN/WAN on activity cards 2017-12-31 20:30:48 -08:00
9 changed files with 26 additions and 23 deletions

View File

@@ -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.

View File

@@ -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>

View File

@@ -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);

View File

@@ -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>

View File

@@ -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:

View File

@@ -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

View File

@@ -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)

View File

@@ -1,2 +1,2 @@
PLEXPY_BRANCH = "beta" PLEXPY_BRANCH = "beta"
PLEXPY_RELEASE_VERSION = "v2.0.6-beta" PLEXPY_RELEASE_VERSION = "v2.0.7-beta"

View File

@@ -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':