added getting the config from the cloud service
This commit is contained in:
parent
5c121ea48d
commit
25f8283edd
27 changed files with 399 additions and 139 deletions
|
@ -108,7 +108,7 @@ set(HEADERS ${HEADERS}
|
||||||
${CMAKE_CURRENT_LIST_DIR}/core/errorstrings.h
|
${CMAKE_CURRENT_LIST_DIR}/core/errorstrings.h
|
||||||
${CMAKE_CURRENT_LIST_DIR}/core/scripts_registry.h
|
${CMAKE_CURRENT_LIST_DIR}/core/scripts_registry.h
|
||||||
${CMAKE_CURRENT_LIST_DIR}/core/server_defs.h
|
${CMAKE_CURRENT_LIST_DIR}/core/server_defs.h
|
||||||
${CMAKE_CURRENT_LIST_DIR}/core/servercontroller.h
|
${CMAKE_CURRENT_LIST_DIR}/core/controllers/serverController.h
|
||||||
${CMAKE_CURRENT_LIST_DIR}/protocols/protocols_defs.h
|
${CMAKE_CURRENT_LIST_DIR}/protocols/protocols_defs.h
|
||||||
${CMAKE_CURRENT_LIST_DIR}/protocols/qml_register_protocols.h
|
${CMAKE_CURRENT_LIST_DIR}/protocols/qml_register_protocols.h
|
||||||
${CMAKE_CURRENT_LIST_DIR}/ui/notificationhandler.h
|
${CMAKE_CURRENT_LIST_DIR}/ui/notificationhandler.h
|
||||||
|
@ -147,7 +147,7 @@ set(SOURCES ${SOURCES}
|
||||||
${CMAKE_CURRENT_LIST_DIR}/core/errorstrings.cpp
|
${CMAKE_CURRENT_LIST_DIR}/core/errorstrings.cpp
|
||||||
${CMAKE_CURRENT_LIST_DIR}/core/scripts_registry.cpp
|
${CMAKE_CURRENT_LIST_DIR}/core/scripts_registry.cpp
|
||||||
${CMAKE_CURRENT_LIST_DIR}/core/server_defs.cpp
|
${CMAKE_CURRENT_LIST_DIR}/core/server_defs.cpp
|
||||||
${CMAKE_CURRENT_LIST_DIR}/core/servercontroller.cpp
|
${CMAKE_CURRENT_LIST_DIR}/core/controllers/serverController.cpp
|
||||||
${CMAKE_CURRENT_LIST_DIR}/protocols/protocols_defs.cpp
|
${CMAKE_CURRENT_LIST_DIR}/protocols/protocols_defs.cpp
|
||||||
${CMAKE_CURRENT_LIST_DIR}/ui/notificationhandler.cpp
|
${CMAKE_CURRENT_LIST_DIR}/ui/notificationhandler.cpp
|
||||||
${CMAKE_CURRENT_LIST_DIR}/ui/qautostart.cpp
|
${CMAKE_CURRENT_LIST_DIR}/ui/qautostart.cpp
|
||||||
|
|
|
@ -139,7 +139,8 @@ void AmneziaApplication::init()
|
||||||
&ConnectionController::openConnection);
|
&ConnectionController::openConnection);
|
||||||
connect(m_notificationHandler.get(), &NotificationHandler::disconnectRequested, m_connectionController.get(),
|
connect(m_notificationHandler.get(), &NotificationHandler::disconnectRequested, m_connectionController.get(),
|
||||||
&ConnectionController::closeConnection);
|
&ConnectionController::closeConnection);
|
||||||
connect(this, &AmneziaApplication::translationsUpdated, m_notificationHandler.get(), &NotificationHandler::onTranslationsUpdated);
|
connect(this, &AmneziaApplication::translationsUpdated, m_notificationHandler.get(),
|
||||||
|
&NotificationHandler::onTranslationsUpdated);
|
||||||
|
|
||||||
m_engine->load(url);
|
m_engine->load(url);
|
||||||
m_systemController->setQmlRoot(m_engine->rootObjects().value(0));
|
m_systemController->setQmlRoot(m_engine->rootObjects().value(0));
|
||||||
|
@ -226,14 +227,13 @@ void AmneziaApplication::loadTranslator()
|
||||||
updateTranslator(locale);
|
updateTranslator(locale);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void AmneziaApplication::updateTranslator(const QLocale &locale)
|
void AmneziaApplication::updateTranslator(const QLocale &locale)
|
||||||
{
|
{
|
||||||
if (!m_translator->isEmpty()) {
|
if (!m_translator->isEmpty()) {
|
||||||
QCoreApplication::removeTranslator(m_translator.get());
|
QCoreApplication::removeTranslator(m_translator.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
QString strFileName = QString(":/translations/amneziavpn")+QLatin1String("_")+locale.name()+".qm";
|
QString strFileName = QString(":/translations/amneziavpn") + QLatin1String("_") + locale.name() + ".qm";
|
||||||
if (m_translator->load(strFileName)) {
|
if (m_translator->load(strFileName)) {
|
||||||
if (QCoreApplication::installTranslator(m_translator.get())) {
|
if (QCoreApplication::installTranslator(m_translator.get())) {
|
||||||
m_settings->setAppLanguage(locale);
|
m_settings->setAppLanguage(locale);
|
||||||
|
@ -330,7 +330,8 @@ void AmneziaApplication::initControllers()
|
||||||
m_connectionController.reset(new ConnectionController(m_serversModel, m_containersModel, m_vpnConnection));
|
m_connectionController.reset(new ConnectionController(m_serversModel, m_containersModel, m_vpnConnection));
|
||||||
m_engine->rootContext()->setContextProperty("ConnectionController", m_connectionController.get());
|
m_engine->rootContext()->setContextProperty("ConnectionController", m_connectionController.get());
|
||||||
|
|
||||||
connect(this, &AmneziaApplication::translationsUpdated, m_connectionController.get(), &ConnectionController::onTranslationsUpdated);
|
connect(this, &AmneziaApplication::translationsUpdated, m_connectionController.get(),
|
||||||
|
&ConnectionController::onTranslationsUpdated);
|
||||||
|
|
||||||
m_pageController.reset(new PageController(m_serversModel, m_settings));
|
m_pageController.reset(new PageController(m_serversModel, m_settings));
|
||||||
m_engine->rootContext()->setContextProperty("PageController", m_pageController.get());
|
m_engine->rootContext()->setContextProperty("PageController", m_pageController.get());
|
||||||
|
@ -361,4 +362,10 @@ void AmneziaApplication::initControllers()
|
||||||
|
|
||||||
m_systemController.reset(new SystemController(m_settings));
|
m_systemController.reset(new SystemController(m_settings));
|
||||||
m_engine->rootContext()->setContextProperty("SystemController", m_systemController.get());
|
m_engine->rootContext()->setContextProperty("SystemController", m_systemController.get());
|
||||||
|
|
||||||
|
m_cloudController.reset(new CloudController(m_serversModel, m_containersModel));
|
||||||
|
m_engine->rootContext()->setContextProperty("CloudController", m_cloudController.get());
|
||||||
|
|
||||||
|
connect(m_cloudController.get(), &CloudController::serverConfigUpdated, this,
|
||||||
|
[this]() { m_containersModel->setCurrentlyProcessedServerIndex(m_serversModel->getDefaultServerIndex()); });
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include "ui/controllers/settingsController.h"
|
#include "ui/controllers/settingsController.h"
|
||||||
#include "ui/controllers/sitesController.h"
|
#include "ui/controllers/sitesController.h"
|
||||||
#include "ui/controllers/systemController.h"
|
#include "ui/controllers/systemController.h"
|
||||||
|
#include "ui/controllers/cloudController.h"
|
||||||
#include "ui/models/containers_model.h"
|
#include "ui/models/containers_model.h"
|
||||||
#include "ui/models/languageModel.h"
|
#include "ui/models/languageModel.h"
|
||||||
#include "ui/models/protocols/cloakConfigModel.h"
|
#include "ui/models/protocols/cloakConfigModel.h"
|
||||||
|
@ -116,6 +117,7 @@ private:
|
||||||
QScopedPointer<SettingsController> m_settingsController;
|
QScopedPointer<SettingsController> m_settingsController;
|
||||||
QScopedPointer<SitesController> m_sitesController;
|
QScopedPointer<SitesController> m_sitesController;
|
||||||
QScopedPointer<SystemController> m_systemController;
|
QScopedPointer<SystemController> m_systemController;
|
||||||
|
QScopedPointer<CloudController> m_cloudController;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // AMNEZIA_APPLICATION_H
|
#endif // AMNEZIA_APPLICATION_H
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
|
|
||||||
#include "core/servercontroller.h"
|
#include "core/controllers/serverController.h"
|
||||||
#include "containers/containers_defs.h"
|
#include "containers/containers_defs.h"
|
||||||
|
|
||||||
CloakConfigurator::CloakConfigurator(std::shared_ptr<Settings> settings, QObject *parent):
|
CloakConfigurator::CloakConfigurator(std::shared_ptr<Settings> settings, QObject *parent):
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
#include "containers/containers_defs.h"
|
#include "containers/containers_defs.h"
|
||||||
#include "core/scripts_registry.h"
|
#include "core/scripts_registry.h"
|
||||||
#include "core/server_defs.h"
|
#include "core/server_defs.h"
|
||||||
#include "core/servercontroller.h"
|
#include "core/controllers/serverController.h"
|
||||||
#include "utilities.h"
|
#include "utilities.h"
|
||||||
|
|
||||||
Ikev2Configurator::Ikev2Configurator(std::shared_ptr<Settings> settings, QObject *parent)
|
Ikev2Configurator::Ikev2Configurator(std::shared_ptr<Settings> settings, QObject *parent)
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
#include "containers/containers_defs.h"
|
#include "containers/containers_defs.h"
|
||||||
#include "core/scripts_registry.h"
|
#include "core/scripts_registry.h"
|
||||||
#include "core/server_defs.h"
|
#include "core/server_defs.h"
|
||||||
#include "core/servercontroller.h"
|
#include "core/controllers/serverController.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
#include "utilities.h"
|
#include "utilities.h"
|
||||||
|
|
||||||
|
|
|
@ -32,9 +32,9 @@ public:
|
||||||
ErrorCode signCert(DockerContainer container,
|
ErrorCode signCert(DockerContainer container,
|
||||||
const ServerCredentials &credentials, QString clientId);
|
const ServerCredentials &credentials, QString clientId);
|
||||||
|
|
||||||
private:
|
static ConnectionData createCertRequest();
|
||||||
ConnectionData createCertRequest();
|
|
||||||
|
|
||||||
|
private:
|
||||||
ConnectionData prepareOpenVpnConfig(const ServerCredentials &credentials,
|
ConnectionData prepareOpenVpnConfig(const ServerCredentials &credentials,
|
||||||
DockerContainer container, ErrorCode *errorCode = nullptr);
|
DockerContainer container, ErrorCode *errorCode = nullptr);
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
|
|
||||||
#include "containers/containers_defs.h"
|
#include "containers/containers_defs.h"
|
||||||
#include "core/servercontroller.h"
|
#include "core/controllers/serverController.h"
|
||||||
|
|
||||||
ShadowSocksConfigurator::ShadowSocksConfigurator(std::shared_ptr<Settings> settings, QObject *parent):
|
ShadowSocksConfigurator::ShadowSocksConfigurator(std::shared_ptr<Settings> settings, QObject *parent):
|
||||||
ConfiguratorBase(settings, parent)
|
ConfiguratorBase(settings, parent)
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
#include "containers/containers_defs.h"
|
#include "containers/containers_defs.h"
|
||||||
#include "core/scripts_registry.h"
|
#include "core/scripts_registry.h"
|
||||||
#include "core/server_defs.h"
|
#include "core/server_defs.h"
|
||||||
#include "core/servercontroller.h"
|
#include "core/controllers/serverController.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
#include "utilities.h"
|
#include "utilities.h"
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ QVector<amnezia::Proto> ContainerProps::protocolsForContainer(amnezia::DockerCon
|
||||||
|
|
||||||
case DockerContainer::ShadowSocks: return { Proto::OpenVpn, Proto::ShadowSocks };
|
case DockerContainer::ShadowSocks: return { Proto::OpenVpn, Proto::ShadowSocks };
|
||||||
|
|
||||||
case DockerContainer::Cloak: return { Proto::OpenVpn, Proto::ShadowSocks, Proto::Cloak };
|
case DockerContainer::Cloak: return { Proto::OpenVpn, /*Proto::ShadowSocks,*/ Proto::Cloak };
|
||||||
|
|
||||||
case DockerContainer::Ipsec: return { Proto::Ikev2 /*, Protocol::L2tp */ };
|
case DockerContainer::Ipsec: return { Proto::Ikev2 /*, Protocol::L2tp */ };
|
||||||
|
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
|
|
||||||
#include "containers/containers_defs.h"
|
#include "containers/containers_defs.h"
|
||||||
#include "logger.h"
|
#include "logger.h"
|
||||||
#include "scripts_registry.h"
|
#include "core/scripts_registry.h"
|
||||||
#include "server_defs.h"
|
#include "core/server_defs.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
#include "utilities.h"
|
#include "utilities.h"
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
#include "containers/containers_defs.h"
|
#include "containers/containers_defs.h"
|
||||||
#include "defs.h"
|
#include "core/defs.h"
|
||||||
#include "sshclient.h"
|
#include "core/sshclient.h"
|
||||||
|
|
||||||
class Settings;
|
class Settings;
|
||||||
class VpnConfigurator;
|
class VpnConfigurator;
|
|
@ -58,7 +58,7 @@ QString errorString(ErrorCode code){
|
||||||
case (OpenVpnTapAdapterError): return QObject::tr("Can't setup OpenVPN TAP network adapter");
|
case (OpenVpnTapAdapterError): return QObject::tr("Can't setup OpenVPN TAP network adapter");
|
||||||
case (AddressPoolError): return QObject::tr("VPN pool error: no available addresses");
|
case (AddressPoolError): return QObject::tr("VPN pool error: no available addresses");
|
||||||
|
|
||||||
case (ImportInvalidConfigError): return QObject::tr("The config does not contain any containers and credentiaks for connecting to the server");
|
case (ImportInvalidConfigError): return QObject::tr("The config does not contain any containers and credentials for connecting to the server");
|
||||||
|
|
||||||
case(InternalError):
|
case(InternalError):
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -214,7 +214,7 @@ ErrorCode OpenVpnProtocol::start()
|
||||||
m_openVpnProcess->setProgram(PermittedProcess::OpenVPN);
|
m_openVpnProcess->setProgram(PermittedProcess::OpenVPN);
|
||||||
QStringList arguments({
|
QStringList arguments({
|
||||||
"--config", configPath(), "--management", m_managementHost, QString::number(mgmtPort),
|
"--config", configPath(), "--management", m_managementHost, QString::number(mgmtPort),
|
||||||
"--management-client" /*, "--log", vpnLogFileNamePath */
|
"--management-client" , "--log", "/Users/nethius/Documents/git/log"
|
||||||
});
|
});
|
||||||
m_openVpnProcess->setArguments(arguments);
|
m_openVpnProcess->setArguments(arguments);
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,13 @@ namespace amnezia
|
||||||
constexpr char cloak[] = "cloak";
|
constexpr char cloak[] = "cloak";
|
||||||
constexpr char sftp[] = "sftp";
|
constexpr char sftp[] = "sftp";
|
||||||
|
|
||||||
}
|
constexpr char configVersion[] = "config_version";
|
||||||
|
constexpr char apiEdnpoint[] = "api_endpoint";
|
||||||
|
constexpr char serviceTypeId[] = "service_type_id";
|
||||||
|
constexpr char accessToken[] = "access_token";
|
||||||
|
constexpr char certificate[] = "certificate";
|
||||||
|
constexpr char publicKey[] = "public_key";
|
||||||
|
}
|
||||||
|
|
||||||
namespace protocols
|
namespace protocols
|
||||||
{
|
{
|
||||||
|
|
|
@ -23,44 +23,52 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>CloudController</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../ui/controllers/cloudController.cpp" line="102"/>
|
||||||
|
<source>Error when retrieving configuration from cloud server</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>ConnectionController</name>
|
<name>ConnectionController</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/connectionController.cpp" line="55"/>
|
<location filename="../ui/controllers/connectionController.cpp" line="38"/>
|
||||||
<source>VPN Protocols is not installed.
|
<source>VPN Protocols is not installed.
|
||||||
Please install VPN container at first</source>
|
Please install VPN container at first</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/connectionController.cpp" line="78"/>
|
<location filename="../ui/controllers/connectionController.cpp" line="62"/>
|
||||||
<source>Connection...</source>
|
<source>Connection...</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/connectionController.cpp" line="83"/>
|
<location filename="../ui/controllers/connectionController.cpp" line="67"/>
|
||||||
<source>Connected</source>
|
<source>Connected</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/connectionController.cpp" line="128"/>
|
<location filename="../ui/controllers/connectionController.cpp" line="112"/>
|
||||||
<source>Settings updated successfully, Reconnnection...</source>
|
<source>Settings updated successfully, Reconnnection...</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/connectionController.cpp" line="92"/>
|
<location filename="../ui/controllers/connectionController.cpp" line="76"/>
|
||||||
<source>Reconnection...</source>
|
<source>Reconnection...</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/connectionController.h" line="58"/>
|
<location filename="../ui/controllers/connectionController.h" line="58"/>
|
||||||
<location filename="../ui/controllers/connectionController.cpp" line="97"/>
|
<location filename="../ui/controllers/connectionController.cpp" line="81"/>
|
||||||
<location filename="../ui/controllers/connectionController.cpp" line="111"/>
|
<location filename="../ui/controllers/connectionController.cpp" line="95"/>
|
||||||
<location filename="../ui/controllers/connectionController.cpp" line="117"/>
|
<location filename="../ui/controllers/connectionController.cpp" line="101"/>
|
||||||
<source>Connect</source>
|
<source>Connect</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/connectionController.cpp" line="102"/>
|
<location filename="../ui/controllers/connectionController.cpp" line="86"/>
|
||||||
<source>Disconnection...</source>
|
<source>Disconnection...</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -130,7 +138,7 @@
|
||||||
<context>
|
<context>
|
||||||
<name>ImportController</name>
|
<name>ImportController</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/importController.cpp" line="384"/>
|
<location filename="../ui/controllers/importController.cpp" line="381"/>
|
||||||
<source>Scanned %1 of %2.</source>
|
<source>Scanned %1 of %2.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -139,50 +147,55 @@
|
||||||
<name>InstallController</name>
|
<name>InstallController</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="110"/>
|
<location filename="../ui/controllers/installController.cpp" line="110"/>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="162"/>
|
<location filename="../ui/controllers/installController.cpp" line="161"/>
|
||||||
<source>%1 installed successfully. </source>
|
<source>%1 installed successfully. </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="112"/>
|
<location filename="../ui/controllers/installController.cpp" line="112"/>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="164"/>
|
<location filename="../ui/controllers/installController.cpp" line="163"/>
|
||||||
<source>%1 is already installed on the server. </source>
|
<source>%1 is already installed on the server. </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="115"/>
|
<location filename="../ui/controllers/installController.cpp" line="115"/>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="183"/>
|
<source>
|
||||||
|
Added containers that were already installed on the server</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../ui/controllers/installController.cpp" line="182"/>
|
||||||
<source>
|
<source>
|
||||||
Already installed containers were found on the server. All installed containers have been added to the application</source>
|
Already installed containers were found on the server. All installed containers have been added to the application</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="264"/>
|
<location filename="../ui/controllers/installController.cpp" line="263"/>
|
||||||
<source>Settings updated successfully</source>
|
<source>Settings updated successfully</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="279"/>
|
<location filename="../ui/controllers/installController.cpp" line="278"/>
|
||||||
<source>Server '%1' was removed</source>
|
<source>Server '%1' was removed</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="289"/>
|
<location filename="../ui/controllers/installController.cpp" line="288"/>
|
||||||
<source>All containers from server '%1' have been removed</source>
|
<source>All containers from server '%1' have been removed</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="306"/>
|
<location filename="../ui/controllers/installController.cpp" line="305"/>
|
||||||
<source>%1 has been removed from the server '%2'</source>
|
<source>%1 has been removed from the server '%2'</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="452"/>
|
<location filename="../ui/controllers/installController.cpp" line="451"/>
|
||||||
<source>Please login as the user</source>
|
<source>Please login as the user</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="479"/>
|
<location filename="../ui/controllers/installController.cpp" line="478"/>
|
||||||
<source>Server added successfully</source>
|
<source>Server added successfully</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -250,12 +263,12 @@ Already installed containers were found on the server. All installed containers
|
||||||
<context>
|
<context>
|
||||||
<name>PageHome</name>
|
<name>PageHome</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageHome.qml" line="193"/>
|
<location filename="../ui/qml/Pages2/PageHome.qml" line="324"/>
|
||||||
<source>VPN protocol</source>
|
<source>VPN protocol</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageHome.qml" line="238"/>
|
<location filename="../ui/qml/Pages2/PageHome.qml" line="370"/>
|
||||||
<source>Servers</source>
|
<source>Servers</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -865,71 +878,76 @@ And if you don't like the app, all the more support it - the donation will
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="52"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="52"/>
|
||||||
|
<source>Allow application screenshots</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="72"/>
|
||||||
<source>Auto start</source>
|
<source>Auto start</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="53"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="73"/>
|
||||||
<source>Launch the application every time </source>
|
<source>Launch the application every time </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="53"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="73"/>
|
||||||
<source> starts</source>
|
<source> starts</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="73"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="93"/>
|
||||||
<source>Start minimized</source>
|
<source>Start minimized</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="74"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="94"/>
|
||||||
<source>Launch application minimized</source>
|
<source>Launch application minimized</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="91"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="111"/>
|
||||||
<source>Language</source>
|
<source>Language</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="110"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="130"/>
|
||||||
<source>Logging</source>
|
<source>Logging</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="111"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="131"/>
|
||||||
<source>Enabled</source>
|
<source>Enabled</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="111"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="131"/>
|
||||||
<source>Disabled</source>
|
<source>Disabled</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="124"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="144"/>
|
||||||
<source>Reset settings and remove all data from the application</source>
|
<source>Reset settings and remove all data from the application</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="128"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="148"/>
|
||||||
<source>Reset settings and remove all data from the application?</source>
|
<source>Reset settings and remove all data from the application?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="129"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="149"/>
|
||||||
<source>All settings will be reset to default. All installed AmneziaVPN services will still remain on the server.</source>
|
<source>All settings will be reset to default. All installed AmneziaVPN services will still remain on the server.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="130"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="150"/>
|
||||||
<source>Continue</source>
|
<source>Continue</source>
|
||||||
<translation type="unfinished">Продолжить</translation>
|
<translation type="unfinished">Продолжить</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="131"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="151"/>
|
||||||
<source>Cancel</source>
|
<source>Cancel</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -1525,17 +1543,17 @@ It's okay as long as it's from someone you trust.</source>
|
||||||
<context>
|
<context>
|
||||||
<name>PageSetupWizardEasy</name>
|
<name>PageSetupWizardEasy</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSetupWizardEasy.qml" line="66"/>
|
<location filename="../ui/qml/Pages2/PageSetupWizardEasy.qml" line="67"/>
|
||||||
<source>What is the level of internet control in your region?</source>
|
<source>What is the level of internet control in your region?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSetupWizardEasy.qml" line="136"/>
|
<location filename="../ui/qml/Pages2/PageSetupWizardEasy.qml" line="137"/>
|
||||||
<source>Set up a VPN yourself</source>
|
<source>Set up a VPN yourself</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSetupWizardEasy.qml" line="137"/>
|
<location filename="../ui/qml/Pages2/PageSetupWizardEasy.qml" line="138"/>
|
||||||
<source>I want to choose a VPN protocol</source>
|
<source>I want to choose a VPN protocol</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -1545,7 +1563,7 @@ It's okay as long as it's from someone you trust.</source>
|
||||||
<translation type="unfinished">Продолжить</translation>
|
<translation type="unfinished">Продолжить</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSetupWizardEasy.qml" line="186"/>
|
<location filename="../ui/qml/Pages2/PageSetupWizardEasy.qml" line="197"/>
|
||||||
<source>Set up later</source>
|
<source>Set up later</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -1765,13 +1783,17 @@ It's okay as long as it's from someone you trust.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageShare.qml" line="306"/>
|
<location filename="../ui/qml/Pages2/PageShare.qml" line="222"/>
|
||||||
|
<source>File with accessing settings to </source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../ui/qml/Pages2/PageShare.qml" line="309"/>
|
||||||
<source>Connection to </source>
|
<source>Connection to </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageShare.qml" line="222"/>
|
<location filename="../ui/qml/Pages2/PageShare.qml" line="310"/>
|
||||||
<location filename="../ui/qml/Pages2/PageShare.qml" line="307"/>
|
|
||||||
<source>File with connection settings to </source>
|
<source>File with connection settings to </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -1801,23 +1823,19 @@ It's okay as long as it's from someone you trust.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageShare.qml" line="248"/>
|
<location filename="../ui/qml/Pages2/PageShare.qml" line="251"/>
|
||||||
<source>Protocols</source>
|
<location filename="../ui/qml/Pages2/PageShare.qml" line="252"/>
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../ui/qml/Pages2/PageShare.qml" line="249"/>
|
|
||||||
<source>Protocol</source>
|
<source>Protocol</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageShare.qml" line="340"/>
|
<location filename="../ui/qml/Pages2/PageShare.qml" line="343"/>
|
||||||
<location filename="../ui/qml/Pages2/PageShare.qml" line="341"/>
|
<location filename="../ui/qml/Pages2/PageShare.qml" line="344"/>
|
||||||
<source>Connection format</source>
|
<source>Connection format</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageShare.qml" line="379"/>
|
<location filename="../ui/qml/Pages2/PageShare.qml" line="382"/>
|
||||||
<source>Share</source>
|
<source>Share</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -2264,7 +2282,7 @@ It's okay as long as it's from someone you trust.</source>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../core/errorstrings.cpp" line="61"/>
|
<location filename="../core/errorstrings.cpp" line="61"/>
|
||||||
<source>The config does not contain any containers and credentiaks for connecting to the server</source>
|
<source>The config does not contain any containers and credentials for connecting to the server</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
|
@ -2433,6 +2451,16 @@ It's okay as long as it's from someone you trust.</source>
|
||||||
<source>error 0x%1: %2</source>
|
<source>error 0x%1: %2</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../3rd/wireguard-tools/contrib/highlighter/gui/highlight.cpp" line="39"/>
|
||||||
|
<source>WireGuard Configuration Highlighter</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../3rd/wireguard-tools/contrib/highlighter/gui/highlight.cpp" line="82"/>
|
||||||
|
<source>&Randomize colors</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>SelectLanguageDrawer</name>
|
<name>SelectLanguageDrawer</name>
|
||||||
|
@ -2459,22 +2487,22 @@ It's okay as long as it's from someone you trust.</source>
|
||||||
<context>
|
<context>
|
||||||
<name>SettingsController</name>
|
<name>SettingsController</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/settingsController.cpp" line="20"/>
|
<location filename="../ui/controllers/settingsController.cpp" line="25"/>
|
||||||
<source>Software version</source>
|
<source>Software version</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/settingsController.cpp" line="117"/>
|
<location filename="../ui/controllers/settingsController.cpp" line="136"/>
|
||||||
<source>All settings have been reset to default values</source>
|
<source>All settings have been reset to default values</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/settingsController.cpp" line="123"/>
|
<location filename="../ui/controllers/settingsController.cpp" line="142"/>
|
||||||
<source>Cached profiles cleared</source>
|
<source>Cached profiles cleared</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/settingsController.cpp" line="102"/>
|
<location filename="../ui/controllers/settingsController.cpp" line="121"/>
|
||||||
<source>Backup file is corrupted</source>
|
<source>Backup file is corrupted</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -2504,7 +2532,7 @@ It's okay as long as it's from someone you trust.</source>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Components/ShareConnectionDrawer.qml" line="126"/>
|
<location filename="../ui/qml/Components/ShareConnectionDrawer.qml" line="126"/>
|
||||||
<source>Show content</source>
|
<source>Show connection settings</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
|
@ -2592,7 +2620,7 @@ It's okay as long as it's from someone you trust.</source>
|
||||||
<context>
|
<context>
|
||||||
<name>VpnConnection</name>
|
<name>VpnConnection</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../vpnconnection.cpp" line="405"/>
|
<location filename="../vpnconnection.cpp" line="403"/>
|
||||||
<source>Mbps</source>
|
<source>Mbps</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
|
|
@ -23,44 +23,52 @@
|
||||||
<translation type="unfinished">VPN已连接</translation>
|
<translation type="unfinished">VPN已连接</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>CloudController</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../ui/controllers/cloudController.cpp" line="102"/>
|
||||||
|
<source>Error when retrieving configuration from cloud server</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>ConnectionController</name>
|
<name>ConnectionController</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/connectionController.h" line="58"/>
|
<location filename="../ui/controllers/connectionController.h" line="58"/>
|
||||||
<location filename="../ui/controllers/connectionController.cpp" line="97"/>
|
<location filename="../ui/controllers/connectionController.cpp" line="81"/>
|
||||||
<location filename="../ui/controllers/connectionController.cpp" line="111"/>
|
<location filename="../ui/controllers/connectionController.cpp" line="95"/>
|
||||||
<location filename="../ui/controllers/connectionController.cpp" line="117"/>
|
<location filename="../ui/controllers/connectionController.cpp" line="101"/>
|
||||||
<source>Connect</source>
|
<source>Connect</source>
|
||||||
<translation type="unfinished">连接</translation>
|
<translation type="unfinished">连接</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/connectionController.cpp" line="55"/>
|
<location filename="../ui/controllers/connectionController.cpp" line="38"/>
|
||||||
<source>VPN Protocols is not installed.
|
<source>VPN Protocols is not installed.
|
||||||
Please install VPN container at first</source>
|
Please install VPN container at first</source>
|
||||||
<translation type="unfinished">不存在VPN协议,请先安装</translation>
|
<translation type="unfinished">不存在VPN协议,请先安装</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/connectionController.cpp" line="78"/>
|
<location filename="../ui/controllers/connectionController.cpp" line="62"/>
|
||||||
<source>Connection...</source>
|
<source>Connection...</source>
|
||||||
<translation type="unfinished">连接中</translation>
|
<translation type="unfinished">连接中</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/connectionController.cpp" line="83"/>
|
<location filename="../ui/controllers/connectionController.cpp" line="67"/>
|
||||||
<source>Connected</source>
|
<source>Connected</source>
|
||||||
<translation type="unfinished">已连接</translation>
|
<translation type="unfinished">已连接</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/connectionController.cpp" line="92"/>
|
<location filename="../ui/controllers/connectionController.cpp" line="76"/>
|
||||||
<source>Reconnection...</source>
|
<source>Reconnection...</source>
|
||||||
<translation type="unfinished">重连中</translation>
|
<translation type="unfinished">重连中</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/connectionController.cpp" line="102"/>
|
<location filename="../ui/controllers/connectionController.cpp" line="86"/>
|
||||||
<source>Disconnection...</source>
|
<source>Disconnection...</source>
|
||||||
<translation type="unfinished">断开中</translation>
|
<translation type="unfinished">断开中</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/connectionController.cpp" line="128"/>
|
<location filename="../ui/controllers/connectionController.cpp" line="112"/>
|
||||||
<source>Settings updated successfully, Reconnnection...</source>
|
<source>Settings updated successfully, Reconnnection...</source>
|
||||||
<translation type="unfinished">配置已更新,重连中</translation>
|
<translation type="unfinished">配置已更新,重连中</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -130,7 +138,7 @@
|
||||||
<context>
|
<context>
|
||||||
<name>ImportController</name>
|
<name>ImportController</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/importController.cpp" line="384"/>
|
<location filename="../ui/controllers/importController.cpp" line="381"/>
|
||||||
<source>Scanned %1 of %2.</source>
|
<source>Scanned %1 of %2.</source>
|
||||||
<translation type="unfinished">扫描 %1 of %2.</translation>
|
<translation type="unfinished">扫描 %1 of %2.</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -147,41 +155,46 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="110"/>
|
<location filename="../ui/controllers/installController.cpp" line="110"/>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="162"/>
|
<location filename="../ui/controllers/installController.cpp" line="161"/>
|
||||||
<source>%1 installed successfully. </source>
|
<source>%1 installed successfully. </source>
|
||||||
<translation type="unfinished">%1 安装成功。</translation>
|
<translation type="unfinished">%1 安装成功。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="112"/>
|
<location filename="../ui/controllers/installController.cpp" line="112"/>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="164"/>
|
<location filename="../ui/controllers/installController.cpp" line="163"/>
|
||||||
<source>%1 is already installed on the server. </source>
|
<source>%1 is already installed on the server. </source>
|
||||||
<translation type="unfinished">服务器上已经安装 %1。</translation>
|
<translation type="unfinished">服务器上已经安装 %1。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="115"/>
|
<location filename="../ui/controllers/installController.cpp" line="115"/>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="183"/>
|
<source>
|
||||||
|
Added containers that were already installed on the server</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../ui/controllers/installController.cpp" line="182"/>
|
||||||
<source>
|
<source>
|
||||||
Already installed containers were found on the server. All installed containers have been added to the application</source>
|
Already installed containers were found on the server. All installed containers have been added to the application</source>
|
||||||
<translation type="unfinished">
|
<translation type="unfinished">
|
||||||
在服务上发现已经安装协议并添加到应用程序</translation>
|
在服务上发现已经安装协议并添加到应用程序</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="264"/>
|
<location filename="../ui/controllers/installController.cpp" line="263"/>
|
||||||
<source>Settings updated successfully</source>
|
<source>Settings updated successfully</source>
|
||||||
<translation type="unfinished">配置更新成功</translation>
|
<translation type="unfinished">配置更新成功</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="279"/>
|
<location filename="../ui/controllers/installController.cpp" line="278"/>
|
||||||
<source>Server '%1' was removed</source>
|
<source>Server '%1' was removed</source>
|
||||||
<translation type="unfinished">已移除服务器 '%1'</translation>
|
<translation type="unfinished">已移除服务器 '%1'</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="289"/>
|
<location filename="../ui/controllers/installController.cpp" line="288"/>
|
||||||
<source>All containers from server '%1' have been removed</source>
|
<source>All containers from server '%1' have been removed</source>
|
||||||
<translation type="unfinished">服务器 '%1' 的所有容器已移除</translation>
|
<translation type="unfinished">服务器 '%1' 的所有容器已移除</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="306"/>
|
<location filename="../ui/controllers/installController.cpp" line="305"/>
|
||||||
<source>%1 has been removed from the server '%2'</source>
|
<source>%1 has been removed from the server '%2'</source>
|
||||||
<translation type="unfinished">%1 已从服务器 '%2' 上移除</translation>
|
<translation type="unfinished">%1 已从服务器 '%2' 上移除</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -202,12 +215,12 @@ Already installed containers were found on the server. All installed containers
|
||||||
<translation type="obsolete"> 协议已从</translation>
|
<translation type="obsolete"> 协议已从</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="452"/>
|
<location filename="../ui/controllers/installController.cpp" line="451"/>
|
||||||
<source>Please login as the user</source>
|
<source>Please login as the user</source>
|
||||||
<translation type="unfinished">请以用户身份登录</translation>
|
<translation type="unfinished">请以用户身份登录</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/installController.cpp" line="479"/>
|
<location filename="../ui/controllers/installController.cpp" line="478"/>
|
||||||
<source>Server added successfully</source>
|
<source>Server added successfully</source>
|
||||||
<translation type="unfinished">服务器添加成功</translation>
|
<translation type="unfinished">服务器添加成功</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -275,12 +288,12 @@ Already installed containers were found on the server. All installed containers
|
||||||
<context>
|
<context>
|
||||||
<name>PageHome</name>
|
<name>PageHome</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageHome.qml" line="193"/>
|
<location filename="../ui/qml/Pages2/PageHome.qml" line="324"/>
|
||||||
<source>VPN protocol</source>
|
<source>VPN protocol</source>
|
||||||
<translation type="unfinished">VPN协议</translation>
|
<translation type="unfinished">VPN协议</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageHome.qml" line="238"/>
|
<location filename="../ui/qml/Pages2/PageHome.qml" line="370"/>
|
||||||
<source>Servers</source>
|
<source>Servers</source>
|
||||||
<translation type="unfinished">服务器</translation>
|
<translation type="unfinished">服务器</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -892,71 +905,76 @@ And if you don't like the app, all the more support it - the donation will
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="52"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="52"/>
|
||||||
|
<source>Allow application screenshots</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="72"/>
|
||||||
<source>Auto start</source>
|
<source>Auto start</source>
|
||||||
<translation type="unfinished">自动运行</translation>
|
<translation type="unfinished">自动运行</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="53"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="73"/>
|
||||||
<source>Launch the application every time </source>
|
<source>Launch the application every time </source>
|
||||||
<translation type="unfinished">总是在系统 </translation>
|
<translation type="unfinished">总是在系统 </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="53"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="73"/>
|
||||||
<source> starts</source>
|
<source> starts</source>
|
||||||
<translation type="unfinished"> 启动时自动运行运用程序</translation>
|
<translation type="unfinished"> 启动时自动运行运用程序</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="73"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="93"/>
|
||||||
<source>Start minimized</source>
|
<source>Start minimized</source>
|
||||||
<translation type="unfinished">最小化</translation>
|
<translation type="unfinished">最小化</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="74"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="94"/>
|
||||||
<source>Launch application minimized</source>
|
<source>Launch application minimized</source>
|
||||||
<translation type="unfinished">开启应用程序时窗口最小化</translation>
|
<translation type="unfinished">开启应用程序时窗口最小化</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="91"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="111"/>
|
||||||
<source>Language</source>
|
<source>Language</source>
|
||||||
<translation type="unfinished">语言</translation>
|
<translation type="unfinished">语言</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="110"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="130"/>
|
||||||
<source>Logging</source>
|
<source>Logging</source>
|
||||||
<translation type="unfinished">日志</translation>
|
<translation type="unfinished">日志</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="111"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="131"/>
|
||||||
<source>Enabled</source>
|
<source>Enabled</source>
|
||||||
<translation type="unfinished">开启</translation>
|
<translation type="unfinished">开启</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="111"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="131"/>
|
||||||
<source>Disabled</source>
|
<source>Disabled</source>
|
||||||
<translation type="unfinished">禁用</translation>
|
<translation type="unfinished">禁用</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="124"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="144"/>
|
||||||
<source>Reset settings and remove all data from the application</source>
|
<source>Reset settings and remove all data from the application</source>
|
||||||
<translation type="unfinished">重置并清理应用的所有数据</translation>
|
<translation type="unfinished">重置并清理应用的所有数据</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="128"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="148"/>
|
||||||
<source>Reset settings and remove all data from the application?</source>
|
<source>Reset settings and remove all data from the application?</source>
|
||||||
<translation type="unfinished">重置并清理应用的所有数据?</translation>
|
<translation type="unfinished">重置并清理应用的所有数据?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="129"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="149"/>
|
||||||
<source>All settings will be reset to default. All installed AmneziaVPN services will still remain on the server.</source>
|
<source>All settings will be reset to default. All installed AmneziaVPN services will still remain on the server.</source>
|
||||||
<translation type="unfinished">所有配置恢复为默认值。在服务器上保留所有已安装的AmneziaVPN服务。</translation>
|
<translation type="unfinished">所有配置恢复为默认值。在服务器上保留所有已安装的AmneziaVPN服务。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="130"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="150"/>
|
||||||
<source>Continue</source>
|
<source>Continue</source>
|
||||||
<translation type="unfinished">继续</translation>
|
<translation type="unfinished">继续</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="131"/>
|
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="151"/>
|
||||||
<source>Cancel</source>
|
<source>Cancel</source>
|
||||||
<translation type="unfinished">取消</translation>
|
<translation type="unfinished">取消</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -1561,17 +1579,17 @@ It's okay as long as it's from someone you trust.</source>
|
||||||
<context>
|
<context>
|
||||||
<name>PageSetupWizardEasy</name>
|
<name>PageSetupWizardEasy</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSetupWizardEasy.qml" line="66"/>
|
<location filename="../ui/qml/Pages2/PageSetupWizardEasy.qml" line="67"/>
|
||||||
<source>What is the level of internet control in your region?</source>
|
<source>What is the level of internet control in your region?</source>
|
||||||
<translation type="unfinished">您所在地区的互联网控制力度如何?</translation>
|
<translation type="unfinished">您所在地区的互联网控制力度如何?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSetupWizardEasy.qml" line="136"/>
|
<location filename="../ui/qml/Pages2/PageSetupWizardEasy.qml" line="137"/>
|
||||||
<source>Set up a VPN yourself</source>
|
<source>Set up a VPN yourself</source>
|
||||||
<translation type="unfinished">自己架设VPN</translation>
|
<translation type="unfinished">自己架设VPN</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSetupWizardEasy.qml" line="137"/>
|
<location filename="../ui/qml/Pages2/PageSetupWizardEasy.qml" line="138"/>
|
||||||
<source>I want to choose a VPN protocol</source>
|
<source>I want to choose a VPN protocol</source>
|
||||||
<translation type="unfinished">我想选择VPN协议</translation>
|
<translation type="unfinished">我想选择VPN协议</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -1581,7 +1599,7 @@ It's okay as long as it's from someone you trust.</source>
|
||||||
<translation type="unfinished">继续</translation>
|
<translation type="unfinished">继续</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageSetupWizardEasy.qml" line="186"/>
|
<location filename="../ui/qml/Pages2/PageSetupWizardEasy.qml" line="197"/>
|
||||||
<source>Set up later</source>
|
<source>Set up later</source>
|
||||||
<translation type="unfinished">稍后设置</translation>
|
<translation type="unfinished">稍后设置</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -1827,33 +1845,37 @@ It's okay as long as it's from someone you trust.</source>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageShare.qml" line="222"/>
|
<location filename="../ui/qml/Pages2/PageShare.qml" line="222"/>
|
||||||
<location filename="../ui/qml/Pages2/PageShare.qml" line="307"/>
|
<source>File with accessing settings to </source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../ui/qml/Pages2/PageShare.qml" line="310"/>
|
||||||
<source>File with connection settings to </source>
|
<source>File with connection settings to </source>
|
||||||
<translation type="unfinished">连接配置文件的内容为:</translation>
|
<translation type="unfinished">连接配置文件的内容为:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageShare.qml" line="248"/>
|
|
||||||
<source>Protocols</source>
|
<source>Protocols</source>
|
||||||
<translation type="unfinished">协议</translation>
|
<translation type="obsolete">协议</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageShare.qml" line="249"/>
|
<location filename="../ui/qml/Pages2/PageShare.qml" line="251"/>
|
||||||
|
<location filename="../ui/qml/Pages2/PageShare.qml" line="252"/>
|
||||||
<source>Protocol</source>
|
<source>Protocol</source>
|
||||||
<translation type="unfinished">协议</translation>
|
<translation type="unfinished">协议</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageShare.qml" line="306"/>
|
<location filename="../ui/qml/Pages2/PageShare.qml" line="309"/>
|
||||||
<source>Connection to </source>
|
<source>Connection to </source>
|
||||||
<translation type="unfinished">连接到</translation>
|
<translation type="unfinished">连接到</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageShare.qml" line="340"/>
|
<location filename="../ui/qml/Pages2/PageShare.qml" line="343"/>
|
||||||
<location filename="../ui/qml/Pages2/PageShare.qml" line="341"/>
|
<location filename="../ui/qml/Pages2/PageShare.qml" line="344"/>
|
||||||
<source>Connection format</source>
|
<source>Connection format</source>
|
||||||
<translation type="unfinished">连接方式</translation>
|
<translation type="unfinished">连接方式</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Pages2/PageShare.qml" line="379"/>
|
<location filename="../ui/qml/Pages2/PageShare.qml" line="382"/>
|
||||||
<source>Share</source>
|
<source>Share</source>
|
||||||
<translation type="unfinished">共享</translation>
|
<translation type="unfinished">共享</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -2305,8 +2327,12 @@ It's okay as long as it's from someone you trust.</source>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../core/errorstrings.cpp" line="61"/>
|
<location filename="../core/errorstrings.cpp" line="61"/>
|
||||||
|
<source>The config does not contain any containers and credentials for connecting to the server</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
<source>The config does not contain any containers and credentiaks for connecting to the server</source>
|
<source>The config does not contain any containers and credentiaks for connecting to the server</source>
|
||||||
<translation type="unfinished">该配置不包含任何用于连接到服务器的容器和凭据。</translation>
|
<translation type="obsolete">该配置不包含任何用于连接到服务器的容器和凭据。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../core/errorstrings.cpp" line="65"/>
|
<location filename="../core/errorstrings.cpp" line="65"/>
|
||||||
|
@ -2469,6 +2495,16 @@ It's okay as long as it's from someone you trust.</source>
|
||||||
<source>error 0x%1: %2</source>
|
<source>error 0x%1: %2</source>
|
||||||
<translation type="unfinished">错误 0x%1: %2</translation>
|
<translation type="unfinished">错误 0x%1: %2</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../3rd/wireguard-tools/contrib/highlighter/gui/highlight.cpp" line="39"/>
|
||||||
|
<source>WireGuard Configuration Highlighter</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../3rd/wireguard-tools/contrib/highlighter/gui/highlight.cpp" line="82"/>
|
||||||
|
<source>&Randomize colors</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>SelectLanguageDrawer</name>
|
<name>SelectLanguageDrawer</name>
|
||||||
|
@ -2495,22 +2531,22 @@ It's okay as long as it's from someone you trust.</source>
|
||||||
<context>
|
<context>
|
||||||
<name>SettingsController</name>
|
<name>SettingsController</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/settingsController.cpp" line="20"/>
|
<location filename="../ui/controllers/settingsController.cpp" line="25"/>
|
||||||
<source>Software version</source>
|
<source>Software version</source>
|
||||||
<translation type="unfinished">软件版本</translation>
|
<translation type="unfinished">软件版本</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/settingsController.cpp" line="102"/>
|
<location filename="../ui/controllers/settingsController.cpp" line="121"/>
|
||||||
<source>Backup file is corrupted</source>
|
<source>Backup file is corrupted</source>
|
||||||
<translation type="unfinished">备份文件已损坏</translation>
|
<translation type="unfinished">备份文件已损坏</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/settingsController.cpp" line="117"/>
|
<location filename="../ui/controllers/settingsController.cpp" line="136"/>
|
||||||
<source>All settings have been reset to default values</source>
|
<source>All settings have been reset to default values</source>
|
||||||
<translation type="unfinished">所配置恢复为默认值</translation>
|
<translation type="unfinished">所配置恢复为默认值</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/controllers/settingsController.cpp" line="123"/>
|
<location filename="../ui/controllers/settingsController.cpp" line="142"/>
|
||||||
<source>Cached profiles cleared</source>
|
<source>Cached profiles cleared</source>
|
||||||
<translation type="unfinished">缓存的配置文件已清除</translation>
|
<translation type="unfinished">缓存的配置文件已清除</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -2540,8 +2576,12 @@ It's okay as long as it's from someone you trust.</source>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Components/ShareConnectionDrawer.qml" line="126"/>
|
<location filename="../ui/qml/Components/ShareConnectionDrawer.qml" line="126"/>
|
||||||
|
<source>Show connection settings</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
<source>Show content</source>
|
<source>Show content</source>
|
||||||
<translation type="unfinished">展示内容</translation>
|
<translation type="obsolete">展示内容</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../ui/qml/Components/ShareConnectionDrawer.qml" line="250"/>
|
<location filename="../ui/qml/Components/ShareConnectionDrawer.qml" line="250"/>
|
||||||
|
@ -2628,7 +2668,7 @@ It's okay as long as it's from someone you trust.</source>
|
||||||
<context>
|
<context>
|
||||||
<name>VpnConnection</name>
|
<name>VpnConnection</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../vpnconnection.cpp" line="405"/>
|
<location filename="../vpnconnection.cpp" line="403"/>
|
||||||
<source>Mbps</source>
|
<source>Mbps</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
|
109
client/ui/controllers/cloudController.cpp
Normal file
109
client/ui/controllers/cloudController.cpp
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
#include "cloudController.h"
|
||||||
|
|
||||||
|
#include <QNetworkAccessManager>
|
||||||
|
#include <QNetworkReply>
|
||||||
|
#include <QEventLoop>
|
||||||
|
|
||||||
|
#include "configurators/openvpn_configurator.h"
|
||||||
|
|
||||||
|
CloudController::CloudController(const QSharedPointer<ServersModel> &serversModel,
|
||||||
|
const QSharedPointer<ContainersModel> &containersModel, QObject *parent)
|
||||||
|
: QObject(parent), m_serversModel(serversModel), m_containersModel(containersModel)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CloudController::genPublicKey(ServiceTypeId serviceTypeId)
|
||||||
|
{
|
||||||
|
switch (serviceTypeId)
|
||||||
|
{
|
||||||
|
case ServiceTypeId::AmneziaFreeRuWG: return ".";
|
||||||
|
case ServiceTypeId::AmneziaFreeRuCloak: return ".";
|
||||||
|
case ServiceTypeId::AmneziaFreeRuAWG: return ".";
|
||||||
|
case ServiceTypeId::AmneziaFreeRuReverseWG: return ".";
|
||||||
|
case ServiceTypeId::AmneziaFreeRuReverseCloak: return ".";
|
||||||
|
case ServiceTypeId::AmneziaFreeRuReverseAWG: return ".";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CloudController::genCertificateRequest(ServiceTypeId serviceTypeId)
|
||||||
|
{
|
||||||
|
switch (serviceTypeId)
|
||||||
|
{
|
||||||
|
case ServiceTypeId::AmneziaFreeRuWG: return "";
|
||||||
|
case ServiceTypeId::AmneziaFreeRuCloak: {
|
||||||
|
auto data = OpenVpnConfigurator::createCertRequest();
|
||||||
|
return data.request;
|
||||||
|
}
|
||||||
|
case ServiceTypeId::AmneziaFreeRuAWG: return "";
|
||||||
|
case ServiceTypeId::AmneziaFreeRuReverseWG: return "";
|
||||||
|
case ServiceTypeId::AmneziaFreeRuReverseCloak: return "";
|
||||||
|
case ServiceTypeId::AmneziaFreeRuReverseAWG: return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CloudController::updateServerConfigFromCloud()
|
||||||
|
{
|
||||||
|
auto serverConfig = m_serversModel->getDefaultServerConfig();
|
||||||
|
|
||||||
|
auto containerConfig = serverConfig.value(config_key::containers).toArray();
|
||||||
|
|
||||||
|
if (serverConfig.value(config_key::configVersion).toInt() && containerConfig.isEmpty()) {
|
||||||
|
QNetworkAccessManager manager;
|
||||||
|
|
||||||
|
QNetworkRequest request;
|
||||||
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
||||||
|
QString endpoint = serverConfig.value(config_key::apiEdnpoint).toString();
|
||||||
|
request.setUrl(endpoint.replace("https", "http")); //
|
||||||
|
|
||||||
|
ServiceTypeId serviceTypeId = static_cast<ServiceTypeId>(serverConfig.value(config_key::serviceTypeId).toInt());
|
||||||
|
|
||||||
|
QJsonObject obj;
|
||||||
|
obj[config_key::serviceTypeId] = serviceTypeId;
|
||||||
|
obj[config_key::accessToken] = serverConfig.value(config_key::accessToken);
|
||||||
|
|
||||||
|
obj[config_key::publicKey] = genPublicKey(serviceTypeId);
|
||||||
|
obj[config_key::certificate] = genCertificateRequest(serviceTypeId);
|
||||||
|
|
||||||
|
QByteArray requestBody = QJsonDocument(obj).toJson();
|
||||||
|
|
||||||
|
QScopedPointer<QNetworkReply> reply;
|
||||||
|
reply.reset(manager.post(request, requestBody));
|
||||||
|
|
||||||
|
QEventLoop wait;
|
||||||
|
QObject::connect(reply.get(), &QNetworkReply::finished, &wait, &QEventLoop::quit);
|
||||||
|
wait.exec();
|
||||||
|
|
||||||
|
if(reply->error() == QNetworkReply::NoError){
|
||||||
|
QString contents = QString::fromUtf8(reply->readAll());
|
||||||
|
auto data = QJsonDocument::fromJson(contents.toUtf8()).object().value(config_key::config).toString();
|
||||||
|
|
||||||
|
data.replace("vpn://", "");
|
||||||
|
QByteArray ba = QByteArray::fromBase64(data.toUtf8(), QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals);
|
||||||
|
|
||||||
|
QByteArray ba_uncompressed = qUncompress(ba);
|
||||||
|
if (!ba_uncompressed.isEmpty()) {
|
||||||
|
ba = ba_uncompressed;
|
||||||
|
}
|
||||||
|
|
||||||
|
QJsonObject cloudConfig = QJsonDocument::fromJson(ba).object();
|
||||||
|
serverConfig.insert("cloudConfig", cloudConfig);
|
||||||
|
serverConfig.insert(config_key::dns1, cloudConfig.value(config_key::dns1));
|
||||||
|
serverConfig.insert(config_key::dns2, cloudConfig.value(config_key::dns2));
|
||||||
|
serverConfig.insert(config_key::containers, cloudConfig.value(config_key::containers));
|
||||||
|
serverConfig.insert(config_key::hostName, cloudConfig.value(config_key::hostName));
|
||||||
|
serverConfig.insert(config_key::defaultContainer, cloudConfig.value(config_key::defaultContainer));
|
||||||
|
m_serversModel->editServer(serverConfig);
|
||||||
|
emit serverConfigUpdated();
|
||||||
|
} else{
|
||||||
|
QString err = reply->errorString();
|
||||||
|
qDebug() << reply->error();
|
||||||
|
qDebug() << err;
|
||||||
|
qDebug() << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
|
||||||
|
emit errorOccurred(tr("Error when retrieving configuration from cloud server"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
43
client/ui/controllers/cloudController.h
Normal file
43
client/ui/controllers/cloudController.h
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
#ifndef CLOUDCONTROLLER_H
|
||||||
|
#define CLOUDCONTROLLER_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
#include "ui/models/containers_model.h"
|
||||||
|
#include "ui/models/servers_model.h"
|
||||||
|
|
||||||
|
class CloudController : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
enum ServiceTypeId
|
||||||
|
{
|
||||||
|
AmneziaFreeRuWG = 0,
|
||||||
|
AmneziaFreeRuCloak,
|
||||||
|
AmneziaFreeRuAWG,
|
||||||
|
AmneziaFreeRuReverseWG,
|
||||||
|
AmneziaFreeRuReverseCloak,
|
||||||
|
AmneziaFreeRuReverseAWG
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit CloudController(const QSharedPointer<ServersModel> &serversModel,
|
||||||
|
const QSharedPointer<ContainersModel> &containersModel, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
bool updateServerConfigFromCloud();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void errorOccurred(const QString &errorMessage);
|
||||||
|
void serverConfigUpdated();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QString genPublicKey(ServiceTypeId serviceTypeId);
|
||||||
|
QString genCertificateRequest(ServiceTypeId serviceTypeId);
|
||||||
|
|
||||||
|
QSharedPointer<ServersModel> m_serversModel;
|
||||||
|
QSharedPointer<ContainersModel> m_containersModel;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CLOUDCONTROLLER_H
|
|
@ -40,6 +40,7 @@ void ConnectionController::openConnection()
|
||||||
}
|
}
|
||||||
|
|
||||||
qApp->processEvents();
|
qApp->processEvents();
|
||||||
|
|
||||||
emit connectToVpn(serverIndex, credentials, container, containerConfig);
|
emit connectToVpn(serverIndex, credentials, container, containerConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -141,7 +141,9 @@ void ImportController::importConfig()
|
||||||
credentials.userName = m_config.value(config_key::userName).toString();
|
credentials.userName = m_config.value(config_key::userName).toString();
|
||||||
credentials.secretData = m_config.value(config_key::password).toString();
|
credentials.secretData = m_config.value(config_key::password).toString();
|
||||||
|
|
||||||
if (credentials.isValid() || m_config.contains(config_key::containers)) {
|
if (credentials.isValid()
|
||||||
|
|| m_config.contains(config_key::containers)
|
||||||
|
|| m_config.contains(config_key::configVersion)) { // todo
|
||||||
m_serversModel->addServer(m_config);
|
m_serversModel->addServer(m_config);
|
||||||
|
|
||||||
m_serversModel->setDefaultServerIndex(m_serversModel->getServersCount() - 1);
|
m_serversModel->setDefaultServerIndex(m_serversModel->getServersCount() - 1);
|
||||||
|
@ -167,7 +169,11 @@ QJsonObject ImportController::extractAmneziaConfig(QString &data)
|
||||||
ba = ba_uncompressed;
|
ba = ba_uncompressed;
|
||||||
}
|
}
|
||||||
|
|
||||||
return QJsonDocument::fromJson(ba).object();
|
QJsonObject config = QJsonDocument::fromJson(ba).object();
|
||||||
|
|
||||||
|
qDebug() << config;
|
||||||
|
|
||||||
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
QJsonObject ImportController::extractOpenVpnConfig(const QString &data)
|
QJsonObject ImportController::extractOpenVpnConfig(const QString &data)
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
|
|
||||||
#include "core/errorstrings.h"
|
#include "core/errorstrings.h"
|
||||||
#include "core/servercontroller.h"
|
#include "core/controllers/serverController.h"
|
||||||
#include "utilities.h"
|
#include "utilities.h"
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include "containers_model.h"
|
#include "containers_model.h"
|
||||||
|
|
||||||
#include "core/servercontroller.h"
|
#include "core/controllers/serverController.h"
|
||||||
|
|
||||||
ContainersModel::ContainersModel(std::shared_ptr<Settings> settings, QObject *parent)
|
ContainersModel::ContainersModel(std::shared_ptr<Settings> settings, QObject *parent)
|
||||||
: m_settings(settings), QAbstractListModel(parent)
|
: m_settings(settings), QAbstractListModel(parent)
|
||||||
|
|
|
@ -168,6 +168,14 @@ void ServersModel::addServer(const QJsonObject &server)
|
||||||
endResetModel();
|
endResetModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ServersModel::editServer(const QJsonObject &server)
|
||||||
|
{
|
||||||
|
beginResetModel();
|
||||||
|
m_settings->editServer(m_currentlyProcessedServerIndex, server);
|
||||||
|
m_servers = m_settings->serversArray();
|
||||||
|
endResetModel();
|
||||||
|
}
|
||||||
|
|
||||||
void ServersModel::removeServer()
|
void ServersModel::removeServer()
|
||||||
{
|
{
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
|
@ -219,3 +227,8 @@ ServerCredentials ServersModel::serverCredentials(int index) const
|
||||||
|
|
||||||
return credentials;
|
return credentials;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QJsonObject ServersModel::getDefaultServerConfig()
|
||||||
|
{
|
||||||
|
return m_servers.at(m_defaultServerIndex).toObject();
|
||||||
|
}
|
||||||
|
|
|
@ -55,10 +55,13 @@ public slots:
|
||||||
QString getCurrentlyProcessedServerHostName();
|
QString getCurrentlyProcessedServerHostName();
|
||||||
|
|
||||||
void addServer(const QJsonObject &server);
|
void addServer(const QJsonObject &server);
|
||||||
|
void editServer(const QJsonObject &server);
|
||||||
void removeServer();
|
void removeServer();
|
||||||
|
|
||||||
bool isDefaultServerConfigContainsAmneziaDns();
|
bool isDefaultServerConfigContainsAmneziaDns();
|
||||||
|
|
||||||
|
QJsonObject getDefaultServerConfig();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QHash<int, QByteArray> roleNames() const override;
|
QHash<int, QByteArray> roleNames() const override;
|
||||||
|
|
||||||
|
|
|
@ -138,6 +138,10 @@ Button {
|
||||||
}
|
}
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
|
if (!CloudController.updateServerConfigFromCloud()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if (!ContainersModel.isAnyContainerInstalled()) {
|
if (!ContainersModel.isAnyContainerInstalled()) {
|
||||||
PageController.setTriggeredBtConnectButton(true)
|
PageController.setTriggeredBtConnectButton(true)
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#include <configurators/shadowsocks_configurator.h>
|
#include <configurators/shadowsocks_configurator.h>
|
||||||
#include <configurators/vpn_configurator.h>
|
#include <configurators/vpn_configurator.h>
|
||||||
#include <configurators/wireguard_configurator.h>
|
#include <configurators/wireguard_configurator.h>
|
||||||
#include <core/servercontroller.h>
|
#include "core/controllers/serverController.h"
|
||||||
|
|
||||||
#ifdef AMNEZIA_DESKTOP
|
#ifdef AMNEZIA_DESKTOP
|
||||||
#include "core/ipcclient.h"
|
#include "core/ipcclient.h"
|
||||||
|
@ -258,9 +258,7 @@ QJsonObject VpnConnection::createVpnConfiguration(int serverIndex, const ServerC
|
||||||
for (ProtocolEnumNS::Proto proto : ContainerProps::protocolsForContainer(container)) {
|
for (ProtocolEnumNS::Proto proto : ContainerProps::protocolsForContainer(container)) {
|
||||||
QJsonObject vpnConfigData =
|
QJsonObject vpnConfigData =
|
||||||
QJsonDocument::fromJson(createVpnConfigurationForProto(serverIndex, credentials, container,
|
QJsonDocument::fromJson(createVpnConfigurationForProto(serverIndex, credentials, container,
|
||||||
containerConfig, proto, errorCode)
|
containerConfig, proto, errorCode).toUtf8()).object();
|
||||||
.toUtf8())
|
|
||||||
.object();
|
|
||||||
|
|
||||||
if (errorCode && *errorCode) {
|
if (errorCode && *errorCode) {
|
||||||
return {};
|
return {};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue