+void Bar::hideTheNextTimeAuthorizationExpires()
+{
+ if (waitingForExpirationOfAuthorization.isNull()) {
+ QByteArray packedArgs;
+ QDataStream stream(&packedArgs, QIODevice::WriteOnly);
+ stream << (int)1;
+ waitingForExpirationOfAuthorization = KIO::special(QUrl(QStringLiteral("admin:/")), packedArgs, KIO::HideProgressInfo);
+ waitingForExpirationOfAuthorization->setUiDelegate(KIO::createDefaultJobUiDelegate(KJobUiDelegate::AutoWarningHandlingEnabled, m_parentViewContainer));
+
+ connect(waitingForExpirationOfAuthorization, &KJob::finished, this, [](KJob *job) {
+ if (job->error()) {
+ job->uiDelegate()->showErrorMessage();
+ }
+ });
+ }
+
+ connect(waitingForExpirationOfAuthorization, &KJob::finished, this, [this](KJob *job) {
+ if (job->error()) {
+ return;
+ }
+ // We exit admin mode now to avoid random password prompts popping up.
+ QUrl viewContainerUrl = m_parentViewContainer->url();
+ if (viewContainerUrl.scheme() != QStringLiteral("admin")) {
+ return;
+ }
+ viewContainerUrl.setScheme("file");
+ m_parentViewContainer->setUrl(viewContainerUrl);
+
+ // Explain to users that their admin authorization expired.
+ if (!m_reenableActAsAdminAction) {
+ auto actAsAdminAction = WorkerIntegration::actAsAdminAction();
+ m_reenableActAsAdminAction =
+ new QAction{actAsAdminAction->icon(), i18nc("@action:button shown after acting as admin ended", "Act as Administrator Again"), this};
+ m_reenableActAsAdminAction->setToolTip(actAsAdminAction->toolTip());
+ m_reenableActAsAdminAction->setWhatsThis(actAsAdminAction->whatsThis());
+ connect(m_reenableActAsAdminAction, &QAction::triggered, this, [this, actAsAdminAction]() {
+ m_parentViewContainer->setActive(true);
+ actAsAdminAction->trigger();
+ });
+ }
+ m_parentViewContainer->showMessage(i18nc("@info", "Administrator authorization has expired."),
+ KMessageWidget::Information,
+ {m_reenableActAsAdminAction});
+ });
+}
+