Allow setting presence state again

This commit is contained in:
Nicolas Werner 2023-10-25 23:22:39 +02:00
parent 51976cf367
commit bbfbba30b0
No known key found for this signature in database
GPG key ID: C8D75E610773F2D9
5 changed files with 58 additions and 26 deletions

View file

@ -267,6 +267,40 @@ Page {
onTriggered: statusDialog.show()
}
Platform.MenuSeparator {
}
Platform.MenuItemGroup {
id: onlineStateGroup
}
Platform.MenuItem {
text: qsTr("Automatic online status")
group: onlineStateGroup
checkable: true
checked: Settings.presence == Settings.AutomaticPresence
onTriggered: if (checked) Settings.presence = Settings.AutomaticPresence
}
Platform.MenuItem {
text: qsTr("Online")
group: onlineStateGroup
checkable: true
checked: Settings.presence == Settings.Online
onTriggered: if (checked) Settings.presence = Settings.Online
}
Platform.MenuItem {
text: qsTr("Unavailable")
group: onlineStateGroup
checkable: true
checked: Settings.presence == Settings.Unavailable
onTriggered: if (checked) Settings.presence = Settings.Unavailable
}
Platform.MenuItem {
text: qsTr("Offline")
group: onlineStateGroup
checkable: true
checked: Settings.presence == Settings.Offline
onTriggered: if (checked) Settings.presence = Settings.Offline
}
}
TapHandler {
acceptedButtons: Qt.LeftButton

View file

@ -21,7 +21,6 @@
#include "encryption/DeviceVerificationFlow.h"
#include "encryption/Olm.h"
#include "ui/RoomSummary.h"
#include "ui/Theme.h"
#include "ui/UserProfile.h"
#include "voip/CallManager.h"
@ -29,8 +28,6 @@
#include "timeline/TimelineViewManager.h"
#include "blurhash.hpp"
ChatPage *ChatPage::instance_ = nullptr;
static constexpr int CHECK_CONNECTIVITY_INTERVAL = 15'000;
static constexpr int RETRY_TIMEOUT = 5'000;
@ -404,6 +401,19 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QObject *parent)
[](std::function<void()> f) { f(); },
Qt::QueuedConnection);
connect(qobject_cast<QGuiApplication *>(QGuiApplication::instance()),
&QGuiApplication::focusWindowChanged,
this,
[this](QWindow *activeWindow) {
if (activeWindow) {
nhlog::ui()->debug("Stopping inactive timer.");
lastWindowActive = QDateTime();
} else {
nhlog::ui()->debug("Starting inactive timer.");
lastWindowActive = QDateTime::currentDateTime();
}
});
connectCallMessage<mtx::events::voip::CallInvite>();
connectCallMessage<mtx::events::voip::CallCandidates>();
connectCallMessage<mtx::events::voip::CallAnswer>();
@ -1107,6 +1117,13 @@ ChatPage::currentPresence() const
return mtx::presence::unavailable;
case UserSettings::Presence::Offline:
return mtx::presence::offline;
case UserSettings::Presence::AutomaticPresence:
if (lastWindowActive.isValid() &&
lastWindowActive.addSecs(60 * 5) < QDateTime::currentDateTime())
return mtx::presence::unavailable;
else
return mtx::presence::online;
default:
return mtx::presence::online;
}

View file

@ -21,8 +21,6 @@
#include <QSharedPointer>
#include <QTimer>
#include "CacheCryptoStructs.h"
#include "CacheStructs.h"
#include "ui/RoomSummary.h"
class TimelineViewManager;
@ -225,6 +223,9 @@ private:
std::unique_ptr<mtx::pushrules::PushRuleEvaluator> pushrules;
QDateTime lastSpacesUpdate = QDateTime::currentDateTime();
// Stores when our windows lost focus. Invalid when our windows have focus.
QDateTime lastWindowActive;
};
template<class Collection>

View file

@ -9,42 +9,23 @@
#include <mtx/requests.hpp>
#include <mtx/responses/login.hpp>
#include "AliasEditModel.h"
#include "BlurhashProvider.h"
#include "Cache.h"
#include "Cache_p.h"
#include "ChatPage.h"
#include "Clipboard.h"
#include "ColorImageProvider.h"
#include "CombinedImagePackModel.h"
#include "CompletionProxyModel.h"
#include "Config.h"
#include "EventAccessors.h"
#include "GridImagePackModel.h"
#include "ImagePackListModel.h"
#include "InviteesModel.h"
#include "JdenticonProvider.h"
#include "Logging.h"
#include "MainWindow.h"
#include "MatrixClient.h"
#include "MemberList.h"
#include "MxcImageProvider.h"
#include "PowerlevelsEditModels.h"
#include "SingleImagePackModel.h"
#include "TrayIcon.h"
#include "UserDirectoryModel.h"
#include "UserSettingsPage.h"
#include "Utils.h"
#include "dock/Dock.h"
#include "emoji/Provider.h"
#include "encryption/DeviceVerificationFlow.h"
#include "encryption/SelfVerificationStatus.h"
#include "timeline/DelegateChooser.h"
#include "timeline/TimelineFilter.h"
#include "timeline/TimelineViewManager.h"
#include "ui/NhekoGlobalObject.h"
#include "ui/RoomSummary.h"
#include "ui/UIA.h"
#include "ui/Theme.h"
#include "voip/CallManager.h"
#include "voip/WebRTCSession.h"

View file

@ -14,7 +14,6 @@
#include <mtx/secret_storage.hpp>
#include "Cache.h"
#include "Config.h"
#include "JdenticonProvider.h"
#include "MainWindow.h"
#include "MatrixClient.h"