Compare commits

..
Author SHA1 Message Date
vkamn 2d20497a31 fix: return Premium and Free features text field 2026-10-27 00:24:44 +09:00
vkamn a1bd44af2b fix: no gap in server tabs for read-only servers 2026-10-26 23:42:12 +09:00
vkamn e840985c59 fix: notification insted of error after onScanServerFinished 2026-10-26 22:36:52 +09:00
vkamn f84fdd272a chore: add link to amnezia hub 2026-10-26 22:25:07 +09:00
vkamn 5739be120e fix: pass deployment target to awg-apple build
Without it clang took the minimum iOS version from the SDK and generated
A12 code. Its LDAPR instructions crash A10/A11 devices with SIGILL.
2026-10-26 00:43:31 +09:00
15 changed files with 60 additions and 7278 deletions

No files matched your search

-1
View File
@@ -104,7 +104,6 @@ else()
${CMAKE_CURRENT_LIST_DIR}/translations/${CLIENT_TS_PREFIX}_ko_KR.ts
${CMAKE_CURRENT_LIST_DIR}/translations/${CLIENT_TS_PREFIX}_fr_FR.ts
${CMAKE_CURRENT_LIST_DIR}/translations/${CLIENT_TS_PREFIX}_th_TH.ts
${CMAKE_CURRENT_LIST_DIR}/translations/${CLIENT_TS_PREFIX}_id_ID.ts
)
endif()
@@ -779,11 +779,8 @@ void ImportController::processAmneziaConfig(QJsonObject &config) const
}
QJsonObject jsonConfig = QJsonDocument::fromJson(protocolConfig.toUtf8()).object();
if (jsonConfig.value(configKey::mtu).toString().trimmed().isEmpty()) {
jsonConfig[configKey::mtu] = ContainerUtils::isAwgContainer(dockerContainer)
? protocols::awg::defaultMtu
: protocols::wireguard::defaultMtu;
}
jsonConfig[configKey::mtu] =
ContainerUtils::isAwgContainer(dockerContainer) ? protocols::awg::defaultMtu : protocols::wireguard::defaultMtu;
containerConfig[configKey::lastConfig] = QString(QJsonDocument(jsonConfig).toJson());
@@ -793,3 +790,4 @@ void ImportController::processAmneziaConfig(QJsonObject &config) const
}
}
}
File diff suppressed because it is too large. Load diff
@@ -33,7 +33,6 @@ int LanguageUiController::getCurrentLanguageIndex() const
case QLocale::Spanish: return static_cast<int>(LanguageSettings::AvailableLanguageEnum::Spanish); break;
case QLocale::French: return static_cast<int>(LanguageSettings::AvailableLanguageEnum::French); break;
case QLocale::Thai: return static_cast<int>(LanguageSettings::AvailableLanguageEnum::Thai); break;
case QLocale::Indonesian: return static_cast<int>(LanguageSettings::AvailableLanguageEnum::Indonesian); break;
default: return static_cast<int>(LanguageSettings::AvailableLanguageEnum::English); break;
}
}
@@ -70,7 +69,6 @@ LanguageSettings::AvailableLanguageEnum LanguageUiController::getSystemLanguageE
case QLocale::Spanish: return LanguageSettings::AvailableLanguageEnum::Spanish;
case QLocale::French: return LanguageSettings::AvailableLanguageEnum::French;
case QLocale::Thai: return LanguageSettings::AvailableLanguageEnum::Thai;
case QLocale::Indonesian: return LanguageSettings::AvailableLanguageEnum::Indonesian;
default: return LanguageSettings::AvailableLanguageEnum::English;
}
}
@@ -119,7 +117,6 @@ QString LanguageUiController::getLocalLanguageName(const LanguageSettings::Avail
case LanguageSettings::AvailableLanguageEnum::Spanish: strLanguage = "Español"; break;
case LanguageSettings::AvailableLanguageEnum::French: strLanguage = "Français"; break;
case LanguageSettings::AvailableLanguageEnum::Thai: strLanguage = "ไทย"; break;
case LanguageSettings::AvailableLanguageEnum::Indonesian: strLanguage = "Bahasa Indonesia"; break;
default: break;
}
@@ -142,7 +139,6 @@ QLocale LanguageUiController::languageEnumToLocale(const LanguageSettings::Avail
case LanguageSettings::AvailableLanguageEnum::Spanish: return QLocale::Spanish;
case LanguageSettings::AvailableLanguageEnum::French: return QLocale::French;
case LanguageSettings::AvailableLanguageEnum::Thai: return QLocale::Thai;
case LanguageSettings::AvailableLanguageEnum::Indonesian: return QLocale::Indonesian;
default: return QLocale::English;
}
}
-1
View File
@@ -52,7 +52,6 @@ QString LanguageModel::getLocalLanguageName(const LanguageSettings::AvailableLan
case LanguageSettings::AvailableLanguageEnum::Korean: strLanguage = "한국어"; break;
case LanguageSettings::AvailableLanguageEnum::French: strLanguage = "Français"; break;
case LanguageSettings::AvailableLanguageEnum::Thai: strLanguage = "ไทย"; break;
case LanguageSettings::AvailableLanguageEnum::Indonesian: strLanguage = "Bahasa Indonesia"; break;
default: break;
}
+1 -2
View File
@@ -20,8 +20,7 @@ namespace LanguageSettings
Spanish,
Korean,
French,
Thai,
Indonesian
Thai
};
Q_ENUM_NS(AvailableLanguageEnum)
+4 -1
View File
@@ -8,8 +8,9 @@ Pane {
id: root
property var benefitsModel: null
property int benefitsCount: 0
visible: benefitsRepeater.count > 0
visible: root.benefitsCount > 0
padding: 16
@@ -26,6 +27,8 @@ Pane {
model: root.benefitsModel
onCountChanged: root.benefitsCount = count
delegate: BenefitRow {
Layout.fillWidth: true
+10
View File
@@ -15,6 +15,16 @@ TabButton {
readonly property int maximumHorizontalPadding: root.size === TabButtonType.Large ? 24 : 10
implicitWidth: implicitContentWidth + 2 * root.maximumHorizontalPadding
width: {
if (!root.visible) {
return 0
}
const tabBar = root.TabBar.tabBar
if (!tabBar || tabBar.visibleTabCount === undefined) {
return implicitWidth
}
return tabBar.availableWidth / Math.max(1, tabBar.visibleTabCount)
}
implicitHeight: root.size === TabButtonType.Large ? 48 : 36
horizontalPadding: Math.max(4, Math.min(root.maximumHorizontalPadding, (root.width - implicitContentWidth) / 2))
+13
View File
@@ -2,6 +2,19 @@ import QtQuick
import QtQuick.Controls
TabBar {
id: root
readonly property int visibleTabCount: {
let visibleCount = 0
for (let i = 0; i < root.count; ++i) {
const tab = root.itemAt(i)
if (tab && tab.visible) {
++visibleCount
}
}
return visibleCount
}
spacing: 0
background: null
}
@@ -116,6 +116,16 @@ PageType {
onClicked: Qt.openUrlExternally(qsTr("https://telegram.me/amnezia_vpn_en"))
}
ListItemType {
Layout.fillWidth: true
text: qsTr("Amnezia Hub Telegram Bot")
subtitle: qsTr("Ask us anything")
icon.source: "qrc:/images/controls/telegram.svg"
onClicked: Qt.openUrlExternally("https://telegram.me/amneziahub_bot?start=utm_ioIdiSEUDN")
}
ListItemType {
Layout.fillWidth: true
@@ -28,7 +28,7 @@ PageType {
message = qsTr("No new installed containers found")
}
PageController.showErrorMessage(message)
PageController.showNotificationMessage(message)
}
function onRebootServerFinished(finishedMessage) {
@@ -117,15 +117,13 @@ PageType {
TabButtonType {
id: protocolsTab
visible: protocolsPage.installedProtocolsCount
width: protocolsPage.installedProtocolsCount ? undefined : 0
visible: protocolsPage.installedProtocolsCount > 0
text: qsTr("Protocols")
}
TabButtonType {
id: servicesTab
visible: servicesPage.installedServicesCount
width: servicesPage.installedServicesCount ? undefined : 0
visible: servicesPage.installedServicesCount > 0
text: qsTr("Services")
}
@@ -59,7 +59,7 @@ PageType {
spacing: 12
visible: benefitsPanel.visible
visible: benefitsPanel.benefitsCount > 0
BodyTextType {
Layout.fillWidth: true
@@ -139,7 +139,7 @@ PageType {
spacing: 12
visible: benefitsPanel.visible
visible: benefitsPanel.benefitsCount > 0
BodyTextType {
Layout.fillWidth: true
+14
View File
@@ -21,6 +21,12 @@ class AwgApple(ConanFile):
archs = str(self.settings.arch).split("|")
return " ".join(arch_map.get(arch, arch) for arch in archs)
@property
def _deployment_target_vars(self):
if self.settings.os == "iOS":
return "miphoneos-version-min", "IPHONEOS_DEPLOYMENT_TARGET"
return "mmacosx-version-min", "MACOSX_DEPLOYMENT_TARGET"
def configure(self):
self.settings.rm_safe("compiler.libcxx")
self.settings.rm_safe("compiler.cppstd")
@@ -49,6 +55,14 @@ class AwgApple(ConanFile):
f"ARCHS={self._goarch}",
f"PLATFORM_NAME={sdk}"
]
os_version = self.settings.get_safe("os.version")
if os_version:
flag_name, env_name = self._deployment_target_vars
tc.make_args += [
f"DEPLOYMENT_TARGET_CLANG_FLAG_NAME={flag_name}",
f"DEPLOYMENT_TARGET_CLANG_ENV_NAME={env_name}",
f"{env_name}={os_version}",
]
tc.generate()
def build(self):