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:
parent
29bd7b81cb
commit
2a0f80a9f0
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue