From 145a196f84bf9adde8b9c355193be8d9e6ad422e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Jastrz=C4=99bski?= Date: Fri, 11 Oct 2019 13:21:47 +0200 Subject: [PATCH] Added option to ignore client version check (close #24) --- CB/Core.py | 13 +++++++++++-- CB/CurseForge.py | 4 ++-- CB/__init__.py | 2 +- CurseBreaker.py | 18 ++++++++++++------ README.md | 1 + 5 files changed, 27 insertions(+), 11 deletions(-) diff --git a/CB/Core.py b/CB/Core.py index 5d6290f..2f1c91f 100644 --- a/CB/Core.py +++ b/CB/Core.py @@ -43,6 +43,7 @@ def init_config(self): else: self.config = {'Addons': [], 'CurseCache': {}, + 'IgnoreClientVersion': {}, 'Backup': {'Enabled': True, 'Number': 7}, 'Version': __version__, 'WAUsername': '', @@ -95,6 +96,9 @@ def update_config(self): self.config['WAAPIKey'] = '' if 'WACompanionVersion' not in self.config.keys(): self.config['WACompanionVersion'] = 0 + # 2.8.0 + if 'IgnoreClientVersion' not in self.config.keys(): + self.config['IgnoreClientVersion'] = {} self.config['Version'] = __version__ self.save_config() @@ -120,7 +124,9 @@ def cleanup(self, directories): def parse_url(self, url): if url.startswith('https://www.curseforge.com/wow/addons/'): - return CurseForgeAddon(self.parse_cf_id(url), self.cfCache, self.clientType, self.check_if_dev(url)) + return CurseForgeAddon(self.parse_cf_id(url), self.cfCache, + 'wow' if url in self.config['IgnoreClientVersion'].keys() else self.clientType, + self.check_if_dev(url)) elif url.startswith('https://www.wowinterface.com/downloads/'): return WoWInterfaceAddon(url, self.wowiCache) elif url.startswith('https://www.tukui.org/addons.php?id='): @@ -151,7 +157,7 @@ def parse_url(self, url): else: raise NotImplementedError('Provided URL is not supported.') - def add_addon(self, url): + def add_addon(self, url, ignore): if 'twitch://' in url: url = url.split('/download-client')[0].replace('twitch://', 'https://').strip() elif url.startswith('cf:'): @@ -164,6 +170,8 @@ def add_addon(self, url): url = f'https://www.tukui.org/classic-addons.php?id={url[4:]}' addon = self.check_if_installed(url) if not addon: + if ignore: + self.config['IgnoreClientVersion'][url] = True new = self.parse_url(url) new.install(self.path) checksums = {} @@ -183,6 +191,7 @@ def del_addon(self, url): old = self.check_if_installed(url) if old: self.cleanup(old['Directories']) + self.config['IgnoreClientVersion'].pop(old['URL'], None) self.config['Addons'][:] = [d for d in self.config['Addons'] if d.get('URL') != url and d.get('Name') != url] self.save_config() diff --git a/CB/CurseForge.py b/CB/CurseForge.py index 35e7dc5..7ed4144 100644 --- a/CB/CurseForge.py +++ b/CB/CurseForge.py @@ -29,8 +29,8 @@ def get_current_version(self): files = sorted(self.payload['latestFiles'], key=itemgetter('id'), reverse=True) for status in [[3, 2, 1]] if self.allowDev else [[1], [2], [3]]: for f in files: - if f['gameVersionFlavor'] == self.clientType and f['releaseType'] in status \ - and '-nolib' not in f['displayName'] and not f['isAlternate']: + if (self.clientType == 'wow' or f['gameVersionFlavor'] == self.clientType) and \ + f['releaseType'] in status and '-nolib' not in f['displayName'] and not f['isAlternate']: self.downloadUrl = f['downloadUrl'] self.currentVersion = f['displayName'] break diff --git a/CB/__init__.py b/CB/__init__.py index 2e4a2af..18438e9 100644 --- a/CB/__init__.py +++ b/CB/__init__.py @@ -1,7 +1,7 @@ import string import random -__version__ = '2.7.3' +__version__ = '2.8.0' __license__ = 'GPLv3' __copyright__ = '2019, Paweł Jastrzębski ' __docformat__ = 'restructuredtext en' diff --git a/CurseBreaker.py b/CurseBreaker.py index 9651674..3ca55b8 100644 --- a/CurseBreaker.py +++ b/CurseBreaker.py @@ -249,10 +249,15 @@ def sanitize_table(self): def c_install(self, args): if args: + if args.startswith('-i '): + args = args[3:] + optignore = True + else: + optignore = False addons = [addon.strip() for addon in args.split(',')] with tqdm(total=len(addons), bar_format='{n_fmt}/{total_fmt} |{bar}|') as pbar: for addon in addons: - installed, name, version = self.core.add_addon(addon) + installed, name, version = self.core.add_addon(addon, optignore) if installed: self.tableData.append([f'{AC.GREEN}Installed{AC.RESET}', name, version]) else: @@ -262,11 +267,12 @@ def c_install(self, args): printft(ANSI(self.table.table)) else: printft(HTML('Usage:\n\tThis command accepts a comma-separated list of links as an a' - 'rgument.\nSupported URLs:\n\thttps://www.curseforge.com/wow/addons/[ad' - 'don_name] | cf:[addon_name]\n\thttps://www.wowinterface.com/downloads/' - '[addon_name] | wowi:[addon_id]\n\thttps://www.tukui.org/addons.php?id=' - '[addon_id] | tu:[addon_id]\n\thttps://www.tukui.org/classic-addons.php' - '?id=[addon_id] | tuc:[addon_id]\n\tElvUI | ElvU' + 'rgument.\n\tOption -i will disable the client version check.\nSupported URLs:\n\thttps://www.curseforge.com/wow/addons/[addon_name] | cf:[addon_name]\n\thttps://www.wowinterface.com/downloads/[addon_name] | wowi:[addon_id]\n\thttps://www.tukui.org/addons.php?id=[addon_id] | tu:[addon_id]\n\thttps://www.tukui.org/classic-addons.php?id=[addon_id] | tuc:[addon_id]\n\tElvUI | ElvU' 'I:Dev\n\tTukui')) def c_uninstall(self, args): diff --git a/README.md b/README.md index 4a96309..c93103b 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ By default **CurseBreaker** will create backups of entire `WTF` directory. ## TIPS & TRICKS - Command `uri_integration` can be used to enable integration with the CurseForge page. - Most of the commands support the comma-separated list of addons. +- `install` command have optional `-i` flag that can be used to disable version client check. ## SUPPORTED URL - CurseForge: `https://www.curseforge.com/wow/addons/[addon_name]`, `cf:[addon_name]`