diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7eaa05a..dd2f49a 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -58,17 +58,15 @@ if (BUILD_TESTING)
add_subdirectory(autotests)
endif()
-if (NOT WIN32)
- install(FILES zone.xiv.astra.desktop DESTINATION ${KDE_INSTALL_APPDIR})
- install(FILES zone.xiv.astra.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR})
- install(FILES zone.xiv.astra.svg DESTINATION ${KDE_INSTALL_FULL_ICONDIR}/hicolor/scalable/apps)
-
- ecm_qt_install_logging_categories(
- EXPORT ASTRA
- FILE astra.categories
- SORT DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}
- )
-endif()
+install(FILES zone.xiv.astra.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR})
+install(FILES zone.xiv.astra.desktop DESTINATION ${KDE_INSTALL_APPDIR})
+install(FILES zone.xiv.astra.svg DESTINATION ${KDE_INSTALL_FULL_ICONDIR}/hicolor/scalable/apps)
+
+ecm_qt_install_logging_categories(
+ EXPORT ASTRA
+ FILE astra.categories
+ SORT DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}
+)
feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt
index f51eed9..53db3c0 100644
--- a/launcher/CMakeLists.txt
+++ b/launcher/CMakeLists.txt
@@ -95,6 +95,8 @@ target_link_libraries(astra_static PUBLIC
QCoro::Core
QCoro::Network
QCoro::Qml)
+get_target_property(LIBCOTP_VERSION cotp VERSION)
+target_compile_definitions(astra_static PUBLIC LIBCOTP_VERSION_STRING="${LIBCOTP_VERSION}")
if (LINUX)
target_link_libraries(astra_static PUBLIC KF6::FileMetaData)
endif()
@@ -134,6 +136,7 @@ qt_target_qml_sources(astra_static
ui/Settings/ProfileSettings.qml
ui/Settings/ProfilesPage.qml
ui/Settings/SettingsPage.qml
+ ui/Settings/TroubleshootingPage.qml
ui/Setup/AccountSetup.qml
ui/Setup/AddSquareEnix.qml
ui/Setup/BenchmarkInstallProgress.qml
@@ -145,16 +148,6 @@ qt_target_qml_sources(astra_static
ui/Main.qml
)
-set_source_files_properties(../zone.xiv.astra.svg PROPERTIES
- QT_RESOURCE_ALIAS /zone.xiv.astra.svg
-)
-
-qt_target_qml_sources(astra_static
- PREFIX /
- RESOURCES
- ../zone.xiv.astra.svg
-)
-
target_link_libraries(astra PRIVATE
astra_static
astra_staticplugin
diff --git a/launcher/config.kcfg b/launcher/config.kcfg
index 72a77e0..565c090 100644
--- a/launcher/config.kcfg
+++ b/launcher/config.kcfg
@@ -23,6 +23,9 @@ SPDX-License-Identifier: CC0-1.0
QDir(QStandardPaths::writableLocation(QStandardPaths::PicturesLocation)).absoluteFilePath(QStringLiteral("FFXIV"))
+
+ false
+
diff --git a/launcher/src/launchercore.cpp b/launcher/src/launchercore.cpp
index 3f7fc93..f72c636 100755
--- a/launcher/src/launchercore.cpp
+++ b/launcher/src/launchercore.cpp
@@ -35,6 +35,10 @@ LauncherCore::LauncherCore()
: QObject()
{
m_config = new Config(KSharedConfig::openConfig(QStringLiteral("astrarc"), KConfig::SimpleConfig, QStandardPaths::AppConfigLocation), this);
+ if (config()->verboseLogging()) {
+ QLoggingCategory::setFilterRules(QStringLiteral("zone.xiv.astra*=true"));
+ }
+
m_mgr = new QNetworkAccessManager(this);
m_squareEnixLogin = new SquareEnixLogin(*this, this);
m_profileManager = new ProfileManager(this);
diff --git a/launcher/src/main.cpp b/launcher/src/main.cpp
index 6e7b743..a0c9cc0 100755
--- a/launcher/src/main.cpp
+++ b/launcher/src/main.cpp
@@ -6,8 +6,10 @@
#include
#include
#include // NOTE: do not remove this, if your IDE suggests to do so
+#include
#include
#include
+#include
#include
#ifdef Q_OS_WINDOWS
@@ -46,13 +48,16 @@ int main(int argc, char *argv[])
}
KLocalizedString::setApplicationDomain("astra");
+ // This needs to be set before fromAppStreamForApplication can be used, so don't remove this!
+ QGuiApplication::setDesktopFileName(u"zone.xiv.astra"_s);
- KAboutData about(QStringLiteral("astra"),
- i18n("Astra"),
- QStringLiteral(ASTRA_VERSION_STRING),
- i18n("Play FFXIV"),
- KAboutLicense::GPL_V3,
- i18n("© 2021-2026 Joshua Goins"));
+ auto about = KAboutData::fromAppStreamForApplication();
+ about.setVersion(QByteArrayLiteral(ASTRA_VERSION_STRING));
+ // Works around bug fixed with https://invent.kde.org/frameworks/kcoreaddons/-/merge_requests/582
+#if KCOREADDONS_VERSION < QT_VERSION_CHECK(6, 28, 0)
+ about.setComponentName(QStringLiteral("astra"));
+#endif
+ about.setCopyrightStatement(i18n("© 2021-2026 Joshua Goins"));
about.setOtherText(
i18n("This software requires that you have legitimate access to FINAL FANTASY XIV. By using this software, you may be in violation "
"of your User Agreement.\n\nFINAL FANTASY, FINAL FANTASY XIV, FFXIV, SQUARE ENIX, and the SQUARE ENIX logo are registered trademarks or "
@@ -62,7 +67,6 @@ int main(int argc, char *argv[])
QStringLiteral("josh@redstrate.com"),
QStringLiteral("https://redstrate.com/"),
QUrl(QStringLiteral("https://redstrate.com/rss-image.png")));
- about.setHomepage(QStringLiteral("https://xiv.zone/astra"));
about.addComponent(QStringLiteral("physis"),
i18n("Library for reading and writing FFXIV data."),
QString::fromLatin1(physis_get_physis_version()),
@@ -75,22 +79,17 @@ int main(int argc, char *argv[])
KAboutLicense::GPL_V3);
about.addComponent(QStringLiteral("KDSingleApplication"),
i18n("Helper class for single-instance policy applications."),
- QStringLiteral("1.2.0"),
+ QString::fromLatin1(KDSINGLEAPPLICATION_VERSION_STRING),
QStringLiteral("https://github.com/KDAB/KDSingleApplication"),
KAboutLicense::MIT);
about.addComponent(QStringLiteral("libcotp"),
- i18n(" C library that generates TOTP and HOTP."),
- QStringLiteral("3.1.1"),
+ i18n("C library that generates TOTP and HOTP."),
+ QString::fromLatin1(LIBCOTP_VERSION_STRING),
QStringLiteral("https://github.com/paolostivanin/libcotp"),
KAboutLicense::Unknown);
- about.setDesktopFileName(QStringLiteral("zone.xiv.astra"));
- about.setBugAddress(QByteArrayLiteral("https://github.com/redstrate/astra/issues"));
- about.setComponentName(QStringLiteral("astra"));
- about.setProgramLogo(QStringLiteral("zone.xiv.astra"));
- about.setOrganizationDomain(QByteArrayLiteral("xiv.zone"));
KAboutData::setApplicationData(about);
-
+ QGuiApplication::setWindowIcon(QIcon::fromTheme(u"zone.xiv.astra"_s));
initializeLogging();
QCommandLineParser parser;
diff --git a/launcher/src/squareenixlogin.cpp b/launcher/src/squareenixlogin.cpp
index 9d47d67..dfdd5e2 100644
--- a/launcher/src/squareenixlogin.cpp
+++ b/launcher/src/squareenixlogin.cpp
@@ -271,11 +271,13 @@ QCoro::Task> SquareEnixLogin::getStor
const QRegularExpressionMatch match = re.match(str);
if (match.hasMatch()) {
co_return StoredInfo{match.captured(1), url};
- } else {
- Q_EMIT m_launcher.loginError(
- i18n("Square Enix servers refused to confirm session information. The game may be under maintenance, try the official launcher."));
- co_return {};
}
+
+ qCDebug(ASTRA_LOG) << "Failed to find _STORED_ in" << str;
+ Q_EMIT m_launcher.loginError(
+ i18n("Square Enix servers refused to confirm session information. The game may be under maintenance, try the official launcher."));
+
+ co_return {};
}
QCoro::Task SquareEnixLogin::loginOAuth()
diff --git a/launcher/ui/Settings/SettingsPage.qml b/launcher/ui/Settings/SettingsPage.qml
index 29b1f42..7eb33d9 100644
--- a/launcher/ui/Settings/SettingsPage.qml
+++ b/launcher/ui/Settings/SettingsPage.qml
@@ -49,6 +49,12 @@ KirigamiSettings.ConfigurationView {
page: () => Qt.createComponent("zone.xiv.astra", "DeveloperSettings")
visible: LauncherCore.config.showDevTools
},
+ KirigamiSettings.ConfigurationModule {
+ moduleId: "troubleshooting"
+ text: i18n("Troubleshooting")
+ icon.name: "error-symbolic"
+ page: () => Qt.createComponent("zone.xiv.astra", "TroubleshootingPage")
+ },
KirigamiSettings.ConfigurationModule {
moduleId: "about"
text: i18n("About Astra")
diff --git a/launcher/ui/Settings/TroubleshootingPage.qml b/launcher/ui/Settings/TroubleshootingPage.qml
new file mode 100644
index 0000000..a91d778
--- /dev/null
+++ b/launcher/ui/Settings/TroubleshootingPage.qml
@@ -0,0 +1,47 @@
+// SPDX-FileCopyrightText: 2026 Joshua Goins
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+import QtCore
+import QtQuick
+import QtQuick.Layouts
+
+import org.kde.kirigami as Kirigami
+import org.kde.kirigamiaddons.formcard as FormCard
+
+import zone.xiv.astra
+
+import "../Components"
+
+FormCard.FormCardPage {
+ id: page
+
+ title: i18nc("@title:window", "Troubleshooting")
+
+ FormCard.FormCard {
+ Layout.topMargin: Kirigami.Units.largeSpacing * 4
+
+ FormCard.FormCheckDelegate {
+ id: verboseLoggingDelegate
+
+ text: i18n("Enable Verbose Logging")
+ description: i18n("Requires a restart of Astra to take effect.")
+ checked: LauncherCore.config.verboseLogging
+ onCheckedChanged: {
+ LauncherCore.config.verboseLogging = checked;
+ LauncherCore.config.save();
+ }
+ }
+
+ FormCard.FormDelegateSeparator {
+ above: verboseLoggingDelegate
+ below: logsFolderDelegate
+ }
+
+ FormCard.FormButtonDelegate {
+ id: logsFolderDelegate
+
+ text: i18nc("@action:button", "Open Logs Folder")
+ onClicked: Qt.openUrlExternally(StandardPaths.writableLocation(StandardPaths.AppDataLocation) + "/log")
+ }
+ }
+}
diff --git a/launcher/ui/Setup/SetupPage.qml b/launcher/ui/Setup/SetupPage.qml
index e18a461..034459a 100644
--- a/launcher/ui/Setup/SetupPage.qml
+++ b/launcher/ui/Setup/SetupPage.qml
@@ -31,12 +31,14 @@ FormCard.FormCardPage {
onAccepted: page.profile.config.gamePath = decodeURI(selectedFolder.toString().replace("file://", "").substr(Qt.platform.os === "windows" ? 1 : 0))
}
- Image {
- source: "qrc:/zone.xiv.astra.svg"
+ Kirigami.Icon {
+ source: "zone.xiv.astra"
fillMode: Image.PreserveAspectFit
visible: !LauncherCore.profileManager.hasAnyExistingInstallations()
+ Layout.preferredWidth: Math.round(Kirigami.Units.iconSizes.huge * 1.5)
+ Layout.preferredHeight: Math.round(Kirigami.Units.iconSizes.huge * 1.5)
Layout.fillWidth: true
Layout.fillHeight: true
Layout.margins: Kirigami.Units.largeSpacing * 3
diff --git a/zone.xiv.astra.appdata.xml b/zone.xiv.astra.appdata.xml
index a0fdade..04dd77b 100644
--- a/zone.xiv.astra.appdata.xml
+++ b/zone.xiv.astra.appdata.xml
@@ -19,8 +19,8 @@
ffxiv
ff14
- https://xiv.zone/astra
- https://github.com/redstrate/astra/issues
+ https://xiv.zone/software/astra
+ https://github.com/redstrate/astra/issues/new
https://redstrate.com/contact
https://github.com/redstrate/astra
zone.xiv.astra.desktop