1
Fork 0
mirror of https://github.com/redstrate/Astra.git synced 2025-04-24 05:17:46 +00:00
astra/launcher/ui/Main.qml
Joshua Goins 49f8aae877 Add support for installing the official benchmark
This uses the same profile system as the regular game, and can be used
to download the current benchmark (currently hardcoded, to be fixed
later.) Or as always, install it offline from an existing zip.
2024-04-19 20:32:28 -04:00

139 lines
4 KiB
QML

// SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
// SPDX-License-Identifier: GPL-3.0-or-later
import QtQuick
import QtQuick.Controls as QQC2
import org.kde.kirigami as Kirigami
import zone.xiv.astra
Kirigami.ApplicationWindow {
id: appWindow
width: 1280
height: 800
minimumWidth: 800
minimumHeight: 500
title: pageStack.currentItem !== undefined ? pageStack.currentItem.title : ""
property bool checkedAutoLogin: false
pageStack {
globalToolBar {
style: Kirigami.ApplicationHeaderStyle.ToolBar
// TODO: they should really do this check in kirigami
showNavigationButtons: if (pageStack.currentItem?.globalToolBarStyle === Kirigami.ApplicationHeaderStyle.ToolBar) {
Kirigami.ApplicationHeaderStyle.ShowBackButton
} else {
Kirigami.ApplicationHeaderStyle.NoNavigationButtons
}
}
initialPage: Kirigami.Page {
Kirigami.LoadingPlaceholder {
anchors.centerIn: parent
}
}
}
onClosing: (close) => {
if (LauncherCore.isPatching()) {
applicationWindow().showPassiveNotification(i18n("Please do not quit while patching!"));
}
close.accepted = !LauncherCore.isPatching();
}
function checkSetup() {
if (!LauncherCore.loadingFinished) {
return
}
pageStack.clear()
pageStack.layers.clear();
if (!LauncherCore.currentProfile.isGameInstalled) {
// User must set up the profile
pageStack.push(Qt.createComponent("zone.xiv.astra", "SetupPage"), {
profile: LauncherCore.currentProfile
})
} else if (!LauncherCore.currentProfile.account && !LauncherCore.currentProfile.isBenchmark) {
// User must select an account for the profile
pageStack.push(Qt.createComponent("zone.xiv.astra", "AccountSetup"), {
profile: LauncherCore.currentProfile
})
} else {
if (LauncherCore.autoLoginProfile && !checkedAutoLogin) {
pageStack.layers.push(Qt.createComponent("zone.xiv.astra", "AutoLoginPage"))
checkedAutoLogin = true;
} else {
pageStack.push(Qt.createComponent("zone.xiv.astra", "MainPage"))
}
}
}
function cancelAutoLogin() {
pageStack.clear();
pageStack.layers.clear();
pageStack.push(Qt.createComponent("zone.xiv.astra", "MainPage"));
}
function pushDialogLayer(url) {
if (LauncherCore.isSteamDeck) {
pageStack.layers.push(url)
} else {
pageStack.pushDialogLayer(url)
}
}
function openUrl(url) {
if (LauncherCore.isSteamDeck) {
appWindow.pageStack.layers.push(Qt.createComponent("zone.xiv.astra", "BrowserPage"), {
url: url
})
} else {
Qt.openUrlExternally(url)
}
}
Connections {
target: LauncherCore
function onLoadingFinished() {
appWindow.checkSetup();
}
function onSuccessfulLaunch() {
if (LauncherCore.settings.closeWhenLaunched) {
appWindow.hide();
} else {
appWindow.checkSetup();
}
}
function onGameClosed() {
if (LauncherCore.settings.closeWhenLaunched) {
Qt.callLater(Qt.quit);
} else {
appWindow.checkSetup();
}
}
function onCurrentProfileChanged() {
appWindow.checkSetup();
}
}
Connections {
target: LauncherCore.settings
function onShowNewsChanged() {
// workaround annoying Qt layout bug
// TODO: see if this changed in Qt7
appWindow.pageStack.layers.replace(Qt.createComponent("zone.xiv.astra", "MainPage"))
}
}
Component.onCompleted: checkSetup()
}