Skip to content

Commit

Permalink
Stop synchronisation when behind a captive portal
Browse files Browse the repository at this point in the history
Fixes: #11533
  • Loading branch information
erikjv committed Mar 28, 2024
1 parent 32670a7 commit 43e2902
Show file tree
Hide file tree
Showing 6 changed files with 49 additions and 8 deletions.
1 change: 1 addition & 0 deletions src/gui/accountstate.cpp
Expand Up @@ -247,6 +247,7 @@ void AccountState::setState(State state)
} else if (_state == Connected && Utility::internetConnectionIsMetered() && ConfigFile().pauseSyncWhenMetered()) {
_state = PausedDueToMetered;
}
// Do we need an extra state PausedDueToCaptivePortal?
}

// might not have changed but the underlying _connectionErrors might have
Expand Down
26 changes: 26 additions & 0 deletions src/gui/guiutility.cpp
Expand Up @@ -100,6 +100,32 @@ QString Utility::vfsFreeSpaceActionText()
return QCoreApplication::translate("utility", "Free up local space");
}

static bool captivePortalForcedOn = false;

bool Utility::forcedCaptivePortal()
{
return captivePortalForcedOn;
}

void Utility::setForcedCaptivePortal(bool onoff)
{
captivePortalForcedOn = onoff;
qCDebug(lcUtility) << "Switching forced captive portal to" << onoff;
}

bool Utility::internetThroughCaptivePortal()
{
if (captivePortalForcedOn) {
return true;
}

if (auto *qNetInfo = QNetworkInformation::instance()) {
return qNetInfo->isBehindCaptivePortal();
}

return false;
}

bool Utility::internetConnectionIsMetered()
{
if (auto *qNetInfo = QNetworkInformation::instance()) {
Expand Down
4 changes: 4 additions & 0 deletions src/gui/guiutility.h
Expand Up @@ -51,6 +51,10 @@ namespace Utility {

QString socketApiSocketPath();

bool forcedCaptivePortal();
void setForcedCaptivePortal(bool onoff);
bool internetThroughCaptivePortal();

bool internetConnectionIsMetered();

void markDirectoryAsSyncRoot(const QString &path, const QUuid &accountUuid);
Expand Down
2 changes: 1 addition & 1 deletion src/gui/main.cpp
Expand Up @@ -85,7 +85,7 @@ struct CommandLineOptions
bool logFlush = false;
bool logDebug = false;

bool debugMode = false;
bool debugMode = true;

QString fileToOpen;
};
Expand Down
19 changes: 12 additions & 7 deletions src/gui/owncloudgui.cpp
Expand Up @@ -641,17 +641,22 @@ void ownCloudGui::updateContextMenu()
_contextMenu->addSeparator();

if (_app->debugMode()) {
auto *crashMenu = _contextMenu->addMenu(QStringLiteral("Debug actions"));
crashMenu->addAction(QStringLiteral("Crash if asserts enabled - OC_ENSURE"), _app, [] {
auto *debugMenu = _contextMenu->addMenu(QStringLiteral("Debug actions"));
debugMenu->addAction(QStringLiteral("Crash if asserts enabled - OC_ENSURE"), _app, [] {
if (OC_ENSURE(false)) {
Q_UNREACHABLE();
}
});
crashMenu->addAction(QStringLiteral("Crash if asserts enabled - Q_ASSERT"), _app, [] { Q_ASSERT(false); });
crashMenu->addAction(QStringLiteral("Crash now - Utility::crash()"), _app, [] { Utility::crash(); });
crashMenu->addAction(QStringLiteral("Crash now - OC_ENFORCE()"), _app, [] { OC_ENFORCE(false); });
crashMenu->addAction(QStringLiteral("Crash now - qFatal"), _app, [] { qFatal("la Qt fatale"); });
crashMenu->addAction(QStringLiteral("Restart now"), _app, [] { RestartManager::requestRestart(); });
debugMenu->addAction(QStringLiteral("Crash if asserts enabled - Q_ASSERT"), _app, [] { Q_ASSERT(false); });
debugMenu->addAction(QStringLiteral("Crash now - Utility::crash()"), _app, [] { Utility::crash(); });
debugMenu->addAction(QStringLiteral("Crash now - OC_ENFORCE()"), _app, [] { OC_ENFORCE(false); });
debugMenu->addAction(QStringLiteral("Crash now - qFatal"), _app, [] { qFatal("la Qt fatale"); });
debugMenu->addAction(QStringLiteral("Restart now"), _app, [] { RestartManager::requestRestart(); });
debugMenu->addSeparator();
auto captivePortalCheckbox = debugMenu->addAction(QStringLiteral("Behind Captive Portal"));
captivePortalCheckbox->setCheckable(true);
captivePortalCheckbox->setChecked(Utility::forcedCaptivePortal());
connect(captivePortalCheckbox, &QAction::triggered, [](bool checked) { Utility::setForcedCaptivePortal(checked); });
}

_contextMenu->addSeparator();
Expand Down
5 changes: 5 additions & 0 deletions src/gui/scheduling/syncscheduler.cpp
Expand Up @@ -155,6 +155,11 @@ void SyncScheduler::startNext()
return;
}

if (Utility::internetThroughCaptivePortal()) {
qCInfo(lcSyncScheduler) << "Client is behind a captive portal, next sync is not started";
return;
}

if (!_currentSync.isNull()) {
qCInfo(lcSyncScheduler) << "Another sync is already running, waiting for that to finish before starting a new sync";
return;
Expand Down

0 comments on commit 43e2902

Please sign in to comment.