diff --git a/CHANGES.md b/CHANGES.md index fc99521f..b48d1860 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,13 @@ -### 3.29.2 (2023-05-28 07:45:00 UTC) +### 3.29.3 (2023-05-31 13:30:00 UTC) + +* Update UnRar x64 for Windows 6.21 to 6.22 +* Change allow Python 3.11.4 +* Change minimum required Python to version 3.8.2 +* Change remove Python 2 references from init-scripts +* Remove provider Rarbg + + +### 3.29.2 (2023-05-28 07:45:00 UTC) * Fix find show results returned as newest/oldest that are then sorted z to a * Fix add show "TheTVDB via Trakt" diff --git a/gui/slick/images/providers/rarbg.png b/gui/slick/images/providers/rarbg.png deleted file mode 100644 index fa662aff..00000000 Binary files a/gui/slick/images/providers/rarbg.png and /dev/null differ diff --git a/init-scripts/init.gentoo b/init-scripts/init.gentoo index fde81414..d9f24d71 100755 --- a/init-scripts/init.gentoo +++ b/init-scripts/init.gentoo @@ -12,7 +12,7 @@ # SICKGEAR_USER= # SICKGEAR_GROUP= # SICKGEAR_DIR= -# PATH_TO_PYTHON_2=/usr/bin/python2 +# PATH_TO_PYTHON=/usr/bin/python # SICKGEAR_DATADIR= # SICKGEAR_CONFDIR= # @@ -49,7 +49,7 @@ start() { --name sickgear \ --background \ --pidfile $(get_pidfile) \ - --exec ${PATH_TO_PYTHON_2} \ + --exec ${PATH_TO_PYTHON} \ -- \ ${SICKGEAR_DIR}/sickgear.py \ -d \ diff --git a/init-scripts/init.systemd b/init-scripts/init.systemd index 5f48daa7..dfe3ff7c 100755 --- a/init-scripts/init.systemd +++ b/init-scripts/init.systemd @@ -22,12 +22,12 @@ ### Example Using simple # Type=simple -# ExecStart=/usr/bin/python2 /opt/sickgear/app/sickgear.py -q --nolaunch +# ExecStart=/usr/bin/python /opt/sickgear/app/sickgear.py -q --nolaunch ### Example Using simple with EnvironmentFile where SB_DATA=/home/sickgear/.sickgear in /etc/sickgear.conf # Type=simple # EnvironmentFile=/etc/sickgear.conf -# ExecStart=/usr/bin/python2 /opt/sickgear/app/sickgear.py -q --nolaunch --datadir=${SB_DATA} +# ExecStart=/usr/bin/python /opt/sickgear/app/sickgear.py -q --nolaunch --datadir=${SB_DATA} ### Configuration diff --git a/lib/rarfile/UnRAR.exe b/lib/rarfile/UnRAR.exe index 94e12b67..16c70944 100644 Binary files a/lib/rarfile/UnRAR.exe and b/lib/rarfile/UnRAR.exe differ diff --git a/sickgear.py b/sickgear.py index c37e2b01..6efd8f14 100755 --- a/sickgear.py +++ b/sickgear.py @@ -36,9 +36,9 @@ warnings.filterwarnings('ignore', module=r'.*ssl_.*', message='.*SSLContext obje warnings.filterwarnings('ignore', module=r'.*zoneinfo.*', message='.*file or directory.*') warnings.filterwarnings('ignore', message='.*deprecated in cryptography.*') -versions = [((3, 8, 0), (3, 8, 16)), +versions = [((3, 8, 2), (3, 8, 16)), ((3, 9, 0), (3, 9, 2)), ((3, 9, 4), (3, 9, 16)), - ((3, 10, 0), (3, 11, 3))] # inclusive version ranges + ((3, 10, 0), (3, 11, 4))] # inclusive version ranges if not any(list(map(lambda v: v[0] <= sys.version_info[:3] <= v[1], versions))) and not int(os.environ.get('PYT', 0)): major, minor, micro = sys.version_info[:3] print('Python %s.%s.%s detected.' % (major, minor, micro)) diff --git a/sickgear/providers/__init__.py b/sickgear/providers/__init__.py index ecc0b6d4..aea5bfbf 100644 --- a/sickgear/providers/__init__.py +++ b/sickgear/providers/__init__.py @@ -40,7 +40,7 @@ __all__ = [ 'hdbits', 'hdspace', 'hdtorrents', 'immortalseed', 'iptorrents', 'limetorrents', 'magnetdl', 'milkie', 'morethan', 'nebulance', 'ncore', 'nyaa', 'pretome', 'privatehd', 'ptf', - 'rarbg', 'revtt', 'scenehd', 'scenetime', 'shazbat', 'showrss', 'snowfl', 'speedapp', 'speedcd', + 'revtt', 'scenehd', 'scenetime', 'shazbat', 'showrss', 'snowfl', 'speedapp', 'speedcd', 'thepiratebay', 'torlock', 'torrentday', 'torrenting', 'torrentleech', 'tvchaosuk', 'xspeeds', # anime diff --git a/sickgear/providers/generic.py b/sickgear/providers/generic.py index f3fbcff0..e35154c3 100644 --- a/sickgear/providers/generic.py +++ b/sickgear/providers/generic.py @@ -734,7 +734,7 @@ class GenericProvider(object): def is_public_access(self): # type: (...) -> bool try: - return bool(re.search('(?i)rarbg|sick|anizb', self.name)) \ + return bool(re.search('(?i)sick|anizb', self.name)) \ or False is bool(('_authorised' in self.__class__.__dict__ or hasattr(self, 'digest') or self._check_auth(is_required=True))) except AuthException: @@ -1053,8 +1053,7 @@ class GenericProvider(object): [quote_plus(tr) for tr in ( 'http://atrack.pow7.com/announce', 'http://mgtracker.org:2710/announce', 'http://pow7.com/announce', 'http://t1.pow7.com/announce', - 'http://tracker.tfile.me/announce', 'udp://9.rarbg.com:2710/announce', - 'udp://9.rarbg.me:2710/announce', 'udp://9.rarbg.to:2710/announce', + 'http://tracker.tfile.me/announce', 'udp://eddie4.nl:6969/announce', 'udp://explodie.org:6969/announce', 'udp://inferno.demonoid.pw:3395/announce', 'udp://inferno.subdemon.com:3395/announce', 'udp://ipv4.tracker.harry.lu:80/announce', 'udp://p4p.arenabg.ch:1337/announce', diff --git a/sickgear/providers/rarbg.py b/sickgear/providers/rarbg.py deleted file mode 100644 index b5b735b5..00000000 --- a/sickgear/providers/rarbg.py +++ /dev/null @@ -1,190 +0,0 @@ -# coding=utf-8 -# -# Author: SickGear -# -# This file is part of SickGear. -# -# SickGear 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. -# -# SickGear 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 SickGear. If not, see . - -import datetime -import re -import time - -from . import generic -from .. import logger -from ..indexers.indexer_config import TVINFO_TVDB - -from six import iteritems - - -class RarbgProvider(generic.TorrentProvider): - - def __init__(self): - generic.TorrentProvider.__init__(self, 'Rarbg') - - self.url_home = ['https://rarbgmirror.xyz/'] - # api_spec: https://rarbg.com/pubapi/apidocs_v2.txt - self.url_api = 'https://torrentapi.org/pubapi_v2.php?app_id=SickGear&' - self.url_tmpl = {'config_provider_home_uri': '%(home)s'} - self.urls = {'api_token': self.url_api + 'get_token=get_token', - 'api_list': self.url_api + 'mode=list', - 'api_search': self.url_api + 'mode=search'} - - self.params = {'defaults': '&format=json_extended&category=18;41;49&limit=100&sort=last&ranked={r}&token={t}', - 'param_iid': '&search_imdb=%(sid)s', - 'param_tid': '&search_tvdb=%(sid)s', - 'param_str': '&search_string=%(str)s', - 'param_seed': '&min_seeders=%(min_seeds)s', - 'param_peer': '&min_leechers=%(min_peers)s'} - - self.proper_search_terms = '{{.proper.|.repack.}}' - - self.minseed, self.minleech, self.token, self.token_expiry = 4 * [None] - self.confirmed = False - self.request_throttle = datetime.datetime.now() - - def _authorised(self, reset=False, **kwargs): - - if not reset and self.token and self.token_expiry and datetime.datetime.now() < self.token_expiry: - return True - - for r in range(0, 3): - response = self.get_url(self.urls['api_token'], parse_json=True) - if not self.should_skip() and response and 'token' in response: - self.token = response['token'] - self.token_expiry = datetime.datetime.now() + datetime.timedelta(minutes=14) - time.sleep(2) - return True - time.sleep(2) - - logger.error(f'No usable API token returned from: {self.urls["api_token"]}') - return False - - @staticmethod - def _has_signature(data=None): - return data and re.search(r'(?i) datetime.datetime.now()) and 2 >= time_out: - time_out += 1 - time.sleep(1) - - searched_url = search_url.format(**{'r': int(self.confirmed), 't': self.token}) - - data_json = self.get_url(searched_url, parse_json=True) - if self.should_skip(): - return results - - self.token_expiry = datetime.datetime.now() + datetime.timedelta(minutes=14) - self.request_throttle = datetime.datetime.now() + datetime.timedelta(seconds=3) - if not data_json: - continue - - if 'error' in data_json: - if 5 == data_json['error_code']: # Too many requests per second. - continue - - elif 2 == data_json['error_code']: # Invalid token set - if self._authorised(reset=True): - continue - self.log_result(mode, len(items[mode]) - cnt, searched_url) - return items[mode] - break - - if 'error' not in data_json: - for item in data_json['torrent_results']: - title, download_magnet, seeders, size = [ - item.get(x) for x in ('title', 'download', 'seeders', 'size')] - title = None is title and item.get('filename') or title - if not (title and download_magnet) or download_magnet in dedupe: - continue - dedupe += [download_magnet] - - items[mode].append((title, download_magnet, seeders, self._bytesizer(size))) - - self._log_search(mode, len(items[mode]) - cnt, searched_url) - - results = self._sort_seeding(mode, results + items[mode]) - - if '_only' in mode_search and len(results): - break - - return results - - def _season_strings(self, ep_obj, **kwargs): - - return generic.TorrentProvider._season_strings(self, ep_obj, detail_only=True) - - def _episode_strings(self, ep_obj, **kwargs): - - search_params = super(RarbgProvider, self)._episode_strings(ep_obj, detail_only=True, date_or=True, **kwargs) - if self.show_obj.air_by_date and self.show_obj.is_sports: - for x, types in enumerate(search_params): - for y, ep_type in enumerate(types): - search_params[x][ep_type][y] = '{{%s}}' % search_params[x][ep_type][y] - - return search_params - - -provider = RarbgProvider() diff --git a/sickgear/py_requirement.data b/sickgear/py_requirement.data index 98fccd6d..00e897bd 100644 --- a/sickgear/py_requirement.data +++ b/sickgear/py_requirement.data @@ -1 +1 @@ -3.8 \ No newline at end of file +3.8.2 \ No newline at end of file