Notification update

This commit is contained in:
Ruud
2011-08-18 15:52:07 +02:00
parent b69bab4235
commit 31e57b9510
15 changed files with 112 additions and 70 deletions
+30 -3
View File
@@ -1,20 +1,47 @@
from couchpotato.api import addApiView
from couchpotato.core.event import addEvent from couchpotato.core.event import addEvent
from couchpotato.core.helpers.request import jsonified from couchpotato.core.helpers.request import jsonified
from couchpotato.core.logger import CPLog
from couchpotato.core.plugins.base import Plugin from couchpotato.core.plugins.base import Plugin
log = CPLog(__name__)
class Notification(Plugin): class Notification(Plugin):
default_title = 'CouchPotato' default_title = 'CouchPotato'
test_message = 'ZOMG Lazors Pewpewpew!' test_message = 'ZOMG Lazors Pewpewpew!'
listen_to = []
dont_listen_to = []
def __init__(self): def __init__(self):
addEvent('notify', self.notify) addEvent('notify', self.notify)
addEvent('notify.%s' % self.getName().lower(), self.notify)
def notify(self, message = '', data = {}): addApiView(self.testNotifyName(), self.test)
def notify(self, message = '', data = {}, type = ''):
pass pass
def test(self): def test(self):
success = self.notify(message = self.test_message)
return jsonified({'success': success}) test_type = self.testNotifyName()
log.info('Sending test to %s' % test_type)
success = self.notify(
message = self.test_message,
data = {},
type = test_type
)
#return jsonified({'success': success})
def dontNotify(self, type = ''):
return (not type in self.listen_to and len(self.listen_to) == 0 and type != self.testNotifyName()) \
or type in self.dont_listen_to \
or self.isDisabled()
def testNotifyName(self):
return 'notify.%s.test' % self.getName().lower()
+3 -3
View File
@@ -2,13 +2,13 @@ from couchpotato.api import addApiView
from couchpotato.core.event import addEvent, fireEvent from couchpotato.core.event import addEvent, fireEvent
from couchpotato.core.helpers.request import jsonified from couchpotato.core.helpers.request import jsonified
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
from couchpotato.core.plugins.base import Plugin from couchpotato.core.notifications.base import Notification
import time import time
log = CPLog(__name__) log = CPLog(__name__)
class CoreNotifier(Plugin): class CoreNotifier(Notification):
messages = [] messages = []
@@ -22,7 +22,7 @@ class CoreNotifier(Plugin):
static = self.registerStatic(__file__) static = self.registerStatic(__file__)
fireEvent('register_script', static + 'notification.js') fireEvent('register_script', static + 'notification.js')
def notify(self, message = '', data = {}): def notify(self, message = '', data = {}, type = None):
self.add(data = { self.add(data = {
'message': message, 'message': message,
'raw': data, 'raw': data,
+3 -9
View File
@@ -12,19 +12,13 @@ log = CPLog(__name__)
class Growl(Notification): class Growl(Notification):
def __init__(self): listen_to = ['movie.downloaded', 'movie.snatched']
addEvent('notify', self.notify)
addEvent('notify.growl', self.notify)
addApiView('notify.growl.test', self.test)
def conf(self, attr): def conf(self, attr):
return Env.setting(attr, 'growl') return Env.setting(attr, 'growl')
def notify(self, message = '', data = {}): def notify(self, message = '', data = {}, type = None):
if self.dontNotify(type): return
if self.isDisabled():
return
hosts = [x.strip() for x in self.conf('host').split(",")] hosts = [x.strip() for x in self.conf('host').split(",")]
password = self.conf('password') password = self.conf('password')
@@ -0,0 +1,6 @@
from .main import History
def start():
return History()
config = []
@@ -0,0 +1,33 @@
from couchpotato import get_session
from couchpotato.core.event import addEvent
from couchpotato.core.logger import CPLog
from couchpotato.core.notifications.base import Notification
from couchpotato.core.settings.model import History as Hist
import time
log = CPLog(__name__)
class History(Notification):
listen_to = ['movie.downloaded', 'movie.snatched', 'movie.renaming.']
def __init__(self):
addEvent('notify', self.notify)
addEvent('app.load', self.test)
def notify(self, message = '', data = {}, type = None):
if self.dontNotify(type): return
db = get_session()
history = Hist(
added = int(time.time()),
message = message,
type = type,
release_id = data.get('id', 0)
)
db.add(history)
db.commit()
+6 -9
View File
@@ -1,5 +1,4 @@
from couchpotato.api import addApiView from couchpotato.api import addApiView
from couchpotato.core.event import addEvent
from couchpotato.core.helpers.request import getParams, jsonified from couchpotato.core.helpers.request import getParams, jsonified
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
from couchpotato.core.notifications.base import Notification from couchpotato.core.notifications.base import Notification
@@ -19,11 +18,11 @@ log = CPLog(__name__)
class NMJ(Notification): class NMJ(Notification):
def __init__(self): listen_to = ['movie.downloaded', 'movie.snatched']
addEvent('notify', self.notify)
addEvent('notify.nmj', self.notify) def __init__(self):
super(NMJ, self).__init__()
addApiView('notify.nmj.test', self.test)
addApiView('notify.nmj.auto_config', self.autoConfig) addApiView('notify.nmj.auto_config', self.autoConfig)
def conf(self, attr): def conf(self, attr):
@@ -76,10 +75,8 @@ class NMJ(Notification):
'mount': mount, 'mount': mount,
}) })
def notify(self, message = '', data = {}): def notify(self, message = '', data = {}, type = None):
if self.dontNotify(type): return
if self.isDisabled():
return False
host = self.conf('host') host = self.conf('host')
mount = self.conf('mount') mount = self.conf('mount')
@@ -16,19 +16,13 @@ class Notifo(Notification):
url = 'https://api.notifo.com/v1/send_notification' url = 'https://api.notifo.com/v1/send_notification'
def __init__(self): listen_to = ['movie.downloaded', 'movie.snatched']
addEvent('notify', self.notify)
addEvent('notify.notifo', self.notify)
addApiView('notify.notifo.test', self.test)
def conf(self, attr): def conf(self, attr):
return Env.setting(attr, 'notifo') return Env.setting(attr, 'notifo')
def notify(self, message = '', data = {}): def notify(self, message = '', data = {}, type = None):
if self.dontNotify(type): return
if self.isDisabled():
return False
try: try:
data = urllib.urlencode({ data = urllib.urlencode({
+3 -9
View File
@@ -10,16 +10,10 @@ log = CPLog(__name__)
class Plex(Notification): class Plex(Notification):
def __init__(self): listen_to = ['movie.downloaded', 'movie.snatched']
addEvent('notify', self.notify)
addEvent('notify.plex', self.notify)
addApiView('notify.plex.test', self.test) def notify(self, message = '', data = {}, type = None):
if self.dontNotify(type): return
def notify(self, message = '', data = {}):
if self.isDisabled():
return
log.info('Sending notification to Plex') log.info('Sending notification to Plex')
hosts = [x.strip() for x in self.conf('host').split(",")] hosts = [x.strip() for x in self.conf('host').split(",")]
+3 -11
View File
@@ -1,5 +1,3 @@
from couchpotato.api import addApiView
from couchpotato.core.event import addEvent
from couchpotato.core.helpers.encoding import toUnicode from couchpotato.core.helpers.encoding import toUnicode
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
from couchpotato.core.notifications.base import Notification from couchpotato.core.notifications.base import Notification
@@ -11,16 +9,10 @@ log = CPLog(__name__)
class Prowl(Notification): class Prowl(Notification):
def __init__(self): listen_to = ['movie.downloaded', 'movie.snatched']
addEvent('notify', self.notify)
addEvent('notify.prowl', self.notify)
addApiView('notify.prowl.test', self.test) def notify(self, message = '', data = {}, type = None):
if self.dontNotify(type): return
def notify(self, message = '', data = {}):
if self.isDisabled():
return
http_handler = HTTPSConnection('api.prowlapp.com') http_handler = HTTPSConnection('api.prowlapp.com')
+3 -11
View File
@@ -1,5 +1,3 @@
from couchpotato.api import addApiView
from couchpotato.core.event import addEvent
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
from couchpotato.core.notifications.base import Notification from couchpotato.core.notifications.base import Notification
import base64 import base64
@@ -11,16 +9,10 @@ log = CPLog(__name__)
class XBMC(Notification): class XBMC(Notification):
def __init__(self): listen_to = ['movie.downloaded', 'movie.snatched']
addEvent('notify', self.notify)
addEvent('notify.xbmc', self.notify)
addApiView('notify.xbmc.test', self.test) def notify(self, message = '', data = {}, type = None):
if self.dontNotify(type): return
def notify(self, message = '', data = {}):
if self.isDisabled():
return
for host in [x.strip() for x in self.conf('host').split(",")]: for host in [x.strip() for x in self.conf('host').split(",")]:
self.send({'command': 'ExecBuiltIn', 'parameter': 'Notification(CouchPotato, %s)' % message}, host) self.send({'command': 'ExecBuiltIn', 'parameter': 'Notification(CouchPotato, %s)' % message}, host)
+2 -2
View File
@@ -5,7 +5,7 @@ import os.path
import re import re
class Plugin(): class Plugin(object):
def conf(self, attr, default = None): def conf(self, attr, default = None):
return Env.setting(attr, self.getName().lower(), default = default) return Env.setting(attr, self.getName().lower(), default = default)
@@ -35,4 +35,4 @@ class Plugin():
return not self.isEnabled() return not self.isEnabled()
def isEnabled(self): def isEnabled(self):
return self.conf('enabled') return self.conf('enabled') or self.conf('enabled') == None
+9 -1
View File
@@ -149,6 +149,10 @@ class Renamer(Plugin):
if multiple: if multiple:
cd += 1 cd += 1
# Notify on download
download_message = 'Download of %s (%s) successful.' % (group['library']['titles'][0]['title'], replacements['quality'])
fireEvent('notify', type = 'movie.downloaded', message = download_message, data = replacements)
# Before renaming, remove the lower quality files # Before renaming, remove the lower quality files
db = get_session() db = get_session()
library = db.query(Library).filter_by(identifier = group['library']['identifier']).first() library = db.query(Library).filter_by(identifier = group['library']['identifier']).first()
@@ -172,6 +176,10 @@ class Renamer(Plugin):
for rename_me in rename_files: for rename_me in rename_files:
filename = os.path.basename(rename_me) filename = os.path.basename(rename_me)
rename_files[rename_me] = rename_me.replace(filename, '_EXISTS_%s' % filename) rename_files[rename_me] = rename_me.replace(filename, '_EXISTS_%s' % filename)
# Notify on rename fail
download_message = 'Renaming of %s (%s) canceled, exists in %s already.' % (movie.library.titles[0].title, group['meta_data']['quality']['label'], release.quality.label)
fireEvent('notify', type = 'movie.renaming.canceled', message = download_message, data = group)
break break
@@ -200,7 +208,7 @@ class Renamer(Plugin):
#print rename_me, rename_files[rename_me] #print rename_me, rename_files[rename_me]
# Search for trailers # Search for trailers etc
fireEvent('renamer.after', group) fireEvent('renamer.after', group)
def moveFile(self, old, dest, suppress = True): def moveFile(self, old, dest, suppress = True):
+3 -1
View File
@@ -91,7 +91,6 @@ class Searcher(Plugin):
successful = fireEvent('download', data = nzb, movie = movie, single = True) successful = fireEvent('download', data = nzb, movie = movie, single = True)
if successful: if successful:
log.info('Downloading of %s successful.' % nzb.get('name'))
# Mark release as snatched # Mark release as snatched
db = get_session() db = get_session()
@@ -105,6 +104,9 @@ class Searcher(Plugin):
mvie.status_id = snatched_status.get('id') mvie.status_id = snatched_status.get('id')
db.commit() db.commit()
log.info('Downloading of %s successful.' % nzb.get('name'))
fireEvent('notify', type = 'movie.snatched', message = 'Downloading of %s successful.' % nzb.get('name'), data = rls.to_dict())
return True return True
return False return False
+5 -2
View File
@@ -2,8 +2,8 @@ from elixir.entity import Entity
from elixir.fields import Field from elixir.fields import Field
from elixir.options import options_defaults from elixir.options import options_defaults
from elixir.relationships import OneToMany, ManyToOne from elixir.relationships import OneToMany, ManyToOne
from libs.elixir.options import using_options from elixir.options import using_options
from libs.elixir.relationships import ManyToMany from elixir.relationships import ManyToMany
from sqlalchemy.types import Integer, Unicode, UnicodeText, Boolean, Float, \ from sqlalchemy.types import Integer, Unicode, UnicodeText, Boolean, Float, \
String String
@@ -179,7 +179,10 @@ class History(Entity):
"""History of actions that are connected to a certain release, """History of actions that are connected to a certain release,
such as, renamed to, downloaded, deleted, download subtitles etc""" such as, renamed to, downloaded, deleted, download subtitles etc"""
added = Field(Integer)
message = Field(UnicodeText()) message = Field(UnicodeText())
type = Field(Unicode(50))
release = ManyToOne('Release') release = ManyToOne('Release')