1
0
Fork 0
mirror of synced 2024-06-17 10:04:43 +12:00

launch games works

This commit is contained in:
Dummerle 2020-10-25 21:56:54 +01:00
parent 431a5598b9
commit 7dc9aa53ec
5 changed files with 136 additions and 21 deletions

23
Rare/Dialogs.py Normal file
View file

@ -0,0 +1,23 @@
from PyQt5.QtWidgets import QDialog, QVBoxLayout, QHBoxLayout, QPushButton, QLabel
class InstallDialog(QDialog):
def __init__(self, game):
super(InstallDialog, self).__init__()
self.setWindowTitle("Install Game")
self.layout = QVBoxLayout()
self.options = QLabel("Verschiedene Optionene")
self.layout.addWidget(self.options)
self.layout.addStretch(1)
self.yes_button = QPushButton("Install")
self.cancel_button = QPushButton("cancel")
self.button_layout = QHBoxLayout()
self.button_layout.addWidget(self.yes_button)
self.button_layout.addWidget(self.cancel_button)
self.cancel_button.clicked.connect(self.exit)
self.layout.addLayout(self.button_layout)
self.setLayout(self.layout)

View file

@ -1,16 +1,20 @@
import qtawesome as qta
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QWidget, QLabel, QHBoxLayout, QVBoxLayout, QPushButton
from PyQt5.QtWidgets import QWidget, QLabel, QHBoxLayout, QVBoxLayout, QPushButton, QStyle
from Rare.Dialogs import InstallDialog
from Rare.utils import legendaryUtils
class GameWidget(QWidget):
def __init__(self, game):
super(GameWidget, self).__init__()
# self.setStyleSheet("border:1px solid rgb(0, 0, 0)")
self.title = game.title
self.app_name = game.app_name
self.version = game.version
self.size = game.install_size
self.launch_params = game.launch_parameters
#self.dev =
self.layout = QHBoxLayout()
@ -23,16 +27,17 @@ class GameWidget(QWidget):
##Layout on the right
self.childLayout = QVBoxLayout()
self.childLayout.addWidget(QLabel(f"<h1>{self.title}</h1>"))
play_icon = qta.icon('fa5s.play')
play_icon = self.style().standardIcon(getattr(QStyle, 'SP_MediaPlay'))
settings_icon = self.style().standardIcon(getattr(QStyle, 'SP_DirIcon'))
self.title_widget = QLabel(f"<h1>{self.title}</h1>")
self.launch_button = QPushButton(play_icon, "Launch")
self.launch_button.clicked.connect(self.launch)
self.wine_rating = QLabel("Wine Rating: " + self.get_rating())
self.version_label = QLabel("Version: " + str(self.version))
self.size_label = QLabel(f"Installed size: {round(self.size / (1024 ** 3), 2)} GB")
self.settings = QPushButton(qta.icon("fa5s.cogs"), " Settings")
self.settings = QPushButton(settings_icon, " Settings (Icon TODO)")
self.childLayout.addWidget(self.title_widget)
self.childLayout.addWidget(self.launch_button)
self.childLayout.addWidget(self.wine_rating)
self.childLayout.addWidget(self.version_label)
@ -46,7 +51,9 @@ class GameWidget(QWidget):
def launch(self):
print(f"launch {self.title}")
# TODO
self.launch_button.setText("Running")
self.launch_button.setDisabled(True)
legendaryUtils.start(self.app_name) # adding launch params #TODO
def get_rating(self) -> str:
return "gold" # TODO
@ -57,12 +64,30 @@ class UninstalledGameWidget(QWidget):
super(UninstalledGameWidget, self).__init__()
self.title = game.app_title
self.layout = QHBoxLayout()
self.game = game
self.visible = True
pixmap = QPixmap(f"../images/{game.app_name}/UninstalledArt.png")
pixmap = pixmap.scaled(240, 320)
self.image = QLabel()
self.image.setPixmap(pixmap)
self.layout.addWidget(self.image)
self.layout.addWidget(QLabel(f"<h1>{self.title}</h1>"))
self.setLayout(self.layout)
self.child_layout = QVBoxLayout()
self.title_label = QLabel(f"<h2>{self.title}</h2>")
self.install_button = QPushButton("Install")
self.install_button.clicked.connect(self.install)
self.child_layout.addWidget(self.title_label)
self.child_layout.addWidget(self.install_button)
self.child_layout.addStretch(1)
self.layout.addWidget(self.image)
self.layout.addLayout(self.child_layout)
self.layout.addStretch(1)
self.setLayout(self.layout)
def install(self):
print("install " + self.title)
#TODO
# dialog = InstallDialog(self.game)

View file

