mirror of https://github.com/evilhero/mylar
FIX:(#2156) On Windows, git would return error when viewing configuration page and display None for branch history, FIX: When manual post-processing and SABnzbd was enabled, in some cases would mistakingly try to post-process using some sabnzbd options, IMP: Added the [__ISSUEID__] option for post-processing files that will not pp/scan/etc. Add the issueid to the end of the filename in the format of [__123456__] and Mylar will post-process the issue directly to that issueid and ignore any verification checking (it will also remove the [__123456__] from the filename after post-processing), IMP: Added sabnzbd version to Test SABnzbd output, and if SAB is too low of a version, will remove Completed Download Handling as an option and provide warning indicating as such
This commit is contained in:
parent
2bee5d4657
commit
05f3eb4ad8
|
@ -397,20 +397,36 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row checkbox left clearfix">
|
||||
<div class="row checkbox left clearfix" id="sab_cdh" style="display:unset;">
|
||||
<input type="checkbox" id="sab_client_post_processing" onclick="initConfigCheckbox($this);" name="sab_client_post_processing" value="1" ${config['sab_client_post_processing']} /><label>Enable Completed Download Handling</label>
|
||||
<div id="sabcompletedinfo">
|
||||
<div class="row">
|
||||
<small class="heading"><span style="float: left; margin-right: .3em; margin-top: 4px;" class="ui-icon ui-icon-info"></span>
|
||||
ComicRN script cannot be used with this enabled</small>
|
||||
ComicRN script cannot be used with this enabled & required SAB version > 0.8.0</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row checkbox left clearfix" id="sab_nocdh" style="display:none;">
|
||||
<div>
|
||||
<div class="row">
|
||||
<small class="heading"><span style="float: left; margin-right: .3em; margin-top: 4px;" class="ui-icon ui-icon-info"></span>
|
||||
Completed Download Handling is not available as your version of SABnzbd is not above 0.8.0</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div align="center" class="row">
|
||||
<img name="sabnzbd_statusicon" id="sabnzbd_statusicon" src="interfaces/default/images/successs.png" style="float:right;visibility:hidden;" height="20" width="20" />
|
||||
<input type="button" value="Test SABnzbd" id="test_sab" style="float:center" /></br>
|
||||
<input type="text" name="sabstatus" style="text-align:center; font-size:11px;" id="sabstatus" size="50" DISABLED />
|
||||
<div name="sabversion" id="sabversion" style="font-size:11px;" align="center">
|
||||
<%
|
||||
if mylar.CONFIG.SAB_VERSION is not None:
|
||||
sabv = 'last tested version: %s' % mylar.CONFIG.SAB_VERSION
|
||||
else:
|
||||
sabv = ''
|
||||
%>
|
||||
<span>${sabv}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</fieldset>
|
||||
|
@ -1949,7 +1965,9 @@
|
|||
function numberWithCommas(x) {
|
||||
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
||||
};
|
||||
|
||||
function numberWithDecimals(x) {
|
||||
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
|
||||
};
|
||||
$("#test_32p").click(function(){
|
||||
var imagechk = document.getElementById("test32p_statusicon");
|
||||
$.get('test_32p',
|
||||
|
@ -1990,8 +2008,26 @@
|
|||
alert(data.error);
|
||||
return;
|
||||
}
|
||||
$('#sabstatus').val(data);
|
||||
$('#ajaxMsg').html("<div class='msg'><span class='ui-icon ui-icon-check'></span>"+data+"</div>");
|
||||
var obj = JSON.parse(data);
|
||||
var versionsab = obj['version'];
|
||||
vsab = numberWithDecimals(versionsab);
|
||||
alert(vsab);
|
||||
$('#sabstatus').val(obj['status']);
|
||||
$('#sabversion span').text('SABnzbd version: '+versionsab);
|
||||
if ( vsab < "0.8.0" ){
|
||||
scdh = document.getElementById("sab_cdh");
|
||||
scdh.style.display = "none";
|
||||
nocdh = document.getElementById("sab_nocdh");
|
||||
nocdh.style.display = "unset";
|
||||
scdh_line = document.getElementById("sab_client_post_processing");
|
||||
scdh_line.value = 0;
|
||||
} else {
|
||||
scdh = document.getElementById("sab_cdh");
|
||||
scdh.style.display = "unset";
|
||||
nocdh = document.getElementById("sab_nocdh");
|
||||
nocdh.style.display = "none";
|
||||
}
|
||||
$('#ajaxMsg').html("<div class='msg'><span class='ui-icon ui-icon-check'></span>"+obj['status']+"</div>");
|
||||
if ( data.indexOf("Successfully") > -1){
|
||||
imagechk.src = "";
|
||||
imagechk.src = "interfaces/default/images/success.png";
|
||||
|
|
|
@ -350,15 +350,18 @@ class PostProcessor(object):
|
|||
logger.fdebug(module + ' nzb name: ' + self.nzb_name)
|
||||
logger.fdebug(module + ' nzb folder: ' + self.nzb_folder)
|
||||
if self.ddl is False:
|
||||
if mylar.USE_SABNZBD==0:
|
||||
logger.fdebug(module + ' Not using SABnzbd')
|
||||
elif mylar.USE_SABNZBD != 0 and self.nzb_name == 'Manual Run':
|
||||
logger.fdebug(module + ' Not using SABnzbd : Manual Run')
|
||||
else:
|
||||
# if the SAB Directory option is enabled, let's use that folder name and append the jobname.
|
||||
if all([mylar.CONFIG.SAB_TO_MYLAR, mylar.CONFIG.SAB_DIRECTORY is not None, mylar.CONFIG.SAB_DIRECTORY != 'None']):
|
||||
self.nzb_folder = os.path.join(mylar.CONFIG.SAB_DIRECTORY, self.nzb_name).encode(mylar.SYS_ENCODING)
|
||||
logger.fdebug(module + ' SABnzbd Download folder option enabled. Directory set to : ' + self.nzb_folder)
|
||||
if mylar.USE_SABNZBD==1:
|
||||
if self.nzb_name != 'Manual Run':
|
||||
logger.fdebug(module + ' Using SABnzbd')
|
||||
logger.fdebug(module + ' NZB name as passed from NZBGet: ' + self.nzb_name)
|
||||
|
||||
if self.nzb_name == 'Manual Run':
|
||||
logger.fdebug(module + ' Manual Run Post-Processing enabled.')
|
||||
else:
|
||||
# if the SAB Directory option is enabled, let's use that folder name and append the jobname.
|
||||
if all([mylar.CONFIG.SAB_TO_MYLAR, mylar.CONFIG.SAB_DIRECTORY is not None, mylar.CONFIG.SAB_DIRECTORY != 'None']):
|
||||
self.nzb_folder = os.path.join(mylar.CONFIG.SAB_DIRECTORY, self.nzb_name).encode(mylar.SYS_ENCODING)
|
||||
logger.fdebug(module + ' SABnzbd Download folder option enabled. Directory set to : ' + self.nzb_folder)
|
||||
|
||||
if mylar.USE_NZBGET==1:
|
||||
if self.nzb_name != 'Manual Run':
|
||||
|
@ -471,8 +474,50 @@ class PostProcessor(object):
|
|||
if any([self.issueid is not None, self.comicid is not None]):
|
||||
comicseries = myDB.select('SELECT * FROM comics WHERE ComicID=?', [self.comicid])
|
||||
else:
|
||||
tmpsql = "SELECT * FROM comics WHERE DynamicComicName IN ({seq}) COLLATE NOCASE".format(seq=','.join('?' * len(loopchk)))
|
||||
comicseries = myDB.select(tmpsql, tuple(loopchk))
|
||||
if fl['issueid'] is not None:
|
||||
logger.info('issueid detected in filename: %s' % fl['issueid'])
|
||||
csi = myDB.selectone('SELECT i.ComicID, i.IssueID, i.Issue_Number, c.ComicName FROM comics as c JOIN issues as i ON c.ComicID = i.ComicID WHERE i.IssueID=?', [fl['issueid']]).fetchone()
|
||||
if csi is None:
|
||||
csi = myDB.selectone('SELECT i.ComicID as comicid, i.IssueID, i.Issue_Number, a.ReleaseComicName, c.ComicName FROM comics as c JOIN annuals as a ON c.ComicID = a.ComicID WHERE a.IssueID=?', [fl['issueid']]).fetchone()
|
||||
if csi is not None:
|
||||
annchk = 'yes'
|
||||
else:
|
||||
continue
|
||||
else:
|
||||
annchk = 'no'
|
||||
if fl['sub']:
|
||||
logger.fdebug('%s[SUB: %s][CLOCATION: %s]' % (module, fl['sub'], fl['comiclocation']))
|
||||
clocation = os.path.join(fl['comiclocation'], fl['sub'], helpers.conversion(fl['comicfilename']))
|
||||
else:
|
||||
logger.fdebug('%s[CLOCATION] %s' % (module, fl['comiclocation']))
|
||||
clocation = os.path.join(fl['comiclocation'],helpers.conversion(fl['comicfilename']))
|
||||
annualtype = None
|
||||
if annchk == 'yes':
|
||||
if 'Annual' in csi['ReleaseComicName']:
|
||||
annualtype = 'Annual'
|
||||
elif 'Special' in csi['ReleaseComicName']:
|
||||
annualtype = 'Special'
|
||||
else:
|
||||
if 'Annual' in csi['ComicName']:
|
||||
annualtype = 'Annual'
|
||||
elif 'Special' in csi['ComicName']:
|
||||
annualtype = 'Special'
|
||||
manual_list.append({"ComicLocation": clocation,
|
||||
"ComicID": csi['ComicID'],
|
||||
"IssueID": csi['IssueID'],
|
||||
"IssueNumber": csi['Issue_Number'],
|
||||
"AnnualType": annualtype,
|
||||
"ComicName": csi['ComicName'],
|
||||
"Series": fl['series_name'],
|
||||
"AltSeries": fl['alt_series'],
|
||||
"One-Off": False,
|
||||
"ForcedMatch": True})
|
||||
logger.info('manual_list: %s' % manual_list)
|
||||
break
|
||||
|
||||
else:
|
||||
tmpsql = "SELECT * FROM comics WHERE DynamicComicName IN ({seq}) COLLATE NOCASE".format(seq=','.join('?' * len(loopchk)))
|
||||
comicseries = myDB.select(tmpsql, tuple(loopchk))
|
||||
|
||||
if not comicseries or orig_seriesname != mod_seriesname:
|
||||
if all(['special' in orig_seriesname.lower(), mylar.CONFIG.ANNUALS_ON, orig_seriesname != mod_seriesname]):
|
||||
|
@ -787,7 +832,8 @@ class PostProcessor(object):
|
|||
"ComicName": cs['ComicName'],
|
||||
"Series": watchmatch['series_name'],
|
||||
"AltSeries": watchmatch['alt_series'],
|
||||
"One-Off": False})
|
||||
"One-Off": False,
|
||||
"ForcedMatch": False})
|
||||
break
|
||||
else:
|
||||
logger.fdebug(module + '[NON-MATCH: ' + cs['ComicName'] + '-' + cs['ComicID'] + '] Incorrect series - not populating..continuing post-processing')
|
||||
|
@ -894,7 +940,7 @@ class PostProcessor(object):
|
|||
"ComicVersion": 'v' + str(av['SeriesYear']),
|
||||
"Publisher": av['IssuePublisher'],
|
||||
"Total": av['TotalIssues'], # this will return the total issues in the arc (not needed for this)
|
||||
"ComicID": av['ComicID'],
|
||||
"Type": av['Type'],
|
||||
"IsArc": True}
|
||||
})
|
||||
|
||||
|
@ -923,28 +969,50 @@ class PostProcessor(object):
|
|||
if arcmatch['process_status'] == 'fail':
|
||||
nm+=1
|
||||
else:
|
||||
temploc= arcmatch['justthedigits'].replace('_', ' ')
|
||||
temploc = re.sub('[\#\']', '', temploc)
|
||||
if helpers.issuedigits(temploc) != helpers.issuedigits(v[i]['ArcValues']['IssueNumber']):
|
||||
try:
|
||||
if v[i]['ArcValues']['Type'] == 'TPB' and v[i]['ArcValues']['Total'] > 1:
|
||||
if watchmatch['series_volume'] is not None:
|
||||
just_the_digits = re.sub('[^0-9]', '', arcmatch['series_volume']).strip()
|
||||
else:
|
||||
just_the_digits = re.sub('[^0-9]', '', arcmatch['justthedigits']).strip()
|
||||
else:
|
||||
just_the_digits = arcmatch['justthedigits']
|
||||
except Exception as e:
|
||||
logger.warn('[Exception: %s] Unable to properly match up/retrieve issue number (or volume) for this [CS: %s] [WATCHMATCH: %s]' % (e, v[i]['ArcValues'], v[i]['WatchValues']))
|
||||
nm+=1
|
||||
continue
|
||||
|
||||
if just_the_digits is not None:
|
||||
temploc= just_the_digits.replace('_', ' ')
|
||||
temploc = re.sub('[\#\']', '', temploc)
|
||||
logger.fdebug('temploc: %s' % temploc)
|
||||
else:
|
||||
temploc = None
|
||||
|
||||
if temploc is not None and helpers.issuedigits(temploc) != helpers.issuedigits(v[i]['ArcValues']['IssueNumber']):
|
||||
#logger.fdebug('issues dont match. Skipping')
|
||||
i+=1
|
||||
continue
|
||||
if 'annual' in temploc.lower():
|
||||
biannchk = re.sub('-', '', temploc.lower()).strip()
|
||||
if 'biannual' in biannchk:
|
||||
logger.fdebug(module + ' Bi-Annual detected.')
|
||||
fcdigit = helpers.issuedigits(re.sub('biannual', '', str(biannchk)).strip())
|
||||
else:
|
||||
fcdigit = helpers.issuedigits(re.sub('annual', '', str(temploc.lower())).strip())
|
||||
logger.fdebug(module + ' Annual detected [' + str(fcdigit) +']. ComicID assigned as ' + str(v[i]['WatchValues']['ComicID']))
|
||||
annchk = "yes"
|
||||
issuechk = myDB.selectone("SELECT * from storyarcs WHERE ComicID=? AND Int_IssueNumber=?", [v[i]['WatchValues']['ComicID'], fcdigit]).fetchone()
|
||||
else:
|
||||
fcdigit = helpers.issuedigits(temploc)
|
||||
issuechk = myDB.selectone("SELECT * from storyarcs WHERE ComicID=? AND Int_IssueNumber=?", [v[i]['WatchValues']['ComicID'], fcdigit]).fetchone()
|
||||
if 'annual' in temploc.lower():
|
||||
biannchk = re.sub('-', '', temploc.lower()).strip()
|
||||
if 'biannual' in biannchk:
|
||||
logger.fdebug(module + ' Bi-Annual detected.')
|
||||
fcdigit = helpers.issuedigits(re.sub('biannual', '', str(biannchk)).strip())
|
||||
else:
|
||||
fcdigit = helpers.issuedigits(re.sub('annual', '', str(temploc.lower())).strip())
|
||||
logger.fdebug(module + ' Annual detected [' + str(fcdigit) +']. ComicID assigned as ' + str(v[i]['WatchValues']['ComicID']))
|
||||
annchk = "yes"
|
||||
issuechk = myDB.selectone("SELECT * from storyarcs WHERE ComicID=? AND Int_IssueNumber=?", [v[i]['WatchValues']['ComicID'], fcdigit]).fetchone()
|
||||
else:
|
||||
fcdigit = helpers.issuedigits(temploc)
|
||||
issuechk = myDB.selectone("SELECT * from storyarcs WHERE ComicID=? AND Int_IssueNumber=?", [v[i]['WatchValues']['ComicID'], fcdigit]).fetchone()
|
||||
|
||||
if issuechk is None:
|
||||
logger.fdebug(module + ' No corresponding issue # found for ' + str(v[i]['WatchValues']['ComicID']))
|
||||
try:
|
||||
logger.fdebug(module + ' No corresponding issue # found for ' + str(v[i]['WatchValues']['ComicID']))
|
||||
except:
|
||||
continue
|
||||
else:
|
||||
datematch = "True"
|
||||
if len(arcmatch) >= 1 and arcmatch['issue_year'] is not None:
|
||||
|
@ -1037,7 +1105,7 @@ class PostProcessor(object):
|
|||
if all(['0-Day Week' in self.nzb_name, mylar.CONFIG.PACK_0DAY_WATCHLIST_ONLY is True]):
|
||||
pass
|
||||
else:
|
||||
oneofflist = myDB.select("select s.Issue_Number, s.ComicName, s.IssueID, s.ComicID, s.Provider, w.PUBLISHER, w.weeknumber, w.year from snatched as s inner join nzblog as n on s.IssueID = n.IssueID inner join weekly as w on s.IssueID = w.IssueID WHERE n.OneOff = 1;") #(s.Provider ='32P' or s.Provider='WWT' or s.Provider='DEM') AND n.OneOff = 1;")
|
||||
oneofflist = myDB.select("select s.Issue_Number, s.ComicName, s.IssueID, s.ComicID, s.Provider, w.format, w.PUBLISHER, w.weeknumber, w.year from snatched as s inner join nzblog as n on s.IssueID = n.IssueID inner join weekly as w on s.IssueID = w.IssueID WHERE n.OneOff = 1;") #(s.Provider ='32P' or s.Provider='WWT' or s.Provider='DEM') AND n.OneOff = 1;")
|
||||
#oneofflist = myDB.select("select s.Issue_Number, s.ComicName, s.IssueID, s.ComicID, s.Provider, w.PUBLISHER, w.weeknumber, w.year from snatched as s inner join nzblog as n on s.IssueID = n.IssueID and s.Hash is not NULL inner join weekly as w on s.IssueID = w.IssueID WHERE n.OneOff = 1;") #(s.Provider ='32P' or s.Provider='WWT' or s.Provider='DEM') AND n.OneOff = 1;")
|
||||
if not oneofflist:
|
||||
pass #continue
|
||||
|
@ -1057,6 +1125,7 @@ class PostProcessor(object):
|
|||
"ComicVersion": None,
|
||||
"Publisher": ofl['PUBLISHER'],
|
||||
"Total": None,
|
||||
"Type": ofl['format'],
|
||||
"ComicID": ofl['ComicID'],
|
||||
"IsArc": False}})
|
||||
|
||||
|
@ -1074,23 +1143,41 @@ class PostProcessor(object):
|
|||
nm+=1
|
||||
continue
|
||||
else:
|
||||
temploc= watchmatch['justthedigits'].replace('_', ' ')
|
||||
temploc = re.sub('[\#\']', '', temploc)
|
||||
try:
|
||||
if ofv['WatchValues']['Type'] is not None and ofv['WatchValues']['Total'] > 1:
|
||||
if watchmatch['series_volume'] is not None:
|
||||
just_the_digits = re.sub('[^0-9]', '', watchmatch['series_volume']).strip()
|
||||
else:
|
||||
just_the_digits = re.sub('[^0-9]', '', watchmatch['justthedigits']).strip()
|
||||
else:
|
||||
just_the_digits = watchmatch['justthedigits']
|
||||
except Exception as e:
|
||||
logger.warn('[Exception: %s] Unable to properly match up/retrieve issue number (or volume) for this [CS: %s] [WATCHMATCH: %s]' % (e, cs, watchmatch))
|
||||
nm+=1
|
||||
continue
|
||||
|
||||
if just_the_digits is not None:
|
||||
temploc= just_the_digits.replace('_', ' ')
|
||||
temploc = re.sub('[\#\']', '', temploc)
|
||||
logger.fdebug('temploc: %s' % temploc)
|
||||
else:
|
||||
temploc = None
|
||||
|
||||
logger.info('watchmatch: %s' % watchmatch)
|
||||
if 'annual' in temploc.lower():
|
||||
biannchk = re.sub('-', '', temploc.lower()).strip()
|
||||
if 'biannual' in biannchk:
|
||||
logger.fdebug(module + ' Bi-Annual detected.')
|
||||
fcdigit = helpers.issuedigits(re.sub('biannual', '', str(biannchk)).strip())
|
||||
if temploc is not None:
|
||||
if 'annual' in temploc.lower():
|
||||
biannchk = re.sub('-', '', temploc.lower()).strip()
|
||||
if 'biannual' in biannchk:
|
||||
logger.fdebug(module + ' Bi-Annual detected.')
|
||||
fcdigit = helpers.issuedigits(re.sub('biannual', '', str(biannchk)).strip())
|
||||
else:
|
||||
fcdigit = helpers.issuedigits(re.sub('annual', '', str(temploc.lower())).strip())
|
||||
logger.fdebug(module + ' Annual detected [' + str(fcdigit) +']. ComicID assigned as ' + str(ofv['ComicID']))
|
||||
annchk = "yes"
|
||||
else:
|
||||
fcdigit = helpers.issuedigits(re.sub('annual', '', str(temploc.lower())).strip())
|
||||
logger.fdebug(module + ' Annual detected [' + str(fcdigit) +']. ComicID assigned as ' + str(ofv['ComicID']))
|
||||
annchk = "yes"
|
||||
else:
|
||||
fcdigit = helpers.issuedigits(temploc)
|
||||
fcdigit = helpers.issuedigits(temploc)
|
||||
|
||||
if fcdigit == helpers.issuedigits(ofv['Issue_Number']):
|
||||
if temploc is not None and fcdigit == helpers.issuedigits(ofv['Issue_Number']) or all([temploc is None, helpers.issuedigits(ofv['Issue_Number']) == '1']):
|
||||
if watchmatch['sub']:
|
||||
clocation = os.path.join(watchmatch['comiclocation'], watchmatch['sub'], helpers.conversion(watchmatch['comicfilename']))
|
||||
else:
|
||||
|
@ -2260,6 +2347,16 @@ class PostProcessor(object):
|
|||
nfilename = nfilename.replace(' ', mylar.CONFIG.REPLACE_CHAR)
|
||||
nfilename = re.sub('[\,\:\?\"\']', '', nfilename)
|
||||
nfilename = re.sub('[\/\*]', '-', nfilename)
|
||||
if ml['ForcedMatch'] is True:
|
||||
xyb = nfilename.find('[__')
|
||||
if xyb != -1:
|
||||
yyb = nfilename.find('__]', xyb)
|
||||
if yyb != -1:
|
||||
rem_issueid = nfilename[xyb+3:yyb]
|
||||
logger.fdebug('issueid: %s' % rem_issueid)
|
||||
nfilename = '%s %s'.strip() % (nfilename[:xyb], nfilename[yyb+3:])
|
||||
logger.fdebug('issueid information [%s] removed successsfully: %s' % (rem_issueid, nfilename))
|
||||
|
||||
self._log("New Filename: " + nfilename)
|
||||
logger.fdebug(module + ' New Filename: ' + nfilename)
|
||||
|
||||
|
|
|
@ -208,6 +208,7 @@ _CONFIG_DEFINITIONS = OrderedDict({
|
|||
'SAB_PRIORITY': (str, 'SABnzbd', "Default"),
|
||||
'SAB_TO_MYLAR': (bool, 'SABnzbd', False),
|
||||
'SAB_DIRECTORY': (str, 'SABnzbd', None),
|
||||
'SAB_VERSION': (str, 'SABnzbd', None),
|
||||
'SAB_CLIENT_POST_PROCESSING': (bool, 'SABnzbd', False), #0/False: ComicRN.py, #1/True: Completed Download Handling
|
||||
|
||||
'NZBGET_HOST': (str, 'NZBGet', None),
|
||||
|
@ -795,7 +796,6 @@ class Config(object):
|
|||
mylar.RSS_STATUS = 'Waiting'
|
||||
elif self.ENABLE_RSS is False and mylar.RSS_STATUS == 'Waiting':
|
||||
mylar.RSS_STATUS = 'Paused'
|
||||
logger.info('self.enable_rss is %s [%s]' % (self.ENABLE_RSS, mylar.RSS_STATUS))
|
||||
|
||||
if not helpers.is_number(self.CHMOD_DIR):
|
||||
logger.fdebug("CHMOD Directory value is not a valid numeric - please correct. Defaulting to 0777")
|
||||
|
@ -875,6 +875,12 @@ class Config(object):
|
|||
elif self.SAB_PRIORITY == "4": self.SAB_PRIORITY = "Paused"
|
||||
else: self.SAB_PRIORITY = "Default"
|
||||
|
||||
if self.SAB_VERSION is not None:
|
||||
config.set('SABnzbd', 'sab_version', self.SAB_VERSION)
|
||||
if int(re.sub("[^0-9]", '', self.SAB_VERSION).strip()) < int(re.sub("[^0-9]", '', '0.8.0').strip()) and self.SAB_CLIENT_POST_PROCESSING is True:
|
||||
logger.warn('Your SABnzbd client is less than 0.8.0, and does not support Completed Download Handling which is enabled. Disabling CDH.')
|
||||
self.SAB_CLIENT_POST_PROCESSING = False
|
||||
|
||||
mylar.USE_WATCHDIR = False
|
||||
mylar.USE_UTORRENT = False
|
||||
mylar.USE_RTORRENT = False
|
||||
|
|
|
@ -50,7 +50,8 @@ class FileChecker(object):
|
|||
self.watchcomic = re.sub('\?', '', watchcomic).strip() #strip the ? sepearte since it affects the regex.
|
||||
self.watchcomic = re.sub(u'\u2014', ' - ', watchcomic).strip() #replace the \u2014 with a normal - because this world is f'd up enough to have something like that.
|
||||
self.watchcomic = re.sub(u'\u2013', ' - ', watchcomic).strip() #replace the \u2013 with a normal - because again, people are dumb.
|
||||
self.watchcomic = unicodedata.normalize('NFKD', self.watchcomic).encode('ASCII', 'ignore')
|
||||
if type(self.watchcomic) != str:
|
||||
self.watchcomic = unicodedata.normalize('NFKD', self.watchcomic).encode('ASCII', 'ignore')
|
||||
else:
|
||||
self.watchcomic = None
|
||||
|
||||
|
@ -107,7 +108,6 @@ class FileChecker(object):
|
|||
self.AS_Alt = AS_Alternates['AS_Alt']
|
||||
self.AS_Tuple = AS_Alternates['AS_Tuple']
|
||||
|
||||
|
||||
def listFiles(self):
|
||||
comiclist = []
|
||||
watchmatch = {}
|
||||
|
@ -122,6 +122,7 @@ class FileChecker(object):
|
|||
'comiclocation': runresults['comiclocation'],
|
||||
'series_name': runresults['series_name'],
|
||||
'series_name_decoded': runresults['series_name_decoded'],
|
||||
'issueid': runresults['issueid'],
|
||||
'dynamic_name': runresults['dynamic_name'],
|
||||
'series_volume': runresults['series_volume'],
|
||||
'alt_series': runresults['alt_series'],
|
||||
|
@ -159,6 +160,7 @@ class FileChecker(object):
|
|||
'comiclocation': runresults['comiclocation'],
|
||||
'series_name': runresults['series_name'],
|
||||
'series_name_decoded': runresults['series_name_decoded'],
|
||||
'issueid': runresults['issueid'],
|
||||
'alt_series': runresults['alt_series'],
|
||||
'alt_issue': runresults['alt_issue'],
|
||||
'dynamic_name': runresults['dynamic_name'],
|
||||
|
@ -179,6 +181,7 @@ class FileChecker(object):
|
|||
'IssueYear': runresults['issue_year'],
|
||||
'JusttheDigits': runresults['justthedigits'],
|
||||
'AnnualComicID': runresults['annual_comicid'],
|
||||
'issueid': runresults['issueid'],
|
||||
'scangroup': runresults['scangroup']
|
||||
})
|
||||
comiccnt +=1
|
||||
|
@ -194,6 +197,7 @@ class FileChecker(object):
|
|||
'alt_issue': runresults['alt_issue'],
|
||||
'issue_year': runresults['issue_year'],
|
||||
'issue_number': runresults['issue_number'],
|
||||
'issueid': runresults['issueid'],
|
||||
'scangroup': runresults['scangroup']
|
||||
})
|
||||
|
||||
|
@ -283,6 +287,16 @@ class FileChecker(object):
|
|||
|
||||
modfilename = modfilename.replace('()','').strip()
|
||||
|
||||
issueid = None
|
||||
x = modfilename.find('[__')
|
||||
if x != -1:
|
||||
y = modfilename.find('__]', x)
|
||||
if y != -1:
|
||||
issueid = modfilename[x+3:y]
|
||||
logger.fdebug('issueid: %s' % issueid)
|
||||
modfilename = '%s %s'.strip() % (modfilename[:x], modfilename[y+3:])
|
||||
logger.fdebug('issueid %s removed successsfully: %s' % (issueid, modfilename))
|
||||
|
||||
#here we take a snapshot of the current modfilename, the intent is that we will remove characters that match
|
||||
#as we discover them - namely volume, issue #, years, etc
|
||||
#the remaining strings should be the series title and/or issue title if present (has to be detected properly)
|
||||
|
@ -1059,6 +1073,7 @@ class FileChecker(object):
|
|||
'comiclocation': self.dir,
|
||||
'series_name': series_name,
|
||||
'series_name_decoded': series_name_decoded,
|
||||
'issueid': issueid,
|
||||
'alt_series': alt_series,
|
||||
'alt_issue': alt_issue,
|
||||
'dynamic_name': dreplace,
|
||||
|
@ -1078,6 +1093,7 @@ class FileChecker(object):
|
|||
'comiclocation': self.dir,
|
||||
'series_name': series_name,
|
||||
'series_name_decoded': series_name_decoded,
|
||||
'issueid': issueid,
|
||||
'alt_series': alt_series,
|
||||
'alt_issue': alt_issue,
|
||||
'dynamic_name': self.dynamic_replace(series_name)['mod_seriesname'],
|
||||
|
@ -1094,6 +1110,7 @@ class FileChecker(object):
|
|||
'comiclocation': self.dir,
|
||||
'series_name': series_name,
|
||||
'series_name_decoded': series_name_decoded,
|
||||
'issueid': issueid,
|
||||
'alt_series': alt_series,
|
||||
'alt_issue': alt_issue,
|
||||
'series_volume': issue_volume,
|
||||
|
@ -1259,6 +1276,7 @@ class FileChecker(object):
|
|||
'alt_series': series_info['alt_series'],
|
||||
'alt_issue': series_info['alt_issue'],
|
||||
'issue_year': series_info['issue_year'],
|
||||
'issueid': series_info['issueid'],
|
||||
'justthedigits': justthedigits,
|
||||
'annual_comicid': annual_comicid,
|
||||
'scangroup': series_info['scangroup']}
|
||||
|
@ -1270,11 +1288,12 @@ class FileChecker(object):
|
|||
'sub': series_info['sub'],
|
||||
'comiclocation': series_info['comiclocation'],
|
||||
'series_name': series_info['series_name'],
|
||||
'alt_series': series_info['alt_series'],
|
||||
'alt_issue': series_info['alt_issue'],
|
||||
'alt_series': series_info['alt_series'],
|
||||
'alt_issue': series_info['alt_issue'],
|
||||
'issue_number': series_info['issue_number'],
|
||||
'series_volume': series_info['series_volume'],
|
||||
'issue_year': series_info['issue_year'],
|
||||
'issueid': series_info['issueid'],
|
||||
'scangroup': series_info['scangroup']}
|
||||
|
||||
|
||||
|
|
|
@ -4545,7 +4545,7 @@ class WebInterface(object):
|
|||
#----
|
||||
# to be implemented in the future.
|
||||
if mylar.INSTALL_TYPE == 'git':
|
||||
branch_history, err = mylar.versioncheck.runGit("log --pretty=format:'%h - %cr - %an - %s' -n 5")
|
||||
branch_history, err = mylar.versioncheck.runGit('log --pretty=format:"%h - %cr - %an - %s" -n 5')
|
||||
#here we pass the branch_history to the pretty_git module to break it down
|
||||
if branch_history:
|
||||
br_hist = self.pretty_git(branch_history)
|
||||
|
@ -4649,6 +4649,7 @@ class WebInterface(object):
|
|||
"sab_priority": mylar.CONFIG.SAB_PRIORITY,
|
||||
"sab_directory": mylar.CONFIG.SAB_DIRECTORY,
|
||||
"sab_to_mylar": helpers.checked(mylar.CONFIG.SAB_TO_MYLAR),
|
||||
"sab_version": mylar.CONFIG.SAB_VERSION,
|
||||
"sab_client_post_processing": helpers.checked(mylar.CONFIG.SAB_CLIENT_POST_PROCESSING),
|
||||
"nzbget_host": mylar.CONFIG.NZBGET_HOST,
|
||||
"nzbget_port": mylar.CONFIG.NZBGET_PORT,
|
||||
|
@ -5168,7 +5169,12 @@ class WebInterface(object):
|
|||
else:
|
||||
verify = False
|
||||
|
||||
version = 'Unknown'
|
||||
try:
|
||||
v = requests.get(querysab, params={'mode': 'version'}, verify=verify)
|
||||
if str(v.status_code) == '200':
|
||||
logger.fdebug('sabnzbd version: %s' % v.content)
|
||||
version = v.text
|
||||
r = requests.get(querysab, params=payload, verify=verify)
|
||||
except Exception, e:
|
||||
logger.warn('Error fetching data from %s: %s' % (querysab, e))
|
||||
|
@ -5183,6 +5189,10 @@ class WebInterface(object):
|
|||
verify = False
|
||||
|
||||
try:
|
||||
v = requests.get(querysab, params={'mode': 'version'}, verify=verify)
|
||||
if str(v.status_code) == '200':
|
||||
logger.fdebug('sabnzbd version: %s' % v.text)
|
||||
version = v.text
|
||||
r = requests.get(querysab, params=payload, verify=verify)
|
||||
except Exception, e:
|
||||
logger.warn('Error fetching data from %s: %s' % (sabhost, e))
|
||||
|
@ -5191,7 +5201,7 @@ class WebInterface(object):
|
|||
return 'Unable to retrieve data from SABnzbd'
|
||||
|
||||
|
||||
logger.info('status code: ' + str(r.status_code))
|
||||
logger.fdebug('status code: ' + str(r.status_code))
|
||||
|
||||
if str(r.status_code) != '200':
|
||||
logger.warn('Unable to properly query SABnzbd @' + sabhost + ' [Status Code returned: ' + str(r.status_code) + ']')
|
||||
|
@ -5215,7 +5225,9 @@ class WebInterface(object):
|
|||
mylar.CONFIG.SAB_APIKEY = q_apikey
|
||||
logger.info('APIKey provided is the FULL APIKey which is the correct key. You still need to SAVE the config for the changes to be applied.')
|
||||
logger.info('Connection to SABnzbd tested sucessfully')
|
||||
return "Successfully verified APIkey"
|
||||
mylar.CONFIG.SAB_VERSION = version
|
||||
return json.dumps({"status": "Successfully verified APIkey.", "version": str(version)})
|
||||
|
||||
SABtest.exposed = True
|
||||
|
||||
def NZBGet_test(self, nzbhost=None, nzbport=None, nzbusername=None, nzbpassword=None):
|
||||
|
|
Loading…
Reference in New Issue