From f7d75838831c90db7c20ee405132bb34f4be02cb Mon Sep 17 00:00:00 2001 From: Semjon Kerner Date: Wed, 24 Mar 2021 17:54:54 +0100 Subject: [PATCH 1/2] remove Provisions Chalutier --- MANIFEST.in | 1 - fishy/ProvisionsChalutier.zip | Bin 32498 -> 0 bytes fishy/engine/semifisher/pixel_loc.py | 2 +- 3 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 fishy/ProvisionsChalutier.zip diff --git a/MANIFEST.in b/MANIFEST.in index 4a765de..097c810 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -2,7 +2,6 @@ include LICENSE include README.md include requirements.txt include fishy/icon.ico -include fishy/ProvisionsChalutier.zip include fishy/fishybot_logo.png include fishy/sound.mp3 include fishy/beep.wav diff --git a/fishy/ProvisionsChalutier.zip b/fishy/ProvisionsChalutier.zip deleted file mode 100644 index 58f9774bffe98c108a76380110e981609d705380..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32498 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 diff --git a/fishy/engine/semifisher/pixel_loc.py b/fishy/engine/semifisher/pixel_loc.py index 2b018e4..90854de 100644 --- a/fishy/engine/semifisher/pixel_loc.py +++ b/fishy/engine/semifisher/pixel_loc.py @@ -57,7 +57,7 @@ class PixelLoc: def config(): """ Uses the game window to get an image of the game screen - then uses `GetKeypointFromImage()` to find the ProvisionsChalutier pixel location + then uses `GetKeypointFromImage()` to find the Chalutier pixel location :return: false if pixel loc not found """ From 6056449c4d00bc91fa0d959412d87a4f609e38f2 Mon Sep 17 00:00:00 2001 From: Semjon Kerner Date: Wed, 24 Mar 2021 17:58:35 +0100 Subject: [PATCH 2/2] add Chalutier Add-On --- fishy/__main__.py | 6 +++++- fishy/constants.py | 3 +++ fishy/gui/main_gui.py | 11 ++++++++++ fishy/helper/__init__.py | 2 +- fishy/helper/helper.py | 44 ++++++++++++++++++++++++++-------------- fishy/web/constants.py | 1 - fishy/web/web.py | 2 +- 7 files changed, 50 insertions(+), 19 deletions(-) create mode 100644 fishy/constants.py delete mode 100644 fishy/web/constants.py diff --git a/fishy/__main__.py b/fishy/__main__.py index 37414ca..d5ff1e3 100644 --- a/fishy/__main__.py +++ b/fishy/__main__.py @@ -12,6 +12,7 @@ from fishy.engine.common.event_handler import EngineEventHandler from fishy.gui import GUI, splash, update_dialog from fishy.helper import hotkey from fishy.helper.config import config +from fishy.constants import chalutier, lam2 def check_window_name(title): @@ -58,7 +59,10 @@ def initialize(window_to_hide): helper.install_thread_excepthook() sys.excepthook = helper.unhandled_exception_logging - helper.check_addon("ProvisionsChalutier") + if not config.get("addoninstalled", False) and not helper.addon_exists(chalutier[0]): + helper.install_addon(*chalutier) + helper.install_addon(*lam2) + config.set("addoninstalled", True) def main(): diff --git a/fishy/constants.py b/fishy/constants.py new file mode 100644 index 0000000..e03e92b --- /dev/null +++ b/fishy/constants.py @@ -0,0 +1,3 @@ +apiversion = 1 +chalutier = ("Chalutier", "https://www.esoui.com/downloads/dl2934/1616505502-Chalutier_1.1.1.zip") +lam2 = ("LibAddonMenu-2.0", "https://www.esoui.com/downloads/dl7/LibAddonMenu-2.0r32.zip") \ No newline at end of file diff --git a/fishy/gui/main_gui.py b/fishy/gui/main_gui.py index e5fa2b8..6f9fdf1 100644 --- a/fishy/gui/main_gui.py +++ b/fishy/gui/main_gui.py @@ -14,6 +14,7 @@ from fishy.helper import hotkey from .discord_login import discord_login from ..helper.config import config from ..helper.hotkey import Key +from ..constants import chalutier, lam2 if typing.TYPE_CHECKING: from . import GUI @@ -58,6 +59,16 @@ def _create(gui: 'GUI'): if config.get("dont_ask_update", False): filemenu.add_command(label="Update", command=helper.update) + def installer(): + if filemenu.entrycget(4, 'label') == "Remove Chalutier": + helper.remove_addon(chalutier[0]) + filemenu.entryconfigure(4, label="Install Chalutier") + else: + helper.install_addon(*chalutier) + helper.install_addon(*lam2) + filemenu.entryconfigure(4, label="Remove Chalutier") + chaEntry = "Remove Chalutier" if helper.addon_exists(chalutier[0]) else "Install Chalutier" + filemenu.add_command(label=chaEntry, command=installer) menubar.add_cascade(label="Options", menu=filemenu) debug_menu = Menu(menubar, tearoff=0) diff --git a/fishy/helper/__init__.py b/fishy/helper/__init__.py index 272a0af..9a0750f 100644 --- a/fishy/helper/__init__.py +++ b/fishy/helper/__init__.py @@ -1,4 +1,4 @@ from .auto_update import auto_upgrade, upgrade_avail, versions from .config import Config from .helper import open_web, initialize_uid, install_thread_excepthook, unhandled_exception_logging, manifest_file, \ - create_shortcut_first, check_addon, restart, create_shortcut, not_implemented, update + create_shortcut_first, addon_exists, install_addon, remove_addon, restart, create_shortcut, not_implemented, update diff --git a/fishy/helper/helper.py b/fishy/helper/helper.py index 99cab4a..6f50f7a 100644 --- a/fishy/helper/helper.py +++ b/fishy/helper/helper.py @@ -1,10 +1,13 @@ import logging import os +import shutil import sys import threading import time import traceback import webbrowser +import requests +from io import BytesIO from threading import Thread from zipfile import ZipFile @@ -142,23 +145,34 @@ def create_shortcut(anti_ghosting: bool): logging.error("Couldn't create shortcut") +def get_addondir(): + # noinspection PyUnresolvedReferences + from win32com.shell import shell, shellcon + documents = shell.SHGetFolderPath(0, shellcon.CSIDL_PERSONAL, None, 0) + return os.path.join(documents, "Elder Scrolls Online", "live", "Addons") + + +def addon_exists(name): + return os.path.exists(os.path.join(get_addondir(), name)) + + # noinspection PyBroadException -def check_addon(name): - """ - Extracts the addon from zip and installs it into the AddOn folder of eso - """ +def install_addon(name, url): try: - # noinspection PyUnresolvedReferences - from win32com.shell import shell, shellcon - documents = shell.SHGetFolderPath(0, shellcon.CSIDL_PERSONAL, None, 0) - addon_dir = os.path.join(documents, "Elder Scrolls Online", "live", "Addons") - if not os.path.exists(os.path.join(addon_dir, name)): - logging.info(f"{name} Addon not found, installing it...") - with ZipFile(manifest_file(f"{name}.zip"), 'r') as z: - z.extractall(path=addon_dir) - logging.info("Please make sure you enable \"Allow outdated addons\" in-game") - except Exception: - logging.error("couldn't install addon, try doing it manually") + r = requests.get(url, stream=True) + z = ZipFile(BytesIO(r.content)) + z.extractall(path=get_addondir()) + logging.info("Add-On "+name+" installed successfully!\nPlease make sure to enable \"Allow outdated addons\" in ESO") + except Exception as ex: + logging.error("Could not install Add-On "+name+", try doing it manually") + + +def remove_addon(name): + try: + shutil.rmtree(os.path.join(get_addondir(), name)) + logging.info("Add-On "+name+" removed!") + except FileNotFoundError: + pass def get_documents(): diff --git a/fishy/web/constants.py b/fishy/web/constants.py deleted file mode 100644 index 636230e..0000000 --- a/fishy/web/constants.py +++ /dev/null @@ -1 +0,0 @@ -apiversion = 1 diff --git a/fishy/web/web.py b/fishy/web/web.py index 03ecb70..a6b30e6 100644 --- a/fishy/web/web.py +++ b/fishy/web/web.py @@ -6,7 +6,7 @@ from fishy import helper from . import urls from .decorators import fallback, uses_session from ..helper.config import config -from .constants import apiversion +from ..constants import apiversion _session_id = None