From 1ee131a057e2416547e13f1fc526944306e00785 Mon Sep 17 00:00:00 2001 From: Lukas Heiniger Date: Wed, 4 Apr 2012 20:49:59 +0200 Subject: [PATCH 1/6] Better integration, fix issue #334 - Changes the default configuration to improve tool integration - Fixes Issue #334 - Adds a new option to keep XBMC awake while SABnzbd is downloading --- .../SABnzbd-Suite/config/settings.xml | 1 + .../SABnzbd-Suite/source/bin/SABnzbd-Suite.py | 384 ++++++++++++++++++ .../source/bin/SABnzbd-Suite.service | 359 ---------------- .../SABnzbd-Suite/source/bin/ini_tool | 117 ------ .../SABnzbd-Suite/source/default.py | 63 ++- .../resources/language/English/strings.xml | 2 + .../resources/language/German/strings.xml | 2 + .../source/resources/settings.xml | 4 + 8 files changed, 450 insertions(+), 482 deletions(-) mode change 100644 => 100755 packages/addons/service/downloadmanager/SABnzbd-Suite/config/settings.xml create mode 100755 packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.py delete mode 100755 packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.service delete mode 100755 packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/ini_tool mode change 100644 => 100755 packages/addons/service/downloadmanager/SABnzbd-Suite/source/default.py mode change 100644 => 100755 packages/addons/service/downloadmanager/SABnzbd-Suite/source/resources/settings.xml diff --git a/packages/addons/service/downloadmanager/SABnzbd-Suite/config/settings.xml b/packages/addons/service/downloadmanager/SABnzbd-Suite/config/settings.xml old mode 100644 new mode 100755 index 20c2a69b4e..6bdd7c4637 --- a/packages/addons/service/downloadmanager/SABnzbd-Suite/config/settings.xml +++ b/packages/addons/service/downloadmanager/SABnzbd-Suite/config/settings.xml @@ -2,4 +2,5 @@ + diff --git a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.py b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.py new file mode 100755 index 0000000000..83632e49f2 --- /dev/null +++ b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.py @@ -0,0 +1,384 @@ +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2012 Lukas Heiniger +# +# This Program 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 2, or (at your option) +# any later version. +# +# This Program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + + +# Initializes and launches SABnzbd, Couchpotato, Sickbeard and Headphones + +import os +import shutil +import xbmc +import signal +import subprocess +import urllib2 +from configobj import ConfigObj +from xml.dom.minidom import parseString +import logging + +logging.basicConfig(filename='/storage/.xbmc/temp/sabnzbd-suite.log', + filemode='w', + format='%(asctime)s SABnzbd-Suite: %(message)s', + level=logging.DEBUG) + + + +# helper functions +# ---------------- + +def createDir(dir): + if not os.path.isdir(dir): + os.makedirs(dir) + +def getAddonSetting(doc,id): + for element in doc.getElementsByTagName('setting'): + if element.getAttribute('id')==id: + return element.getAttribute('value') + +def loadWebInterface(url,user,pwd): + passman = urllib2.HTTPPasswordMgrWithDefaultRealm() + passman.add_password(None, url, user, pwd) + authhandler = urllib2.HTTPBasicAuthHandler(passman) + opener = urllib2.build_opener(authhandler) + urllib2.install_opener(opener) + pagehandle = urllib2.urlopen(url) + return pagehandle.read() + + + + +# define some things that we're gonna need, mainly paths +# ------------------------------------------------------ + +# addon +pAddon = os.path.expanduser('~/.xbmc/addons/service.downloadmanager.SABnzbd-Suite') +pAddonHome = os.path.expanduser('~/.xbmc/userdata/addon_data/service.downloadmanager.SABnzbd-Suite') + +# settings +pDefaultSuiteSettings = os.path.join(pAddon, 'settings-default.xml') +pSuiteSettings = os.path.join(pAddonHome, 'settings.xml') +pXbmcSettings = '/storage/.xbmc/userdata/guisettings.xml' +pSabNzbdSettings = os.path.join(pAddonHome, 'sabnzbd.ini') +pSickBeardSettings = os.path.join(pAddonHome, 'config.ini') +pCouchPotatoSettings = os.path.join(pAddonHome, 'couchpotato.ini') +pHeadphonesSettings = os.path.join(pAddonHome, 'headphones.ini') + +# directories +pSabNzbdComplete = '/storage/downloads' +pSabNzbdCompleteMov = '/storage/downloads/movies' +pSabNzbdIncomplete = '/storage/downloads/incomplete' +pSickBeardTvScripts = os.path.join(pAddon, 'SickBeard/autoProcessTV') +pSabNzbdScripts = os.path.join(pAddonHome, 'scripts') + + +# pylib +pPylib = os.path.join(pAddon, 'pylib') + +# service commands +sabnzbd = ['python', os.path.join(pAddon, 'SABnzbd/SABnzbd.py'), + '-d', '-f', pSabNzbdSettings, '-l 0'] +sickBeard = ['python', os.path.join(pAddon, 'SickBeard/SickBeard.py'), + '--daemon', '--datadir', pAddonHome] +couchPotato = ['python', os.path.join(pAddon, 'CouchPotato/CouchPotato.py'), + '-d', '--datadir', pAddonHome, '--config', pCouchPotatoSettings] +headphones = ['python', os.path.join(pAddon, 'Headphones/Headphones.py'), + '-d', '--datadir', pAddonHome, '--config', pHeadphonesSettings] + +# Other stuff +sabNzbdHost = '127.0.0.1:8081' +addonId = 'service.downloadmanager.SABnzbd-Suite' + + +# create directories and settings on first launch +# ----------------------------------------------- + +firstLaunch = not os.path.exists(pSabNzbdSettings) +if firstLaunch: + logging.debug('First launch, creating directories') + createDir(pAddonHome) + createDir(pSabNzbdComplete) + createDir(pSabNzbdCompleteMov) + createDir(pSabNzbdIncomplete) + createDir(pSabNzbdScripts) + # copy and sanitize sickbeards autoprocessing scripts + # text = open(pSickBeardTvScript, 'rb').read().replace('\r\n', '\n') + # dest = open(pTvScriptDestination, 'wb') + # dest.write('#!/usr/bin/python\n') # add missing shebang + # dest.write(text) + # dest.close() + shutil.copy(os.path.join(pSickBeardTvScripts,'sabToSickBeard.py'), pSabNzbdScripts) + shutil.copy(os.path.join(pSickBeardTvScripts,'autoProcessTV.py'), pSabNzbdScripts) + os.chmod(os.path.join(pSabNzbdScripts,'sabToSickBeard.py'), 0755) + # the settings file already exists if the user set settings before the first launch + if not os.path.exists(pSuiteSettings): + shutil.copy(pDefaultSuiteSettings, pSuiteSettings) + # make utilities executable + for utility in {'par2','unrar','unzip'}: + os.chmod(os.path.join(pAddon, 'bin', utility), 0755) + + + +# read addon and xbmc settings +# ---------------------------- + +# SABnzbd-Suite +fSuiteSettings = open(pSuiteSettings, 'r') +data = fSuiteSettings.read() +fSuiteSettings.close +suiteSettings = parseString(data) +user = getAddonSetting(suiteSettings, 'SABNZBD_USER') +pwd = getAddonSetting(suiteSettings, 'SABNZBD_PWD') +host = getAddonSetting(suiteSettings, 'SABNZBD_IP') +sabNzbdKeepAwake = getAddonSetting(suiteSettings, 'SABNZBD_KEEP_AWAKE') + +# XBMC +fXbmcSettings = open(pXbmcSettings, 'r') +data = fXbmcSettings.read() +fXbmcSettings.close +xbmcSettings = parseString(data) +xbmcServices = xbmcSettings.getElementsByTagName('services')[0] +xbmcPort = xbmcServices.getElementsByTagName('webserverport')[0].firstChild.data +xbmcUser = xbmcServices.getElementsByTagName('webserverusername')[0].firstChild.data +xbmcPwd = xbmcServices.getElementsByTagName('webserverpassword')[0].firstChild.data +logging.debug('User: ' + str(user) + ', Pwd: ' + str(pwd) + + ', Ip: ' + str(host) + ', Keep Awake: ' + str(sabNzbdKeepAwake)) +logging.debug('XBMC User: ' + str(xbmcUser) + ', XBMC Pwd: ' + str(xbmcPwd) + + ', XBMC Port: ' + str(xbmcPort)) + + + + +# prepare execution environment +# ----------------------------- + +signal.signal(signal.SIGCHLD, signal.SIG_DFL) +os.environ['PYTHONPATH'] = str(os.environ.get('PYTHONPATH')) + ':' + pPylib + + + + +# write SABnzbd settings +# ---------------------- + +sabNzbdConfig = ConfigObj(pSabNzbdSettings,create_empty=True) +defaultConfig = ConfigObj() +defaultConfig['misc'] = {} +defaultConfig['misc']['disable_api_key'] = '0' +defaultConfig['misc']['check_new_rel'] = '0' +defaultConfig['misc']['auto_browser'] = '0' +defaultConfig['misc']['username'] = user +defaultConfig['misc']['password'] = pwd +defaultConfig['misc']['port'] = '8081' +defaultConfig['misc']['https_port'] = '9081' +defaultConfig['misc']['https_cert'] = 'server.cert' +defaultConfig['misc']['https_key'] = 'server.key' +defaultConfig['misc']['host'] = host +defaultConfig['misc']['web_dir'] = 'Plush' +defaultConfig['misc']['web_dir2'] = 'Plush' +defaultConfig['misc']['web_color'] = 'gold' +defaultConfig['misc']['web_color2'] = 'gold' +defaultConfig['misc']['log_dir'] = 'logs' +defaultConfig['misc']['admin_dir'] = 'admin' +defaultConfig['misc']['nzb_backup_dir'] = 'backup' +defaultConfig['misc']['script_dir'] = 'scripts' + +if firstLaunch: + defaultConfig['misc']['download_dir'] = pSabNzbdIncomplete + defaultConfig['misc']['complete_dir'] = pSabNzbdComplete + servers = {} + servers['localhost'] = {} + servers['localhost']['host'] = 'localhost' + servers['localhost']['port'] = '119' + servers['localhost']['enable'] = '0' + categories = {} + categories['tv'] = {} + categories['tv']['name'] = 'tv' + categories['tv']['script'] = 'sabToSickBeard.py' + categories['tv']['priority'] = '-100' + categories['movies'] = {} + categories['movies']['name'] = 'movies' + categories['movies']['dir'] = 'movies' + categories['movies']['priority'] = '-100' + defaultConfig['servers'] = servers + defaultConfig['categories'] = categories + +sabNzbdConfig.merge(defaultConfig) +sabNzbdConfig.write() + +# also keep the autoProcessTV config up to date +autoProcessConfig = ConfigObj(os.path.join(pSabNzbdScripts, 'autoProcessTV.cfg'), create_empty=True) +defaultConfig = ConfigObj() +defaultConfig['SickBeard'] = {} +defaultConfig['SickBeard']['host'] = 'localhost' +defaultConfig['SickBeard']['port'] = '8082' +defaultConfig['SickBeard']['username'] = user +defaultConfig['SickBeard']['password'] = pwd +autoProcessConfig.merge(defaultConfig) +autoProcessConfig.write() + + + + +# launch SABnzbd and get the API key +# ---------------------------------- + +logging.debug('Launching SABnzbd...') +subprocess.call(sabnzbd) +logging.debug('...done') + + + +# SABnzbd will only complete the .ini file when we first access the web interface +if firstLaunch: + loadWebInterface('http://' + sabNzbdHost,user,pwd) +sabNzbdConfig.reload() +sabNzbdApiKey = sabNzbdConfig['misc']['api_key'] +logging.debug('SABnzbd api key: ' + sabNzbdApiKey) + + +# write SickBeard settings +# ------------------------ + +sickBeardConfig = ConfigObj(pSickBeardSettings,create_empty=True) +defaultConfig = ConfigObj() +defaultConfig['General'] = {} +defaultConfig['General']['launch_browser'] = '0' +defaultConfig['General']['version_notify'] = '0' +defaultConfig['General']['log_dir'] = 'logs' +defaultConfig['General']['web_port'] = '8082' +defaultConfig['General']['web_host'] = host +defaultConfig['General']['web_username'] = user +defaultConfig['General']['web_password'] = pwd +defaultConfig['SABnzbd'] = {} +defaultConfig['SABnzbd']['sab_username'] = user +defaultConfig['SABnzbd']['sab_password'] = pwd +defaultConfig['SABnzbd']['sab_apikey'] = sabNzbdApiKey +defaultConfig['SABnzbd']['sab_host'] = 'http://' + sabNzbdHost + '/' +defaultConfig['XBMC'] = {} +defaultConfig['XBMC']['use_xbmc'] = '1' +defaultConfig['XBMC']['xbmc_host'] = '127.0.0.1:' + xbmcPort +defaultConfig['XBMC']['xbmc_username'] = xbmcUser +defaultConfig['XBMC']['xbmc_password'] = xbmcPwd + +if firstLaunch: + defaultConfig['General']['metadata_xbmc'] = '1|1|1|1|1|1' + defaultConfig['General']['nzb_method'] = 'sabnzbd' + defaultConfig['General']['keep_processed_dir'] = '0' + defaultConfig['General']['use_banner'] = '1' + defaultConfig['General']['rename_episodes'] = '1' + defaultConfig['General']['naming_ep_name'] = '0' + defaultConfig['General']['naming_use_periods'] = '1' + defaultConfig['General']['naming_sep_type'] = '1' + defaultConfig['General']['naming_ep_type'] = '1' + defaultConfig['General']['root_dirs'] = '0|/storage/tvshows' + defaultConfig['SABnzbd']['sab_category'] = 'tv' + # workaround: on first launch, sick beard will always add + # 'http://' and trailing '/' on its own + defaultConfig['SABnzbd']['sab_host'] = sabNzbdHost + defaultConfig['XBMC']['xbmc_notify_ondownload'] = '1' + defaultConfig['XBMC']['xbmc_update_library'] = '1' + +sickBeardConfig.merge(defaultConfig) +sickBeardConfig.write() + + + +# launch SickBeard +# ---------------- +logging.debug('Launching SickBeard...') +subprocess.call(sickBeard) +logging.debug('...done') + + + +# write CouchPotato settings +# -------------------------- + +couchPotatoConfig = ConfigObj(pCouchPotatoSettings,create_empty=True) +defaultConfig = ConfigObj() +defaultConfig['global'] = {} +defaultConfig['global']['launchbrowser'] = 'False' +defaultConfig['global']['updater'] = 'False' +defaultConfig['global']['password'] = pwd +defaultConfig['global']['username'] = user +defaultConfig['global']['port'] = '8083' +defaultConfig['global']['host'] = host +defaultConfig['Sabnzbd'] = {} +defaultConfig['Sabnzbd']['username'] = user +defaultConfig['Sabnzbd']['password'] = pwd +defaultConfig['Sabnzbd']['apikey'] = sabNzbdApiKey +defaultConfig['Sabnzbd']['host'] = sabNzbdHost +defaultConfig['XBMC'] = {} +defaultConfig['XBMC']['enabled'] = 'True' +defaultConfig['XBMC']['host'] = '127.0.0.1:' + xbmcPort +defaultConfig['XBMC']['username'] = xbmcUser +defaultConfig['XBMC']['password'] = xbmcPwd + +if firstLaunch: + defaultConfig['Sabnzbd']['category'] = 'movies' + defaultConfig['Sabnzbd']['ppdir'] = pSabNzbdCompleteMov + defaultConfig['Renamer'] = {} + defaultConfig['Renamer']['enabled'] = 'True' + defaultConfig['Renamer']['download'] = pSabNzbdCompleteMov + defaultConfig['Renamer']['destination'] = '/storage/movies' + defaultConfig['Renamer']['separator'] = '.' + defaultConfig['Renamer']['cleanup'] = 'True' + +couchPotatoConfig.merge(defaultConfig) +couchPotatoConfig.write() + + + +# launch CouchPotato +# ------------------ + +logging.debug('Launching CouchPotato...') +subprocess.call(couchPotato) +logging.debug('...done') + + + + +# write Headphones settings +# ------------------------- + +headphonesConfig = ConfigObj(pHeadphonesSettings,create_empty=True) +defaultConfig = ConfigObj() +defaultConfig['General'] = {} +defaultConfig['General']['launch_browser'] = '0' +defaultConfig['General']['http_port'] = '8084' +defaultConfig['General']['http_host'] = host +defaultConfig['General']['music_dir'] = 'storage/music' +defaultConfig['General']['destination_dir'] = 'storage/music' +defaultConfig['General']['download_dir'] = 'storage/music' +defaultConfig['SABnzbd'] = {} +defaultConfig['SABnzbd']['sab_apikey'] = sabNzbdApiKey +defaultConfig['SABnzbd']['sab_host'] = sabNzbdHost +defaultConfig['SABnzbd']['sab_category'] = 'music' + +headphonesConfig.merge(defaultConfig) +headphonesConfig.write() + + + +# launch Headphones +# ----------------- + +logging.debug('Launching Headphones...') +subprocess.call(headphones) +logging.debug('...done') \ No newline at end of file diff --git a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.service b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.service deleted file mode 100755 index 8115710b7f..0000000000 --- a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.service +++ /dev/null @@ -1,359 +0,0 @@ -#!/bin/sh - -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv) -# -# This Program 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 2, or (at your option) -# any later version. -# -# This Program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -. /etc/profile - -# Addon settings - ADDON_DIR="$HOME/.xbmc/addons/service.downloadmanager.SABnzbd-Suite" - ADDON_HOME="$HOME/.xbmc/userdata/addon_data/service.downloadmanager.SABnzbd-Suite" - - SABNZBDSUITE_SETTINGS="$ADDON_HOME/settings.xml" - SABNZBD_SETTINGS="$ADDON_HOME/sabnzbd.ini" - SICKBEARD_SETTINGS="$ADDON_HOME/config.ini" - COUCHPOTATO_SETTINGS="$ADDON_HOME/couchpotato.ini" - HEADPHONES_SETTINGS="$ADDON_HOME/headphones.ini" - XBMC_SETTINGS="$HOME/.xbmc/userdata/guisettings.xml" - - export PYTHONPATH="$PYTHONPATH:$ADDON_DIR/pylib" - -################################################################################ -# default sabnzbd values -################################################################################ - SABNZBD_HOST="127.0.0.1" - SABNZBD_PORT="8081" - SABNZBD_DISABLEAPIKEY="0" - SABNZBD_CHECKRELEASE="0" - SABNZBD_LAUNCHBROWSER="0" - - SABNZBD_HTTPPORT="8081" - SABNZBD_HTTPSPORT="9081" - SABNZBD_HTTPSCERT="server.cert" - SABNZBD_HTTPSKEY="server.key" - - SABNZBD_SKIN="Plush" - SABNZBD_SKIN2="Plush" - SABNZBD_WEBCOLOR="gold" - SABNZBD_WEBCOLOR2="gold" - - SABNZBD_LOGDIR="logs" - SABNZBD_ADMINDIR="admin" - SABNZBD_BACKUPDIR="backup" - SABNZBD_SCRIPTDIR="scripts" - - SABNZBD_INCOMPLETEDIR="/storage/downloads/incomplete" - SABNZBD_COMPLETEDIR="/storage/downloads" - SABNZBD_WATCHDIR="/storage/downloads/watch" - -################################################################################ -# default sickbeard values -################################################################################ - SICKBEARD_LOGDIR="log" - SICKBEARD_CACHEDIR="cache" - SICKBEARD_PORT="8082" - SICKBEARD_LAUNCHBROWSER="0" - SICKBEARD_VERSIONCHECK="0" - SICKBEARD_USEIPV6="0" - SICKBEARD_WEBLOG="0" - - SICKBEARD_USEXBMC="1" - SICKBEARD_METADATAXBMC="1|1|1|1|1|1" - -################################################################################ -# default couchpotato values -################################################################################ - COUCHPOTATO_LAUNCHBROWSER="False" - COUCHPOTATO_VERSIONCHECK="False" - COUCHPOTATO_PORT="8083" - COUCHPOTATO_USEXBMC="True" - COUCHPOTATO_UPDATEXBMC="True" - -################################################################################ -# default headphones values -################################################################################ - - HEADPHONES_PORT="8084" - HEADPHONES_LAUNCHBROWSER="0" - HEADPHONES_MUSICDIR="/storage/music" - HEADPHONES_DESTDIR="/storage/music" - HEADPHONES_DOWNLOADDIR="/storage/music" - HEADPHONES_SABHOST="$SABNZBD_HOST:$SABNZBD_PORT" - HEADPHONES_SABCATEGORY="music" - -################################################################################ -# setup functions -################################################################################ - -write_sabnzbd_ini() { -python $ADDON_DIR/bin/ini_tool --action=write \ - --file=$SABNZBD_SETTINGS \ - --option="$1:$2" \ - --value="$3" -} - -write_sickbeard_ini() { -python $ADDON_DIR/bin/ini_tool --action=write \ - --file=$SICKBEARD_SETTINGS \ - --option="$1:$2" \ - --value="$3" -} - -write_couchpotato_ini() { -python $ADDON_DIR/bin/ini_tool --action=write \ - --file=$COUCHPOTATO_SETTINGS \ - --option="$1:$2" \ - --value="$3" -} - -write_headphones_ini() { -python $ADDON_DIR/bin/ini_tool --action=write \ - --file=$HEADPHONES_SETTINGS \ - --option="$1:$2" \ - --value="$3" -} - -read_sabconfig() { -python $ADDON_DIR/bin/ini_tool --action=read \ - --file=$SABNZBD_SETTINGS \ - --option="$1:$2" -} - - -read_xbmcconfig() { -grep "<$1>" $XBMC_SETTINGS | sed -e "s,[[:space:]]*<$1>,," -e "s,,," -} - -write_ini_postprocess() { -python $ADDON_DIR/bin/ini_tool --action=write \ - --file=$ADDON_HOME/$SABNZBD_SCRIPTDIR/autoProcessTV.cfg \ - --option="$1:$2" \ - --value="$3" -} - -################################################################################ -# read xbmc settings -################################################################################ - XBMC_HOST="127.0.0.1" - XBMC_PORT=`read_xbmcconfig webserverport` - XBMC_USER=`read_xbmcconfig webserverusername` - XBMC_PWD=`read_xbmcconfig webserverpassword` - -################################################################################ -# create default config -################################################################################ - - mkdir -p $ADDON_HOME - - if [ ! -f "$SABNZBDSUITE_SETTINGS" ]; then - cp $ADDON_DIR/settings-default.xml $SABNZBDSUITE_SETTINGS - fi - -################################################################################ -# read settings from xbmc setup dialog -################################################################################ - mkdir -p /var/config - cat "$ADDON_DIR/settings-default.xml" | awk -F\" '{print $2"=\""$4"\""}' | sed '/^=/d' > /var/config/sabnzbd.conf.default - cat "$SABNZBDSUITE_SETTINGS" | awk -F\" '{print $2"=\""$4"\""}' | sed '/^=/d' > /var/config/sabnzbd.conf - - . /var/config/sabnzbd.conf.default - . /var/config/sabnzbd.conf - - # TODO: add SABNZBD_HOST, SABNZBD_PORT etc to setup ui - - SICKBEARD_IP="$SABNZBD_IP" - COUCHPOTATO_IP="$SABNZBD_IP" - HEADPHONES_IP="$SABNZBD_IP" - -################################################################################ -# setup sabnzbd ini file -################################################################################ - if [ -z "$SABNZBD_IP" ]; then - SABNZBD_IP="0.0.0.0" - fi - - if [ ! -f "$SABNZBD_SETTINGS" ]; then - SABNZBD_FIRSTRUN="yes" - fi - - write_sabnzbd_ini misc disable_api_key $SABNZBD_DISABLEAPIKEY - write_sabnzbd_ini misc check_new_rel $SABNZBD_CHECKRELEASE - write_sabnzbd_ini misc auto_browser $SABNZBD_LAUNCHBROWSER - write_sabnzbd_ini misc username $SABNZBD_USER - write_sabnzbd_ini misc password $SABNZBD_PWD - write_sabnzbd_ini misc port $SABNZBD_HTTPPORT - write_sabnzbd_ini misc https_port $SABNZBD_HTTPSPORT - write_sabnzbd_ini misc https_cert $SABNZBD_HTTPSCERT - write_sabnzbd_ini misc https_key $SABNZBD_HTTPSKEY - write_sabnzbd_ini misc host $SABNZBD_IP - write_sabnzbd_ini misc web_dir $SABNZBD_SKIN - write_sabnzbd_ini misc web_dir2 $SABNZBD_SKIN2 - write_sabnzbd_ini misc web_color $SABNZBD_WEBCOLOR - write_sabnzbd_ini misc web_color2 $SABNZBD_WEBCOLOR2 - write_sabnzbd_ini misc log_dir $SABNZBD_LOGDIR - write_sabnzbd_ini misc admin_dir $SABNZBD_ADMINDIR - write_sabnzbd_ini misc nzb_backup_dir $SABNZBD_BACKUPDIR - write_sabnzbd_ini misc script_dir $SABNZBD_SCRIPTDIR - - - if [ "$SABNZBD_FIRSTRUN" = "yes" ]; then - mkdir -p "$SABNZBD_INCOMPLETEDIR" - mkdir -p "$SABNZBD_COMPLETEDIR" - mkdir -p "$SABNZBD_WATCHDIR" - write_sabnzbd_ini misc download_dir $SABNZBD_INCOMPLETEDIR - write_sabnzbd_ini misc complete_dir $SABNZBD_COMPLETEDIR - write_sabnzbd_ini misc dirscan_dir $SABNZBD_WATCHDIR - - write_sabnzbd_ini servers:localhost name "localhost" - write_sabnzbd_ini servers:localhost host "localhost" - write_sabnzbd_ini servers:localhost port "119" - write_sabnzbd_ini servers:localhost enable "0" - fi - -################################################################################ -# setup postprocessing scripts file -################################################################################ - mkdir -p $ADDON_HOME/$SABNZBD_SCRIPTDIR - cp -P $ADDON_DIR/SickBeard/autoProcessTV/*.py $ADDON_HOME/$SABNZBD_SCRIPTDIR - chmod +x $ADDON_HOME/$SABNZBD_SCRIPTDIR/*.py - - write_ini_postprocess SickBeard host localhost - write_ini_postprocess SickBeard port $SICKBEARD_PORT - write_ini_postprocess SickBeard username $SABNZBD_USER - write_ini_postprocess SickBeard password $SABNZBD_PWD - -################################################################################ -# start sabnzbd -################################################################################ - python $ADDON_DIR/SABnzbd/SABnzbd.py -d -f $SABNZBD_SETTINGS -l 0 - -################################################################################ -# read sabnzbd settings -################################################################################ - SABNZBD_APIKEY=`read_sabconfig misc api_key` - -################################################################################ -# setup sickbeard ini file -################################################################################ - if [ -z "$SICKBEARD_IP" ]; then - SICKBEARD_IP="0.0.0.0" - fi - - if [ ! -f "$SICKBEARD_SETTINGS" ]; then - SICKBEARD_FIRSTRUN="yes" - fi - - write_sickbeard_ini General launch_browser $SICKBEARD_LAUNCHBROWSER - write_sickbeard_ini General version_notify $SICKBEARD_VERSIONCHECK - write_sickbeard_ini General log_dir $SICKBEARD_LOGDIR - write_sickbeard_ini General cache_dir $SICKBEARD_CACHEDIR - write_sickbeard_ini General web_port $SICKBEARD_PORT - write_sickbeard_ini General web_host $SICKBEARD_IP - write_sickbeard_ini General web_ipv6 $SICKBEARD_USEIPV6 - write_sickbeard_ini General web_log $SICKBEARD_WEBLOG - write_sickbeard_ini General web_username $SABNZBD_USER - write_sickbeard_ini General web_password $SABNZBD_PWD - - write_sickbeard_ini SABnzbd sab_username $SABNZBD_USER - write_sickbeard_ini SABnzbd sab_password $SABNZBD_PWD - write_sickbeard_ini SABnzbd sab_apikey $SABNZBD_APIKEY - write_sickbeard_ini SABnzbd sab_host "http://$SABNZBD_HOST:$SABNZBD_PORT/" - - write_sickbeard_ini XBMC use_xbmc $SICKBEARD_USEXBMC - write_sickbeard_ini XBMC xbmc_host "$XBMC_HOST:$XBMC_PORT" - write_sickbeard_ini XBMC xbmc_username $XBMC_USER - write_sickbeard_ini XBMC xbmc_password $XBMC_PWD - - if [ "$SICKBEARD_FIRSTRUN" = "yes" ]; then - write_sickbeard_ini General metadata_xbmc $SICKBEARD_METADATAXBMC - fi - -################################################################################ -# start sickbeard -################################################################################ - python $ADDON_DIR/SickBeard/SickBeard.py --daemon --datadir $ADDON_HOME - -################################################################################ -# setup couchpotato ini file -################################################################################ - if [ -z "$COUCHPOTATO_IP" ]; then - COUCHPOTATO_IP="0.0.0.0" - fi - - if [ ! -f "$COUCHPOTATO_SETTINGS" ]; then - COUCHPOTATO_FIRSTRUN="yes" - fi - - write_couchpotato_ini global host $COUCHPOTATO_IP - write_couchpotato_ini global port $COUCHPOTATO_PORT - write_couchpotato_ini global username $SABNZBD_USER - write_couchpotato_ini global password $SABNZBD_PWD - write_couchpotato_ini global launchbrowser $COUCHPOTATO_LAUNCHBROWSER - write_couchpotato_ini global updater $COUCHPOTATO_VERSIONCHECK - - write_couchpotato_ini Sabnzbd username $SABNZBD_USER - write_couchpotato_ini Sabnzbd password $SABNZBD_PWD - write_couchpotato_ini Sabnzbd apikey $SABNZBD_APIKEY - write_couchpotato_ini Sabnzbd host "$SABNZBD_HOST:$SABNZBD_PORT" - - write_couchpotato_ini XBMC enabled $COUCHPOTATO_USEXBMC - write_couchpotato_ini XBMC host "$XBMC_HOST:$XBMC_PORT" - write_couchpotato_ini XBMC username $XBMC_USER - write_couchpotato_ini XBMC password $XBMC_PWD - - if [ "$COUCHPOTATO_FIRSTRUN" = "yes" ]; then - write_couchpotato_ini XBMC updateoneonly $COUCHPOTATO_UPDATEXBMC - fi - -################################################################################ -# start couchpotato -################################################################################ - python $ADDON_DIR/CouchPotato/CouchPotato.py -d --datadir $ADDON_HOME --config $COUCHPOTATO_SETTINGS - -################################################################################ -# setup headphones ini file -################################################################################ - - if [ -z "$HEADPHONES_IP" ]; then - HEADPHONES_IP="0.0.0.0" - fi - - if [ ! -f "$HEADPHONES_SETTINGS" ]; then - HEADPHONES_FIRSTRUN="yes" - fi - - if [ "$HEADPHONES_FIRSTRUN" = "yes" ]; then - write_headphones_ini General http_port $HEADPHONES_PORT - write_headphones_ini General http_host $HEADPHONES_IP - write_headphones_ini General launch_browser $HEADPHONES_LAUNCHBROWSER - write_headphones_ini General music_dir $HEADPHONES_MUSICDIR - write_headphones_ini General destination_dir $HEADPHONES_DESTDIR - write_headphones_ini General download_dir $HEADPHONES_DOWNLOADDIR - - write_headphones_ini SABnzbd sab_host $HEADPHONES_SABHOST - write_headphones_ini SABnzbd sab_apikey $SABNZBD_APIKEY - write_headphones_ini SABnzbd sab_category $HEADPHONES_SABCATEGORY - fi - - -################################################################################ -# start headphones -################################################################################ - python $ADDON_DIR/Headphones/Headphones.py -d --datadir $ADDON_HOME --config $HEADPHONES_SETTINGS diff --git a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/ini_tool b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/ini_tool deleted file mode 100755 index 297c13cddf..0000000000 --- a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/ini_tool +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env python - -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2011 Travis Glenn Hansen (travisghansen@openelec.tv) -# -# This Program 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 2, or (at your option) -# any later version. -# -# This Program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -from configobj import ConfigObj -import sys -import os -import string - -python_major = sys.version_info[0] -python_minor = sys.version_info[1] - -prog="ini_tool" -description="""Read/Write config files. - -Examples: - %(prog)s --file config.ini --action read --option [section:]username - %(prog)s --file config.ini --action write --option [section:]username --value foo""" % {'prog':prog} - -def option_required_error(option): - parser.print_usage() - print prog + ": error: " + option + " is required" - exit(2) - -if python_major > 2 or (python_major == 2 and python_minor >= 7): - import argparse - - parser = argparse.ArgumentParser( - prog=prog, - description=description, - formatter_class=argparse.RawDescriptionHelpFormatter, - ) - - parser.add_argument('--file', help='file to read/write to/from', required=True) - parser.add_argument('--action', help='read|write', required=True) - parser.add_argument('--option', help='the option key', required=True) - parser.add_argument('--value', help='value to store in the given option (only for write action)') - - options = parser.parse_args() - -else: - import optparse - - parser = optparse.OptionParser( - prog=prog, - description=description, - ) - - parser.add_option('--file', help='file to read/write to/from') - parser.add_option('--action', help='read|write') - parser.add_option('--option', help='the option key') - parser.add_option('--value', help='value to store in the given option (only for write action)') - - (options, args) = parser.parse_args() - - if not options.file: - option_required_error("--file") - if not options.action: - option_required_error("--action") - if not options.option: - option_required_error("--option") - - -if options.action != "read" and options.action != "write": - print "'" + options.action + "' is not a valid action" - parser.print_help() - exit(2) - -if options.action == "read" and not os.path.isfile(options.file): - print "'" + options.file + "' is not a file" - exit(2) - -config = ConfigObj(options.file) -keys = string.split(options.option, ":") -key_len = len(keys) -current_section = config - -if options.action == 'read': - i = 1 - for key in keys: - if i == key_len: - print current_section[key] - exit(0) - else: - current_section = current_section[key] - i += 1 -elif options.action == 'write': - i = 1 - for key in keys: - if i == key_len: - current_section[key] = options.value - elif key not in current_section: - current_section[key] = {} - current_section = current_section[key] - i += 1 - - config.write() -else: - exit(1) \ No newline at end of file diff --git a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/default.py b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/default.py old mode 100644 new mode 100755 index eba995f350..d56e31083f --- a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/default.py +++ b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/default.py @@ -24,15 +24,66 @@ import xbmcaddon import time import subprocess import xbmc +import urllib2 +import socket +from configobj import ConfigObj __scriptname__ = "SABnzbd Suite" -__author__ = "OpenELEC" -__url__ = "http://www.openelec.tv" +__author__ = "OpenELEC" +__url__ = "http://www.openelec.tv" __settings__ = xbmcaddon.Addon(id='service.downloadmanager.SABnzbd-Suite') __cwd__ = __settings__.getAddonInfo('path') -__path__ = xbmc.translatePath( os.path.join( __cwd__, 'bin', "SABnzbd-Suite.service") ) +__path__ = xbmc.translatePath( os.path.join( __cwd__, 'bin', "SABnzbd-Suite.py") ) -#make binary files executable in adson bin folder -subprocess.Popen("chmod -R +x " + __cwd__ + "/bin/*" , shell=True, close_fds=True) +checkInterval = 120 +timeout = 20 -subprocess.Popen(__path__, shell=True, close_fds=True) + +# Launch Suite +subprocess.call(['python',__path__]) + + +# SABnzbd addresses and api key +sabNzbdAddress = '127.0.0.1:8081' +sabNzbdConfigFile = '/storage/.xbmc/userdata/addon_data/service.downloadmanager.SABnzbd-Suite/sabnzbd.ini' +sabConfiguration = ConfigObj(sabNzbdConfigFile) +sabNzbdApiKey = sabConfiguration['misc']['api_key'] +sabNzbdUser = sabConfiguration['misc']['username'] +sabNzbdPass = sabConfiguration['misc']['password'] +sabNzbdQueue = 'http://' + sabNzbdAddress + '/sabnzbd/api?mode=queue&output=xml&apikey=' + sabNzbdApiKey + '&ma_username=' + sabNzbdUser + '&ma_password=' + sabNzbdUser + +# start checking SABnzbd for activity and prevent sleeping if necessary +socket.setdefaulttimeout(timeout) + +shouldKeepAwake = __settings__.getSetting('SABNZBD_KEEP_AWAKE') +if shouldKeepAwake: + xbmc.log('SABnzbd-Suite: will prevent idle sleep/shutdown while downloading') + +while (not xbmc.abortRequested): + + # reread setting in case it has changed + shouldKeepAwake = __settings__.getSetting('SABNZBD_KEEP_AWAKE') + + # check if SABnzbd is downloading + sabIsActive = False + req = urllib2.Request(sabNzbdQueue) + try: handle = urllib2.urlopen(req) + except IOError, e: + xbmc.log('SABnzbd-Suite: could not determine SABnzbds status', level=xbmc.LOGERROR) + else: + queue = handle.read() + handle.close() + sabIsActive = (queue.find('Downloading') >= 0) + + # reset idle timer when we're close to idle sleep/shutdown + if (shouldKeepAwake and sabIsActive): + response = xbmc.executehttpapi("GetGUISetting(0;powermanagement.shutdowntime)").replace('
  • ','') + shutdownTime = int(response) * 60 + idleTime = xbmc.getGlobalIdleTime() + timeToShutdown = shutdownTime - idleTime + + if (sabIsActive and timeToShutdown <= checkInterval - timeout): + xbmc.log('SABnzbd-Suite: still downloading. Resetting XBMC idle timer.') + xbmc.executehttpapi("SendKey(0xF000)") + + xbmc.sleep(checkInterval * 1000) \ No newline at end of file diff --git a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/resources/language/English/strings.xml b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/resources/language/English/strings.xml index 1977d9e605..3fae37f4a3 100644 --- a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/resources/language/English/strings.xml +++ b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/resources/language/English/strings.xml @@ -8,5 +8,7 @@ Password Network Settings Allowed IP addresses + Sleep + Keep awake while downloading diff --git a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/resources/language/German/strings.xml b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/resources/language/German/strings.xml index 264b514b8a..fb2a450293 100644 --- a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/resources/language/German/strings.xml +++ b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/resources/language/German/strings.xml @@ -8,5 +8,7 @@ Passwort Netzwerk Einstellungen Erlaubte IP Adressen + Ruhezustand + Verhindere Ruhezustand wenn aktiv diff --git a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/resources/settings.xml b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/resources/settings.xml old mode 100644 new mode 100755 index 403df8c7cc..6ac0150f85 --- a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/resources/settings.xml +++ b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/resources/settings.xml @@ -11,5 +11,9 @@ + + + + From 5e3352229a15f7a4bc525841cd6f63247bea4769 Mon Sep 17 00:00:00 2001 From: Lukas Heiniger Date: Thu, 5 Apr 2012 13:14:05 +0200 Subject: [PATCH 2/6] Preconfigures Headphones/SABnzbd integration --- .../SABnzbd-Suite/source/bin/SABnzbd-Suite.py | 44 ++++++++++++------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.py b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.py index 83632e49f2..40ebfc850e 100755 --- a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.py +++ b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.py @@ -38,6 +38,7 @@ logging.basicConfig(filename='/storage/.xbmc/temp/sabnzbd-suite.log', + # helper functions # ---------------- @@ -81,6 +82,7 @@ pHeadphonesSettings = os.path.join(pAddonHome, 'headphones.ini') # directories pSabNzbdComplete = '/storage/downloads' pSabNzbdCompleteMov = '/storage/downloads/movies' +pSabNzbdCompleteMusic = '/storage/downloads/music' pSabNzbdIncomplete = '/storage/downloads/incomplete' pSickBeardTvScripts = os.path.join(pAddon, 'SickBeard/autoProcessTV') pSabNzbdScripts = os.path.join(pAddonHome, 'scripts') @@ -104,6 +106,8 @@ sabNzbdHost = '127.0.0.1:8081' addonId = 'service.downloadmanager.SABnzbd-Suite' + + # create directories and settings on first launch # ----------------------------------------------- @@ -113,14 +117,9 @@ if firstLaunch: createDir(pAddonHome) createDir(pSabNzbdComplete) createDir(pSabNzbdCompleteMov) + createDir(pSabNzbdCompleteMusic) createDir(pSabNzbdIncomplete) createDir(pSabNzbdScripts) - # copy and sanitize sickbeards autoprocessing scripts - # text = open(pSickBeardTvScript, 'rb').read().replace('\r\n', '\n') - # dest = open(pTvScriptDestination, 'wb') - # dest.write('#!/usr/bin/python\n') # add missing shebang - # dest.write(text) - # dest.close() shutil.copy(os.path.join(pSickBeardTvScripts,'sabToSickBeard.py'), pSabNzbdScripts) shutil.copy(os.path.join(pSickBeardTvScripts,'autoProcessTV.py'), pSabNzbdScripts) os.chmod(os.path.join(pSabNzbdScripts,'sabToSickBeard.py'), 0755) @@ -133,6 +132,7 @@ if firstLaunch: + # read addon and xbmc settings # ---------------------------- @@ -155,10 +155,6 @@ xbmcServices = xbmcSettings.getElementsByTagName('services')[0] xbmcPort = xbmcServices.getElementsByTagName('webserverport')[0].firstChild.data xbmcUser = xbmcServices.getElementsByTagName('webserverusername')[0].firstChild.data xbmcPwd = xbmcServices.getElementsByTagName('webserverpassword')[0].firstChild.data -logging.debug('User: ' + str(user) + ', Pwd: ' + str(pwd) + - ', Ip: ' + str(host) + ', Keep Awake: ' + str(sabNzbdKeepAwake)) -logging.debug('XBMC User: ' + str(xbmcUser) + ', XBMC Pwd: ' + str(xbmcPwd) + - ', XBMC Port: ' + str(xbmcPort)) @@ -214,6 +210,10 @@ if firstLaunch: categories['movies']['name'] = 'movies' categories['movies']['dir'] = 'movies' categories['movies']['priority'] = '-100' + categories['music'] = {} + categories['music']['name'] = 'music' + categories['music']['dir'] = 'music' + categories['music']['priority'] = '-100' defaultConfig['servers'] = servers defaultConfig['categories'] = categories @@ -241,8 +241,6 @@ logging.debug('Launching SABnzbd...') subprocess.call(sabnzbd) logging.debug('...done') - - # SABnzbd will only complete the .ini file when we first access the web interface if firstLaunch: loadWebInterface('http://' + sabNzbdHost,user,pwd) @@ -251,6 +249,8 @@ sabNzbdApiKey = sabNzbdConfig['misc']['api_key'] logging.debug('SABnzbd api key: ' + sabNzbdApiKey) + + # write SickBeard settings # ------------------------ @@ -298,6 +298,7 @@ sickBeardConfig.write() + # launch SickBeard # ---------------- logging.debug('Launching SickBeard...') @@ -306,6 +307,7 @@ logging.debug('...done') + # write CouchPotato settings # -------------------------- @@ -344,6 +346,7 @@ couchPotatoConfig.write() + # launch CouchPotato # ------------------ @@ -363,19 +366,28 @@ defaultConfig['General'] = {} defaultConfig['General']['launch_browser'] = '0' defaultConfig['General']['http_port'] = '8084' defaultConfig['General']['http_host'] = host -defaultConfig['General']['music_dir'] = 'storage/music' -defaultConfig['General']['destination_dir'] = 'storage/music' -defaultConfig['General']['download_dir'] = 'storage/music' +defaultConfig['General']['http_username'] = user +defaultConfig['General']['http_password'] = pwd defaultConfig['SABnzbd'] = {} defaultConfig['SABnzbd']['sab_apikey'] = sabNzbdApiKey defaultConfig['SABnzbd']['sab_host'] = sabNzbdHost -defaultConfig['SABnzbd']['sab_category'] = 'music' +defaultConfig['SABnzbd']['sab_username'] = user +defaultConfig['SABnzbd']['sab_password'] = pwd + +if firstLaunch: + defaultConfig['SABnzbd']['sab_category'] = 'music' + defaultConfig['General']['music_dir'] = '/storage/music' + defaultConfig['General']['destination_dir'] = '/storage/music' + defaultConfig['General']['download_dir'] = '/storage/downloads/music' + defaultConfig['General']['move_files'] = '1' + defaultConfig['General']['rename_files'] = '1' headphonesConfig.merge(defaultConfig) headphonesConfig.write() + # launch Headphones # ----------------- From 71409872dfcf09bab1413ed30a6930d5f07570a7 Mon Sep 17 00:00:00 2001 From: Lukas Heiniger Date: Thu, 5 Apr 2012 22:43:42 +0200 Subject: [PATCH 3/6] Fixes file permissions --- .../service/downloadmanager/SABnzbd-Suite/config/settings.xml | 0 .../service/downloadmanager/SABnzbd-Suite/source/default.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 packages/addons/service/downloadmanager/SABnzbd-Suite/config/settings.xml mode change 100755 => 100644 packages/addons/service/downloadmanager/SABnzbd-Suite/source/default.py diff --git a/packages/addons/service/downloadmanager/SABnzbd-Suite/config/settings.xml b/packages/addons/service/downloadmanager/SABnzbd-Suite/config/settings.xml old mode 100755 new mode 100644 diff --git a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/default.py b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/default.py old mode 100755 new mode 100644 From 118dbcc7897ff2c82825bffb4897217d403dafd9 Mon Sep 17 00:00:00 2001 From: Lukas Heiniger Date: Thu, 5 Apr 2012 22:51:27 +0200 Subject: [PATCH 4/6] Allows for no XBMC pw to be set in SABnzbd-Suite --- .../SABnzbd-Suite/source/bin/SABnzbd-Suite.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.py b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.py index 40ebfc850e..fd2dd8546a 100755 --- a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.py +++ b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.py @@ -153,9 +153,14 @@ fXbmcSettings.close xbmcSettings = parseString(data) xbmcServices = xbmcSettings.getElementsByTagName('services')[0] xbmcPort = xbmcServices.getElementsByTagName('webserverport')[0].firstChild.data -xbmcUser = xbmcServices.getElementsByTagName('webserverusername')[0].firstChild.data -xbmcPwd = xbmcServices.getElementsByTagName('webserverpassword')[0].firstChild.data - +try: + xbmcUser = xbmcServices.getElementsByTagName('webserverusername')[0].firstChild.data +except: + xbmcUser = '' +try: + xbmcPwd = xbmcServices.getElementsByTagName('webserverpassword')[0].firstChild.data +except: + xbmcPwd = '' From c1ba8121e27b6421ffeb89e120c3b65d3479996e Mon Sep 17 00:00:00 2001 From: Lukas Heiniger Date: Fri, 6 Apr 2012 18:12:12 +0200 Subject: [PATCH 5/6] Changes log location and level Logs to /var/log/sabnzbd-suite Changes log level to default (warning) --- .../SABnzbd-Suite/source/bin/SABnzbd-Suite.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.py b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.py index fd2dd8546a..d3ba5fe0d9 100755 --- a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.py +++ b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.py @@ -31,10 +31,10 @@ from configobj import ConfigObj from xml.dom.minidom import parseString import logging -logging.basicConfig(filename='/storage/.xbmc/temp/sabnzbd-suite.log', +logging.basicConfig(filename='/var/log/sabnzbd-suite.log', filemode='w', format='%(asctime)s SABnzbd-Suite: %(message)s', - level=logging.DEBUG) + level=logging.WARNING) @@ -398,4 +398,4 @@ headphonesConfig.write() logging.debug('Launching Headphones...') subprocess.call(headphones) -logging.debug('...done') \ No newline at end of file +logging.debug('...done') From 5c2bacab2e53db6d5bca12533e16e0571139c400 Mon Sep 17 00:00:00 2001 From: Lukas Heiniger Date: Fri, 6 Apr 2012 19:19:21 +0200 Subject: [PATCH 6/6] Fixes the default destination for movie downloads Movies go into /storage/videos instead of /storage/movies --- .../downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.py b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.py index d3ba5fe0d9..8b1ff65847 100755 --- a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.py +++ b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/bin/SABnzbd-Suite.py @@ -342,7 +342,7 @@ if firstLaunch: defaultConfig['Renamer'] = {} defaultConfig['Renamer']['enabled'] = 'True' defaultConfig['Renamer']['download'] = pSabNzbdCompleteMov - defaultConfig['Renamer']['destination'] = '/storage/movies' + defaultConfig['Renamer']['destination'] = '/storage/videos' defaultConfig['Renamer']['separator'] = '.' defaultConfig['Renamer']['cleanup'] = 'True'