1
0
mirror of https://github.com/moparisthebest/SickRage synced 2024-12-12 11:02:21 -05:00

Added Transaction for add/update/delete episodes and change episode status

This commit is contained in:
echel0n 2014-03-20 03:24:58 -07:00
parent 50911a1f0f
commit 972833a7f6
4 changed files with 46 additions and 20 deletions

View File

@ -104,7 +104,7 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior
#Don't Link media when the media is extracted from a rar in the same path
if process_method in ('hardlink', 'symlink') and videoInRar:
process_media(path, videoInRar, nzbName, 'move', force, is_priority, indexer)
delete_files(path, rarContent)
delete_files(path, rarContent)
for video in set(videoFiles) - set(videoInRar):
process_media(path, [video], nzbName, process_method, force, is_priority, indexer)
else:
@ -129,21 +129,21 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior
if process_method in ('hardlink', 'symlink') and videoInRar:
process_media(processPath, videoInRar, nzbName, 'move', force, is_priority, indexer)
process_media(processPath, set(videoFiles) - set(videoInRar), nzbName, process_method, force, is_priority, indexer)
delete_files(processPath, rarContent)
delete_files(processPath, rarContent)
else:
process_media(processPath, videoFiles, nzbName, process_method, force, is_priority, indexer)
#Delete all file not needed
if process_method != "move" or not process_result \
or type=="manual": #Avoid to delete files if is Manual PostProcessing
or type=="manual": #Avoid to delete files if is Manual PostProcessing
continue
delete_files(processPath, notwantedFiles)
if process_method == "move" and \
ek.ek(os.path.normpath, processPath) != ek.ek(os.path.normpath, sickbeard.TV_DOWNLOAD_DIR):
delete_dir(processPath)
return returnStr
def validateDir(path, dirName, nzbNameOriginal, failed):
@ -182,7 +182,7 @@ def validateDir(path, dirName, nzbNameOriginal, failed):
videoFiles = filter(helpers.isMediaFile, allFiles)
allDirs.append(dirName)
#check if the dir have at least one tv video file
for video in videoFiles:
try:
@ -237,8 +237,8 @@ def unRAR(path, rarFiles, force):
break
if skip_file:
continue
continue
rar_handle.extract(path = path, withSubpath = False, overwrite = False)
unpacked_files += [os.path.basename(x.filename) for x in rar_handle.infolist() if not x.isdir]
del rar_handle

View File

@ -21,7 +21,7 @@ from __future__ import with_statement
import sys
import os
import traceback
import urllib, urllib2
import urllib
import re
import datetime
import urlparse
@ -202,6 +202,7 @@ class KATProvider(generic.TorrentProvider):
else:
for show_name in set(allPossibleShowNames(ep_obj.show)):
ep_string = sanitizeSceneName(show_name) +' '+'season:'+str(ep_obj.season)+' episode:'+str(ep_obj.episode)
search_string['Episode'].append(re.sub('\s+', ' ', ep_string))
return [search_string]

View File

@ -419,6 +419,7 @@ class TVShow(object):
scannedEps = {}
sql_l = []
for season in showObj:
scannedEps[season] = {}
for episode in showObj[season]:
@ -442,10 +443,14 @@ class TVShow(object):
logger.log(str(self.indexerid) + u": Loading info from " + self.indexer + " for episode " + str(season) + "x" + str(episode), logger.DEBUG)
ep.loadFromIndexer(season, episode, tvapi=t)
if ep.dirty:
ep.saveToDB()
sql_l.append(ep.get_sql())
scannedEps[season][episode] = True
if len(sql_l) > 0:
myDB = db.DBConnection()
myDB.mass_action(sql_l)
# Done updating save last update date
self.last_update_indexer = datetime.date.today().toordinal()
self.saveToDB()
@ -826,9 +831,12 @@ class TVShow(object):
def deleteShow(self):
myDB = db.DBConnection()
myDB.action("DELETE FROM tv_episodes WHERE showid = ?", [self.indexerid])
myDB.action("DELETE FROM tv_shows WHERE indexer_id = ?", [self.indexerid])
myDB.action("DELETE FROM imdb_info WHERE indexer_id = ?", [self.indexerid])
sql_l = [["DELETE FROM tv_episodes WHERE showid = ?", [self.indexerid]],
["DELETE FROM tv_shows WHERE indexer_id = ?", [self.indexerid]],
["DELETE FROM imdb_info WHERE indexer_id = ?", [self.indexerid]]]
myDB.mass_action(sql_l)
# remove self from show list
sickbeard.showList = [x for x in sickbeard.showList if x.indexerid != self.indexerid]
@ -1238,10 +1246,6 @@ class TVEpisode(object):
if result == False:
raise exceptions.EpisodeNotFoundException("Couldn't find episode " + str(season) + "x" + str(episode))
# don't update if not needed
if self.dirty:
self.saveToDB()
def loadFromDB(self, season, episode):
logger.log(str(self.show.indexerid) + u": Loading episode details from DB for episode " + str(season) + "x" + str(episode), logger.DEBUG)
@ -1546,6 +1550,22 @@ class TVEpisode(object):
raise exceptions.EpisodeDeletedException()
def get_sql(self, forceSave=False):
"""
Creates SQL queue for this episode if any of its data has been changed since the last save.
forceSave: If True it will create SQL queue even if no data has been changed since the
last save (aka if the record is not dirty).
"""
if not self.dirty and not forceSave:
logger.log(str(self.show.indexeridid) + u": Not creating SQL queue - record is not dirty", logger.DEBUG)
return
# use a custom update/insert method to get the data into the DB
return ["INSERT OR REPLACE INTO tv_episodes (episode_id, indexerid, indexer, name, description, subtitles, subtitles_searchcount, subtitles_lastsearch, airdate, hasnfo, hastbn, status, location, file_size, release_name, is_proper, showid, season, episode) VALUES ((SELECT episode_id FROM tv_episodes WHERE showid = ? AND season = ? AND episode = ?),?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);",
[self.show.tvdbid, self.season, self.episode, self.indexerid, self.indexer, self.name, self.description, ",".join([sub for sub in self.subtitles]), self.subtitles_searchcount, self.subtitles_lastsearch, self.airdate.toordinal(), self.hasnfo, self.hastbn, self.status, self.location, self.file_size, self.release_name, self.is_proper, self.show.indexerid, self.season, self.episode]]
def saveToDB(self, forceSave=False):
"""
Saves this episode to the database if any of its data has been changed since the last save.

View File

@ -3080,6 +3080,7 @@ class Home:
if eps != None:
sql_l = []
for curEp in eps.split('|'):
logger.log(u"Attempting to set status on episode " + curEp + " to " + status, logger.DEBUG)
@ -3116,8 +3117,12 @@ class Home:
continue
epObj.status = int(status)
epObj.saveToDB()
sql_l.append(epObj.get_sql())
if len(sql_l) > 0:
myDB = db.DBConnection()
myDB.mass_action(sql_l)
if int(status) == WANTED:
msg = "Backlog was automatically started for the following seasons of <b>" + showObj.name + "</b>:<br /><ul>"
for cur_segment in wanted_segments: