Skip to content

NZBDrone Module #375

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Maraschino.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ def import_modules():
import modules.ipcamera
import modules.library
import modules.log
import modules.nzbdrone
import modules.nzbget
import modules.recently_added
import modules.remote
Expand Down
48 changes: 48 additions & 0 deletions maraschino/modules.py
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,54 @@
},
]
},
{
'name': 'nzbdrone',
'label': 'Manager - NZBDrone',
'description': 'Manage NZBDrone from within Maraschino',
'static': True,
'poll': 0,
'delay': 0,
'settings': [
{
'key': 'nzbdrone_api',
'value': '',
'description': 'nzbdrone API Key',
},
{
'key': 'nzbdrone_ip',
'value': '',
'description': 'nzbdrone Hostname',
},
{
'key': 'nzbdrone_port',
'value': '',
'description': 'nzbdrone Port',
},
{
'key': 'nzbdrone_webroot',
'value': '',
'description': 'nzbdrone Webroot',
},
{
'key': 'nzbdrone_https',
'value': '0',
'description': 'Use HTTPS',
'type': 'bool',
},
{
'key': 'nzbdrone_compact',
'value': '0',
'description': 'Compact view',
'type': 'bool',
},
{
'key': 'nzbdrone_airdate',
'value': '0',
'description': 'Show air date',
'type': 'bool',
},
]
},
{
'name': 'recently_added_albums',
'label': 'XBMC - Recent Albums',
Expand Down
186 changes: 186 additions & 0 deletions modules/nzbdrone.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
from flask import render_template, json, jsonify
import urllib2

from maraschino import app
from maraschino.tools import *
import datetime as DT


def nzbdrone_http():
if get_setting_value('nzbdrone_https') == '1':
return 'https://'
else:
return 'http://'


def nzbdrone_url():
port = get_setting_value('nzbdrone_port')
url_base = get_setting_value('nzbdrone_ip')
webroot = get_setting_value('nzbdrone_webroot')

if port:
url_base = '%s:%s' % (url_base, port)

if webroot:
url_base = '%s/%s' % (url_base, webroot)

url = '%s/api/' % (url_base)

return nzbdrone_http() + url


def nzbdrone_url_no_api():
port = get_setting_value('nzbdrone_port')
url_base = get_setting_value('nzbdrone_ip')
webroot = get_setting_value('nzbdrone_webroot')

if port:
url_base = '%s:%s' % (url_base, port)

if webroot:
url_base = '%s/%s' % (url_base, webroot)

return nzbdrone_http() + url_base


def nzbdrone_api(params=None, use_json=True, dev=False, post=False, data=None):
url = nzbdrone_url() + params
if post:
if dev:
print jsonify(data)
r = urllib2.Request(url, jsonify(data))
r.add_header('Content-Type', 'application/json')
else:
r = urllib2.Request(url)
r.add_header("X-Api-Key ", get_setting_value('nzbdrone_api'))

data = urllib2.urlopen(r).read()
if dev:
print url
print data
if use_json:
data = json.JSONDecoder().decode(data)
return data


def nzbdrone_root():
return nzbdrone_api('Rootfolder')


def nzbdrone_qualities():
return nzbdrone_api('QualityProfile')


@app.route('/xhr/nzbdrone/')
def xhr_nzbdrone():
params = 'Calendar?end=%s' %(DT.date.today() + DT.timedelta(days=7))

try:
nzbdrone = nzbdrone_api(params)
except Exception as e:
return render_template('nzbdrone/error.html',
nzbdrone=e,
)

return render_template('nzbdrone.html',
nzbdrone=nzbdrone,
)


@app.route('/xhr/nzbdrone/series/')
def series():
params = 'Series'

try:
nzbdrone = nzbdrone_api(params)
except Exception as e:
return render_template('nzbdrone/error.html',
nzbdrone=e,
)

return render_template('nzbdrone/series.html',
nzbdrone=nzbdrone,
)


@app.route('/xhr/nzbdrone/series/<id>/')
def serie(id):
try:
nzbdrone = nzbdrone_api('Series/%s' % (id))
episodes = nzbdrone_api('Episode?seriesId=%s' % (id))

for season in nzbdrone['seasons']:
e = []
season['have'] = 0
season['total'] = 0
for episode in episodes:
if season['seasonNumber'] == episode['seasonNumber']:
e.append(episode)
season['total'] += 1
if episode['hasFile']:
season['have'] += 1

season['episodes'] = e

except Exception as e:
return render_template('nzbdrone/error.html',
nzbdrone=e,
)

return render_template('nzbdrone/serie.html',
nzbdrone=nzbdrone,
episodes=episodes,
)


@app.route('/xhr/nzbdrone/history/')
def nzbdrone_history():
params = 'History?page=1&pageSize=50&sortKey=date&sortDir=desc'

try:
nzbdrone = nzbdrone_api(params)
except Exception as e:
return render_template('nzbdrone/error.html',
nzbdrone=e,
)

return render_template('nzbdrone/history.html',
nzbdrone=nzbdrone['records'],
)


@app.route('/xhr/nzbdrone/search/<query>/')
@requires_auth
def nzbdrone_search(query):
params = 'Series/lookup?term=%s' % (urllib2.quote(query))
try:
nzbdrone = nzbdrone_api(params)
root = nzbdrone_root()
qualities = nzbdrone_qualities()
except Exception as e:
return render_template('nzbdrone/error.html',
nzbdrone=e,
)

return render_template('nzbdrone/results.html',
nzbdrone=nzbdrone,
root=root,
qualities=qualities,
)


@app.route('/xhr/nzbdrone/search/', methods=['POST'])
@requires_auth
def nzbdrone_episode_search():
params = 'Command'
nzbdrone = nzbdrone_api(params, post=True, data=request.form, dev=True)
return nzbdrone


@app.route('/xhr/nzbdrone/add/', methods=['POST'])
@requires_auth
def nzbdrone_add():
params = 'Series'
nzbdrone = nzbdrone_api(params, post=True, data=request.form, dev=True)
return nzbdrone

70 changes: 69 additions & 1 deletion static/js/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -862,7 +862,6 @@ $(document).ready(function() {
var id = ($(this).attr('id'));
});


// Load show info from banner display
$(document).on('click', '#sickbeard .coming_ep .options img.banner', function(){
var tvdb = $(this).attr('id');
Expand Down Expand Up @@ -1136,6 +1135,75 @@ $(document).ready(function() {

/****** END SICKBEARD Functions *******/

/*** NZBDRONE ***/

// Loading wheel on menu click
$(document).on('click', '#nzbdrone .menu li', function() {
$(this).children().css('background', 'url('+WEBROOT+'/static/images/xhrloading.gif) no-repeat center').html('&nbsp;');
});

// All Shows menu
$(document).on('click', '#nzbdrone .menu .all', function(){
$.get(WEBROOT + '/xhr/nzbdrone/series', function(data){
$('#nzbdrone').replaceWith(data);
});
});

// Coming episodes Menu
$(document).on('click', '#nzbdrone .menu .upcoming', function(){
$.get(WEBROOT + '/xhr/nzbdrone', function(data){
$('#nzbdrone').replaceWith(data);
});
});

// History Menu
$(document).on('click', '#nzbdrone .menu .history', function(){
$.get(WEBROOT + '/xhr/nzbdrone/history/', function(data){
$('#nzbdrone').replaceWith(data);
});
});

// Load search results
$(document).on('keypress', '#nzbdrone .powerholder input', function(e){
if(e.which == 13){
e.preventDefault();
add_loading_gif($('#nzbdrone .powerholder .loading'));
$.get(WEBROOT + '/xhr/nzbdrone/search/'+$(this).val(), function(data){
$('#nzbdrone').replaceWith(data);
});
}
});

// Add search result
$(document).on('click', '#nzbdrone #results ul li', function(){
var el = $(this);
data = {
tvdbId: el.data('tvdbid'),
titleSlug: el.data('titleslug'),
qualityProfileId: el.find('.quality').val(),
title: el.data('title'),
rootFolderPath: el.find('.root').val(),
seasons: el.find('.season').val(),
};
$.post(WEBROOT+'/xhr/nzbdrone/add/', data, function(data, textStatus, xhr) {
console.log(data);
});
});

// Series view
$(document).on('click', '#nzbdrone #series li', function() {
add_loading_gif($(this));
$.get(WEBROOT + '/xhr/nzbdrone/series/'+$(this).attr('id'), function(data){
$('#nzbdrone').replaceWith(data);
});
});

// Toggle season
$(document).on('click', '#nzbdrone #serie h3', function() {
$("#nzbdrone #serie ul."+$(this).data('season')).toggle();
});
/****** END NZBDRONE Functions *******/

/*********** EXTRA SETTINGS *************/

$(document).on('click', '#extra_settings', function() {
Expand Down
8 changes: 8 additions & 0 deletions static/less/common.less
Original file line number Diff line number Diff line change
Expand Up @@ -187,3 +187,11 @@
{
color: #d92525;
}

.float-right{
float: right;
}

.float-left{
float: left;
}
Loading