Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
181 lines (141 sloc) 5.58 KB
# Author: Nic Wolfe <>
# URL:
# This file is part of Sick Beard.
# Sick Beard is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# Sick Beard is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with Sick Beard. If not, see <>.
import datetime
import cherrypy
import sickbeard
MESSAGE = 'notice'
ERROR = 'error'
class Notifications(object):
A queue of Notification objects.
def __init__(self):
self._messages = []
self._errors = []
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
self._messages.append(Notification(title, message, MESSAGE))
def error(self, title, message=''):
Add an error notification to the queue
title: The title of the notification
message: The message portion of the notification
self._errors.append(Notification(title, message, ERROR))
def get_notifications(self):
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
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()]
# static notification queue object
notifications = Notifications()
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
self._when =
self._seen = []
if type:
self.type = type
self.type = MESSAGE
if timeout:
self._timeout = timeout
self._timeout = datetime.timedelta(minutes=1)
def is_new(self):
Returns True if the notification hasn't been displayed to the current client (aka IP address).
return cherrypy.request.remote.ip not in self._seen
def is_expired(self):
Returns True if the notification is older than the specified timeout value.
return - self._when > self._timeout
def see(self):
Returns this notification object and marks it as seen by the client ip
return self
class ProgressIndicator():
def __init__(self, percentComplete=0, currentStatus={'title': ''}):
self.percentComplete = percentComplete
self.currentStatus = currentStatus
class ProgressIndicators():
_pi = {'massUpdate': [],
'massAdd': [],
'dailyUpdate': []
def getIndicator(name):
if name not in ProgressIndicators._pi:
return []
# if any of the progress indicators are done take them off the list
for curPI in ProgressIndicators._pi[name]:
if curPI != None and curPI.percentComplete() == 100:
# return the list of progress indicators associated with this name
return ProgressIndicators._pi[name]
def setIndicator(name, 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 = name
def numTotal(self):
return len(self.queueItemList)
def numFinished(self):
return len([x for x in self.queueItemList if not x.isInQueue()])
def numRemaining(self):
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
if curItem in self.queueItemList:
return "Unknown"
def percentComplete(self):
numFinished = self.numFinished()
numTotal = self.numTotal()
if numTotal == 0:
return 0
return int(float(numFinished)/float(numTotal)*100)
class LoadingTVShow():
def __init__(self, dir):
self.dir = dir = None
Jump to Line
Something went wrong with that request. Please try again.