Feat: Add deep link

This commit is contained in:
dranik
2026-05-13 17:41:26 +03:00
parent 009ca981d5
commit e2108a28ea
19 changed files with 292 additions and 77 deletions
@@ -340,3 +340,19 @@ void CoreController::importConfigFromData(const QString &data)
m_importController->importConfig();
}
}
void CoreController::openVpnKeyImportPreview(const QString &data)
{
if (!m_importController || data.isEmpty()) {
return;
}
emit m_pageController->goToPageHome();
if (!m_importController->extractConfigFromData(data)) {
return;
}
emit m_pageController->goToPageViewConfig();
#if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS)
emit m_pageController->raiseMainWindow();
#endif
}
+2
View File
@@ -116,6 +116,8 @@ public:
void openConnectionByIndex(int serverIndex);
void importConfigFromData(const QString &data);
/** Navigate home, parse key, open preview (same path as mobile deep link / share). */
void openVpnKeyImportPreview(const QString &data);
void updateTranslator(const QLocale &locale);
signals:
@@ -361,10 +361,8 @@ void CoreSignalHandlers::initAndroidConnectionHandler()
m_coreController->m_connectionController->restoreConnection();
});
connect(AndroidController::instance(), &AndroidController::importConfigFromOutside, this, [this](QString data) {
emit m_coreController->m_pageController->goToPageHome();
m_coreController->m_importController->extractConfigFromData(data);
m_coreController->openVpnKeyImportPreview(data);
data.clear();
emit m_coreController->m_pageController->goToPageViewConfig();
});
#endif
}
@@ -373,9 +371,7 @@ void CoreSignalHandlers::initIosImportHandler()
{
#ifdef Q_OS_IOS
connect(IosController::Instance(), &IosController::importConfigFromOutside, this, [this](QString data) {
emit m_coreController->m_pageController->goToPageHome();
m_coreController->m_importController->extractConfigFromData(data);
emit m_coreController->m_pageController->goToPageViewConfig();
m_coreController->openVpnKeyImportPreview(data);
});
connect(IosController::Instance(), &IosController::importBackupFromOutside, this, [this](QString filePath) {
emit m_coreController->m_pageController->goToPageHome();
@@ -387,6 +387,7 @@ void ImportController::importConfig(const QJsonObject &config)
} else if (config.contains(configKey::configVersion)) {
quint16 crc = qChecksum(QJsonDocument(config).toJson());
if (m_serversRepository->hasServerWithCrc(crc)) {
// Same API key / subscription blob already present (incl. deep link re-import).
emit importErrorOccurred(ErrorCode::ApiConfigAlreadyAdded, true);
} else {
QJsonObject configWithCrc = config;