refactor code for iOS and MacNE

This commit is contained in:
Macbook 2024-10-06 23:07:21 +07:00
parent f7aa82331e
commit b1ad874f14
46 changed files with 930 additions and 296 deletions

@ -1 +1 @@
Subproject commit 7c821a8d5c1ad5ad94e0763b4f25a875b5a6fe1b
Subproject commit 33afba081c8592e8632128c7f9d6ebe53cae3d08

1
client/3rd/OpenVPNAdapter.bk vendored Submodule

@ -0,0 +1 @@
Subproject commit 7c821a8d5c1ad5ad94e0763b4f25a875b5a6fe1b

View file

@ -35,7 +35,7 @@ if(IOS OR MACOS_NE)
endif()
#Macos Network Extension doesn't need Widgets
if(WIN32 OR (APPLE AND NOT IOS) OR (LINUX AND NOT ANDROID) OR (NOT MACOS_NE))
if(WIN32 OR (APPLE AND NOT IOS) OR (LINUX AND NOT ANDROID) OR (NOT DEFINED MACOS_NE))
set(PACKAGES ${PACKAGES} Widgets)
endif()
@ -51,16 +51,16 @@ set(LIBS ${LIBS}
if(IOS OR MACOS_NE)
set(LIBS ${LIBS} Qt6::Multimedia)
endif()
message("Client desktop build ", ${MACOS_NE})
# message("Client desktop build ", ${MACOS_NE})
#Macos Network Extension doesn't need Widgets
if(WIN32 OR (APPLE AND NOT IOS) OR (LINUX AND NOT ANDROID) OR (APPLE AND NOT MACOS_NE))
if(WIN32 OR (APPLE AND NOT IOS) OR (LINUX AND NOT ANDROID) OR (APPLE AND NOT DEFINED MACOS_NE))
set(LIBS ${LIBS} Qt6::Widgets)
endif()
qt_standard_project_setup()
qt_add_executable(${PROJECT} MANUAL_FINALIZATION)
if(WIN32 OR (APPLE AND NOT IOS) OR (LINUX AND NOT ANDROID) OR (APPLE AND NOT MACOS_NE))
if(WIN32 OR (APPLE AND NOT IOS) OR (LINUX AND NOT ANDROID) OR (APPLE AND NOT DEFINED MACOS_NE))
qt_add_repc_replicas(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}/../ipc/ipc_interface.rep)
qt_add_repc_replicas(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}/../ipc/ipc_process_interface.rep)
qt_add_repc_replicas(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}/../ipc/ipc_process_tun2socks.rep)
@ -170,12 +170,24 @@ include_directories(mozilla)
include_directories(mozilla/shared)
include_directories(mozilla/models)
if((NOT IOS) OR (NOT MACOS_NE))
if(MACOS_NE)
message("MACOS_NE is ON")
add_definitions(-DQ_OS_IOS)
add_definitions(-DMACOS_NE)
message("Add macros for MacOS Network Extension")
else()
message("MACOS_NE is OFF")
endif()
if(NOT IOS AND NOT MACOS_NE)
message(" Add header for non-IOS and non-MACOS_NE")
set(HEADERS ${HEADERS}
${CMAKE_CURRENT_LIST_DIR}/platforms/ios/QRCodeReaderBase.h
)
endif()
if(NOT ANDROID)
set(HEADERS ${HEADERS}
${CMAKE_CURRENT_LIST_DIR}/ui/notificationhandler.h
@ -220,7 +232,7 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug")
target_compile_definitions(${PROJECT} PRIVATE "MZ_DEBUG")
endif()
if((NOT IOS) OR (NOT MACOS_NE))
if(NOT IOS AND NOT MACOS_NE)
set(SOURCES ${SOURCES}
${CMAKE_CURRENT_LIST_DIR}/platforms/ios/QRCodeReaderBase.cpp
)
@ -328,8 +340,12 @@ if(LINUX AND NOT ANDROID)
link_directories(${CMAKE_CURRENT_LIST_DIR}/platforms/linux)
endif()
if(WIN32 OR (APPLE AND NOT IOS AND NOT MACOS_NE) OR (LINUX AND NOT ANDROID))
message("Run this block when MACOS_NE is not defined or set to FALSE")
endif()
# Macos Network Extension doesn't need
if(WIN32 OR (APPLE AND NOT IOS) OR (LINUX AND NOT ANDROID) OR (APPLE AND NOT MACOS_NE))
if(WIN32 OR (APPLE AND NOT IOS AND NOT MACOS_NE) OR (LINUX AND NOT ANDROID))
message("Client desktop build")
add_compile_definitions(AMNEZIA_DESKTOP)
@ -365,11 +381,12 @@ endif()
if(IOS)
include(cmake/ios.cmake)
include(cmake/ios-arch-fixup.cmake)
elseif(APPLE AND NOT IOS AND NOT MACOS_NE)
elseif(APPLE AND NOT IOS AND NOT DEFINED MACOS_NE)
include(cmake/osxtools.cmake)
include(cmake/macos.cmake)
elseif(APPLE AND NOT IOS AND MACOS_NE)
include(cmake/macos_ne.cmake)
elseif(APPLE AND NOT IOS AND MACOS_NE)
include(cmake/osxtools.cmake)
include(cmake/macos_ne.cmake)
endif()
target_link_libraries(${PROJECT} PRIVATE ${LIBS})

View file

@ -34,22 +34,22 @@ set(LIBS ${LIBS}
set(HEADERS ${HEADERS}
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ios_controller.h
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ios_controller_wrapper.h
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/iosnotificationhandler.h
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/QtAppDelegate.h
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/QtAppDelegate-C-Interface.h
${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/ios_controller.h
${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/ios_controller_wrapper.h
${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/iosnotificationhandler.h
${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/QtAppDelegate.h
${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/QtAppDelegate-C-Interface.h
)
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ios_controller.h PROPERTIES OBJECTIVE_CPP_HEADER TRUE)
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/ios_controller.h PROPERTIES OBJECTIVE_CPP_HEADER TRUE)
set(SOURCES ${SOURCES}
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ios_controller.mm
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ios_controller_wrapper.mm
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/iosnotificationhandler.mm
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/iosglue.mm
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/QRCodeReaderBase.mm
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/QtAppDelegate.mm
${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/ios_controller.mm
${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/ios_controller_wrapper.mm
${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/iosnotificationhandler.mm
${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/iosglue.mm
${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/QRCodeReaderBase.mm
${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/QtAppDelegate.mm
)
set(ICON_FILE ${CMAKE_CURRENT_SOURCE_DIR}/images/app.icns)
@ -71,7 +71,7 @@ target_include_directories(${PROJECT} PRIVATE ${Qt6Gui_PRIVATE_INCLUDE_DIRS})
set_target_properties(${PROJECT} PROPERTIES
XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/ios/app/Info.plist.in
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/macos/app/Info.plist.in
#MACOSX_BUNDLE_ICON_FILE "AppIcon"
MACOSX_BUNDLE_INFO_STRING "AmneziaVPN"
MACOSX_BUNDLE_BUNDLE_NAME "AmneziaVPN"
@ -79,7 +79,7 @@ set_target_properties(${PROJECT} PROPERTIES
MACOSX_BUNDLE_LONG_VERSION_STRING "${APPLE_PROJECT_VERSION}-${CMAKE_PROJECT_VERSION_TWEAK}"
MACOSX_BUNDLE_SHORT_VERSION_STRING "${APPLE_PROJECT_VERSION}"
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "${BUILD_IOS_APP_IDENTIFIER}"
XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/ios/app/main.entitlements"
XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/macos/app/main.entitlements"
XCODE_ATTRIBUTE_MARKETING_VERSION "${APPLE_PROJECT_VERSION}"
XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION "${CMAKE_PROJECT_VERSION_TWEAK}"
XCODE_ATTRIBUTE_PRODUCT_NAME "AmneziaVPN"
@ -96,14 +96,14 @@ set_target_properties(${PROJECT} PROPERTIES
XCODE_EMBED_APP_EXTENSIONS networkextension
XCODE_ATTRIBUTE_CODE_SIGN_STYLE Automatic
#XCODE_ATTRIBUTE_CODE_SIGN_STYLE Manual
# XCODE_ATTRIBUTE_CODE_SIGN_STYLE Manual
#XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Distribution: Privacy Technologies OU (X7UJ388FXK)"
#XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY[variant=Debug] "Apple Development"
# XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Distribution: Privacy Technologies OU (X7UJ388FXK)"
# XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY[variant=Debug] "Apple Development"
#XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "Mac AppStore AmneziaVPN"
#XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER[variant=Debug] "Mac AppStore AmneziaVPN"
# XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "Mac AppStore AmneziaVPN"
# XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER[variant=Debug] "Mac AppStore AmneziaVPN"
)
set_target_properties(${PROJECT} PROPERTIES
@ -127,23 +127,23 @@ set(WG_APPLE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rd/amneziawg-apple/Sources)
target_sources(${PROJECT} PRIVATE
# ${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/iosvpnprotocol.swift
${WG_APPLE_SOURCE_DIR}/WireGuardKitC/x25519.c
${CLIENT_ROOT_DIR}/platforms/ios/LogController.swift
${CLIENT_ROOT_DIR}/platforms/ios/Log.swift
${CLIENT_ROOT_DIR}/platforms/ios/LogRecord.swift
${CLIENT_ROOT_DIR}/platforms/ios/ScreenProtection.swift
${CLIENT_ROOT_DIR}/platforms/ios/VPNCController.swift
${CLIENT_ROOT_DIR}/platforms/macos_ne/LogController.swift
${CLIENT_ROOT_DIR}/platforms/macos_ne/Log.swift
${CLIENT_ROOT_DIR}/platforms/macos_ne/LogRecord.swift
${CLIENT_ROOT_DIR}/platforms/macos_ne/ScreenProtection.swift
${CLIENT_ROOT_DIR}/platforms/macos_ne/VPNCController.swift
)
target_sources(${PROJECT} PRIVATE
#${CMAKE_CURRENT_SOURCE_DIR}/ios/app/AmneziaVPNLaunchScreen.storyboard
${CMAKE_CURRENT_SOURCE_DIR}/ios/app/Media.xcassets
${CMAKE_CURRENT_SOURCE_DIR}/ios/app/PrivacyInfo.xcprivacy
#${CMAKE_CURRENT_SOURCE_DIR}/macos_ne/app/AmneziaVPNLaunchScreen.storyboard
${CMAKE_CURRENT_SOURCE_DIR}/macos/app/Media.xcassets
${CMAKE_CURRENT_SOURCE_DIR}/macos/app/PrivacyInfo.xcprivacy
)
set_property(TARGET ${PROJECT} APPEND PROPERTY RESOURCE
#${CMAKE_CURRENT_SOURCE_DIR}/ios/app/AmneziaVPNLaunchScreen.storyboard
${CMAKE_CURRENT_SOURCE_DIR}/ios/app/Media.xcassets
${CMAKE_CURRENT_SOURCE_DIR}/ios/app/PrivacyInfo.xcprivacy
#${CMAKE_CURRENT_SOURCE_DIR}/macos/app/AmneziaVPNLaunchScreen.storyboard
${CMAKE_CURRENT_SOURCE_DIR}/macos/app/Media.xcassets
${CMAKE_CURRENT_SOURCE_DIR}/macos/app/PrivacyInfo.xcprivacy
)
add_subdirectory(macos/networkextension)

View file

@ -141,6 +141,7 @@ function(osx_codesign_target TARGET)
endif()
foreach(FILE ${CODESIGN_FILES})
message(STATUS "Signing ${TARGET}: ${FILE}")
add_custom_command(TARGET ${TARGET} POST_BUILD VERBATIM
COMMAND ${COMMENT_ECHO_COMMAND} "Signing ${TARGET}: ${FILE}"
COMMAND ${CODESIGN_BIN} ${CODESIGN_ARGS} ${FILE}

View file

@ -102,7 +102,9 @@ QProcessEnvironment SshConfigurator::prepareEnv()
pathEnvVar.prepend(QDir::toNativeSeparators(QApplication::applicationDirPath()) + "\\cygwin;");
pathEnvVar.prepend(QDir::toNativeSeparators(QApplication::applicationDirPath()) + "\\openvpn;");
#elif defined(Q_OS_MACX)
#if !defined(MACOS_NE)
pathEnvVar.prepend(QDir::toNativeSeparators(QApplication::applicationDirPath()) + "/Contents/MacOS");
#endif
#endif
env.insert("PATH", pathEnvVar);

View file

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17506" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<device id="ipad12_9rounded" orientation="portrait" layout="fullscreen" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17505"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="gZ9-gc-3t5">
<rect key="frame" x="0.0" y="0.0" width="1024" height="1366"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="launch.png" translatesAutoresizingMaskIntoConstraints="NO" id="q5g-aV-39U">
<rect key="frame" x="467" y="638" width="90" height="90"/>
<constraints>
<constraint firstAttribute="width" constant="90" id="VFp-nz-h8O"/>
<constraint firstAttribute="height" constant="90" id="ZUg-Ud-mgE"/>
</constraints>
</imageView>
</subviews>
<viewLayoutGuide key="safeArea" id="Whf-X3-AA4"/>
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="q5g-aV-39U" firstAttribute="centerX" secondItem="gZ9-gc-3t5" secondAttribute="centerX" id="Ayw-bo-LVF"/>
<constraint firstItem="q5g-aV-39U" firstAttribute="centerY" secondItem="gZ9-gc-3t5" secondAttribute="centerY" id="YHd-Kc-J0u"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
<resources>
<image name="launch.png" width="1024" height="1024"/>
</resources>
</document>

View file

@ -0,0 +1,178 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleAllowMixedLocalizations</key>
<true/>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
<string>${QT_INTERNAL_DOLLAR_VAR}{PRODUCT_NAME}</string>
<key>CFBundleExecutable</key>
<string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${MACOSX_BUNDLE_BUNDLE_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string>
<key>CFBundleVersion</key>
<string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string>
<key>NSHumanReadableCopyright</key>
<string>${MACOSX_BUNDLE_COPYRIGHT}</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>AmneziaVPNLaunchScreen</string>
<key>UIRequiredDeviceCapabilities</key>
<array/>
<key>UIRequiresFullScreen</key>
<true/>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationPortrait</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array/>
<key>UIUserInterfaceStyle</key>
<string>Light</string>
<key>com.wireguard.ios.app_group_id</key>
<string>group.org.amnezia.AmneziaVPN</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>
<key>NSCameraUsageDescription</key>
<string>Amnezia VPN needs access to the camera for reading QR-codes.</string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSAllowsLocalNetworking</key>
<true/>
</dict>
<key>CFBundleIcons</key>
<dict/>
<key>CFBundleIcons~ipad</key>
<dict/>
<key>UTImportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>Amnezia VPN config</string>
<key>UTTypeIconFiles</key>
<array/>
<key>UTTypeIdentifier</key>
<string>org.amnezia.AmneziaVPN.amnezia-config</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>vpn</string>
</array>
<key>public.mime-type</key>
<array>
<string>text/plain</string>
</array>
</dict>
</dict>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>WireGuard config</string>
<key>UTTypeIconFiles</key>
<array/>
<key>UTTypeIdentifier</key>
<string>org.amnezia.AmneziaVPN.wireguard-config</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>conf</string>
<string>cfg</string>
</array>
<key>public.mime-type</key>
<array>
<string>text/plain</string>
</array>
</dict>
</dict>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>OpenVPN config</string>
<key>UTTypeIconFiles</key>
<array/>
<key>UTTypeIdentifier</key>
<string>org.amnezia.AmneziaVPN.openvpn-config</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>ovpn</string>
</array>
<key>public.mime-type</key>
<array>
<string>text/plain</string>
</array>
</dict>
</dict>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>AmneziaVPN backup file</string>
<key>UTTypeIconFiles</key>
<array/>
<key>UTTypeIdentifier</key>
<string>org.amnezia.AmneziaVPN.backup-config</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>backup</string>
</array>
<key>public.mime-type</key>
<array>
<string>text/plain</string>
</array>
</dict>
</dict>
</array>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>Amnezia VPN config</string>
<key>LSHandlerRank</key>
<string>Alternate</string>
<key>LSItemContentTypes</key>
<array>
<string>org.amnezia.AmneziaVPN.amnezia-config</string>
<string>org.amnezia.AmneziaVPN.wireguard-config</string>
<string>org.amnezia.AmneziaVPN.openvpn-config</string>
<string>org.amnezia.AmneziaVPN.backup-config</string>
</array>
</dict>
</array>
</dict>
</plist>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 767 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

View file

@ -0,0 +1,290 @@
{
"images" : [
{
"filename" : "40.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "20x20"
},
{
"filename" : "60.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "20x20"
},
{
"filename" : "29.png",
"idiom" : "iphone",
"scale" : "1x",
"size" : "29x29"
},
{
"filename" : "58.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "29x29"
},
{
"filename" : "87.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "29x29"
},
{
"filename" : "80.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "40x40"
},
{
"filename" : "120.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "40x40"
},
{
"filename" : "57.png",
"idiom" : "iphone",
"scale" : "1x",
"size" : "57x57"
},
{
"filename" : "114.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "57x57"
},
{
"filename" : "120.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "60x60"
},
{
"filename" : "180.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "60x60"
},
{
"filename" : "20.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "20x20"
},
{
"filename" : "40.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "20x20"
},
{
"filename" : "29.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "29x29"
},
{
"filename" : "58.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "29x29"
},
{
"filename" : "40.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "40x40"
},
{
"filename" : "80.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "40x40"
},
{
"filename" : "50.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "50x50"
},
{
"filename" : "100.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "50x50"
},
{
"filename" : "72.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "72x72"
},
{
"filename" : "144.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "72x72"
},
{
"filename" : "76.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "76x76"
},
{
"filename" : "152.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "76x76"
},
{
"filename" : "167.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "83.5x83.5"
},
{
"filename" : "1024.png",
"idiom" : "ios-marketing",
"scale" : "1x",
"size" : "1024x1024"
},
{
"idiom" : "watch",
"role" : "notificationCenter",
"scale" : "2x",
"size" : "24x24",
"subtype" : "38mm"
},
{
"idiom" : "watch",
"role" : "notificationCenter",
"scale" : "2x",
"size" : "27.5x27.5",
"subtype" : "42mm"
},
{
"idiom" : "watch",
"role" : "companionSettings",
"scale" : "2x",
"size" : "29x29"
},
{
"idiom" : "watch",
"role" : "companionSettings",
"scale" : "3x",
"size" : "29x29"
},
{
"idiom" : "watch",
"role" : "notificationCenter",
"scale" : "2x",
"size" : "33x33",
"subtype" : "45mm"
},
{
"idiom" : "watch",
"role" : "appLauncher",
"scale" : "2x",
"size" : "40x40",
"subtype" : "38mm"
},
{
"idiom" : "watch",
"role" : "appLauncher",
"scale" : "2x",
"size" : "44x44",
"subtype" : "40mm"
},
{
"idiom" : "watch",
"role" : "appLauncher",
"scale" : "2x",
"size" : "46x46",
"subtype" : "41mm"
},
{
"idiom" : "watch",
"role" : "appLauncher",
"scale" : "2x",
"size" : "50x50",
"subtype" : "44mm"
},
{
"idiom" : "watch",
"role" : "appLauncher",
"scale" : "2x",
"size" : "51x51",
"subtype" : "45mm"
},
{
"idiom" : "watch",
"role" : "appLauncher",
"scale" : "2x",
"size" : "54x54",
"subtype" : "49mm"
},
{
"idiom" : "watch",
"role" : "quickLook",
"scale" : "2x",
"size" : "86x86",
"subtype" : "38mm"
},
{
"idiom" : "watch",
"role" : "quickLook",
"scale" : "2x",
"size" : "98x98",
"subtype" : "42mm"
},
{
"idiom" : "watch",
"role" : "quickLook",
"scale" : "2x",
"size" : "108x108",
"subtype" : "44mm"
},
{
"idiom" : "watch",
"role" : "quickLook",
"scale" : "2x",
"size" : "117x117",
"subtype" : "45mm"
},
{
"idiom" : "watch",
"role" : "quickLook",
"scale" : "2x",
"size" : "129x129",
"subtype" : "49mm"
},
{
"idiom" : "watch-marketing",
"scale" : "1x",
"size" : "1024x1024"
},
{
"idiom" : "car",
"scale" : "2x",
"size" : "60"
},
{
"idiom" : "car",
"scale" : "3x",
"size" : "60"
},
{
"idiom" : "watch",
"role" : "longLook",
"scale" : "2x",
"size" : "44x44",
"subtype" : "42mm"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>1C8F.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>35F9.1</string>
</array>
</dict>
</array>
</dict>
</plist>

BIN
client/macos/app/launch.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 583 KiB

View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.networking.networkextension</key>
<array>
<string>packet-tunnel-provider</string>
</array>
<key>com.apple.security.application-groups</key>
<array>
<string>group.org.amnezia.AmneziaVPN</string>
</array>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)group.org.amnezia.AmneziaVPN</string>
</array>
</dict>
</plist>

View file

@ -30,7 +30,7 @@ set_target_properties(networkextension PROPERTIES
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../../Frameworks"
# XCODE_ATTRIBUTE_CODE_SIGN_STYLE Automatic
XCODE_ATTRIBUTE_CODE_SIGN_STYLE Automatic
# #XCODE_ATTRIBUTE_CODE_SIGN_STYLE Manual
# #XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Distribution: Privacy Technologies OU (X7UJ388FXK)"
@ -187,7 +187,7 @@ target_sources(networkextension PRIVATE
target_include_directories(networkextension PRIVATE ${CLIENT_ROOT_DIR})
target_include_directories(networkextension PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
target_link_libraries(networkextension PRIVATE ${CLIENT_ROOT_DIR}/3rd-prebuilt/3rd-prebuilt/wireguard/ios/arm64/libwg-go.a)
target_link_libraries(networkextension PRIVATE ${CLIENT_ROOT_DIR}/3rd-prebuilt/3rd-prebuilt/wireguard/macos/x86_64/libwg-go.a)
# Print the root directory for debugging purposes
message("---------")

View file

@ -47,7 +47,8 @@ extension PacketTunnelProvider {
let configuration = OpenVPNConfiguration()
configuration.fileContent = ovpnConfiguration
if str.contains("cloak") {
configuration.setPTCloak()
// TODO disable cloak
// configuration.setPTCloak()
}
let evaluation: OpenVPNConfigurationEvaluation?

View file

@ -2,15 +2,14 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "platforms/ios/iosnotificationhandler.h"
#include "platforms/macos_ne/iosnotificationhandler.h"
#import <UserNotifications/UserNotifications.h>
#import <Foundation/Foundation.h>
//#import <UIKit/UIKit.h>
/*
// Removed the UIResponder and UIApplicationDelegate references as these are not available in macOS
@interface IOSNotificationDelegate
: UIResponder <UIApplicationDelegate, UNUserNotificationCenterDelegate> {
: NSObject <UNUserNotificationCenterDelegate> {
IOSNotificationHandler* m_iosNotificationHandler;
}
@end
@ -18,7 +17,7 @@
@implementation IOSNotificationDelegate
- (id)initWithObject:(IOSNotificationHandler*)notification {
self = [super init];
self = [super init]; // Removed `super init` as it refers to UIResponder, which is iOS specific
if (self) {
m_iosNotificationHandler = notification;
}
@ -30,7 +29,7 @@
withCompletionHandler:
(void (^)(UNNotificationPresentationOptions options))completionHandler {
Q_UNUSED(center)
completionHandler(UNNotificationPresentationOptionAlert);
completionHandler(UNNotificationPresentationOptionList | UNNotificationPresentationOptionBanner);
}
- (void)userNotificationCenter:(UNUserNotificationCenter*)center
@ -79,7 +78,7 @@ void IOSNotificationHandler::notify(NotificationHandler::Message type, const QSt
trigger:trigger];
UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = id(m_delegate);
center.delegate = (id<UNUserNotificationCenterDelegate>)m_delegate;
[center addNotificationRequest:request
withCompletionHandler:^(NSError* _Nullable error) {
@ -87,4 +86,4 @@ void IOSNotificationHandler::notify(NotificationHandler::Message type, const QSt
NSLog(@"Local Notification failed");
}
}];
}*/
}

View file

@ -109,7 +109,7 @@ VpnProtocol *VpnProtocol::factory(DockerContainer container, const QJsonObject &
#if defined(Q_OS_WINDOWS)
case DockerContainer::Ipsec: return new Ikev2Protocol(configuration);
#endif
#if defined(Q_OS_WINDOWS) || defined(Q_OS_MACX) || (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID))
#if defined(Q_OS_WINDOWS) || defined(Q_OS_MACX) and !defined MACOS_NE || (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID))
case DockerContainer::OpenVpn: return new OpenVpnProtocol(configuration);
case DockerContainer::Cloak: return new OpenVpnOverCloakProtocol(configuration);
case DockerContainer::ShadowSocks: return new ShadowSocksVpnProtocol(configuration);

View file

@ -258,18 +258,18 @@ Can&apos;t be disabled for current server</source>
<translation>غير قادر علي فتح الملف</translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="187"/>
<location filename="../ui/controllers/importController.cpp" line="192"/>
<location filename="../ui/controllers/importController.cpp" line="191"/>
<location filename="../ui/controllers/importController.cpp" line="196"/>
<source>Invalid configuration file</source>
<translation>ملف تكوين غير صحيح</translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="617"/>
<location filename="../ui/controllers/importController.cpp" line="622"/>
<source>Scanned %1 of %2.</source>
<translation>تم فحص%1 من %2.</translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="652"/>
<location filename="../ui/controllers/importController.cpp" line="657"/>
<source>In the imported configuration, potentially dangerous lines were found:</source>
<translation>في التكوين المستورد، تم العثور على سطور يحتمل أن تكون خطرة:</translation>
</message>
@ -401,28 +401,28 @@ Already installed containers were found on the server. All installed containers
<context>
<name>NotificationHandler</name>
<message>
<location filename="../ui/notificationhandler.cpp" line="63"/>
<location filename="../ui/notificationhandler.cpp" line="70"/>
<location filename="../ui/notificationhandler.cpp" line="66"/>
<location filename="../ui/notificationhandler.cpp" line="73"/>
<source>AmneziaVPN</source>
<translation>AmneziaVPN</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="64"/>
<location filename="../ui/notificationhandler.cpp" line="67"/>
<source>VPN Connected</source>
<translation>تم الاتصال</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="71"/>
<location filename="../ui/notificationhandler.cpp" line="74"/>
<source>VPN Disconnected</source>
<translation>تم إنهاء الاتصال</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="94"/>
<location filename="../ui/notificationhandler.cpp" line="97"/>
<source>AmneziaVPN notification</source>
<translation>إشعار من AmneziaVPN</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="95"/>
<location filename="../ui/notificationhandler.cpp" line="98"/>
<source>Unsecured network detected: </source>
<translation>تم العثور علي شبكة غير مؤمنة: </translation>
</message>
@ -2426,12 +2426,12 @@ Already installed containers were found on the server. All installed containers
<translation>عنوان خادم IP [:منفذ]</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="116"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="113"/>
<source>Continue</source>
<translation>واصل</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="144"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="141"/>
<source>All data you enter will remain strictly confidential and will not be shared or disclosed to the Amnezia or any third parties</source>
<translation>ستظل جميع البيانات التي تدخلها سرية للغاية ولن تتم مشاركتها أو الكشف عنها ل Amnezia أو أي طرف ثالث</translation>
</message>
@ -2441,42 +2441,42 @@ Already installed containers were found on the server. All installed containers
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="78"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="75"/>
<source>SSH Username</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="94"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="91"/>
<source>Password or SSH private key</source>
<translation>كلمة مرور او مفتاح SSH خاص</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="153"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="150"/>
<source>How to run your VPN server</source>
<translation>كيف تقوم بتشغيل خادم ال VPN الخاص بك</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="154"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="151"/>
<source>Where to get connection data, step-by-step instructions for buying a VPS</source>
<translation>اين تحصل علي بيانات الاتصال, تعليمات خطوة ب خطوة لشراء VPS</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="170"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="167"/>
<source>Ip address cannot be empty</source>
<translation>لا يمكن لعنوان IP ان يكون فارغ</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="173"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="170"/>
<source>Enter the address in the format 255.255.255.255:88</source>
<translation>ادخل العنوان في شكل 255.255.255.255:88</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="177"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="174"/>
<source>Login cannot be empty</source>
<translation>تسجيل دخول لا يمكن ان يكون فارغ</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="181"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="178"/>
<source>Password/private key cannot be empty</source>
<translation>كلمة مرور/مفتاح خاص لأ يمكن ان يكونو فارغين</translation>
</message>
@ -2791,42 +2791,47 @@ Already installed containers were found on the server. All installed containers
<translation>البيانات المٌرسلة: %1</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="862"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="849"/>
<source>Allowed IPs: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="870"/>
<source>Rename</source>
<translation>إعادة التسمية</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="908"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="916"/>
<source>Client name</source>
<translation>اسم العميل</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="921"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="929"/>
<source>Save</source>
<translation>احفظ</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="955"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="963"/>
<source>Revoke</source>
<translation>سحب وإبطال</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="959"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="967"/>
<source>Revoke the config for a user - %1?</source>
<translation>سحب وإبطال للمستخدم - %1?</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="960"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="968"/>
<source>The user will no longer be able to connect to your server.</source>
<translation>المستخدم لن يكون قادر علي الاتصال بعد الان.</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="961"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="969"/>
<source>Continue</source>
<translation>واصل</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="962"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="970"/>
<source>Cancel</source>
<translation>إلغاء</translation>
</message>
@ -4100,12 +4105,12 @@ While it offers a blend of security, stability, and speed, it&apos;s essential t
<context>
<name>main2</name>
<message>
<location filename="../ui/qml/main2.qml" line="162"/>
<location filename="../ui/qml/main2.qml" line="163"/>
<source>Private key passphrase</source>
<translation>عبارة المرور الخاصة بالمفتاح</translation>
</message>
<message>
<location filename="../ui/qml/main2.qml" line="185"/>
<location filename="../ui/qml/main2.qml" line="186"/>
<source>Save</source>
<translation>احفظ</translation>
</message>

View file

@ -263,18 +263,18 @@ Can&apos;t be disabled for current server</source>
<translation>نمیتوان فایل را باز کرد.</translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="187"/>
<location filename="../ui/controllers/importController.cpp" line="192"/>
<location filename="../ui/controllers/importController.cpp" line="191"/>
<location filename="../ui/controllers/importController.cpp" line="196"/>
<source>Invalid configuration file</source>
<translation>فایل پیکربندی نامعتبر است.</translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="617"/>
<location filename="../ui/controllers/importController.cpp" line="622"/>
<source>Scanned %1 of %2.</source>
<translation>ارزیابی %1 از %2.</translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="652"/>
<location filename="../ui/controllers/importController.cpp" line="657"/>
<source>In the imported configuration, potentially dangerous lines were found:</source>
<translation>در پیکربندی وارد شده، خطوطی که ممکن است خطرناک باشند، یافت شدند:</translation>
</message>
@ -405,28 +405,28 @@ Already installed containers were found on the server. All installed containers
<context>
<name>NotificationHandler</name>
<message>
<location filename="../ui/notificationhandler.cpp" line="63"/>
<location filename="../ui/notificationhandler.cpp" line="70"/>
<location filename="../ui/notificationhandler.cpp" line="66"/>
<location filename="../ui/notificationhandler.cpp" line="73"/>
<source>AmneziaVPN</source>
<translation>AmneziaVPN</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="64"/>
<location filename="../ui/notificationhandler.cpp" line="67"/>
<source>VPN Connected</source>
<translation>ویپیان وصل شد</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="71"/>
<location filename="../ui/notificationhandler.cpp" line="74"/>
<source>VPN Disconnected</source>
<translation>ویپیان قطع شد</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="94"/>
<location filename="../ui/notificationhandler.cpp" line="97"/>
<source>AmneziaVPN notification</source>
<translation>اخطار AmneziaVPN</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="95"/>
<location filename="../ui/notificationhandler.cpp" line="98"/>
<source>Unsecured network detected: </source>
<translation>شبکه ناامن شناسایی شد: </translation>
</message>
@ -2544,12 +2544,12 @@ It&apos;s okay as long as it&apos;s from someone you trust.</source>
<translation>آدرس آیپی سرور (:پورت)</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="116"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="113"/>
<source>Continue</source>
<translation>ادامه</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="173"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="170"/>
<source>Enter the address in the format 255.255.255.255:88</source>
<translation>آدرس را با فرمت 255.255.255.255:88 وارد کنید</translation>
</message>
@ -2564,42 +2564,42 @@ It&apos;s okay as long as it&apos;s from someone you trust.</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="78"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="75"/>
<source>SSH Username</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="94"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="91"/>
<source>Password or SSH private key</source>
<translation>رمز عبور یا کلید خصوصی SSH</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="144"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="141"/>
<source>All data you enter will remain strictly confidential and will not be shared or disclosed to the Amnezia or any third parties</source>
<translation>تمام دادههایی که شما وارد میکنید به شدت محرمانه است و با Amnezia یا هر شخص ثالث دیگری به اشتراک گذاشته نمیشود</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="153"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="150"/>
<source>How to run your VPN server</source>
<translation>چگونه سرور VPN خود را اجرا کنید</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="154"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="151"/>
<source>Where to get connection data, step-by-step instructions for buying a VPS</source>
<translation>دادههای اتصال را از کجا دریافت کنید و دستورالعملهای مرحله به مرحله برای خرید یک VPS</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="170"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="167"/>
<source>Ip address cannot be empty</source>
<translation>آدرس آیپی نمیتواند خالی باشد</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="177"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="174"/>
<source>Login cannot be empty</source>
<translation>نامکاربری نمیتواند خالی باشد</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="181"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="178"/>
<source>Password/private key cannot be empty</source>
<translation>پسورد یا کلید خصوصی نمیتواند خالی باشد</translation>
</message>
@ -2958,47 +2958,52 @@ It&apos;s okay as long as it&apos;s from someone you trust.</source>
<source>Data sent: %1</source>
<translation>دادههای ارسال شده: %1</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="849"/>
<source>Allowed IPs: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Creation date: </source>
<translation type="vanished">تاریخ ایجاد: </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="862"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="870"/>
<source>Rename</source>
<translation>تغییر نام</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="908"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="916"/>
<source>Client name</source>
<translation>نام کلاینت</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="921"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="929"/>
<source>Save</source>
<translation>ذخیره</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="955"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="963"/>
<source>Revoke</source>
<translation>ابطال</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="959"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="967"/>
<source>Revoke the config for a user - %1?</source>
<translation>لغو پیکربندی برای یک کاربر - %1?</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="960"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="968"/>
<source>The user will no longer be able to connect to your server.</source>
<translation>کاربر دیگر نمیتواند به سرور وصل شود.</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="961"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="969"/>
<source>Continue</source>
<translation>ادامه</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="962"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="970"/>
<source>Cancel</source>
<translation>کنسل</translation>
</message>
@ -4316,12 +4321,12 @@ For more detailed information, you can
<context>
<name>main2</name>
<message>
<location filename="../ui/qml/main2.qml" line="162"/>
<location filename="../ui/qml/main2.qml" line="163"/>
<source>Private key passphrase</source>
<translation>عبارت کلید خصوصی</translation>
</message>
<message>
<location filename="../ui/qml/main2.qml" line="185"/>
<location filename="../ui/qml/main2.qml" line="186"/>
<source>Save</source>
<translation>ذخیره</translation>
</message>

View file

@ -259,18 +259,18 @@ Can&apos;t be disabled for current server</source>
<translation> </translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="187"/>
<location filename="../ui/controllers/importController.cpp" line="192"/>
<location filename="../ui/controllers/importController.cpp" line="191"/>
<location filename="../ui/controllers/importController.cpp" line="196"/>
<source>Invalid configuration file</source>
<translation> ि </translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="617"/>
<location filename="../ui/controllers/importController.cpp" line="622"/>
<source>Scanned %1 of %2.</source>
<translation>%2 %1 ि .</translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="652"/>
<location filename="../ui/controllers/importController.cpp" line="657"/>
<source>In the imported configuration, potentially dangerous lines were found:</source>
<translation type="unfinished"></translation>
</message>
@ -401,28 +401,28 @@ Already installed containers were found on the server. All installed containers
<context>
<name>NotificationHandler</name>
<message>
<location filename="../ui/notificationhandler.cpp" line="63"/>
<location filename="../ui/notificationhandler.cpp" line="70"/>
<location filename="../ui/notificationhandler.cpp" line="66"/>
<location filename="../ui/notificationhandler.cpp" line="73"/>
<source>AmneziaVPN</source>
<translation>AmneziaVPN</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="64"/>
<location filename="../ui/notificationhandler.cpp" line="67"/>
<source>VPN Connected</source>
<translation></translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="71"/>
<location filename="../ui/notificationhandler.cpp" line="74"/>
<source>VPN Disconnected</source>
<translation></translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="94"/>
<location filename="../ui/notificationhandler.cpp" line="97"/>
<source>AmneziaVPN notification</source>
<translation>AmneziaVPN ि</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="95"/>
<location filename="../ui/notificationhandler.cpp" line="98"/>
<source>Unsecured network detected: </source>
<translation>ि : </translation>
</message>
@ -2494,12 +2494,12 @@ Already installed containers were found on the server. All installed containers
<translation> [:]</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="116"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="113"/>
<source>Continue</source>
<translation> </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="144"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="141"/>
<source>All data you enter will remain strictly confidential and will not be shared or disclosed to the Amnezia or any third parties</source>
<translation> ि ि ि ि </translation>
</message>
@ -2509,42 +2509,42 @@ Already installed containers were found on the server. All installed containers
<translation>255.255.255.255:22</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="78"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="75"/>
<source>SSH Username</source>
<translation>SSH </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="94"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="91"/>
<source>Password or SSH private key</source>
<translation> SSH ि </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="153"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="150"/>
<source>How to run your VPN server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="154"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="151"/>
<source>Where to get connection data, step-by-step instructions for buying a VPS</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="170"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="167"/>
<source>Ip address cannot be empty</source>
<translation> </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="173"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="170"/>
<source>Enter the address in the format 255.255.255.255:88</source>
<translation> 255.255.255.255:88 </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="177"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="174"/>
<source>Login cannot be empty</source>
<translation>ि </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="181"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="178"/>
<source>Password/private key cannot be empty</source>
<translation>/ि </translation>
</message>
@ -2876,47 +2876,52 @@ Already installed containers were found on the server. All installed containers
<source>Data sent: %1</source>
<translation> : %1</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="849"/>
<source>Allowed IPs: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Creation date: </source>
<translation type="vanished">ि िि: </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="862"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="870"/>
<source>Rename</source>
<translation> </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="908"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="916"/>
<source>Client name</source>
<translation> </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="921"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="929"/>
<source>Save</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="955"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="963"/>
<source>Revoke</source>
<translation>ि </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="959"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="967"/>
<source>Revoke the config for a user - %1?</source>
<translation>ि ि ि ि - %1?</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="960"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="968"/>
<source>The user will no longer be able to connect to your server.</source>
<translation> .</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="961"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="969"/>
<source>Continue</source>
<translation> </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="962"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="970"/>
<source>Cancel</source>
<translation> </translation>
</message>
@ -4208,12 +4213,12 @@ While it offers a blend of security, stability, and speed, it&apos;s essential t
<context>
<name>main2</name>
<message>
<location filename="../ui/qml/main2.qml" line="162"/>
<location filename="../ui/qml/main2.qml" line="163"/>
<source>Private key passphrase</source>
<translation>ि </translation>
</message>
<message>
<location filename="../ui/qml/main2.qml" line="185"/>
<location filename="../ui/qml/main2.qml" line="186"/>
<source>Save</source>
<translation></translation>
</message>

View file

@ -259,18 +259,18 @@ Can&apos;t be disabled for current server</source>
<translation>က</translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="187"/>
<location filename="../ui/controllers/importController.cpp" line="192"/>
<location filename="../ui/controllers/importController.cpp" line="191"/>
<location filename="../ui/controllers/importController.cpp" line="196"/>
<source>Invalid configuration file</source>
<translation>Configuration က</translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="617"/>
<location filename="../ui/controllers/importController.cpp" line="622"/>
<source>Scanned %1 of %2.</source>
<translation>%2 %1 က က.</translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="652"/>
<location filename="../ui/controllers/importController.cpp" line="657"/>
<source>In the imported configuration, potentially dangerous lines were found:</source>
<translation> configuration က :</translation>
</message>
@ -401,28 +401,28 @@ Already installed containers were found on the server. All installed containers
<context>
<name>NotificationHandler</name>
<message>
<location filename="../ui/notificationhandler.cpp" line="63"/>
<location filename="../ui/notificationhandler.cpp" line="70"/>
<location filename="../ui/notificationhandler.cpp" line="66"/>
<location filename="../ui/notificationhandler.cpp" line="73"/>
<source>AmneziaVPN</source>
<translation>AmneziaVPN</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="64"/>
<location filename="../ui/notificationhandler.cpp" line="67"/>
<source>VPN Connected</source>
<translation>VPN က</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="71"/>
<location filename="../ui/notificationhandler.cpp" line="74"/>
<source>VPN Disconnected</source>
<translation>VPN က</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="94"/>
<location filename="../ui/notificationhandler.cpp" line="97"/>
<source>AmneziaVPN notification</source>
<translation>AmneziaVPN </translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="95"/>
<location filename="../ui/notificationhandler.cpp" line="98"/>
<source>Unsecured network detected: </source>
<translation>ကက က: </translation>
</message>
@ -2430,12 +2430,12 @@ Already installed containers were found on the server. All installed containers
<translation> IP [:port]</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="116"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="113"/>
<source>Continue</source>
<translation>ကက</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="173"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="170"/>
<source>Enter the address in the format 255.255.255.255:88</source>
<translation>က 255.255.255.255:88 </translation>
</message>
@ -2450,42 +2450,42 @@ Already installed containers were found on the server. All installed containers
<translation>255.255.255.255:22</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="78"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="75"/>
<source>SSH Username</source>
<translation>SSH </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="94"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="91"/>
<source>Password or SSH private key</source>
<translation>ကက SSH private key</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="144"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="141"/>
<source>All data you enter will remain strictly confidential and will not be shared or disclosed to the Amnezia or any third parties</source>
<translation>က ကက Amnezia က </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="153"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="150"/>
<source>How to run your VPN server</source>
<translation>က </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="154"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="151"/>
<source>Where to get connection data, step-by-step instructions for buying a VPS</source>
<translation>ကက VPS က ကက</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="170"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="167"/>
<source>Ip address cannot be empty</source>
<translation>IP </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="177"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="174"/>
<source>Login cannot be empty</source>
<translation>ကက </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="181"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="178"/>
<source>Password/private key cannot be empty</source>
<translation>ကက/private key </translation>
</message>
@ -2825,42 +2825,47 @@ Already installed containers were found on the server. All installed containers
<translation>က: %1</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="862"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="849"/>
<source>Allowed IPs: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="870"/>
<source>Rename</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="908"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="916"/>
<source>Client name</source>
<translation>က</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="921"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="929"/>
<source>Save</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="955"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="963"/>
<source>Revoke</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="959"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="967"/>
<source>Revoke the config for a user - %1?</source>
<translation> %1 က config က ?</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="960"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="968"/>
<source>The user will no longer be able to connect to your server.</source>
<translation> က.</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="961"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="969"/>
<source>Continue</source>
<translation>ကက</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="962"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="970"/>
<source>Cancel</source>
<translation>က</translation>
</message>
@ -4105,12 +4110,12 @@ For more detailed information, you can
<context>
<name>main2</name>
<message>
<location filename="../ui/qml/main2.qml" line="162"/>
<location filename="../ui/qml/main2.qml" line="163"/>
<source>Private key passphrase</source>
<translation>က key ကက</translation>
</message>
<message>
<location filename="../ui/qml/main2.qml" line="185"/>
<location filename="../ui/qml/main2.qml" line="186"/>
<source>Save</source>
<translation></translation>
</message>

View file

@ -263,18 +263,18 @@ Can&apos;t be disabled for current server</source>
<translation>Невозможно открыть файл</translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="187"/>
<location filename="../ui/controllers/importController.cpp" line="192"/>
<location filename="../ui/controllers/importController.cpp" line="191"/>
<location filename="../ui/controllers/importController.cpp" line="196"/>
<source>Invalid configuration file</source>
<translation>Неверный файл конфигурации</translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="617"/>
<location filename="../ui/controllers/importController.cpp" line="622"/>
<source>Scanned %1 of %2.</source>
<translation>Отсканировано %1 из %2.</translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="652"/>
<location filename="../ui/controllers/importController.cpp" line="657"/>
<source>In the imported configuration, potentially dangerous lines were found:</source>
<translation>В импортированной конфигурации были обнаружены потенциально опасные строки:</translation>
</message>
@ -405,28 +405,28 @@ Already installed containers were found on the server. All installed containers
<context>
<name>NotificationHandler</name>
<message>
<location filename="../ui/notificationhandler.cpp" line="63"/>
<location filename="../ui/notificationhandler.cpp" line="70"/>
<location filename="../ui/notificationhandler.cpp" line="66"/>
<location filename="../ui/notificationhandler.cpp" line="73"/>
<source>AmneziaVPN</source>
<translation>AmneziaVPN</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="64"/>
<location filename="../ui/notificationhandler.cpp" line="67"/>
<source>VPN Connected</source>
<translation>VPN подключен</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="71"/>
<location filename="../ui/notificationhandler.cpp" line="74"/>
<source>VPN Disconnected</source>
<translation>VPN выключен</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="94"/>
<location filename="../ui/notificationhandler.cpp" line="97"/>
<source>AmneziaVPN notification</source>
<translation>Уведомление AmneziaVPN</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="95"/>
<location filename="../ui/notificationhandler.cpp" line="98"/>
<source>Unsecured network detected: </source>
<translation>Обнаружена незащищенная сеть: </translation>
</message>
@ -2628,7 +2628,7 @@ It&apos;s okay as long as it&apos;s from someone you trust.</source>
<translation type="vanished">Password / SSH private key</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="116"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="113"/>
<source>Continue</source>
<translation>Продолжить</translation>
</message>
@ -2638,7 +2638,7 @@ and will not be shared or disclosed to the Amnezia or any third parties</source>
<translation type="vanished">Все данные, которые вы вводите, останутся строго конфиденциальными и не будут переданы или раскрыты Amnezia или каким-либо третьим лицам</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="173"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="170"/>
<source>Enter the address in the format 255.255.255.255:88</source>
<translation>Введите адрес в формате 255.255.255.255:88</translation>
</message>
@ -2657,42 +2657,42 @@ and will not be shared or disclosed to the Amnezia or any third parties</source>
<translation>255.255.255.255:22</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="78"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="75"/>
<source>SSH Username</source>
<translation>Имя пользователя SSH</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="94"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="91"/>
<source>Password or SSH private key</source>
<translation>Пароль или закрытый ключ SSH</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="144"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="141"/>
<source>All data you enter will remain strictly confidential and will not be shared or disclosed to the Amnezia or any third parties</source>
<translation>Все данные, которые вы вводите, останутся строго конфиденциальными и не будут переданы или раскрыты Amnezia или каким-либо третьим лицам</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="153"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="150"/>
<source>How to run your VPN server</source>
<translation>Как создать VPN на собственном сервере</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="154"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="151"/>
<source>Where to get connection data, step-by-step instructions for buying a VPS</source>
<translation>Где взять данные для подключения, пошаговые инстуркции по покупке VPS</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="170"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="167"/>
<source>Ip address cannot be empty</source>
<translation>Поле с IP-адресом не может быть пустым</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="177"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="174"/>
<source>Login cannot be empty</source>
<translation>Поле с логином не может быть пустым</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="181"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="178"/>
<source>Password/private key cannot be empty</source>
<translation>Поле с паролем/закрытым ключом не может быть пустым</translation>
</message>
@ -3087,47 +3087,52 @@ and will not be shared or disclosed to the Amnezia or any third parties</source>
<source>Data sent: %1</source>
<translation>Отправлено данных: %1</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="849"/>
<source>Allowed IPs: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Creation date: </source>
<translation type="vanished">Дата создания: </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="862"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="870"/>
<source>Rename</source>
<translation>Переименовать</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="908"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="916"/>
<source>Client name</source>
<translation>Имя клиента</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="921"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="929"/>
<source>Save</source>
<translation>Сохранить</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="955"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="963"/>
<source>Revoke</source>
<translation>Отозвать</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="959"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="967"/>
<source>Revoke the config for a user - %1?</source>
<translation>Отозвать конфигурацию для пользователя - %1?</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="960"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="968"/>
<source>The user will no longer be able to connect to your server.</source>
<translation>Пользователь больше не сможет подключаться к вашему серверу.</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="961"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="969"/>
<source>Continue</source>
<translation>Продолжить</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="962"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="970"/>
<source>Cancel</source>
<translation>Отменить</translation>
</message>
@ -4547,12 +4552,12 @@ This means that AmneziaWG keeps the fast performance of the original while addin
<context>
<name>main2</name>
<message>
<location filename="../ui/qml/main2.qml" line="162"/>
<location filename="../ui/qml/main2.qml" line="163"/>
<source>Private key passphrase</source>
<translation>Парольная фраза для закрытого ключа</translation>
</message>
<message>
<location filename="../ui/qml/main2.qml" line="185"/>
<location filename="../ui/qml/main2.qml" line="186"/>
<source>Save</source>
<translation>Сохранить</translation>
</message>

View file

@ -290,18 +290,18 @@ Can&apos;t be disabled for current server</source>
<translation>Неможливо відкрити файл</translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="187"/>
<location filename="../ui/controllers/importController.cpp" line="192"/>
<location filename="../ui/controllers/importController.cpp" line="191"/>
<location filename="../ui/controllers/importController.cpp" line="196"/>
<source>Invalid configuration file</source>
<translation>Недійсний файл конфігурації</translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="617"/>
<location filename="../ui/controllers/importController.cpp" line="622"/>
<source>Scanned %1 of %2.</source>
<translation>Відскановано %1 з %2.</translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="652"/>
<location filename="../ui/controllers/importController.cpp" line="657"/>
<source>In the imported configuration, potentially dangerous lines were found:</source>
<translation>У імпортованій конфігурації знайдено потенційно небезпечні рядки:</translation>
</message>
@ -431,28 +431,28 @@ Already installed containers were found on the server. All installed containers
<context>
<name>NotificationHandler</name>
<message>
<location filename="../ui/notificationhandler.cpp" line="63"/>
<location filename="../ui/notificationhandler.cpp" line="70"/>
<location filename="../ui/notificationhandler.cpp" line="66"/>
<location filename="../ui/notificationhandler.cpp" line="73"/>
<source>AmneziaVPN</source>
<translation>AmneziaVPN</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="64"/>
<location filename="../ui/notificationhandler.cpp" line="67"/>
<source>VPN Connected</source>
<translation>VPN Підключено</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="71"/>
<location filename="../ui/notificationhandler.cpp" line="74"/>
<source>VPN Disconnected</source>
<translation>VPN Вимкнено</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="94"/>
<location filename="../ui/notificationhandler.cpp" line="97"/>
<source>AmneziaVPN notification</source>
<translation>Сповіщення AmneziaVPN</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="95"/>
<location filename="../ui/notificationhandler.cpp" line="98"/>
<source>Unsecured network detected: </source>
<translation>Знайдена не захищена мережа: </translation>
</message>
@ -2714,7 +2714,7 @@ It&apos;s okay as long as it&apos;s from someone you trust.</source>
<translation type="vanished">Password / SSH private key</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="116"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="113"/>
<source>Continue</source>
<translation>Продовжити</translation>
</message>
@ -2725,7 +2725,7 @@ and will not be shared or disclosed to the Amnezia or any third parties</source>
і не будуть передані чи розголошені Amnezia або будь-яким третім особам</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="173"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="170"/>
<source>Enter the address in the format 255.255.255.255:88</source>
<translation>Введіть адресу в форматі 255.255.255.255:88</translation>
</message>
@ -2744,42 +2744,42 @@ and will not be shared or disclosed to the Amnezia or any third parties</source>
<translation>255.255.255.255:22</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="78"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="75"/>
<source>SSH Username</source>
<translation>SSH Username</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="94"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="91"/>
<source>Password or SSH private key</source>
<translation>Пароль або SSH ключ</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="144"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="141"/>
<source>All data you enter will remain strictly confidential and will not be shared or disclosed to the Amnezia or any third parties</source>
<translation>Усі дані, які ви вводите, залишатимуться суворо конфіденційними та не будуть передані чи розголошені Amnezia або будь-яким третім особам</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="153"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="150"/>
<source>How to run your VPN server</source>
<translation>Як запустити ваш VPN-сервер</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="154"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="151"/>
<source>Where to get connection data, step-by-step instructions for buying a VPS</source>
<translation>Де отримати дані для підключення: покрокові інструкції з придбання VPS</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="170"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="167"/>
<source>Ip address cannot be empty</source>
<translation>Поле IP address не може бути пустим</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="177"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="174"/>
<source>Login cannot be empty</source>
<translation>Поле Login не може бути пустим</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="181"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="178"/>
<source>Password/private key cannot be empty</source>
<translation>Поле Password/Private key не може бути пустим</translation>
</message>
@ -3182,47 +3182,52 @@ and will not be shared or disclosed to the Amnezia or any third parties</source>
<source>Data sent: %1</source>
<translation>Відправлено даних: %1</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="849"/>
<source>Allowed IPs: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Creation date: </source>
<translation type="obsolete">Дата створення:</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="862"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="870"/>
<source>Rename</source>
<translation>Перейменувати</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="908"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="916"/>
<source>Client name</source>
<translation>Назва клієнта</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="921"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="929"/>
<source>Save</source>
<translation>Зберегти</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="955"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="963"/>
<source>Revoke</source>
<translation>Відкликати</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="959"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="967"/>
<source>Revoke the config for a user - %1?</source>
<translation>Відкликати доступ для користувача - %1?</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="960"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="968"/>
<source>The user will no longer be able to connect to your server.</source>
<translation>Користувач більше не зможе підключатись до вашого сервера </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="961"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="969"/>
<source>Continue</source>
<translation>Продовжити</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="962"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="970"/>
<source>Cancel</source>
<translation>Відмінити</translation>
</message>
@ -4624,12 +4629,12 @@ This means that AmneziaWG keeps the fast performance of the original while addin
<context>
<name>main2</name>
<message>
<location filename="../ui/qml/main2.qml" line="162"/>
<location filename="../ui/qml/main2.qml" line="163"/>
<source>Private key passphrase</source>
<translation>Пароль для особистого ключа</translation>
</message>
<message>
<location filename="../ui/qml/main2.qml" line="185"/>
<location filename="../ui/qml/main2.qml" line="186"/>
<source>Save</source>
<translation>Зберегти</translation>
</message>

View file

@ -257,18 +257,18 @@ Can&apos;t be disabled for current server</source>
<translation>فائل کو کھولنے سے قاصر ہے</translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="187"/>
<location filename="../ui/controllers/importController.cpp" line="192"/>
<location filename="../ui/controllers/importController.cpp" line="191"/>
<location filename="../ui/controllers/importController.cpp" line="196"/>
<source>Invalid configuration file</source>
<translation>غلط کنفیگریشن فائل</translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="617"/>
<location filename="../ui/controllers/importController.cpp" line="622"/>
<source>Scanned %1 of %2.</source>
<translation>سکین%1 کی%2.</translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="652"/>
<location filename="../ui/controllers/importController.cpp" line="657"/>
<source>In the imported configuration, potentially dangerous lines were found:</source>
<translation type="unfinished"></translation>
</message>
@ -399,30 +399,30 @@ Already installed containers were found on the server. All installed containers
<context>
<name>NotificationHandler</name>
<message>
<location filename="../ui/notificationhandler.cpp" line="63"/>
<location filename="../ui/notificationhandler.cpp" line="70"/>
<location filename="../ui/notificationhandler.cpp" line="66"/>
<location filename="../ui/notificationhandler.cpp" line="73"/>
<source>AmneziaVPN</source>
<translation>The translation of &quot;AmneziaVPN&quot; in Urdu would be:
امنیزیا وی پی ای</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="64"/>
<location filename="../ui/notificationhandler.cpp" line="67"/>
<source>VPN Connected</source>
<translation>وی پی این متصل ہوگیا</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="71"/>
<location filename="../ui/notificationhandler.cpp" line="74"/>
<source>VPN Disconnected</source>
<translation>وی پی این منقطع ہوگیا</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="94"/>
<location filename="../ui/notificationhandler.cpp" line="97"/>
<source>AmneziaVPN notification</source>
<translation>امنیزیا وی پی این کی اطلاعات</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="95"/>
<location filename="../ui/notificationhandler.cpp" line="98"/>
<source>Unsecured network detected: </source>
<translation>غیر محفوظ نیٹ ورک کا پتہ لگایا گیا ہے: </translation>
</message>
@ -2498,12 +2498,12 @@ Already installed containers were found on the server. All installed containers
<translation>سرور آئی پی پتہ [:پورٹ]</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="116"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="113"/>
<source>Continue</source>
<translation>براہ کرم جاری رکھیں</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="144"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="141"/>
<source>All data you enter will remain strictly confidential and will not be shared or disclosed to the Amnezia or any third parties</source>
<translation>آپ جو ڈیٹا داخل کریں گے وہ بالکل خفیہ رہے گا اور نہ تو امنیزیا یا کسی تیسری شخصیت کے ساتھ اشتراک کیا جائے گا</translation>
</message>
@ -2513,42 +2513,42 @@ Already installed containers were found on the server. All installed containers
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="78"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="75"/>
<source>SSH Username</source>
<translation>ایس ایس ایچ صارف نام</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="94"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="91"/>
<source>Password or SSH private key</source>
<translation>پاس ورڈ یا SSH نجی کلید</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="153"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="150"/>
<source>How to run your VPN server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="154"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="151"/>
<source>Where to get connection data, step-by-step instructions for buying a VPS</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="170"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="167"/>
<source>Ip address cannot be empty</source>
<translation>آئی پی پتہ خالی نہیں ہو سکتا</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="173"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="170"/>
<source>Enter the address in the format 255.255.255.255:88</source>
<translation>ایڈریس درج کریں فارمیٹ 255.255.255.255:88</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="177"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="174"/>
<source>Login cannot be empty</source>
<translation>لاگ ان نام خالی نہیں ہو سکتا</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="181"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="178"/>
<source>Password/private key cannot be empty</source>
<translation>پاس ورڈ یا نجی کلید خالی نہیں ہو سکتی</translation>
</message>
@ -2880,47 +2880,52 @@ Already installed containers were found on the server. All installed containers
<source>Data sent: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="849"/>
<source>Allowed IPs: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Creation date: </source>
<translation type="vanished">تخلیق کی تاریخ: </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="862"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="870"/>
<source>Rename</source>
<translation>نام تبدیل</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="908"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="916"/>
<source>Client name</source>
<translation>کلائنٹ کا نام</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="921"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="929"/>
<source>Save</source>
<translation>محفوظ</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="955"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="963"/>
<source>Revoke</source>
<translation>واپس لین</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="959"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="967"/>
<source>Revoke the config for a user - %1?</source>
<translation>کیا آپ مستعمل کے لئے کنفیگ کو واپس لینا چاہتے ہیں - %1؟</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="960"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="968"/>
<source>The user will no longer be able to connect to your server.</source>
<translation>صارف آپ کے سرور سے متصل ہونے کا اختیار نہیں رہے گا.</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="961"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="969"/>
<source>Continue</source>
<translation>جاری رکھیں</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="962"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="970"/>
<source>Cancel</source>
<translation>منسوخ</translation>
</message>
@ -4154,12 +4159,12 @@ While it offers a blend of security, stability, and speed, it&apos;s essential t
<context>
<name>main2</name>
<message>
<location filename="../ui/qml/main2.qml" line="162"/>
<location filename="../ui/qml/main2.qml" line="163"/>
<source>Private key passphrase</source>
<translation>نجی کلید پاس فریز</translation>
</message>
<message>
<location filename="../ui/qml/main2.qml" line="185"/>
<location filename="../ui/qml/main2.qml" line="186"/>
<source>Save</source>
<translation>محفوظ کریں</translation>
</message>

View file

@ -262,18 +262,18 @@ Can&apos;t be disabled for current server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="187"/>
<location filename="../ui/controllers/importController.cpp" line="192"/>
<location filename="../ui/controllers/importController.cpp" line="191"/>
<location filename="../ui/controllers/importController.cpp" line="196"/>
<source>Invalid configuration file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="617"/>
<location filename="../ui/controllers/importController.cpp" line="622"/>
<source>Scanned %1 of %2.</source>
<translation> %1 of %2.</translation>
</message>
<message>
<location filename="../ui/controllers/importController.cpp" line="652"/>
<location filename="../ui/controllers/importController.cpp" line="657"/>
<source>In the imported configuration, potentially dangerous lines were found:</source>
<translation type="unfinished"></translation>
</message>
@ -427,28 +427,28 @@ Already installed containers were found on the server. All installed containers
<context>
<name>NotificationHandler</name>
<message>
<location filename="../ui/notificationhandler.cpp" line="63"/>
<location filename="../ui/notificationhandler.cpp" line="70"/>
<location filename="../ui/notificationhandler.cpp" line="66"/>
<location filename="../ui/notificationhandler.cpp" line="73"/>
<source>AmneziaVPN</source>
<translation></translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="64"/>
<location filename="../ui/notificationhandler.cpp" line="67"/>
<source>VPN Connected</source>
<translation>VPN</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="71"/>
<location filename="../ui/notificationhandler.cpp" line="74"/>
<source>VPN Disconnected</source>
<translation>VPN断开</translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="94"/>
<location filename="../ui/notificationhandler.cpp" line="97"/>
<source>AmneziaVPN notification</source>
<translation>AmneziaVPN </translation>
</message>
<message>
<location filename="../ui/notificationhandler.cpp" line="95"/>
<location filename="../ui/notificationhandler.cpp" line="98"/>
<source>Unsecured network detected: </source>
<translation></translation>
</message>
@ -2673,12 +2673,12 @@ It&apos;s okay as long as it&apos;s from someone you trust.</source>
<translation type="vanished"> </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="116"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="113"/>
<source>Continue</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="144"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="141"/>
<source>All data you enter will remain strictly confidential and will not be shared or disclosed to the Amnezia or any third parties</source>
<translation> Amnezia </translation>
</message>
@ -2694,42 +2694,42 @@ and will not be shared or disclosed to the Amnezia or any third parties</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="78"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="75"/>
<source>SSH Username</source>
<translation>SSH </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="94"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="91"/>
<source>Password or SSH private key</source>
<translation> SSH </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="153"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="150"/>
<source>How to run your VPN server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="154"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="151"/>
<source>Where to get connection data, step-by-step instructions for buying a VPS</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="170"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="167"/>
<source>Ip address cannot be empty</source>
<translation>IP不能为空</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="173"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="170"/>
<source>Enter the address in the format 255.255.255.255:88</source>
<translation> 255.255.255.255:88</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="177"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="174"/>
<source>Login cannot be empty</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="181"/>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="178"/>
<source>Password/private key cannot be empty</source>
<translation></translation>
</message>
@ -3086,47 +3086,52 @@ and will not be shared or disclosed to the Amnezia or any third parties</source>
<source>Data sent: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="849"/>
<source>Allowed IPs: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Creation date: </source>
<translation type="vanished">: </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="862"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="870"/>
<source>Rename</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="908"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="916"/>
<source>Client name</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="921"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="929"/>
<source>Save</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="955"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="963"/>
<source>Revoke</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="959"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="967"/>
<source>Revoke the config for a user - %1?</source>
<translation>- %1?</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="960"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="968"/>
<source>The user will no longer be able to connect to your server.</source>
<translation>.</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="961"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="969"/>
<source>Continue</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="962"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="970"/>
<source>Cancel</source>
<translation></translation>
</message>
@ -4610,12 +4615,12 @@ While it offers a blend of security, stability, and speed, it&apos;s essential t
<context>
<name>main2</name>
<message>
<location filename="../ui/qml/main2.qml" line="162"/>
<location filename="../ui/qml/main2.qml" line="163"/>
<source>Private key passphrase</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/main2.qml" line="185"/>
<location filename="../ui/qml/main2.qml" line="186"/>
<source>Save</source>
<translation></translation>
</message>

View file

@ -24,7 +24,7 @@ PageController::PageController(const QSharedPointer<ServersModel> &serversModel,
AndroidController::instance()->setNavigationBarColor(initialPageNavigationBarColor);
#endif
#if defined Q_OS_MACX
#if defined Q_OS_MACX and !defined MACOS_NE
connect(this, &PageController::raiseMainWindow, []() { setDockIconVisible(true); });
connect(this, &PageController::hideMainWindow, []() { setDockIconVisible(false); });
#endif
@ -114,7 +114,7 @@ void PageController::showOnStartup()
} else {
#if defined(Q_OS_WIN) || (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID))
emit hideMainWindow();
#elif defined Q_OS_MACX
#elif defined Q_OS_MACX and !defined MACOS_NE
setDockIconVisible(false);
#endif
}

View file

@ -5,12 +5,15 @@
#include <QDebug>
#include "notificationhandler.h"
#if defined(Q_OS_IOS)
#if defined(Q_OS_IOS) && !defined(MACOS_NE)
# include "platforms/ios/iosnotificationhandler.h"
#elif defined(MACOS_NE)
# include "platforms/macos_ne/iosnotificationhandler.h"
#else
# include "systemtray_notificationhandler.h"
#endif
// static
NotificationHandler* NotificationHandler::create(QObject* parent) {
#if defined(Q_OS_IOS)