From 7f3ef29f0117b10fb14562264e58d28e79a377de Mon Sep 17 00:00:00 2001 From: uncor3 Date: Thu, 9 Apr 2026 18:51:57 +0000 Subject: [PATCH] feat: add support for enabling Wi-Fi connections in toolbox --- resources.qrc | 1 + ...treamlineFreehandChargingFlashWireless.png | Bin 0 -> 18542 bytes src/iDescriptor-ui.h | 3 +- src/settingsmanager.cpp | 68 ++++++++++++++++++ src/settingsmanager.h | 8 +++ src/settingswidget.cpp | 8 +++ src/settingswidget.h | 1 + src/toolboxwidget.cpp | 27 +++++++ 8 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 resources/icons/StreamlineFreehandChargingFlashWireless.png diff --git a/resources.qrc b/resources.qrc index f558183..a261ef6 100644 --- a/resources.qrc +++ b/resources.qrc @@ -43,6 +43,7 @@ resources/icons/MaterialSymbolsLightKeyboardArrowUp.png resources/icons/MaterialSymbolsLightKeyboardArrowDown.png resources/icons/IcOutlineRefresh.png + resources/icons/StreamlineFreehandChargingFlashWireless.png qml/MapView.qml resources/iphone.png resources/ios-version.png diff --git a/resources/icons/StreamlineFreehandChargingFlashWireless.png b/resources/icons/StreamlineFreehandChargingFlashWireless.png new file mode 100644 index 0000000000000000000000000000000000000000..9e2e62dd442742783cab6010998c377010112135 GIT binary patch literal 18542 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 TJ~}=GiZFP(`njxgN@xNAAIT02 literal 0 HcmV?d00001 diff --git a/src/iDescriptor-ui.h b/src/iDescriptor-ui.h index 1e4d2fb..208f25b 100644 --- a/src/iDescriptor-ui.h +++ b/src/iDescriptor-ui.h @@ -367,6 +367,7 @@ enum class iDescriptorTool { */ NetworkDevices, iFuse, + EnableWifiConnections, Unknown }; @@ -663,7 +664,7 @@ private: if (m_animation) return; - m_animation = new QPropertyAnimation(this, "shimmerOffset", this); + m_animation = new QPropertyAnimation(this, "shimmerOffset"); m_animation->setDuration(1200); m_animation->setStartValue(0.0); m_animation->setEndValue(1.0); diff --git a/src/settingsmanager.cpp b/src/settingsmanager.cpp index 6c68925..09171d0 100644 --- a/src/settingsmanager.cpp +++ b/src/settingsmanager.cpp @@ -24,6 +24,8 @@ #include #include +const QString SEEN_DEVICE_PREFIX = "seenDevices/"; + SettingsManager *SettingsManager::sharedInstance() { static SettingsManager instance; @@ -133,6 +135,17 @@ void SettingsManager::setAutoConnectWirelessDevices(bool enabled) m_settings->sync(); } +bool SettingsManager::autoEnableWifiConnections() const +{ + return m_settings->value("autoEnableWifiConnections", true).toBool(); +} + +void SettingsManager::setAutoEnableWifiConnections(bool enabled) +{ + m_settings->setValue("autoEnableWifiConnections", enabled); + m_settings->sync(); +} + #ifndef __APPLE__ bool SettingsManager::unmountiFuseOnExit() const { @@ -250,6 +263,7 @@ void SettingsManager::resetToDefaults() setAutoRaiseWindow(true); setSwitchToNewDevice(true); setAutoConnectWirelessDevices(true); + setAutoEnableWifiConnections(true); #ifndef __APPLE__ setUnmountiFuseOnExit(false); #endif @@ -525,4 +539,58 @@ void SettingsManager::setIsSleepyDeviceWarningDismissed(bool dismissed) { m_settings->setValue("sleepyDeviceWarningDismissed", dismissed); m_settings->sync(); +} + +bool SettingsManager::hasSeenDevice(const QString &udid) const +{ + const QString trimmed = udid.trimmed(); + if (trimmed.isEmpty()) { + return false; + } + return m_settings->value(SEEN_DEVICE_PREFIX + trimmed, false).toBool(); +} + +void SettingsManager::setHasSeenDevice(const QString &udid, bool seen) +{ + const QString trimmed = udid.trimmed(); + if (trimmed.isEmpty()) { + return; + } + + const QString key = SEEN_DEVICE_PREFIX + trimmed; + if (seen) { + m_settings->setValue(key, true); + } else { + m_settings->remove(key); + } + m_settings->sync(); +} + +QStringList SettingsManager::seenDeviceUdids() const +{ + QStringList udids; + const QStringList allKeys = m_settings->allKeys(); + + for (const QString &key : allKeys) { + if (!key.startsWith(SEEN_DEVICE_PREFIX)) { + continue; + } + + if (m_settings->value(key, false).toBool()) { + udids.append(key.mid(SEEN_DEVICE_PREFIX.length())); + } + } + + return udids; +} + +void SettingsManager::clearSeenDevices() +{ + const QStringList allKeys = m_settings->allKeys(); + for (const QString &key : allKeys) { + if (key.startsWith(SEEN_DEVICE_PREFIX)) { + m_settings->remove(key); + } + } + m_settings->sync(); } \ No newline at end of file diff --git a/src/settingsmanager.h b/src/settingsmanager.h index 75fbd15..b174b37 100644 --- a/src/settingsmanager.h +++ b/src/settingsmanager.h @@ -80,6 +80,9 @@ public: bool autoConnectWirelessDevices() const; void setAutoConnectWirelessDevices(bool enabled); + bool autoEnableWifiConnections() const; + void setAutoEnableWifiConnections(bool enabled); + #ifndef __APPLE__ bool unmountiFuseOnExit() const; void setUnmountiFuseOnExit(bool enabled); @@ -143,6 +146,11 @@ public: void setIsSleepyDeviceWarningDismissed(bool dismissed); void dismissSleepyDeviceWarning(); + bool hasSeenDevice(const QString &udid) const; + void setHasSeenDevice(const QString &udid, bool seen = true); + QStringList seenDeviceUdids() const; + void clearSeenDevices(); + signals: void favoritePlacesChanged(); void recentLocationsChanged(); diff --git a/src/settingswidget.cpp b/src/settingswidget.cpp index 57f1af8..9be7865 100644 --- a/src/settingswidget.cpp +++ b/src/settingswidget.cpp @@ -111,6 +111,10 @@ void SettingsWidget::setupUI() m_autoUpdateCheck = new QCheckBox("Automatically check for updates"); generalLayout->addWidget(m_autoUpdateCheck); + m_autoEnableWifiConnections = + new QCheckBox("Automatically enable Wi-Fi connections"); + generalLayout->addWidget(m_autoEnableWifiConnections); + // Theme selection auto *themeLayout = new QHBoxLayout(); themeLayout->addWidget(new QLabel("Theme:")); @@ -306,6 +310,7 @@ void SettingsWidget::loadSettings() m_autoUpdateCheck->setChecked(sm->autoCheckUpdates()); m_autoRaiseWindow->setChecked(sm->autoRaiseWindow()); m_switchToNewDevice->setChecked(sm->switchToNewDevice()); + m_autoEnableWifiConnections->setChecked(sm->autoEnableWifiConnections()); m_autoConnectWirelessDevices->setChecked(sm->autoConnectWirelessDevices()); m_wirelessFileServerPort->setValue(sm->wirelessFileServerPort()); @@ -357,6 +362,8 @@ void SettingsWidget::connectSignals() &SettingsWidget::onSettingChanged); connect(m_switchToNewDevice, &QCheckBox::toggled, this, &SettingsWidget::onSettingChanged); + connect(m_autoEnableWifiConnections, &QCheckBox::toggled, this, + &SettingsWidget::onSettingChanged); connect(m_autoConnectWirelessDevices, &QCheckBox::toggled, this, &SettingsWidget::onSettingChanged); #ifndef __APPLE__ @@ -493,6 +500,7 @@ void SettingsWidget::saveSettings() sm->setAutoCheckUpdates(m_autoUpdateCheck->isChecked()); sm->setAutoRaiseWindow(m_autoRaiseWindow->isChecked()); sm->setSwitchToNewDevice(m_switchToNewDevice->isChecked()); + sm->setAutoEnableWifiConnections(m_autoEnableWifiConnections->isChecked()); sm->setAutoConnectWirelessDevices( m_autoConnectWirelessDevices->isChecked()); sm->setWirelessFileServerPort(m_wirelessFileServerPort->value()); diff --git a/src/settingswidget.h b/src/settingswidget.h index b6f8611..32f1eb7 100644 --- a/src/settingswidget.h +++ b/src/settingswidget.h @@ -57,6 +57,7 @@ private: QComboBox *m_themeCombo; QCheckBox *m_autoRaiseWindow; QCheckBox *m_switchToNewDevice; + QCheckBox *m_autoEnableWifiConnections; #ifndef __APPLE__ QCheckBox *m_unmount_iFuseDrives; #endif diff --git a/src/toolboxwidget.cpp b/src/toolboxwidget.cpp index e877021..698e94a 100644 --- a/src/toolboxwidget.cpp +++ b/src/toolboxwidget.cpp @@ -166,6 +166,8 @@ void ToolboxWidget::setupUI() {iDescriptorTool::Shutdown, "Shut down the device", true, ""}); moreToolWidgets.append({iDescriptorTool::RecoveryMode, "Enter device recovery mode", true, ""}); + moreToolWidgets.append({iDescriptorTool::EnableWifiConnections, + "Make device connectable via Wi-Fi", true, ""}); for (int i = 0; i < moreToolWidgets.size(); ++i) { const auto &tool = moreToolWidgets[i]; @@ -250,6 +252,11 @@ ToolboxItemWidget *ToolboxWidget::createToolbox(iDescriptorTool tool, iconName = ":/resources/icons/StreamlineUltimateMultipleUsersNetwork.png"; break; + case iDescriptorTool::EnableWifiConnections: + title = "Enable Wi-Fi Connections"; + iconName = + ":/resources/icons/StreamlineFreehandChargingFlashWireless.png"; + break; default: title = "Unknown Tool"; break; @@ -515,6 +522,26 @@ void ToolboxWidget::onToolboxClicked(iDescriptorTool tool, bool requiresDevice) m_networkDevicesWidget->activateWindow(); } } break; + + case iDescriptorTool::EnableWifiConnections: { + connect( + device->service_manager, + &CXX::ServiceManager::enable_wifi_connections_result, this, + [this](bool success) { + if (success) { + QMessageBox::information( + this, "Success", + "Wi-Fi connections enabled successfully. You can now " + "connect to this device wirelessly."); + } else { + QMessageBox::warning(this, "Failure", + "Failed to enable Wi-Fi connections."); + } + }, + Qt::SingleShotConnection); + + device->service_manager->enable_wifi_connections(); + } break; default: qDebug() << "Clicked on unimplemented tool"; break;