From 4b29cc9d044b445edbcd320a2c7d12bf4ef2f211 Mon Sep 17 00:00:00 2001 From: echel0n Date: Sat, 12 Apr 2014 08:08:47 -0700 Subject: [PATCH] Added optional auto-update feature. --- autoProcessMedia.cfg.spec | 1 + nzbtomedia/__init__.py | 34 +++++++++++++++++++++++++++++----- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/autoProcessMedia.cfg.spec b/autoProcessMedia.cfg.spec index 978eabcc..9eb94b36 100644 --- a/autoProcessMedia.cfg.spec +++ b/autoProcessMedia.cfg.spec @@ -2,6 +2,7 @@ # For more information, visit https://github.com/clinton-hall/nzbToMedia/wiki [General] + auto_update = 0 git_path = git_user = git_branch = diff --git a/nzbtomedia/__init__.py b/nzbtomedia/__init__.py index 549068dc..a801e670 100644 --- a/nzbtomedia/__init__.py +++ b/nzbtomedia/__init__.py @@ -1,4 +1,5 @@ import os +import subprocess import sys import platform from nzbtomedia import logger, versionCheck @@ -6,7 +7,6 @@ from nzbtomedia.nzbToMediaConfig import config from nzbtomedia.nzbToMediaUtil import WakeUp # sabnzbd constants - SABNZB_NO_OF_ARGUMENTS = 8 SABNZB_0717_NO_OF_ARGUMENTS = 9 @@ -38,8 +38,10 @@ CONFIG_SPEC_FILE = '' CONFIG_MOVIE_FILE = '' CONFIG_TV_FILE = '' SYS_ENCODING = '' +SYSV_ARGS = '' # version constants +AUTO_UPDATE = None NZBTOMEDIA_VERSION = None NZBTOMEDIA_BRANCH = None NEWEST_VERSION = None @@ -87,11 +89,11 @@ def initialize(): global NZBGET_POSTPROCESS_ERROR, NZBGET_POSTPROCESS_NONE, NZBGET_POSTPROCESS_PARCHECK, NZBGET_POSTPROCESS_SUCCESS, \ NZBTOMEDIA_TIMEOUT, FORKS, FORK_DEFAULT, FORK_FAILED_TORRENT, FORK_FAILED, SICKBEARD_TORRENT, SICKBEARD_FAILED, \ PROGRAM_DIR, CFG, CFG_LOGGING, CONFIG_FILE, CONFIG_MOVIE_FILE, CONFIG_SPEC_FILE, LOG_DIR, NZBTOMEDIA_BRANCH, \ - CONFIG_TV_FILE, LOG_FILE, NZBTOMEDIA_VERSION, NEWEST_VERSION, NEWEST_VERSION_STRING, VERSION_NOTIFY, \ + CONFIG_TV_FILE, LOG_FILE, NZBTOMEDIA_VERSION, NEWEST_VERSION, NEWEST_VERSION_STRING, VERSION_NOTIFY, SYSV_ARGS, \ SABNZB_NO_OF_ARGUMENTS, SABNZB_0717_NO_OF_ARGUMENTS, CATEGORIES, CLIENTAGENT, USELINK, OUTPUTDIRECTORY, NOFLATTEN, \ UTORRENTPWD, UTORRENTUSR, UTORRENTWEBUI, DELUGEHOST, DELUGEPORT, DELUGEUSR, DELUGEPWD, TRANSMISSIONHOST, TRANSMISSIONPORT, \ TRANSMISSIONPWD, TRANSMISSIONUSR, COMPRESSEDCONTAINER, MEDIACONTAINER, METACONTAINER, MINSAMPLESIZE, SAMPLEIDS, \ - SECTIONS, SUBSECTIONS, USER_SCRIPT_CATEGORIES, __INITIALIZED__, GIT_PATH, GIT_USER, GIT_BRANCH + SECTIONS, SUBSECTIONS, USER_SCRIPT_CATEGORIES, __INITIALIZED__, GIT_PATH, GIT_USER, GIT_BRANCH, AUTO_UPDATE if __INITIALIZED__: return False @@ -99,7 +101,7 @@ def initialize(): # add our custom libs to the system path sys.path.insert(0, os.path.abspath(os.path.join(PROGRAM_DIR, 'lib'))) - # init paths and filenames + # init preliminaries PROGRAM_DIR = os.path.dirname(os.path.normpath(os.path.abspath(os.path.join(__file__, os.pardir)))) LOG_DIR = os.path.join(PROGRAM_DIR, 'logs') LOG_FILE = os.path.join(LOG_DIR, 'postprocess.log') @@ -107,6 +109,7 @@ def initialize(): CONFIG_SPEC_FILE = os.path.join(PROGRAM_DIR, "autoProcessMedia.cfg.spec") CONFIG_MOVIE_FILE = os.path.join(PROGRAM_DIR, "autoProcessMovie.cfg") CONFIG_TV_FILE = os.path.join(PROGRAM_DIR, "autoProcessTv.cfg") + SYSV_ARGS = sys.argv[1:] if not nzbToMediaUtil.makeDir(LOG_DIR): logger.error("!!! No log folder, logging to screen only!") @@ -129,7 +132,14 @@ def initialize(): # check for newer version versionCheck.CheckVersion().find_installed_version() logger.info('nzbToMedia Version:' + NZBTOMEDIA_VERSION + ' Branch:' + NZBTOMEDIA_BRANCH + ' (' + platform.system() + '; ' + platform.release() + ')') - versionCheck.CheckVersion().check_for_new_version() + if CFG['General']['auto_update'] == 1 and versionCheck.CheckVersion().check_for_new_version(): + logger.MESSAGE("Auto-Updating nzbToMedia, Please wait ...") + updated = versionCheck.CheckVersion().update() + if updated: + # restart nzbToMedia + restart() + else: + logger.ERROR("Update wasn't successful, not restarting. Check your log for more information.") WakeUp() @@ -170,4 +180,18 @@ def initialize(): __INITIALIZED__ = True return True +def restart(): + install_type = versionCheck.CheckVersion().install_type + popen_list = [] + + if install_type in ('git', 'source'): + popen_list = [sys.executable, PROGRAM_DIR] + + if popen_list: + popen_list += SYSV_ARGS + logger.log(u"Restarting nzbToMedia with " + str(popen_list)) + logger.close() + subprocess.Popen(popen_list, cwd=os.getcwd()) + + os._exit(0)