1
Fork 0
mirror of https://github.com/redstrate/Astra.git synced 2025-04-23 21:07:45 +00:00
astra/launcher/ui/Main.qml
Joshua Goins 81bd81e1b6 Improve patching experience further
Now there is more visible and consistent information such as the number
of patches and how far you're into the patching process. It's harder to
close or quit the window while patching to prevent errors, and
installing patches no longer freezes the window.

And fixes an issue where the boot component would never properly update.
2023-10-11 17:45:02 -04:00

147 lines
3.9 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
import "Pages"
Kirigami.ApplicationWindow {
id: appWindow
width: 1280
height: 720
minimumWidth: 800
minimumHeight: 500
title: "Astra"
property bool checkedAutoLogin: false
pageStack.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.layers.clear()
if (!LauncherCore.currentProfile.isGameInstalled) {
// User must set up the profile
pageStack.layers.replace(Qt.createComponent("zone.xiv.astra", "SetupPage"), {
profile: LauncherCore.currentProfile
})
} else if (!LauncherCore.currentProfile.account) {
// User must select an account for the profile
pageStack.layers.replace(Qt.createComponent("zone.xiv.astra", "AccountSetup"), {
profile: LauncherCore.currentProfile
})
} else {
if (LauncherCore.autoLoginProfile && !checkedAutoLogin) {
pageStack.layers.replace(Qt.createComponent("zone.xiv.astra", "AutoLoginPage"))
checkedAutoLogin = true;
} else {
pageStack.layers.replace(Qt.createComponent("zone.xiv.astra", "MainPage"))
}
}
}
function cancelAutoLogin() {
pageStack.layers.clear();
pageStack.layers.replace(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) {
pageStack.layers.push(Qt.createComponent("zone.xiv.astra", "BrowserPage"), {
url: url
})
} else {
Qt.openUrlExternally(url)
}
}
Connections {
target: LauncherCore
function onLoadingFinished() {
checkSetup();
}
function onSuccessfulLaunch() {
if (LauncherCore.settings.closeWhenLaunched) {
hide();
} else {
checkSetup();
}
}
function onGameClosed() {
if (LauncherCore.settings.closeWhenLaunched) {
Qt.callLater(Qt.quit);
} else {
checkSetup();
}
}
function onShowNewsChanged() {
// workaround annoying Qt layout bug
// TODO: see if this changed in Qt6
pageStack.layers.replace(Qt.createComponent("zone.xiv.astra", "MainPage"))
}
function onCurrentProfileChanged() {
checkSetup();
}
}
Component.onCompleted: checkSetup()
property Item hoverLinkIndicator: QQC2.Control {
parent: overlay.parent
property alias text: linkText.text
opacity: text.length > 0 ? 1 : 0
Behavior on opacity {
OpacityAnimator {
duration: Kirigami.Units.longDuration
}
}
z: 999990
x: 0
y: parent.height - implicitHeight
contentItem: QQC2.Label {
id: linkText
}
Kirigami.Theme.colorSet: Kirigami.Theme.View
background: Rectangle {
color: Kirigami.Theme.backgroundColor
}
}
}