#185 re did the auto switching screenshot lib with the fix

This commit is contained in:
Adam Saudagar 2024-03-14 23:58:51 +05:30
parent 773f05ebae
commit d262885afa
3 changed files with 28 additions and 9 deletions

View File

@ -1,5 +1,6 @@
import logging import logging
import subprocess import subprocess
import traceback
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from functools import partial from functools import partial
from typing import Optional from typing import Optional
@ -98,7 +99,24 @@ class D3DShot(IScreenShot):
LIBS = [PyAutoGUI, MSS, D3DShot] LIBS = [PyAutoGUI, MSS, D3DShot]
def create() -> IScreenShot: # noinspection PyBroadException
lib = LIBS[config.get("sslib", 0)] def create() -> Optional[IScreenShot]:
logging.debug(f"Using {lib.__name__} screenshot lib") # Initialize a variable to hold the preferred library index
return lib() preferred_lib_index = config.get("sslib", 0)
# Create a list of library indices to try, starting with the preferred one
lib_indices = [preferred_lib_index] + [i for i in range(len(LIBS)) if i != preferred_lib_index]
for index in lib_indices:
lib = LIBS[index]
try:
lib_instance = lib()
if lib_instance.setup():
# testing grab once
ss = lib_instance.grab()
if ss.shape:
logging.debug(f"Using {lib.__name__} as the screenshot library.")
return lib_instance
except Exception:
logging.warning(f"Setup failed for {lib.__name__} with error: {traceback.format_exc()}. Trying next library...")
return None

View File

@ -42,14 +42,15 @@ def init():
WindowServer.status = Status.CRASHED WindowServer.status = Status.CRASHED
return return
WindowServer.status = Status.RUNNING crop = os_services.get_game_window_rect()
WindowServer.crop = os_services.get_game_window_rect() if crop is None or not WindowServer.sslib.setup():
if WindowServer.crop is None or not WindowServer.sslib.setup():
logging.error("Game window not found by window_server") logging.error("Game window not found by window_server")
WindowServer.status = Status.CRASHED WindowServer.status = Status.CRASHED
return return
WindowServer.crop = crop
WindowServer.status = Status.RUNNING
def get_cropped_screenshot(): def get_cropped_screenshot():
ss = WindowServer.sslib.grab() ss = WindowServer.sslib.grab()

View File

@ -1 +1 @@
0.5.25 0.5.26