2015-03-04 21:00:36 +00:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
2014-02-26 19:48:50 +00:00
# This file is part of Mylar.
#
# Mylar 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 3 of the License, or
# (at your option) any later version.
#
# Mylar 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 Mylar. If not, see <http://www.gnu.org/licenses/>.
import mylar
2015-05-14 23:12:48 +00:00
from mylar import db , mb , importer , search , PostProcessor , versioncheck , logger
2016-09-07 04:04:42 +00:00
import simplejson as simplejson
2015-03-04 21:00:36 +00:00
import cherrypy
import os
import urllib2
import cache
import imghdr
2015-05-14 23:12:48 +00:00
from operator import itemgetter
2015-05-15 21:57:23 +00:00
from cherrypy . lib . static import serve_file , serve_download
2017-01-12 20:24:39 +00:00
import datetime
2014-02-26 19:48:50 +00:00
2016-12-20 07:54:06 +00:00
cmd_list = [ ' getIndex ' , ' getComic ' , ' getUpcoming ' , ' getWanted ' , ' getHistory ' ,
' getLogs ' , ' clearLogs ' , ' findComic ' , ' addComic ' , ' delComic ' ,
' pauseComic ' , ' resumeComic ' , ' refreshComic ' , ' addIssue ' ,
' queueIssue ' , ' unqueueIssue ' , ' forceSearch ' , ' forceProcess ' ,
' getVersion ' , ' checkGithub ' , ' shutdown ' , ' restart ' , ' update ' ,
' getComicInfo ' , ' getIssueInfo ' , ' getArt ' , ' downloadIssue ' ,
' downloadNZB ' , ' getReadList ' ]
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
class Api ( object ) :
def __init__ ( self ) :
self . apikey = None
self . cmd = None
self . id = None
2015-03-04 21:00:36 +00:00
self . img = None
2015-05-15 21:57:23 +00:00
self . file = None
self . filename = None
2014-02-26 19:48:50 +00:00
self . kwargs = None
self . data = None
self . callback = None
2015-06-12 06:37:27 +00:00
self . apitype = None
2014-02-26 19:48:50 +00:00
2015-05-22 08:32:51 +00:00
def checkParams ( self , * args , * * kwargs ) :
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
if ' apikey ' not in kwargs :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Missing api key ' )
2014-02-26 19:48:50 +00:00
return
2015-03-04 21:00:36 +00:00
2015-06-07 01:44:46 +00:00
if ' cmd ' not in kwargs :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Missing parameter: cmd ' )
2015-06-07 01:44:46 +00:00
return
if not mylar . API_ENABLED :
if kwargs [ ' apikey ' ] != mylar . DOWNLOAD_APIKEY :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' API not enabled ' )
2015-06-07 01:44:46 +00:00
return
2015-06-12 06:37:27 +00:00
if kwargs [ ' apikey ' ] != mylar . API_KEY and all ( [ kwargs [ ' apikey ' ] != mylar . DOWNLOAD_APIKEY , mylar . DOWNLOAD_APIKEY != None ] ) :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Incorrect API key ' )
2014-02-26 19:48:50 +00:00
return
else :
2015-06-12 06:37:27 +00:00
if kwargs [ ' apikey ' ] == mylar . API_KEY :
self . apitype = ' normal '
elif kwargs [ ' apikey ' ] == mylar . DOWNLOAD_APIKEY :
self . apitype = ' download '
logger . fdebug ( ' Matched to key. Api set to : ' + self . apitype + ' mode. ' )
2014-02-26 19:48:50 +00:00
self . apikey = kwargs . pop ( ' apikey ' )
2015-03-04 21:00:36 +00:00
2015-06-12 06:37:27 +00:00
if not ( [ mylar . API_KEY , mylar . DOWNLOAD_APIKEY ] ) :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' API key not generated ' )
2015-06-07 01:44:46 +00:00
return
2015-06-12 06:37:27 +00:00
if self . apitype :
if self . apitype == ' normal ' and len ( mylar . API_KEY ) != 32 :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' API key not generated correctly ' )
2015-06-12 06:37:27 +00:00
return
if self . apitype == ' download ' and len ( mylar . DOWNLOAD_APIKEY ) != 32 :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Download API key not generated correctly ' )
2015-06-12 06:37:27 +00:00
return
else :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' API key not generated correctly ' )
2014-02-26 19:48:50 +00:00
return
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
if kwargs [ ' cmd ' ] not in cmd_list :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Unknown command: %s ' % kwargs [ ' cmd ' ] )
2014-02-26 19:48:50 +00:00
return
else :
self . cmd = kwargs . pop ( ' cmd ' )
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
self . kwargs = kwargs
self . data = ' OK '
def fetchData ( self ) :
2015-03-04 21:00:36 +00:00
if self . data == ' OK ' :
2015-06-07 01:44:46 +00:00
logger . fdebug ( ' Recieved API command: ' + self . cmd )
2014-02-26 19:48:50 +00:00
methodToCall = getattr ( self , " _ " + self . cmd )
result = methodToCall ( * * self . kwargs )
if ' callback ' not in self . kwargs :
2015-03-04 21:00:36 +00:00
if self . img :
return serve_file ( path = self . img , content_type = ' image/jpeg ' )
2015-05-15 21:57:23 +00:00
if self . file and self . filename :
return serve_download ( path = self . file , name = self . filename )
if isinstance ( self . data , basestring ) :
2014-02-26 19:48:50 +00:00
return self . data
else :
2015-03-04 21:00:36 +00:00
cherrypy . response . headers [ ' Content-Type ' ] = " application/json "
2014-02-26 19:48:50 +00:00
return simplejson . dumps ( self . data )
else :
self . callback = self . kwargs [ ' callback ' ]
self . data = simplejson . dumps ( self . data )
self . data = self . callback + ' ( ' + self . data + ' ); '
2015-03-04 21:00:36 +00:00
cherrypy . response . headers [ ' Content-Type ' ] = " application/javascript "
2014-02-26 19:48:50 +00:00
return self . data
else :
return self . data
2015-03-04 21:00:36 +00:00
2015-05-14 23:12:48 +00:00
def _dic_from_query ( self , query ) :
2014-02-26 19:48:50 +00:00
myDB = db . DBConnection ( )
rows = myDB . select ( query )
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
rows_as_dic = [ ]
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
for row in rows :
row_as_dic = dict ( zip ( row . keys ( ) , row ) )
rows_as_dic . append ( row_as_dic )
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
return rows_as_dic
2015-03-04 21:00:36 +00:00
2016-11-06 14:54:39 +00:00
def _error_with_message ( self , message ) :
error = { ' error ' : { ' message ' : message } }
cherrypy . response . headers [ ' Content-Type ' ] = " application/json "
return simplejson . dumps ( error )
2014-02-26 19:48:50 +00:00
def _getIndex ( self , * * kwargs ) :
self . data = self . _dic_from_query ( ' SELECT * from comics order by ComicSortName COLLATE NOCASE ' )
2015-03-04 21:00:36 +00:00
return
2016-12-20 07:54:06 +00:00
def _getReadList ( self , * * kwargs ) :
self . data = self . _dic_from_query ( ' SELECT * from readlist order by IssueDate ASC ' )
return
2014-02-26 19:48:50 +00:00
def _getComic ( self , * * kwargs ) :
if ' id ' not in kwargs :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Missing parameter: id ' )
2014-02-26 19:48:50 +00:00
return
else :
self . id = kwargs [ ' id ' ]
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
comic = self . _dic_from_query ( ' SELECT * from comics WHERE ComicID= " ' + self . id + ' " ' )
issues = self . _dic_from_query ( ' SELECT * from issues WHERE ComicID= " ' + self . id + ' " order by Int_IssueNumber DESC ' )
if mylar . ANNUALS_ON :
annuals = self . _dic_from_query ( ' SELECT * FROM annuals WHERE ComicID= " ' + self . id + ' " ' )
2015-05-15 21:57:23 +00:00
else :
annuals = None
2015-03-04 21:00:36 +00:00
2015-05-14 23:12:48 +00:00
self . data = { ' comic ' : comic , ' issues ' : issues , ' annuals ' : annuals }
2014-02-26 19:48:50 +00:00
return
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
def _getHistory ( self , * * kwargs ) :
self . data = self . _dic_from_query ( ' SELECT * from snatched order by DateAdded DESC ' )
return
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
def _getUpcoming ( self , * * kwargs ) :
2016-09-21 04:34:06 +00:00
if ' include_downloaded_issues ' in kwargs and kwargs [ ' include_downloaded_issues ' ] . upper ( ) == ' Y ' :
select_status_clause = " w.STATUS IN ( ' Wanted ' , ' Downloaded ' ) "
else :
select_status_clause = " w.STATUS = ' Wanted ' "
2017-01-12 20:24:39 +00:00
# Days in a new year that precede the first Monday will look to the previous Monday for week and year.
today = datetime . date . today ( )
if today . strftime ( ' % W ' ) == ' 00 ' :
monday = today - datetime . timedelta ( days = today . weekday ( ) )
week = monday . strftime ( ' % W ' )
year = monday . strftime ( ' % Y ' )
else :
week = today . strftime ( ' % W ' )
year = today . strftime ( ' % Y ' )
2016-09-21 04:34:06 +00:00
self . data = self . _dic_from_query (
" SELECT w.COMIC AS ComicName, w.ISSUE AS IssueNumber, w.ComicID, w.IssueID, w.SHIPDATE AS IssueDate, w.STATUS AS Status, c.ComicName AS DisplayComicName \
FROM weekly w JOIN comics c ON w . ComicID = c . ComicID WHERE w . COMIC IS NOT NULL AND w . ISSUE IS NOT NULL AND \
2017-01-12 20:24:39 +00:00
SUBSTR ( ' 0 ' | | w . weeknumber , - 2 ) = ' " + week + " ' AND w . year = ' " + year + " ' AND " + select_status_clause + " ORDER BY c . ComicSortName " )
2014-02-26 19:48:50 +00:00
return
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
def _getWanted ( self , * * kwargs ) :
self . data = self . _dic_from_query ( " SELECT * from issues WHERE Status= ' Wanted ' " )
return
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
def _getLogs ( self , * * kwargs ) :
2015-07-01 06:41:29 +00:00
self . data = mylar . LOG_LIST
return
2015-07-01 22:39:49 +00:00
def _clearLogs ( self , * * kwargs ) :
2015-07-01 06:41:29 +00:00
mylar . LOG_LIST = [ ]
self . data = ' Cleared log '
return
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
def _delComic ( self , * * kwargs ) :
if ' id ' not in kwargs :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Missing parameter: id ' )
2014-02-26 19:48:50 +00:00
return
else :
self . id = kwargs [ ' id ' ]
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
myDB = db . DBConnection ( )
myDB . action ( ' DELETE from comics WHERE ComicID= " ' + self . id + ' " ' )
myDB . action ( ' DELETE from issues WHERE ComicID= " ' + self . id + ' " ' )
myDB . action ( ' DELETE from upcoming WHERE ComicID= " ' + self . id + ' " ' )
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
def _pauseComic ( self , * * kwargs ) :
if ' id ' not in kwargs :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Missing parameter: id ' )
2014-02-26 19:48:50 +00:00
return
else :
self . id = kwargs [ ' id ' ]
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
myDB = db . DBConnection ( )
controlValueDict = { ' ComicID ' : self . id }
newValueDict = { ' Status ' : ' Paused ' }
myDB . upsert ( " comics " , newValueDict , controlValueDict )
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
def _resumeComic ( self , * * kwargs ) :
if ' id ' not in kwargs :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Missing parameter: id ' )
2014-02-26 19:48:50 +00:00
return
else :
self . id = kwargs [ ' id ' ]
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
myDB = db . DBConnection ( )
controlValueDict = { ' ComicID ' : self . id }
newValueDict = { ' Status ' : ' Active ' }
myDB . upsert ( " comics " , newValueDict , controlValueDict )
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
def _refreshComic ( self , * * kwargs ) :
if ' id ' not in kwargs :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Missing parameter: id ' )
2014-02-26 19:48:50 +00:00
return
else :
self . id = kwargs [ ' id ' ]
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
try :
importer . addComictoDB ( self . id )
except Exception , e :
self . data = e
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
return
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
def _addComic ( self , * * kwargs ) :
if ' id ' not in kwargs :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Missing parameter: id ' )
2014-02-26 19:48:50 +00:00
return
else :
self . id = kwargs [ ' id ' ]
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
try :
2015-05-14 23:12:48 +00:00
importer . addComictoDB ( self . id )
2014-02-26 19:48:50 +00:00
except Exception , e :
self . data = e
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
return
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
def _queueIssue ( self , * * kwargs ) :
if ' id ' not in kwargs :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Missing parameter: id ' )
2014-02-26 19:48:50 +00:00
return
else :
self . id = kwargs [ ' id ' ]
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
myDB = db . DBConnection ( )
controlValueDict = { ' IssueID ' : self . id }
newValueDict = { ' Status ' : ' Wanted ' }
myDB . upsert ( " issues " , newValueDict , controlValueDict )
2015-03-04 21:00:36 +00:00
search . searchforissue ( self . id )
2014-02-26 19:48:50 +00:00
def _unqueueIssue ( self , * * kwargs ) :
if ' id ' not in kwargs :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Missing parameter: id ' )
2014-02-26 19:48:50 +00:00
return
else :
self . id = kwargs [ ' id ' ]
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
myDB = db . DBConnection ( )
controlValueDict = { ' IssueID ' : self . id }
newValueDict = { ' Status ' : ' Skipped ' }
myDB . upsert ( " issues " , newValueDict , controlValueDict )
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
def _forceSearch ( self , * * kwargs ) :
search . searchforissue ( )
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
def _forceProcess ( self , * * kwargs ) :
2014-05-08 04:35:13 +00:00
if ' nzb_name ' not in kwargs :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Missing parameter: nzb_name ' )
2014-05-08 04:35:13 +00:00
return
else :
self . nzb_name = kwargs [ ' nzb_name ' ]
if ' nzb_folder ' not in kwargs :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Missing parameter: nzb_folder ' )
2014-05-08 04:35:13 +00:00
return
else :
self . nzb_folder = kwargs [ ' nzb_folder ' ]
forceProcess = PostProcessor . PostProcessor ( self . nzb_name , self . nzb_folder )
2015-03-04 21:00:36 +00:00
forceProcess . Process ( )
2014-02-26 19:48:50 +00:00
def _getVersion ( self , * * kwargs ) :
2015-03-04 21:00:36 +00:00
self . data = {
2015-05-14 23:12:48 +00:00
' git_path ' : mylar . GIT_PATH ,
' install_type ' : mylar . INSTALL_TYPE ,
' current_version ' : mylar . CURRENT_VERSION ,
' latest_version ' : mylar . LATEST_VERSION ,
' commits_behind ' : mylar . COMMITS_BEHIND ,
2014-02-26 19:48:50 +00:00
}
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
def _checkGithub ( self , * * kwargs ) :
versioncheck . checkGithub ( )
self . _getVersion ( )
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
def _shutdown ( self , * * kwargs ) :
mylar . SIGNAL = ' shutdown '
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
def _restart ( self , * * kwargs ) :
mylar . SIGNAL = ' restart '
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
def _update ( self , * * kwargs ) :
mylar . SIGNAL = ' update '
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
def _getArtistArt ( self , * * kwargs ) :
if ' id ' not in kwargs :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Missing parameter: id ' )
2014-02-26 19:48:50 +00:00
return
else :
self . id = kwargs [ ' id ' ]
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
self . data = cache . getArtwork ( ComicID = self . id )
def _getIssueArt ( self , * * kwargs ) :
if ' id ' not in kwargs :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Missing parameter: id ' )
2014-02-26 19:48:50 +00:00
return
else :
self . id = kwargs [ ' id ' ]
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
self . data = cache . getArtwork ( IssueID = self . id )
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
def _getComicInfo ( self , * * kwargs ) :
if ' id ' not in kwargs :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Missing parameter: id ' )
2014-02-26 19:48:50 +00:00
return
else :
self . id = kwargs [ ' id ' ]
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
self . data = cache . getInfo ( ComicID = self . id )
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
def _getIssueInfo ( self , * * kwargs ) :
if ' id ' not in kwargs :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Missing parameter: id ' )
2014-02-26 19:48:50 +00:00
return
else :
self . id = kwargs [ ' id ' ]
2015-03-04 21:00:36 +00:00
2014-02-26 19:48:50 +00:00
self . data = cache . getInfo ( IssueID = self . id )
2015-03-04 21:00:36 +00:00
def _getArt ( self , * * kwargs ) :
if ' id ' not in kwargs :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Missing parameter: id ' )
2015-03-04 21:00:36 +00:00
return
else :
self . id = kwargs [ ' id ' ]
img = None
image_path = os . path . join ( mylar . CACHE_DIR , str ( self . id ) + ' .jpg ' )
# Checks if its a valid path and file
if os . path . isfile ( image_path ) :
# check if its a valid img
if imghdr . what ( image_path ) :
self . img = image_path
return
else :
# If we cant find the image, lets check the db for a url.
comic = self . _dic_from_query ( ' SELECT * from comics WHERE ComicID= " ' + self . id + ' " ' )
# Try every img url in the db
try :
img = urllib2 . urlopen ( comic [ 0 ] [ ' ComicImageURL ' ] ) . read ( )
except :
try :
img = urllib2 . urlopen ( comic [ 0 ] [ ' ComicImageALTURL ' ] ) . read ( )
except :
pass
if img :
# verify the img stream
if imghdr . what ( None , img ) :
with open ( image_path , ' wb ' ) as f :
f . write ( img )
self . img = image_path
return
else :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Failed return a image ' )
2015-03-04 21:00:36 +00:00
else :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Failed to return a image ' )
2015-05-14 23:12:48 +00:00
def _findComic ( self , name , issue = None , type_ = None , mode = None , explisit = None , serinfo = None ) :
# set defaults
if type_ is None :
type_ = ' comic '
if mode is None :
mode = ' series '
# Dont do shit if name is missing
if len ( name ) == 0 :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Missing a Comic name ' )
2015-05-14 23:12:48 +00:00
return
if type_ == ' comic ' and mode == ' series ' :
searchresults , explisit = mb . findComic ( name , mode , issue = issue )
elif type_ == ' comic ' and mode == ' pullseries ' :
pass
elif type_ == ' comic ' and mode == ' want ' :
searchresults , explisit = mb . findComic ( name , mode , issue )
elif type_ == ' story_arc ' :
searchresults , explisit = mb . findComic ( name , mode , issue = None , explisit = ' explisit ' , type = ' story_arc ' )
searchresults = sorted ( searchresults , key = itemgetter ( ' comicyear ' , ' issues ' ) , reverse = True )
self . data = searchresults
2015-05-15 21:57:23 +00:00
def _downloadIssue ( self , id ) :
if not id :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' You need to provide a issueid ' )
2015-05-15 21:57:23 +00:00
return
self . id = id
# Fetch a list of dicts from issues table
i = self . _dic_from_query ( ' SELECT * from issues WHERE issueID= " ' + self . id + ' " ' )
2015-05-14 23:12:48 +00:00
2015-05-15 21:57:23 +00:00
if not len ( i ) :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' Couldnt find a issue with issueID %s ' % self . id )
2015-05-15 21:57:23 +00:00
return
# issueid is unique so it should one dict in the list
issue = i [ 0 ]
issuelocation = issue . get ( ' Location ' , None )
# Check the issue is downloaded
if issuelocation is not None :
# Find the comic location
comic = self . _dic_from_query ( ' SELECT * from comics WHERE comicID= " ' + issue [ ' ComicID ' ] + ' " ' ) [ 0 ]
comiclocation = comic . get ( ' ComicLocation ' )
f = os . path . join ( comiclocation , issuelocation )
if not os . path . isfile ( f ) :
if mylar . MULTIPLE_DEST_DIRS is not None and mylar . MULTIPLE_DEST_DIRS != ' None ' :
pathdir = os . path . join ( mylar . MULTIPLE_DEST_DIRS , os . path . basename ( comiclocation ) )
f = os . path . join ( pathdir , issuelocation )
self . file = f
self . filename = issuelocation
else :
self . file = f
self . filename = issuelocation
else :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' You need to download that issue first ' )
2015-05-15 21:57:23 +00:00
return
2015-06-07 01:44:46 +00:00
def _downloadNZB ( self , nzbname ) :
if not nzbname :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' You need to provide a nzbname ' )
2015-06-07 01:44:46 +00:00
return
self . nzbname = nzbname
f = os . path . join ( mylar . CACHE_DIR , nzbname )
if os . path . isfile ( f ) :
self . file = f
self . filename = nzbname
else :
2016-11-06 14:54:39 +00:00
self . data = self . _error_with_message ( ' NZBname does not exist within the cache directory. Unable to retrieve. ' )
2015-06-07 01:44:46 +00:00
return