1
0
Fork 0
mirror of synced 2024-05-18 19:42:54 +12:00

RareGame: RareEosOverlay now implements its procedures internally.

The new methods are the following
* `has_update`: to check for updates
* `is_enabled`: checks if the overlay is enabled (on wine platform, on prefix)
* `enable`: enables the overlay (on wine platforms, on prefix, for app_name)
* `disable`: disables the overlay (on wine platforms, on prefix, for app_name)
* `install`: Install using Rare's existing facilities
* `uninstall`: Uninstall using Rare's existing facilities
This commit is contained in:
loathingKernel 2023-09-08 17:07:43 +03:00
parent 29bd7b81cb
commit 2a0f80a9f0

View file

@ -9,12 +9,13 @@ from typing import List, Optional, Dict, Set
from PyQt5.QtCore import QRunnable, pyqtSlot, QProcess, QThreadPool
from PyQt5.QtGui import QPixmap
from legendary.lfs import eos
from legendary.models.game import Game, InstalledGame
from legendary.utils.selective_dl import get_sdl_appname
from rare.lgndr.core import LegendaryCore
from rare.models.install import InstallOptionsModel, UninstallOptionsModel
from rare.models.base_game import RareGameBase, RareGameSlim
from rare.models.install import InstallOptionsModel, UninstallOptionsModel
from rare.shared.game_process import GameProcess
from rare.shared.image_manager import ImageManager
from rare.utils.paths import data_dir, get_rare_executable
@ -572,3 +573,63 @@ class RareEosOverlay(RareGameBase):
else:
self.igame = None
self.signals.game.uninstalled.emit(self.app_name)
@property
def has_update(self) -> bool:
self.core.check_for_overlay_updates()
return self.core.overlay_update_available
def is_enabled(self, prefix: Optional[str] = None):
reg_paths = eos.query_registry_entries(prefix)
return reg_paths["overlay_path"] and self.core.is_overlay_install(reg_paths["overlay_path"])
def enable(
self, prefix: Optional[str] = None, app_name: Optional[str] = None, path: Optional[str] = None
) -> bool:
if not self.is_installed or self.is_enabled(prefix):
return False
if not path:
path = self.igame.install_path
reg_paths = eos.query_registry_entries(prefix)
if old_path := reg_paths["overlay_path"]:
if os.path.normpath(old_path) == path:
logger.info(f"Overlay already enabled, nothing to do.")
return True
else:
logger.info(f'Updating overlay registry entries from "{old_path}" to "{path}"')
eos.remove_registry_entries(prefix)
eos.add_registry_entries(path, prefix)
logger.info(f"Enabled overlay at: {path} for prefix: {prefix}")
return True
def disable(self, prefix: Optional[str] = None, app_name: Optional[str] = None) -> bool:
if not self.is_enabled(prefix):
return False
logger.info(f"Disabling overlay (removing registry keys) for prefix: {prefix}")
eos.remove_registry_entries(prefix)
return True
def install(self) -> bool:
if not self.is_idle:
return False
if self.is_installed:
base_path = self.igame.install_path
else:
base_path = os.path.join(
self.core.lgd.config.get("Legendary", "install_dir", fallback=os.path.expanduser("~/legendary")),
".overlay"
)
self.signals.game.install.emit(
InstallOptionsModel(
app_name=self.app_name, base_path=base_path, platform="Windows", overlay=True
)
)
return True
def uninstall(self) -> bool:
if not self.is_idle or not self.is_installed:
return False
self.signals.game.uninstall.emit(
UninstallOptionsModel(app_name=self.app_name)
)
return True