You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

184 lines
4.6 KiB

14 years ago
from couchpotato import get_session
from couchpotato.api import addApiView
from couchpotato.core.event import addEvent, fireEvent
from couchpotato.core.helpers.encoding import toUnicode
14 years ago
from couchpotato.core.helpers.request import jsonified, getParams, getParam
from couchpotato.core.logger import CPLog
from couchpotato.core.plugins.base import Plugin
14 years ago
from couchpotato.core.settings.model import Profile, ProfileType
log = CPLog(__name__)
class ProfilePlugin(Plugin):
to_dict = {'types': {}}
def __init__(self):
14 years ago
addEvent('profile.all', self.all)
addEvent('profile.default', self.default)
addApiView('profile.save', self.save)
14 years ago
addApiView('profile.save_order', self.saveOrder)
addApiView('profile.delete', self.delete)
addApiView('profile.list', self.allView, docs = {
'desc': 'List all available profiles',
'return': {'type': 'object', 'example': """{
'success': True,
'list': array, profiles
}"""}
})
addEvent('app.initialize', self.fill, priority = 90)
def allView(self):
return jsonified({
'success': True,
'list': self.all()
})
14 years ago
def all(self):
db = get_session()
profiles = db.query(Profile).all()
14 years ago
temp = []
for profile in profiles:
temp.append(profile.to_dict(self.to_dict))
14 years ago
return temp
def save(self):
14 years ago
params = getParams()
db = get_session()
p = db.query(Profile).filter_by(id = params.get('id')).first()
if not p:
p = Profile()
db.add(p)
14 years ago
p.label = toUnicode(params.get('label'))
14 years ago
p.order = params.get('order', p.order if p.order else 0)
p.core = params.get('core', False)
#delete old types
[db.delete(t) for t in p.types]
order = 0
for type in params.get('types', []):
t = ProfileType(
order = order,
finish = type.get('finish') if order > 0 else 1,
14 years ago
wait_for = params.get('wait_for'),
quality_id = type.get('quality_id')
)
p.types.append(t)
order += 1
db.commit()
profile_dict = p.to_dict(self.to_dict)
return jsonified({
'success': True,
'profile': profile_dict
})
def default(self):
db = get_session()
default = db.query(Profile).first()
return default.to_dict(self.to_dict)
14 years ago
def saveOrder(self):
params = getParams()
db = get_session()
order = 0
for profile in params.get('ids', []):
p = db.query(Profile).filter_by(id = profile).first()
p.hide = params.get('hidden')[order]
p.order = order
order += 1
db.commit()
return jsonified({
'success': True
})
def delete(self):
14 years ago
id = getParam('id')
db = get_session()
success = False
message = ''
try:
p = db.query(Profile).filter_by(id = id).first()
db.delete(p)
db.commit()
success = True
except Exception, e:
message = 'Failed deleting Profile: %s' % e
log.error(message)
return jsonified({
'success': success,
'message': message
})
def fill(self):
db = get_session();
profiles = [{
'label': 'Best',
'qualities': ['720p', '1080p', 'brrip', 'dvdrip']
}, {
'label': 'HD',
'qualities': ['720p', '1080p']
}, {
'label': 'SD',
'qualities': ['dvdrip', 'dvdr']
}]
# Create default quality profile
order = -2
for profile in profiles:
log.info('Creating default profile: %s' % profile.get('label'))
p = Profile(
label = toUnicode(profile.get('label')),
order = order
)
db.add(p)
quality_order = 0
for quality in profile.get('qualities'):
quality = fireEvent('quality.single', identifier = quality, single = True)
profile_type = ProfileType(
quality_id = quality.get('id'),
profile = p,
finish = True,
wait_for = 0,
order = quality_order
)
p.types.append(profile_type)
db.commit()
quality_order += 1
order += 1
return True