@ -1,3 +1,4 @@
import os
import sys
from PyQt5.QtWidgets import QTabWidget, QMainWindow, QWidget, QApplication
@ -36,11 +37,36 @@ class TabWidget(QTabWidget):
self.addTab(self.settings, "Settings")
class LoginWindow(QMainWindow):
def __init__(self):
super(LoginWindow, self).__init__()
self.setWindowTitle("Rare - Login")
self.setGeometry(0, 0, 200, 150)
self.show()
def main():
# Check if Legendary is installed
if os.path.isfile(os.path.expanduser("~") + '/.config/legendary/user.json'):
startMainProcess()
else:
notLoggedIn()
def startMainProcess():
# TODO Download Images
app = QApplication(sys.argv)
ex = MainWindow()
sys.exit(app.exec_())
def notLoggedIn():
app = QApplication(sys.argv)
window = LoginWindow()
sys.exit(app.exec_())
if __name__ == '__main__':
main()

View file

@ -1,9 +1,9 @@
from PyQt5.QtCore import QUrl, Qt
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QScrollArea
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QScrollArea, QLineEdit
from Rare.utils.legendaryUtils import get_installed, get_not_installed
from Rare.GameWidget import GameWidget, UninstalledGameWidget
from Rare.utils.legendaryUtils import get_installed, get_not_installed
class BrowserTab(QWebEngineView):
@ -18,7 +18,6 @@ class Settings(QWidget):
super(Settings, self).__init__(parent=parent)
self.layout = QVBoxLayout()
label = QLabel()
print(label.fontInfo().pixelSize())
self.layout.addWidget(QLabel("<h1>Settings</h1>"))
self.layout.addWidget(QLabel("Coming soon"))
self.layout.addStretch(1)
@ -35,9 +34,8 @@ class GameListInstalled(QScrollArea):
self.layout = QVBoxLayout()
for i in get_installed():
widget = GameWidget(i)
#print(i.)
self.layout.addWidget(widget)
self.layout.addWidget(widget)
self.widget.setLayout(self.layout)
self.setWidget(self.widget)
@ -51,8 +49,15 @@ class GameListUninstalled(QScrollArea):
self.layout = QVBoxLayout()
self.filter = QLineEdit()
self.filter.setPlaceholderText("Search game TODO")
self.layout.addWidget(self.filter)
self.widgets = []
for game in get_not_installed():
self.layout.addWidget(UninstalledGameWidget(game))
game_widget = UninstalledGameWidget(game)
self.layout.addWidget(game_widget)
self.widgets.append(game_widget)
self.widget.setLayout(self.layout)
self.setWidget(self.widget)

View file

@ -1,10 +1,13 @@
import subprocess
import os
from argparse import Namespace
from distutils.util import strtobool
from legendary.cli import LegendaryCLI
from legendary.core import LegendaryCore
core = LegendaryCore()
cli = LegendaryCLI
cli = LegendaryCLI()
def get_installed():
@ -17,6 +20,7 @@ def get_installed_names():
names.append(i.app_name)
return names
def get_not_installed():
games = []
installed = get_installed_names()
@ -25,6 +29,7 @@ def get_not_installed():
games.append(game)
return games
# return (games, dlcs)
def get_games_and_dlcs():
if not core.login():
@ -33,6 +38,7 @@ def get_games_and_dlcs():
return core.get_game_and_dlc_list()
def get_games_by_name():
if not core.login():
print("Login Failed")
@ -41,9 +47,11 @@ def get_games_by_name():
for i in core.get_game_list():
game.append(i.app_name)
def get_game_by_name(name: str):
return core.get_game(name)
def get_games():
if not core.login():
print("Login Failed")
@ -51,6 +59,34 @@ def get_games():
return core.get_game_list()
def start(game_name: str, args):
subprocess.run(["legendary", "launch", game_name])
def start(game_name,
offline=False,
skip_version_check=False,
reset_defaults=None,
set_defaults=None,
wine_bin=os.environ.get('LGDRY_WINE_BINARY', None),
wine_pfx=os.environ.get('LGDRY_WINE_PREFIX', None),
no_wine=strtobool(os.environ.get('LGDRY_NO_WINE', 'False')),
debug=False,
dry_run=False,
user_name_override=None,
language=None
):
cli.launch_game(Namespace(app_name=game_name,
offline=offline,
wrapper=os.environ.get('LGDRY_WRAPPER', None),
skip_version_check=skip_version_check,
reset_defaults=reset_defaults,
set_defaults=set_defaults,
wine_bin=wine_bin,
wine_pfx=wine_pfx,
no_wine=no_wine,
debug=debug,
dry_run=dry_run,
user_name_override=user_name_override,
language=language
),
[] # Extra
)
# start("Sugar")