From 9248c534a5739c1cea5c358b1738ae15f50fbca7 Mon Sep 17 00:00:00 2001
From: Dustyn Gibson <dustyn.gibson@gmail.com>
Date: Thu, 11 Jun 2015 20:56:00 -0700
Subject: [PATCH] Allow SD as archive quality in custom qualities, SD is better
 than Unknown, and we sometimes want a smaller/lower-quality file archived to
 save space

---
 .../default/inc_qualityChooser.tmpl           |  2 +-
 sickbeard/tv.py                               | 26 +++++++++++++++----
 2 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/gui/slick/interfaces/default/inc_qualityChooser.tmpl b/gui/slick/interfaces/default/inc_qualityChooser.tmpl
index 329879c9..569667d8 100644
--- a/gui/slick/interfaces/default/inc_qualityChooser.tmpl
+++ b/gui/slick/interfaces/default/inc_qualityChooser.tmpl
@@ -36,7 +36,7 @@
 
         <div style="text-align: left; float: left;">
             <h5>Archive</h4>
-            #set $bestQualityList = filter(lambda x: x > $Quality.SDTV and x < $Quality.UNKNOWN, $Quality.qualityStrings)
+            #set $bestQualityList = filter(lambda x: x >= $Quality.SDTV and x < $Quality.UNKNOWN, $Quality.qualityStrings)
             <select id="bestQualities" name="bestQualities" multiple="multiple" size="$len($bestQualityList)" class="form-control form-control-inline input-sm">
             #for $curQuality in sorted($bestQualityList):
                 <option value="$curQuality" #if $curQuality in $bestQualities then "selected=\"selected\"" else ""#>$Quality.qualityStrings[$curQuality]</option>
diff --git a/sickbeard/tv.py b/sickbeard/tv.py
index 4b8e0199..727fb7a1 100644
--- a/sickbeard/tv.py
+++ b/sickbeard/tv.py
@@ -1204,6 +1204,22 @@ class TVShow(object):
         return toReturn
 
 
+    def qualitiesToString(self, qualities=[]):
+        result = u''
+        for quality in qualities:
+            if Quality.qualityStrings.has_key(quality):
+                result += Quality.qualityStrings[quality] + u', '
+            else:
+                logger.log(u"Bad quality value: " + str(quality))
+
+        result = re.sub(', $', '', result)
+
+        if not len(result):
+            result = u'None'
+
+        return result
+
+
     def wantEpisode(self, season, episode, quality, manualSearch=False, downCurQuality=False):
 
         logger.log(u"Checking if found episode " + str(season) + "x" + str(episode) + " is wanted at quality " +
@@ -1211,8 +1227,8 @@ class TVShow(object):
 
         # if the quality isn't one we want under any circumstances then just say no
         anyQualities, bestQualities = Quality.splitQuality(self.quality)
-        logger.log(u"any,best = " + str(anyQualities) + " " + str(bestQualities) + " and found " + str(quality),
-                   logger.DEBUG)
+        logger.log(u"Any,Best = [ %s ] [ %s ] Found = [ %s ]" % (self.qualitiesToString(anyQualities),
+                   self.qualitiesToString(bestQualities), self.qualitiesToString([quality])), logger.DEBUG)
 
         if quality not in anyQualities + bestQualities:
             logger.log(u"Don't want this quality, ignoring found episode", logger.DEBUG)
@@ -1253,9 +1269,9 @@ class TVShow(object):
                 logger.log(u"Quality is on wanted list, need to check if it's better than existing quality",
                            logger.DEBUG)
 
-        # if we are re-downloading then we only want it if it's in our bestQualities list and better than what we have
-        if curStatus in Quality.DOWNLOADED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST and quality in bestQualities and quality > curQuality:
-            logger.log(u"Episode already exists but the found episode has better quality, getting found episode",
+        # if we are re-downloading then we only want it if it's in our bestQualities list and better than what we have, or we only have one bestQuality and we do not have that quality yet
+        if curStatus in Quality.DOWNLOADED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST and quality in bestQualities and (quality > curQuality or (quality != curQuality and len(bestQualities) == 1)) :
+            logger.log(u"Episode already exists but the found episode quality is wanted more, getting found episode",
                        logger.DEBUG)
             return True
         elif curStatus == Quality.UNKNOWN and manualSearch:
-- 
GitLab