diff --git a/CHANGES.md b/CHANGES.md
index 5d93232d..8f649ca6 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,4 +1,10 @@
-### 3.27.9 (2023-02-27 01:10:00 UTC)
+### 3.27.10 (2023-03-05 00:20:00 UTC)
+
+* Add UHD Bluray
+* Change an error text for Cheetah module availability
+
+
+### 3.27.9 (2023-02-27 01:10:00 UTC)
* Fix remove incorrectly displayed NZBGet tip
diff --git a/gui/slick/interfaces/default/inc_qualityChooser.tmpl b/gui/slick/interfaces/default/inc_qualityChooser.tmpl
index 8d805a1b..cb42dc29 100644
--- a/gui/slick/interfaces/default/inc_qualityChooser.tmpl
+++ b/gui/slick/interfaces/default/inc_qualityChooser.tmpl
@@ -40,13 +40,12 @@
#for $cur_quality in sorted($any_quality_list):
##set $has_unknown |= ($Quality.UNKNOWN == $cur_quality and $cur_quality in $any_qualities)
$Quality.get_quality_ui($cur_quality)
- #if $Quality.UHD4KWEB == $cur_quality
-
+ #if $Quality.UHD4KBLURAY == $cur_quality
$Quality.get_quality_ui($Quality.UNKNOWN)
#end if
- #if $cur_quality in [$Quality.SDDVD, $Quality.FULLHDTV, $Quality.FULLHDBLURAY, $Quality.UHD4KWEB]
+ #if $cur_quality in [$Quality.SDDVD, $Quality.FULLHDTV, $Quality.FULLHDBLURAY, $Quality.UHD4KBLURAY]
#end if
#end for
diff --git a/sickgear.py b/sickgear.py
index d8caf88f..535f95e5 100755
--- a/sickgear.py
+++ b/sickgear.py
@@ -70,7 +70,7 @@ except (BaseException, Exception):
try:
import Cheetah
except (BaseException, Exception):
- print('The Python module Cheetah is required')
+ print('The Python module CT3 (Cheetah) is required')
if is_win:
print('(1) However, this first run may have just installed it, so try to simply rerun sickgear.py again')
print('(2) If this output is a rerun of (1) then open a command line prompt and manually install using...')
diff --git a/sickgear/common.py b/sickgear/common.py
index ac7c6b45..a0e5a382 100644
--- a/sickgear/common.py
+++ b/sickgear/common.py
@@ -94,7 +94,7 @@ class Quality(object):
FULLHDBLURAY = 1 << 8 # 256
# UHD4KTV = 1 << 9 # reserved for the future
UHD4KWEB = 1 << 10
- # UHD4KBLURAY = 1 << 11 # reserved for the future
+ UHD4KBLURAY = 1 << 11
# put these bits at the other end of the spectrum, far enough out that they shouldn't interfere
UNKNOWN = 1 << 15 # 32768
@@ -110,7 +110,8 @@ class Quality(object):
FULLHDWEBDL: '1080p WEB-DL',
HDBLURAY: '720p BluRay',
FULLHDBLURAY: '1080p BluRay',
- UHD4KWEB: '2160p UHD 4K WEB'}
+ UHD4KWEB: '2160p UHD 4K WEB',
+ UHD4KBLURAY: '2160p UHD BluRay'}
statusPrefixes = {DOWNLOADED: 'Downloaded',
SNATCHED: 'Snatched',
@@ -345,8 +346,11 @@ class Quality(object):
return Quality.FULLHDWEBDL
if name_has([fmt]):
return Quality.FULLHDTV
- if name_has(['2160p', webfmt]):
- return Quality.UHD4KWEB
+ if name_has(['2160p']):
+ if name_has(['bluray']):
+ return Quality.UHD4KBLURAY
+ if name_has([webfmt]):
+ return Quality.UHD4KWEB
return Quality.UNKNOWN
@@ -579,7 +583,7 @@ HD = Quality.combineQualities(
[]) # HD720p + HD1080p
HD720p = Quality.combineQualities([Quality.HDTV, Quality.HDWEBDL, Quality.HDBLURAY], [])
HD1080p = Quality.combineQualities([Quality.FULLHDTV, Quality.FULLHDWEBDL, Quality.FULLHDBLURAY], [])
-UHD2160p = Quality.combineQualities([Quality.UHD4KWEB], [])
+UHD2160p = Quality.combineQualities([Quality.UHD4KWEB, Quality.UHD4KBLURAY], [])
ANY = Quality.combineQualities(
[Quality.SDTV, Quality.SDDVD, Quality.HDTV, Quality.FULLHDTV, Quality.HDWEBDL, Quality.FULLHDWEBDL,
Quality.HDBLURAY, Quality.FULLHDBLURAY, Quality.UNKNOWN], []) # SD + HD
diff --git a/tests/common_tests.py b/tests/common_tests.py
index 5c5ad53a..2f77839b 100644
--- a/tests/common_tests.py
+++ b/tests/common_tests.py
@@ -127,6 +127,15 @@ quality_tests = {
'Test.Show.S01E02.2160p.WEBRip.x264-GROUP',
'Test.Show.S01E02.2160p.WEBRip.x265-GROUP',
'Test.Show.S01E02.2160p.WEBRip.vp9-GROUP'],
+ common.Quality.UHD4KBLURAY: [
+ 'Test.Show.S01E02.2160p.BluRay.h264-GROUP',
+ 'Test.Show.S01E02.2160p.BluRay.x264-GROUP',
+ 'Test.Show.S01E02.2160p.BluRay.x265-GROUP',
+ 'Test.Show.S01E02.2160p.BluRay.vp9-GROUP',
+ 'Test.Show.S01E02.2160p.UHD.BluRay.h264-GROUP',
+ 'Test.Show.S01E02.2160p.UHD.BluRay.x264-GROUP',
+ 'Test.Show.S01E02.2160p.UHD.BluRay.x265-GROUP',
+ 'Test.Show.S01E02.2160p.UHD.BluRay.vp9-GROUP'],
common.Quality.UNKNOWN: ['Test.Show.S01E02-SiCKGEAR']
}
@@ -154,7 +163,7 @@ class QualityTests(unittest.TestCase):
for w, v in iteritems(wd):
if w == sq:
for u, o in sorted(iteritems(v)):
- self.assertEqual(o, result.get(u))
+ self.assertEqual(o, result.get(u), msg='%s' % show_quality)
def check_wantedquality_get_wantedlist(self, cases):
for show_quality, result in cases:
@@ -260,6 +269,9 @@ class QualityTests(unittest.TestCase):
Quality.UHD4KWEB: {
WantedQualities.wantedlist: [],
WantedQualities.bothlists: False, WantedQualities.upgradelist: False},
+ Quality.UHD4KBLURAY: {
+ WantedQualities.wantedlist: [],
+ WantedQualities.bothlists: False, WantedQualities.upgradelist: False},
Quality.UNKNOWN: {
WantedQualities.wantedlist: [],
WantedQualities.bothlists: False, WantedQualities.upgradelist: False
@@ -300,6 +312,9 @@ class QualityTests(unittest.TestCase):
Quality.UHD4KWEB: {
WantedQualities.wantedlist: [],
WantedQualities.bothlists: False, WantedQualities.upgradelist: False},
+ Quality.UHD4KBLURAY: {
+ WantedQualities.wantedlist: [],
+ WantedQualities.bothlists: False, WantedQualities.upgradelist: False},
Quality.UNKNOWN: {
WantedQualities.wantedlist: [],
WantedQualities.bothlists: False, WantedQualities.upgradelist: False
@@ -341,6 +356,9 @@ class QualityTests(unittest.TestCase):
Quality.UHD4KWEB: {
WantedQualities.wantedlist: [],
WantedQualities.bothlists: False, WantedQualities.upgradelist: False},
+ Quality.UHD4KBLURAY: {
+ WantedQualities.wantedlist: [],
+ WantedQualities.bothlists: False, WantedQualities.upgradelist: False},
Quality.UNKNOWN: {
WantedQualities.wantedlist: [],
WantedQualities.bothlists: False, WantedQualities.upgradelist: False
@@ -3090,7 +3108,7 @@ class QualityTests(unittest.TestCase):
(('The Show (15 Jan 2019) [text] 720HD mp4', False), common.Quality.HDTV),
(('The.Show.s03e11.ep.name.1080p.web.dl.hevc.x265.Group', False), common.Quality.FULLHDWEBDL),
(('The.Show.S03E05.1080p.NF.WEB-DL.DD5.1.HDR.HEVC-Group', False), common.Quality.FULLHDWEBDL),
- (('The.Show.S01E10.Name.2160p.UHD.BluRay.REMUX.HDR.HEVC.DTS-HD.MA.5.1', False), common.Quality.UNKNOWN),
+ (('The.Show.S01E10.Name.2160p.UHD.BluRay.REMUX.HDR.HEVC.DTS-HD.MA.5.1', False), common.Quality.UHD4KBLURAY),
(('Show.S01E07.2160p.4K.UHD.10bit.NF.WEBRip.5.1.x265.HEVC-Group', False), common.Quality.UHD4KWEB),
])
for q, l in iteritems(quality_tests):