Fixed issues with popup notifications.

This commit is contained in:
echel0n 2014-06-29 20:58:34 -07:00
parent eece317c75
commit 96fa0953e3
5 changed files with 23 additions and 40 deletions

View file

@ -14,10 +14,10 @@ function check_notifications() {
poll_interval = 5000;
$.each(data, function (name, data) {
$.pnotify({
type: data.type,
hide: data.type == 'notice',
title: data.title,
text: data.message
pnotify_type: data.type,
pnotify_hide: data.type == 'notice',
pnotify_title: data.title,
pnotify_text: data.message
});
});
},

View file

@ -123,7 +123,6 @@ HANDLE_REVERSE_PROXY = None
PROXY_SETTING = None
LOCALHOST_IP = None
REMOTE_IP = None
CPU_PRESET = None
@ -476,7 +475,7 @@ def initialize(consoleLogging=True):
GUI_NAME, HOME_LAYOUT, HISTORY_LAYOUT, DISPLAY_SHOW_SPECIALS, COMING_EPS_LAYOUT, COMING_EPS_SORT, COMING_EPS_DISPLAY_PAUSED, COMING_EPS_MISSED_RANGE, FUZZY_DATING, TRIM_ZERO, DATE_PRESET, TIME_PRESET, TIME_PRESET_W_SECONDS, \
METADATA_WDTV, METADATA_TIVO, METADATA_MEDE8ER, IGNORE_WORDS, CALENDAR_UNPROTECTED, CREATE_MISSING_SHOW_DIRS, \
ADD_SHOWS_WO_DIR, USE_SUBTITLES, SUBTITLES_LANGUAGES, SUBTITLES_DIR, SUBTITLES_SERVICES_LIST, SUBTITLES_SERVICES_ENABLED, SUBTITLES_HISTORY, SUBTITLES_FINDER_FREQUENCY, subtitlesFinderScheduler, \
USE_FAILED_DOWNLOADS, DELETE_FAILED, ANON_REDIRECT, LOCALHOST_IP, REMOTE_IP, TMDB_API_KEY, DEBUG, PROXY_SETTING, \
USE_FAILED_DOWNLOADS, DELETE_FAILED, ANON_REDIRECT, LOCALHOST_IP, TMDB_API_KEY, DEBUG, PROXY_SETTING, \
AUTOPOSTPROCESSER_FREQUENCY, DEFAULT_AUTOPOSTPROCESSER_FREQUENCY, MIN_AUTOPOSTPROCESSER_FREQUENCY, \
ANIME_DEFAULT, NAMING_ANIME, ANIMESUPPORT, USE_ANIDB, ANIDB_USERNAME, ANIDB_PASSWORD, ANIDB_USE_MYLIST, \
ANIME_SPLIT_HOME, maintenanceScheduler, SCENE_DEFAULT, RES

View file

