2013-07-10 03:04:18 +00:00
< %inherit file="base.html"/>
< %!
import os
from mylar import db
import mylar
%>
< %def name="headerIncludes()">
< div id = "subhead_container" >
< div id = "subhead_menu" >
IMP: Removed unneeded code from several modules, IMP:(#659) Subdirectories now will be scanned in properly when in series directories, FIX:(#635)(#658) Moved code from html into module to allow for better integration and further templating needs, IMP: Added ability for mylar to auto-grab SABnzbd API when provided with user/pass, IMP: Test SABnzbd button works again - will auto-rollback to NZBKey usage, IMP: Added counts to Upcoming page, IMP: Added some more detailed parsing to the ImportResults, IMP: ImportResults will now show proper series title, IMP: Improved some logic when determining if a new weekly issue is on a watchlist if a rebooted series, IMP: A bunch of smaller fixes, and some various code tweaks...
2014-04-02 19:08:59 +00:00
< a id = "menu_link_refresh" onclick = "doAjaxCall('refreshArtist?ComicID=${comic['ComicID']}', $(this),'table')" href = "#" data-success = "'${comic['ComicName']}' is being refreshed" > Refresh Comic< / a >
2013-07-10 03:04:18 +00:00
< a id = "menu_link_delete" href = "deleteArtist?ComicID=${comic['ComicID']}" > Delete Comic< / a >
%if mylar.RENAME_FILES:
< a id = "menu_link_refresh" onclick = "doAjaxCall('manualRename?comicid=${comic['ComicID']}', $(this),'table')" data-success = "Renaming files." > Rename Files< / a >
%endif
< a id = "menu_link_refresh" onclick = "doAjaxCall('forceRescan?ComicID=${comic['ComicID']}', $(this)),'table'" href = "#" data-success = "'${comic['ComicName']}' is being refreshed" > Recheck Files< / a >
%if comic['Status'] == 'Paused':
< a id = "menu_link_resume" href = "#" onclick = "doAjaxCall('resumeArtist?ComicID=${comic['ComicID']}',$(this),true)" data-success = "${comic['ComicName']} resumed" > Resume Comic< / a >
%else:
< a id = "menu_link_pauze" href = "#" onclick = "doAjaxCall('pauseArtist?ComicID=${comic['ComicID']}',$(this),true)" data-success = "${comic['ComicName']} paused" > Pause Comic< / a >
%endif
2013-07-11 03:37:52 +00:00
%if annuals:
< a id = "menu_link_delete" href = "annualDelete?comicid=${comic['ComicID']}" > Delete Annuals< / a >
%endif
2013-07-10 03:04:18 +00:00
< / div >
< / div >
< /%def>
< %def name="body()">
< div id = "paddingheader" >
< h1 >
%if comic['Status'] == 'Loading':
< img src = "interfaces/default/images/loader_black.gif" alt = "loading" style = "float:left; margin-right: 5px;" / >
%endif
< div class = "row" >
< a href = "${comic['DetailURL']}" target = "_blank" > ${comic['ComicName']} (${comic['ComicYear']})< / a >
%if comic['Status'] == 'Loading':
< h3 > < i > (Comic information is currently being loaded)< / i > < / h3 >
%endif
< / div >
< / h1 >
< div style = "z-index:10; position: absolute; right: 0; top: 10;" >
2013-07-17 04:20:52 +00:00
< a href = "comicDetails?ComicID=${series['Previous']}" > < img src = "interfaces/default/images/prev.gif" width = "16" height = "18" / > < / a >
< a href = "comicDetails?ComicID=${series['Next']}" > < img src = "interfaces/default/images/next.gif" width = "16" height = "18" / > < / a >
2013-07-10 03:04:18 +00:00
< / div >
< / div >
< div id = "tabs" >
< ul >
< li > < a href = "#tabs-1" > Comic Details< / a > < / li >
< li > < a href = "#tabs-2" > Download settings< / a > < / li >
< li > < a href = "#tabs-3" > Edit Settings< / a > < / li >
< / ul >
< div id = "tabs-1" >
< table class = "comictable" summary = "Comic Details" >
< tr >
< td id = "mainimg" >
< fieldset >
< div id = "artistImg" >
< img src = "${comic['ComicImage']}" alt = "" height = "400" width = "263" / >
< / div >
< / fieldset >
< / td >
< td width = "100%" padding = "10" >
%if comic['ComicPublisher'] == 'DC Comics':
< img src = "interfaces/default/images/publisherlogos/logo-dccomics.png" align = "right" alt = "DC" height = "50" width = "50" / >
%elif comic['ComicPublisher'] == 'Marvel':
< img src = "interfaces/default/images/publisherlogos/logo-marvel.jpg" align = "right" alt = "Marvel" height = "50" width = "100" / >
%elif comic['ComicPublisher'] == 'Image':
< img src = "interfaces/default/images/publisherlogos/logo-imagecomics.png" align = "right" alt = "Image" height = "100" width = "50" / >
%elif comic['ComicPublisher'] == 'Dark Horse Comics' or comic['ComicPublisher'] == 'Dark Horse':
< img src = "interfaces/default/images/publisherlogos/logo-darkhorse.png" align = "right" alt = "Darkhorse" height = "100" width = "75" / >
%elif comic['ComicPublisher'] == 'IDW Publishing':
< img src = "interfaces/default/images/publisherlogos/logo-idwpublish.png" align = "right" alt = "IDW" height = "50" width = "100" / >
%elif comic['ComicPublisher'] == 'Icon':
< img src = "interfaces/default/images/publisherlogos/logo-iconcomics.png" align = "right" alt = "Icon" height = "50" width = "100" / >
%elif comic['ComicPublisher'] == 'Red5':
< img src = "interfaces/default/images/publisherlogos/logo-red5comics.png" align = "right" alt = "Red5" height = "50" width = "100" / >
%elif comic['ComicPublisher'] == 'Vertigo':
< img src = "interfaces/default/images/publisherlogos/logo-vertigo.jpg" align = "right" alt = "Vertigo" height = "50" width = "100" / >
%elif comic['ComicPublisher'] == 'ShadowLine':
< img src = "interfaces/default/images/publisherlogos/logo-shadowline.png" align = "right" alt = "Shadowline" height = "75" width = "100" / >
%elif comic['ComicPublisher'] == 'Archie Comics':
2013-08-07 06:27:12 +00:00
< img src = "interfaces/default/images/publisherlogos/logo-archiecomics.jpg" align = "right" alt = "Archie" height = "75" width = "75" / >
2013-07-10 03:04:18 +00:00
%elif comic['ComicPublisher'] == 'Oni Press':
< img src = "interfaces/default/images/publisherlogos/logo-onipress.png" align = "right" alt = "Oni Press" height = "50" width = "100" / >
%elif comic['ComicPublisher'] == 'Tokyopop':
< img src = "interfaces/default/images/publisherlogos/logo-tokyopop.jpg" align = "right" alt = "Tokyopop" height = "50" width = "100" / >
%elif comic['ComicPublisher'] == 'Midtown Comics':
< img src = "interfaces/default/images/publisherlogos/logo-midtowncomics.jpg" align = "right" alt = "Midtown" height = "50" width = "100" / >
%elif comic['ComicPublisher'] == 'Boom! Studios':
< img src = "interfaces/default/images/publisherlogos/logo-boom.jpg" align = "right" alt = "Boom!" height = "50" width = "100" / >
%elif comic['ComicPublisher'] == 'Skybound':
< img src = "interfaces/default/images/publisherlogos/logo-skybound.jpg" align = "right" alt = "Skybound" height = "50" width = "100" / >
%elif comic['ComicPublisher'] == 'Vertigo':
< img src = "interfaces/default/images/publisherlogos/logo-dynamite.jpg" align = "right" alt = "Dynamite" height = "50" width = "100" / >
%elif comic['ComicPublisher'] == 'Top Cow':
< img src = "interfaces/default/images/publisherlogos/logo-topcow.gif" align = "right" alt = "Top Cow" height = "75" width = "100" / >
%elif comic['ComicPublisher'] == 'Dynamite Entertainment':
< img src = "interfaces/default/images/publisherlogos/logo-dynamite.png" align = "right" alt = "Dynamite" height = "50" width = "100" / >
%elif comic['ComicPublisher'] == 'Cartoon Books':
< img src = "interfaces/default/images/publisherlogos/logo-cartoonbooks.jpg" align = "right" alt = "Cartoon Books" height = "75" width = "90" / >
%endif
< fieldset >
< div >
< label > < big > Publication Date: < / big > < norm > ${comic['ComicPublished']}< / norm > < / label >
< / div >
< div >
< label > < big > Publisher: < / big > < norm > ${comic['ComicPublisher']}< / norm > < / label >
< / div >
< div >
< label > < big > Status: < / big > < norm > ${comic['Status']}< / norm > < / label >
< / div >
< div >
< label > < big > Last Updated: < / big >
%if comic['LastUpdated'] is None:
< norm > Never< / norm >
%else:
< norm > ${comic['LastUpdated']}< / norm >
%endif
< / label >
< / div >
< div >
< label > < big > Issues in Series: < / big > < norm > ${comic['Total']} issues
%if comic['not_updated_db'] > 0:
(${comic['not_updated_db']} issue not updated yet)
%endif
< / norm > < / label >
< / div >
< div >
< label > < big > Directory< / big > < br / > < norm > ${comic['ComicLocation']}< / norm > < / label >
< / div >
< div >
< label > < big > Description:< / big > < / label > < br / >
<!-- <norm>${comic['Description']}</norm> -->
< / div >
< / fieldset >
< / td >
< / tr >
< / table >
< / div >
< div id = "tabs-2" >
< table class = "comictable" summary = "Download Settings" >
< tr >
< td id = "mainimg" >
< fieldset >
< div id = "artistImg" >
< img src = "${comic['ComicImage']}" alt = "" height = "400" width = "263" / >
< / div >
< / fieldset >
< / td >
< td width = "100%" padding = "10" >
%if comic['ComicPublisher'] == 'DC Comics':
< img src = "interfaces/default/images/publisherlogos/logo-dccomics.png" align = "right" alt = "DC" height = "50" width = "50" >
%elif comic['ComicPublisher'] == 'Marvel':
< img src = "interfaces/default/images/publisherlogos/logo-marvel.jpg" align = "right" alt = "Marvel" height = "50" width = "100" >
%elif comic['ComicPublisher'] == 'Image':
< img src = "interfaces/default/images/publisherlogos/logo-imagecomics.png" align = "right" alt = "Image" height = "100" width = "50" / >
%elif comic['ComicPublisher'] == 'Dark Horse Comics':
< img src = "interfaces/default/images/publisherlogos/logo-darkhorse.png" align = "right" alt = "Darkhorse" height = "75" width = "50" / >
%elif comic['ComicPublisher'] == 'IDW Publishing':
< img src = "interfaces/default/images/publisherlogos/logo-idwpublish.png" align = "right" alt = "IDW" height = "50" width = "100" / >
%endif
< fieldset >
< div >
< label > < big > Alternate versions :< / big > < norm > ${comic['ComicVersion']}< / norm > < / label >
< / div >
< div >
< label > < big > Scanner :< / big > < norm > ${comic['QUALscanner']}< / norm > < / label >
< / div >
< div >
< label > < big > Type :< / big > < norm > ${comic['QUALtype']}< / norm > < / label >
< / div >
< div >
< label > < big > Quality :< / big > < norm > ${comic['QUALquality']}< / norm > < / label >
< / div >
< div >
2013-07-30 04:57:37 +00:00
< label > < big > Alternate Search Names :< / big >
< %
import re
AS_Alternate = []
if comic['AlternateSearch'] is None:
AS_Alternate.append("None")
else:
chkthealt = comic['AlternateSearch'].split('##')
if chkthealt == 0:
AS_Alternate.append(comic['AlternateSearch'])
for calt in chkthealt:
AS_Alternate.append(re.sub('##','',calt))
%>
< UL > < UL >
%for AS in AS_Alternate:
< LI > < norm > ${AS}< / norm >
%endfor
< / UL > < / UL >
< / label >
2013-07-10 03:04:18 +00:00
< / div >
< %
if comic['UseFuzzy'] == "0" or comic['UseFuzzy'] is None:
fuzzy = "None"
fuzzy_year = "0"
elif comic['UseFuzzy'] == "1":
fuzzy = "Remove Year"
fuzzy_year = "1"
elif comic['UseFuzzy'] == "2":
fuzzy = "Fuzzy Year"
fuzzy_year = "2"
%>
< div >
< label > < big > Fuzzy Year logic : < / big > < norm > ${fuzzy} < / norm > < / label >
< / div >
< / fieldset >
< / td >
< / tr >
< / table >
< / div >
< div id = "tabs-3" >
< table class = "comictable" summary = "Edit Settings" >
< tr >
< td id = "mainimg" >
< fieldset >
< div class = "row" id = "artistImg" >
< img src = "${comic['ComicImage']}" alt = "" height = "400" width = "263" / >
< / div >
< / fieldset >
< / td >
< td width = "100%" padding = "10" >
%if comic['ComicPublisher'] == 'DC Comics':
< img src = "interfaces/default/images/publisherlogos/logo-dccomics.png" align = "right" alt = "DC" height = "50" width = "50" / >
%elif comic['ComicPublisher'] == 'Marvel':
2013-08-19 06:14:47 +00:00
< img src = "interfaces/default/images/publisherlogos/logo-marvel.jpg" align = "right" alt = "Marvel" height = "50" width = "100" border = "1" / >
2013-07-10 03:04:18 +00:00
%elif comic['ComicPublisher'] == 'Image':
< img src = "interfaces/default/images/publisherlogos/logo-imagecomics.png" align = "right" alt = "Image" height = "100" width = "50" / >
%elif comic['ComicPublisher'] == 'Dark Horse Comics':
< img src = "interfaces/default/images/publisherlogos/logo-darkhorse.png" align = "right" alt = "Darkhorse" height = "75" width = "50" / >
%elif comic['ComicPublisher'] == 'IDW Publishing':
< img src = "interfaces/default/images/publisherlogos/logo-idwpublish.png" align = "right" alt = "IDW" height = "50" width = "100" / >
%endif
< form action = "comic_config" method = "GET" >
< input type = "hidden" name = "ComicID" value = ${comic['ComicID']} >
< fieldset >
2013-08-19 06:14:47 +00:00
< br / > < br / >
< div class = "row checkbox left clearfix" >
< input type = "checkbox" style = "vertical-align: middle; margin: 3px; margin-top: -1px;" name = "force_continuing" value = "2" $ { comicConfig [ ' force_continuing ' ] } / > < label > Forcibly Mark as Continuing Series< a href = "#" title = "Will forcibly mark this series as 'Continuing' regardless of actual status" > < img src = "interfaces/default/images/info32.png" height = "16" alt = "" / > < / a > < / label >
2013-07-30 04:57:37 +00:00
< / div >
2013-08-19 06:14:47 +00:00
< div class = "row" >
< label > Version Number< / label >
< input type = "text" name = "comic_version" value = "${comic['ComicVersion']}" size = "20" > < br / >
2013-07-10 03:04:18 +00:00
< / div >
2013-08-19 06:14:47 +00:00
< div class = "row" >
< label > Directory Location< / label >
< input type = "text" name = "com_location" value = "${comic['ComicLocation']}" size = "90" > < br / >
< small > the directory where all the comics are located for this particular comic< / small >
< / div >
< div class = "row" >
< label > Alternate Search Names< / label >
< input type = "text" name = "alt_search" value = "${comic['AlternateSearch']}" size = "90" >
< a href = "#" title = "Seperate multiple entries with ##" > < img src = "interfaces/default/images/info32.png" height = "16" alt = "" / > < / a >
< small > Alternate comic names to be searched in case naming is different (ie. Hack/Slash = hack-slash)< / small >
< / div >
< div class = "row" >
< %
year_options = "Default - Keep the Year as is\nYear Removal - Remove issue publication year from searches (dangerous)\nFuzzy the Year - Increase & Decrease the issue publication year by one"
%>
< label > Year Options< a href = "#" title = "${year_options}" > < img src = "interfaces/default/images/info32.png" height = "16" alt = "" / > < / a > < / label >
< div class = "row radio left clearfix" >
< input type = "radio" style = "vertical-align: middle; margin: 3px; margin-top: -1px;" name = "fuzzy_year" value = "0" $ { comicConfig [ ' fuzzy_year0 ' ] } / > < label > Default< / label >
< input type = "radio" style = "vertical-align: middle; margin: 3px; margin-top: -1px;" name = "fuzzy_year" value = "1" $ { comicConfig [ ' fuzzy_year1 ' ] } / > < label > Year Removal< / label >
< input type = "radio" style = "vertical-align: middle; margin: 3px; margin-top: -1px;" name = "fuzzy_year" value = "2" $ { comicConfig [ ' fuzzy_year2 ' ] } / > < label > Fuzzy the Year< / label >
< / div >
2013-07-10 03:04:18 +00:00
< / div >
< input type = "submit" value = "Update" / >
< / fieldset >
< / form >
< / td >
< / tr >
< / table >
< / div >
< / div >
< div id = "checkboxControls" style = "float: right; vertical-align: middle; margin: 3px; margin-top: -1px;" >
< div style = "padding-bottom: 5px;" >
< label for = "Wanted" class = "checkbox inline Wanted" > < input type = "checkbox" id = "Wanted" checked = "checked" / > Wanted: < b > ${isCounts['Wanted']}< / b > < / label >
< label for = "Archived" class = "checkbox inline Archived" > < input type = "checkbox" id = "Archived" checked = "checked" / > Archived: < b > ${isCounts['Archived']}< / b > < / label >
< label for = "Downloaded" class = "checkbox inline Downloaded" > < input type = "checkbox" id = "Downloaded" checked = "checked" / > Downloaded: < b > ${isCounts['Downloaded']}< / b > < / label >
< label for = "Skipped" class = "checkbox inline Skipped" > < input type = "checkbox" id = "Skipped" checked = "checked" / > Skipped: < b > ${isCounts['Skipped']}< / b > < / label >
2013-07-30 04:57:37 +00:00
< label for = "Ignored" class = "checkbox inline Ignored" > < input type = "checkbox" id = "Ignored" checked = "checked" / > Ignored: < b > ${isCounts['Ignored']}< / b > < / label >
2013-07-10 03:04:18 +00:00
< / div >
< / div >
< div class = "table_wrapper" >
< form action = "markissues" method = "get" id = "markissues" >
< div id = "markissue" > Mark selected issues as
< select name = "action" onChange = "doAjaxCall('markissues',$(this),'table',true);" data-success = "selected issues marked" >
< option disabled = "disabled" selected = "selected" > Choose...< / option >
< option value = "Wanted" > Wanted< / option >
< option value = "Skipped" > Skipped< / option >
< option value = "Downloaded" > Downloaded< / option >
< option value = "Archived" > Archived< / option >
2013-07-30 05:28:09 +00:00
< option value = "Ignored" > Ignored< / option >
2013-07-10 03:04:18 +00:00
< / select >
selected issues
< input type = "hidden" value = "Go" >
< input type = "checkbox" name = "skipped2wanted" onclick = "doAjaxCall('skipped2wanted?comicid=${comic['ComicID']}',$(this),'table')" value = "1" data-success = "Skipped Issues Changed to Wanted" style = "float: right; vertical-align: middle; margin: 3px; margin-top: -1px;" / > < label style = "float: right; vertical-align: middle; margin: 3px; margin-top: -1px;" > Change All Skipped to Wanted < / label >
< / div >
< table class = "display" id = "issue_table" >
< thead >
< tr >
< th id = "select" align = "left" > < input type = "checkbox" onClick = "toggle(this)" class = "checkbox" / > < / th >
< th id = "int_issuenumber" > IntIssNum< / th >
< th id = "issuenumber" > Number< / th >
< th id = "issuename" > Name< / th >
< th id = "reldate" > Date< / th >
< th id = "status" > Status< / th >
< th id = "options" > Options< / th >
< / tr >
< / thead >
< tbody >
%for issue in issues:
< %
if issue['Status'] == 'Skipped':
grade = 'Z'
elif issue['Status'] == 'Wanted':
grade = 'X'
elif issue['Status'] == 'Snatched':
grade = 'C'
elif issue['Status'] == 'Downloaded':
grade = 'A'
elif issue['Status'] == 'Archived':
grade = 'A'
2013-07-30 04:57:37 +00:00
elif issue['Status'] == 'Ignored':
grade = 'A'
2013-07-10 03:04:18 +00:00
else:
grade = 'A'
%>
< tr class = "${issue['Status']} grade${grade}" >
< td id = "select" > < input type = "checkbox" name = "${issue['IssueID']}" class = "checkbox" value = "${issue['IssueID']}" / > < / td >
< td id = "int_issuenumber" > ${issue['Int_IssueNumber']}< / td >
< td id = "issuenumber" > ${issue['Issue_Number']}< / td >
< td id = "issuename" > ${issue['IssueName']}< / td >
< td id = "reldate" > ${issue['IssueDate']}< / td >
< td id = "status" > ${issue['Status']}
%if issue['Status'] == 'Downloaded' or issue['Status'] == 'Archived':
< %Csize = mylar.helpers.human_size(issue['ComicSize'])%>
< a href = "#" title = "${issue['Location']} (${Csize})" > < img src = "interfaces/default/images/info32.png" height = "16" alt = "" / > < / a >
%endif
< / td >
< td id = "options" >
2013-07-30 04:57:37 +00:00
%if issue['Status'] == 'Skipped' or issue['Status'] == 'Ignored':
2013-07-10 03:04:18 +00:00
< a href = "#" title = "Mark issue as Wanted" onclick = "doAjaxCall('queueissue?ComicID=${issue['ComicID']}&IssueID=${issue['IssueID']}&ComicIssue=${issue['Issue_Number']}&ComicYear=${issue['IssueDate']}&mode=want',$(this),'table')" > < img src = "interfaces/default/images/wanted_icon.png" height = "25" width = "25" / > < / a >
%elif (issue['Status'] == 'Wanted'):
< a href = "#" title = "Mark issue as Skipped" onclick = "doAjaxCall('unqueueissue?IssueID=${issue['IssueID']}&ComicID=${issue['ComicID']}',$(this),'table')" data-success = "'${issue['Issue_Number']}' has been marked as skipped" > < img src = "interfaces/default/images/skipped_icon.png" height = "25" width = "25" / > < / a >
%elif (issue['Status'] == 'Snatched'):
< a href = "#" onclick = "doAjaxCall('queueissue?ComicID=${issue['ComicID']}&IssueID=${issue['IssueID']}&ComicIssue=${issue['Issue_Number']}&mode=want', $(this),'table')" data-success = "Retrying the same version of '${issue['ComicName']}' '${issue['Issue_Number']}'" title = "Retry the same download again" > < img src = "interfaces/default/images/retry_icon.png" height = "25" width = "25" / > < / a >
< a href = "#" title = "Mark issue as Skipped" onclick = "doAjaxCall('unqueueissue?IssueID=${issue['IssueID']}&ComicID=${issue['ComicID']}',$(this),'table')" data-success = "'${issue['Issue_Number']}' has been marked as skipped" > < img src = "interfaces/default/images/skipped_icon.png" height = "25" width = "25" / > < / a >
%elif (issue['Status'] == 'Downloaded'):
2014-04-23 04:00:21 +00:00
< %
IMP: Ability to now specify search provider order (regardless of torrents or nzb) within the config.ini, IMP: (#667) Changed the db module to try to accomodate db locking errors and lowering the amount of actual write transactions that were committed along with a new scheduler system, IMP: Changed sabnzbd directory to post-processing, and included subdirs for sabnzbd & nzbget ComicRN scripts, IMP: NZBGet Post-Processing ComicRN.py script (updated for use with nzbget v11.0+)added & updated in post-processing/nzbget directory (thnx ministoat), FIX: If Issue Location was None, and status was Downloaded would cause error in GUI and break series, IMP: (#689) Minimum # of seeders added (will work with KAT), IMP: (#680) Added Boxcar 2 IO Notifications, IMP: Added PushBullet Notifications, IMP: Cleaned up some notification messages so it's not so cluttered, IMP: Added Clickable series link in History tab, IMP: Added Post-Processed as a status to History tab to show manually post-processed items, IMP: Removed log level dropdown from Logs page & added 'ThreadName' as a column, IMP: Added Force Check Availability & View Future Pull-list to Upcoming sub-tabs, IMP: Added '--safe' option to startup options which will redirect directly to Manage Comics screen incase things are broken, FIX: Added proper month conversions for manual post-processing when doing comparitive issue analysis for matches, FIX: (#613) Allow for negative issue numbers in post-processing when renaming and issue padding is enabled, FIX: File Permissions on post-processing would stop post-processing if couldn't change, now will just log the error and continue, IMP: Added Scheduler (from sickbeard) to allow for threadnaming and better scheduling, IMP: Filenames in the format of ' () ' will now get scanned in, IMP: During manual post-processing will now stop looking for matches upon a successful match, IMP: A Refresh/Weeklypull series check will now just scan in issue data, instead of series info,etc, IMP: Removed some legacy GCD code that is no longer in use, IMP: Exception/traceback handling will now be logged, FIX: Unable to grab torrents from KAT due to content-encoding detection failing, IMP: Added universal date-time conversion to allow for non-english based dates to be properly compared when checking search results against publication dates, FIX: Annuals will now get proper notification (prior was leaving out the word 'annual' from notification/logs), IMP: Improved future pull-list detection and increased retension (now ~5 months), IMP: Will now mark new issues as Wanted on a Refresh Series if autowant upcoming is enabled (was reverting to a status of None previously), IMP: Cannot change status to Downloaded if current status is Skipped or Wanted, FIX: (#704) UnSkipped will now work (X in options column on comic details page), IMP: future_check will check upcoming future issues (future pull-list) that have no series data yet (ie. #1's) and auto-add them to watchlist when the data is available and auto-want accordingly, IMP: (#706) Downloading issues to local machine (via comicdetails screen) with special characters in filename now will work, IMP: improved comparison checks during weekly pull list and improved speed abit since only refreshing issue data now instead of entire series, Other Referenced issues: (#670)(#690) and some others....
2014-05-25 18:32:11 +00:00
if issue['Location'] is not None:
linky = os.path.join(comic['ComicLocation'],issue['Location'])
if not os.path.isfile(linky):
linky = None
else:
2014-04-23 04:00:21 +00:00
linky = None
%>
%if linky:
IMP: Ability to now specify search provider order (regardless of torrents or nzb) within the config.ini, IMP: (#667) Changed the db module to try to accomodate db locking errors and lowering the amount of actual write transactions that were committed along with a new scheduler system, IMP: Changed sabnzbd directory to post-processing, and included subdirs for sabnzbd & nzbget ComicRN scripts, IMP: NZBGet Post-Processing ComicRN.py script (updated for use with nzbget v11.0+)added & updated in post-processing/nzbget directory (thnx ministoat), FIX: If Issue Location was None, and status was Downloaded would cause error in GUI and break series, IMP: (#689) Minimum # of seeders added (will work with KAT), IMP: (#680) Added Boxcar 2 IO Notifications, IMP: Added PushBullet Notifications, IMP: Cleaned up some notification messages so it's not so cluttered, IMP: Added Clickable series link in History tab, IMP: Added Post-Processed as a status to History tab to show manually post-processed items, IMP: Removed log level dropdown from Logs page & added 'ThreadName' as a column, IMP: Added Force Check Availability & View Future Pull-list to Upcoming sub-tabs, IMP: Added '--safe' option to startup options which will redirect directly to Manage Comics screen incase things are broken, FIX: Added proper month conversions for manual post-processing when doing comparitive issue analysis for matches, FIX: (#613) Allow for negative issue numbers in post-processing when renaming and issue padding is enabled, FIX: File Permissions on post-processing would stop post-processing if couldn't change, now will just log the error and continue, IMP: Added Scheduler (from sickbeard) to allow for threadnaming and better scheduling, IMP: Filenames in the format of ' () ' will now get scanned in, IMP: During manual post-processing will now stop looking for matches upon a successful match, IMP: A Refresh/Weeklypull series check will now just scan in issue data, instead of series info,etc, IMP: Removed some legacy GCD code that is no longer in use, IMP: Exception/traceback handling will now be logged, FIX: Unable to grab torrents from KAT due to content-encoding detection failing, IMP: Added universal date-time conversion to allow for non-english based dates to be properly compared when checking search results against publication dates, FIX: Annuals will now get proper notification (prior was leaving out the word 'annual' from notification/logs), IMP: Improved future pull-list detection and increased retension (now ~5 months), IMP: Will now mark new issues as Wanted on a Refresh Series if autowant upcoming is enabled (was reverting to a status of None previously), IMP: Cannot change status to Downloaded if current status is Skipped or Wanted, FIX: (#704) UnSkipped will now work (X in options column on comic details page), IMP: future_check will check upcoming future issues (future pull-list) that have no series data yet (ie. #1's) and auto-add them to watchlist when the data is available and auto-want accordingly, IMP: (#706) Downloading issues to local machine (via comicdetails screen) with special characters in filename now will work, IMP: improved comparison checks during weekly pull list and improved speed abit since only refreshing issue data now instead of entire series, Other Referenced issues: (#670)(#690) and some others....
2014-05-25 18:32:11 +00:00
< a href = "downloadthis?pathfile=${linky |u}" > < img src = "interfaces/default/images/download_icon.png" height = "25" width = "25" title = "Download the Issue" / > < / a >
2014-04-23 04:00:21 +00:00
%endif
< a href = "#" title = "Add to Reading List" onclick = "doAjaxCall('addtoreadlist?IssueID=${issue['IssueID']}',$(this),'table')" data-success = "${issue['Issue_Number']} added to Reading List" > < img src = "interfaces/default/images/glasses-icon.png" height = "25" width = "25" / > < / a >
2013-07-10 03:04:18 +00:00
%else:
2013-07-30 04:57:37 +00:00
< a href = "#" onclick = "doAjaxCall('queueissue?ComicID=${issue['ComicID']}&IssueID=${issue['IssueID']}&ComicIssue=${issue['Issue_Number']}&mode=want', $(this),'table')" data-success = "Retrying the same version of '${issue['ComicName']}' '${issue['Issue_Number']}'" title = "Retry the same download again" > < img src = "interfaces/default/images/retry_icon.png" height = "25" width = "25" / > < / a >
< a href = "#" title = "Mark issue as Skipped" onclick = "doAjaxCall('unqueueissue?IssueID=${issue['IssueID']}&ComicID=${issue['ComicID']}',$(this),'table')" data-success = "'${issue['Issue_Number']}' has been marked as skipped" > < img src = "interfaces/default/images/skipped_icon.png" height = "25" width = "25" / > < / a >
2013-07-10 03:04:18 +00:00
%endif
< a href = "#" onclick = "doAjaxCall('archiveissue?IssueID=${issue['IssueID']}',$(this),'table')" > < img src = "interfaces/default/images/archive_icon.png" height = "25" width = "25" title = "Mark issue as Archived" > < / a >
< / td >
< / tr >
%endfor
< / tbody >
< / table >
2013-07-30 04:57:37 +00:00
< / form >
2013-07-10 03:04:18 +00:00
< / div >
2014-02-26 19:48:50 +00:00
2013-07-10 03:04:18 +00:00
%if annuals:
2014-02-26 19:48:50 +00:00
< h1 > Annuals< / h1 >
%for aninfo in annualinfo:
${aninfo['annualComicName']}< a href = "annualDelete?comicid=${comic['ComicID']}&ReleaseComicID=${aninfo['annualComicID']}" > < img src = "interfaces/default/images/x.png" height = "10" width = "10" / > < / a >
%endfor
2013-07-10 03:04:18 +00:00
< form action = "markissues" method = "get" id = "markissues" >
2013-07-30 04:57:37 +00:00
< div id = "markissue" > Mark selected annuals as
2013-07-10 03:04:18 +00:00
< select name = "action" onChange = "doAjaxCall('markissues',$(this),'table',true);" data-success = "selected issues marked" >
< option disabled = "disabled" selected = "selected" > Choose...< / option >
< option value = "Wanted" > Wanted< / option >
< option value = "Skipped" > Skipped< / option >
< option value = "Downloaded" > Downloaded< / option >
< option value = "Archived" > Archived< / option >
2013-07-30 05:28:09 +00:00
< option value = "Ignored" > Ignored< / option >
2013-07-10 03:04:18 +00:00
< / select >
2013-07-30 04:57:37 +00:00
selected annuals
2013-07-10 03:04:18 +00:00
< input type = "hidden" value = "Go" >
< / div >
2013-12-30 19:30:50 +00:00
< table class = "display_no_select" id = "annual_table" >
2013-07-10 03:04:18 +00:00
<!-- <div class="ui - widget">
< label for = "annseries" > Series: < / label >
< input id = "annseries" / >
< / div >
< div class = "ui-widget" style = "margin-top: 2em; font-family: Arial;" >
Result:
< div id = "log" style = "height: 200px; width: 300px; overflow: auto;" class = "ui-widget-content" > < / div >
< / div >
-->
< thead >
< tr >
< th id = "aselect" align = "left" > < input type = "checkbox" onClick = "toggle(this)" class = "checkbox" / > < / th >
< th id = "aint_issuenumber" > Int_IssNumber< / th >
< th id = "aissuenumber" > Number< / th >
< th id = "aissuename" > Name< / th >
< th id = "areldate" > Date< / th >
< th id = "astatus" > Status< / th >
< th id = "aoptions" > Options< / th >
< / tr >
< / thead >
< tbody >
%for annual in annuals:
2014-02-26 19:48:50 +00:00
2013-07-10 03:04:18 +00:00
< %
if annual['Status'] == 'Skipped':
grade = 'Z'
elif annual['Status'] == 'Wanted':
grade = 'X'
elif annual['Status'] == 'Snatched':
grade = 'C'
elif annual['Status'] == 'Downloaded':
grade = 'A'
elif annual['Status'] == 'Archived':
grade = 'A'
else:
grade = 'A'
%>
< tr class = "${annual['Status']} grade${grade}" >
< td id = "aselect" > < input type = "checkbox" name = "${annual['IssueID']}" class = "checkbox" value = "${annual['IssueID']}" / > < / td >
< %
if annual['Int_IssueNumber'] is None:
annual_Number = annual['Int_IssueNumber']
else:
annual_Number = annual['Int_IssueNumber'] - 100000
%>
< td id = "aint_issuenumber" > ${annual_Number}< / td >
< td id = "aissuenumber" > ${annual['Issue_Number']}< / td >
< td id = "aissuename" > ${annual['IssueName']}< / td >
< td id = "areldate" > ${annual['IssueDate']}< / td >
< td id = "astatus" > ${annual['Status']}
%if annual['Status'] == 'Downloaded' or annual['Status'] == 'Archived':
< %Csize = mylar.helpers.human_size(annual['ComicSize'])%>
< a href = "#" title = "${annual['Location']} (${Csize})" > < img src = "interfaces/default/images/info32.png" height = "16" alt = "" / > < / a >
%endif
< / td >
< td id = "aoptions" >
2013-07-30 04:57:37 +00:00
< % amode = 'want_ann' %>
< a href = "#" title = "Mark issue as Wanted" onclick = "doAjaxCall('queueissue?ComicID=${annual['ComicID']}&IssueID=${annual['IssueID']}&ComicIssue=${annual['Issue_Number']}&ComicYear=${annual['IssueDate']}&mode=${amode}',$(this),'table')" > < img src = "interfaces/default/images/wanted_icon.png" height = "25" width = "25" / > < / a >
2013-07-10 03:04:18 +00:00
< a href = "#" title = "Mark issue as Skipped" onclick = "doAjaxCall('unqueueissue?IssueID=${annual['IssueID']}&ComicID=${annual['ComicID']}',$(this),'table')" data-success = "'${annual['Issue_Number']}' has been marked as skipped" > < img src = "interfaces/default/images/skipped_icon.png" height = "25" width = "25" / > < / a >
2013-07-30 04:57:37 +00:00
< a href = "#" title = "Add to Reading List" > < img src = "interfaces/default/images/glasses-icon.png" height = "25" width = "25" / > < / a >
2014-02-26 19:48:50 +00:00
< a href = "#" title = "Retry" onclick = "doAjaxCall('queueissue?ComicID=${annual['ComicID']}&IssueID=${annual['IssueID']}&ComicIssue=${annual['Issue_Number']}&mode=${amode}', $(this),'table')" data-success = "Retrying the same version of '${annual['ComicName']}'" > < img src = "interfaces/default/images/retry_icon.png" height = "25" width = "25" / > < / a >
2013-07-30 05:28:09 +00:00
< a href = "#" title = "Archive" onclick = "doAjaxCall('archiveissue?IssueID=${annual['IssueID']}',$(this),'table')" > < img src = "interfaces/default/images/archive_icon.png" height = "25" width = "25" title = "Mark issue as Archived" / > < / a >
2013-07-10 03:04:18 +00:00
< / td >
< / tr >
%endfor
< / tbody >
2014-02-26 19:48:50 +00:00
< / table >
2014-04-14 18:10:10 +00:00
< / form >
2014-02-26 19:48:50 +00:00
< div style = "position:relative; width:960px; height:10px; margin:10px auto;" >
< form action = "manual_annual_add" method = "GET" >
< input type = "hidden" name = "comicid" value = ${comic['ComicID']} >
< input type = "hidden" name = "comicname" value = ${comic['ComicName'] | u } >
< input type = "hidden" name = "comicyear" value = ${comic['ComicYear']} >
< div style = "position:absolute; top:30px; right:0px;" >
< center > < label > < strong > < a href = "#" title = "Enter the ComicID of the annual(s) you want to add to the series" / > Comic ID< / a > < / strong > < / label >
< input type = "text" name = "manual_comicid" size = "10" > < input type = "image" src = "interfaces/default/images/submit.png" height = "25" width = "25" / > < / center >
< / div >
< / form >
< / div >
FIX:(#663) Weekly pull list would crash on issues with decimal places if series on watchlist, FIX: Error logging when performing search, FIX:(#662) Removed 'Test SABnzbd button' as was causing configuration saving issues. Can still be used by url : /SABtest, IMP: Added more logic checking to weeklypull list when comparing series for matches (to ensure an issue is part of a given series), IMP: Removed dead references to nzbx as a provider, FIX: If issue had no leading 0 in a decimal issue, mylar would crash, FIX: None status would occur when refreshing a series and more than one issue was being pulled in for data, IMP: When using manual post-processing, if issue date was near end/start of year issue comparison would fail. Comparison by month now added, FIX: file checking - if decimal in issue and no year present, would skip issue, FIX: manual post-processing - would fail/skip if no year provided for issue within filename, FIX: Manual Annual Add option will only be available if annuals_on=1 within the config.ini now
2014-04-07 16:20:05 +00:00
%endif
2014-02-26 19:48:50 +00:00
2013-07-10 03:04:18 +00:00
< /%def>
< %def name="headIncludes()">
< link rel = "stylesheet" href = "interfaces/default/css/data_table.css" >
%if comic['Status'] == 'Loading':
2013-07-30 04:57:37 +00:00
< meta http-equiv = "refresh" content = "10" >
2013-07-10 03:04:18 +00:00
%endif
< /%def>
< %def name="javascriptIncludes()">
< script src = "js/libs/jquery.dataTables.min.js" > < / script >
< style >
.ui-autocomplete-loading {
background: white url('interfaces/default/images/loader_black.gif') right center no-repeat;
}
#annseries{ width: 25em; }
< / style >
< script >
$(function() {
function log( message ) {
$( "< div > " ).text( message ).prependTo( "#log" );
$( "#log" ).scrollTop( 0 );
}
$( "#annseries" ).autocomplete({
source: function( request, response ) {
$.ajax({
url: "http://api.comicvine.com/search?",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: {
resources: "volume",
format: "json",
api_key: "583939a3df0a25fc4e8b7a29934a13078002dc27",
query: request.term
},
success: function( data ) {
alert("success");
response( $.map( data.results, function( item ) {
return {
label: item.name + (item.id),
value: item.name
}
}));
},
error: function( data ) {
alert("error");
}
});
},
minLength: 2,
select: function( event, ui ) {
log( ui.item ?
"Selected: " + ui.item.label :
"Nothing selected, input was " + this.value);
},
open: function() {
$( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
},
close: function() {
$( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
}
});
});
< / script >
< script >
// show/hide different types of rows when the checkboxes are changed
$("#checkboxControls input").change(function(e){
var whichClass = $(this).attr('id')
$(this).showHideRows(whichClass)
return
$('tr.'+whichClass).each(function(i){
$(this).toggle();
});
});
// initially show/hide all the rows according to the checkboxes
$("#checkboxControls input").each(function(e){
var status = this.checked;
$("tr."+$(this).attr('id')).each(function(e){
if (status) {
$(this).show();
} else {
$(this).hide();
}
});
});
$.fn.showHideRows = function(whichClass){
var status = $('#checkboxControls > input, #'+whichClass).prop('checked')
$("tr."+whichClass).each(function(e){
if (status) {
$(this).show();
} else {
$(this).hide();
}
});
}
hideServerDivs = function () {
$("#customoptions").slideUp();
$("#hpserveroptions").slideUp();
};
handleNewSelection = function () {
hideServerDivs();
switch ($(this).val()) {
case 'custom':
$("#customoptions").slideDown();
break;
case 'mylar':
$("#hpserveroptions").slideDown();
break;
}
};
function initThisPage(){
$(function() {
$( "#tabs" ).tabs();
});
initActions();
$('#issue_table').dataTable(
{
"bDestroy": true,
"aoColumnDefs": [
{ 'bSortable': false, 'aTargets': [ 0, 3 ] },
{ 'bVisible': false, 'aTargets': [1] },
{ 'sType': 'numeric', 'aTargets': [1] },
{ 'iDataSort': [1], 'aTargets': [2] }
],
"aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, 'All' ]],
"oLanguage": {
"sLengthMenu":"Show _MENU_ issues per page",
"sEmptyTable": "No issue information available",
"sInfo":"Showing _TOTAL_ issues",
"sInfoEmpty":"Showing 0 to 0 of 0 issues",
"sInfoFiltered":"(filtered from _MAX_ total issues)",
"sSearch": ""},
"bStateSave": true,
"iDisplayLength": 25,
"sPaginationType": "full_numbers",
"aaSorting": [[2, 'desc'],[4,'desc']]
});
$('#annual_table').dataTable(
{
"bDestroy": true,
"aoColumnDefs": [
{ 'bSortable': false, 'aTargets': [ 0, 3 ] },
{ 'bVisible': false, 'aTargets': [1] },
{ 'sType': 'numeric', 'aTargets': [1] },
{ 'iDataSort': [1], 'aTargets': [2] }
2014-02-26 19:48:50 +00:00
],
"oLanguage": {
"sLengthMenu":"",
"sEmptyTable": "No issue information available",
"sInfo":"Showing _TOTAL_ issues",
"sInfoEmpty":"Showing 0 to 0 of 0 issues",
"sInfoFiltered":"",
"sSearch": ""},
"bStateSave": true,
"bFilter": false,
2014-03-02 19:57:57 +00:00
"sPaginationType": "full_numbers",
2014-02-26 19:48:50 +00:00
"iDisplayLength": 10
2013-07-10 03:04:18 +00:00
});
resetFilters("issue");
setTimeout(function(){
initFancybox();
},1500);
}
$(document).ready(function() {
2013-07-30 04:57:37 +00:00
$("issue_table").dataTable();
$("annual_table").dataTable();
2013-07-10 03:04:18 +00:00
initThisPage();
});
< / script >
< /%def>