@ -19,17 +19,13 @@
import datetime
import sickbeard
from tornado.web import RequestHandler
MESSAGE = 'notice'
ERROR = 'error'
class Notifications(object):
"""
A queue of Notification objects.
"""
def __init__(self):
self._messages = []
self._errors = []
@ -37,9 +33,9 @@ class Notifications(object):
def message(self, title, message=''):
"""
Add a regular notification to the queue
title: The title of the notification
message: The message portion of the notification
message: The message portion of the notification
"""
self._messages.append(Notification(title, message, MESSAGE))
@ -48,24 +44,24 @@ class Notifications(object):
Add an error notification to the queue
title: The title of the notification
message: The message portion of the notification
message: The message portion of the notification
"""
self._errors.append(Notification(title, message, ERROR))
def get_notifications(self):
def get_notifications(self, remote_ip='127.0.0.1'):
"""
Return all the available notifications in a list. Marks them all as seen
as it returns them. Also removes timed out Notifications from the queue.
Returns: A list of Notification objects
"""
# filter out expired notifications
# filter out expired notifications
self._errors = [x for x in self._errors if not x.is_expired()]
self._messages = [x for x in self._messages if not x.is_expired()]
# return any notifications that haven't been shown to the client already
return [x.see() for x in self._errors + self._messages if x.is_new()]
return [x.see(remote_ip) for x in self._errors + self._messages if x.is_new(remote_ip)]
# static notification queue object
notifications = Notifications()
@ -76,7 +72,6 @@ class Notification(object):
Represents a single notification. Tracks its own timeout and a list of which clients have
seen it before.
"""
def __init__(self, title, message='', type=None, timeout=None):
self.title = title
self.message = message
@ -94,11 +89,11 @@ class Notification(object):
else:
self._timeout = datetime.timedelta(minutes=1)
def is_new(self):
def is_new(self, remote_ip='127.0.0.1'):
"""
Returns True if the notification hasn't been displayed to the current client (aka IP address).
"""
return sickbeard.REMOTE_IP not in self._seen
return remote_ip not in self._seen
def is_expired(self):
"""
@ -107,25 +102,24 @@ class Notification(object):
return datetime.datetime.now() - self._when > self._timeout
def see(self):
def see(self, remote_ip='127.0.0.1'):
"""
Returns this notification object and marks it as seen by the client ip
"""
self._seen.append(sickbeard.REMOTE_IP)
self._seen.append(remote_ip)
return self
class ProgressIndicator():
def __init__(self, percentComplete=0, currentStatus={'title': ''}):
self.percentComplete = percentComplete
self.currentStatus = currentStatus
class ProgressIndicators():
_pi = {'massUpdate': [],
'massAdd': [],
'dailyUpdate': []
}
}
@staticmethod
def getIndicator(name):
@ -144,12 +138,10 @@ class ProgressIndicators():
def setIndicator(name, indicator):
ProgressIndicators._pi[name].append(indicator)
class QueueProgressIndicator():
"""
A class used by the UI to show the progress of the queue or a part of it.
"""
def __init__(self, name, queueItemList):
self.queueItemList = queueItemList
self.name = name
@ -164,8 +156,7 @@ class QueueProgressIndicator():
return len([x for x in self.queueItemList if x.isInQueue()])
def nextName(self):
for curItem in [
sickbeard.showQueueScheduler.action.currentItem] + sickbeard.showQueueScheduler.action.queue: #@UndefinedVariable
for curItem in [sickbeard.showQueueScheduler.action.currentItem]+sickbeard.showQueueScheduler.action.queue: #@UndefinedVariable
if curItem in self.queueItemList:
return curItem.name
@ -178,12 +169,9 @@ class QueueProgressIndicator():
if numTotal == 0:
return 0
else:
return int(float(numFinished) / float(numTotal) * 100)
return int(float(numFinished)/float(numTotal)*100)
class LoadingTVShow():
def __init__(self, dir):
self.dir = dir
self.show = None
self.show = None

View file

@ -1450,7 +1450,7 @@ class CMD_SickBeardGetMessages(ApiCall):
def run(self):
messages = []
for cur_notification in ui.notifications.get_notifications():
for cur_notification in ui.notifications.get_notifications(self.handler.request.remote_ip):
messages.append({"title": cur_notification.title,
"message": cur_notification.message,
"type": cur_notification.type})

View file

@ -144,10 +144,6 @@ def redirect(url, permanent=False, status=None):
@authenticated
class MainHandler(RequestHandler):
def __init__(self, application, request, **kwargs):
super(MainHandler, self).__init__(application, request, **kwargs)
sickbeard.REMOTE_IP = self.request.headers.get('X-Forwarded-For', self.request.headers.get('X-Real-Ip', self.request.remote_ip))
def http_error_401_handler(self):
""" Custom handler for 401 error """
return r'''<!DOCTYPE html>
@ -4305,7 +4301,7 @@ class UI(MainHandler):
def get_messages(self):
messages = {}
cur_notification_num = 1
for cur_notification in ui.notifications.get_notifications():
for cur_notification in ui.notifications.get_notifications(self.request.remote_ip):
messages['notification-' + str(cur_notification_num)] = {'title': cur_notification.title,
'message': cur_notification.message,
'type': cur_notification.type}