summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/Controllers')
-rw-r--r--Swift/Controllers/IdleDetector.h16
-rw-r--r--Swift/Controllers/MainController.cpp45
-rw-r--r--Swift/Controllers/MainController.h21
3 files changed, 34 insertions, 48 deletions
diff --git a/Swift/Controllers/IdleDetector.h b/Swift/Controllers/IdleDetector.h
deleted file mode 100644
index 72fe07c..0000000
--- a/Swift/Controllers/IdleDetector.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#pragma once
-
-#include <boost/signals.hpp>
-#include <boost/shared_ptr.hpp>
-
-namespace Swift {
-class IdleDetector {
- public:
- virtual ~IdleDetector() {};
- virtual void forceNotIdle() = 0;
- boost::signal<void ()> onInputIdle;
- boost::signal<void ()> onInputNotIdle;
-};
-}
-
-
diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp
index f05d42d..f54e0a2 100644
--- a/Swift/Controllers/MainController.cpp
+++ b/Swift/Controllers/MainController.cpp
@@ -10,7 +10,6 @@
#include "Swift/Controllers/ChatController.h"
#include "Swift/Controllers/ChatWindowFactory.h"
#include "Swift/Controllers/EventController.h"
-#include "Swift/Controllers/IdleDetector.h"
#include "Swift/Controllers/LoginWindow.h"
#include "Swift/Controllers/LoginWindowFactory.h"
#include "Swift/Controllers/MainWindow.h"
@@ -60,10 +59,8 @@ static const String CLIENT_NODE = "http://swift.im";
typedef std::pair<JID, ChatController*> JIDChatControllerPair;
typedef std::pair<JID, MUCController*> JIDMUCControllerPair;
-MainController::MainController(ChatWindowFactory* chatWindowFactory, MainWindowFactory *mainWindowFactory, LoginWindowFactory *loginWindowFactory, TreeWidgetFactory *treeWidgetFactory, SettingsProvider *settings, Application* application, SystemTray* systemTray, SoundPlayer* soundPlayer, IdleDetector* idleDetector)
- : client_(NULL), chatWindowFactory_(chatWindowFactory), mainWindowFactory_(mainWindowFactory), loginWindowFactory_(loginWindowFactory), treeWidgetFactory_(treeWidgetFactory), settings_(settings),
- xmppRosterController_(NULL), rosterController_(NULL), loginWindow_(NULL), clientVersionResponder_(NULL), nickResolver_(NULL), discoResponder_(NULL) {
- idleDetector_ = idleDetector;
+MainController::MainController(ChatWindowFactory* chatWindowFactory, MainWindowFactory *mainWindowFactory, LoginWindowFactory *loginWindowFactory, TreeWidgetFactory *treeWidgetFactory, SettingsProvider *settings, Application* application, SystemTray* systemTray, SoundPlayer* soundPlayer)
+ : timerFactory_(&boostIOServiceThread_.getIOService()), idleDetector_(&idleQuerier_, &timerFactory_, 100), client_(NULL), chatWindowFactory_(chatWindowFactory), mainWindowFactory_(mainWindowFactory), loginWindowFactory_(loginWindowFactory), treeWidgetFactory_(treeWidgetFactory), settings_(settings), xmppRosterController_(NULL), rosterController_(NULL), loginWindow_(NULL), clientVersionResponder_(NULL), nickResolver_(NULL), discoResponder_(NULL) {
application_ = application;
presenceOracle_ = NULL;
avatarManager_ = NULL;
@@ -82,6 +79,9 @@ MainController::MainController(ChatWindowFactory* chatWindowFactory, MainWindowF
}
loginWindow_->onLoginRequest.connect(boost::bind(&MainController::handleLoginRequest, this, _1, _2, _3, _4));
loginWindow_->onCancelLoginRequest.connect(boost::bind(&MainController::handleCancelLoginRequest, this));
+
+ idleDetector_.setIdleTimeSeconds(600);
+ idleDetector_.onIdleChanged.connect(boost::bind(&MainController::handleInputIdleChanged, this, _1));
}
MainController::~MainController() {
@@ -165,9 +165,6 @@ void MainController::handleConnected() {
vCardRequest->onResponse.connect(boost::bind(&MainController::handleOwnVCardReceived, this, _1, _2));
vCardRequest->send();
- idleDetector_->onInputIdle.connect(boost::bind(&MainController::handleInputIdle, this));
- idleDetector_->onInputNotIdle.connect(boost::bind(&MainController::handleInputNotIdle, this));
-
//Send presence last to catch all the incoming presences.
boost::shared_ptr<Presence> initialPresence;
if (queuedPresence_.get() != NULL) {
@@ -219,19 +216,23 @@ void MainController::sendPresence(boost::shared_ptr<Presence> presence) {
}
}
-void MainController::handleInputIdle() {
- preIdlePresence_ = lastSentPresence_;
- boost::shared_ptr<Presence> presence(new Presence());
- presence->setShow(StatusShow::Away);
- presence->setStatus("Auto-away");
- sendPresence(presence);
-}
-
-void MainController::handleInputNotIdle() {
- if (client_) {
- sendPresence(preIdlePresence_);
- } else {
- queuedPresence_ = preIdlePresence_;
+void MainController::handleInputIdleChanged(bool idle) {
+ if (!client_ || !client_->isAvailable()) {
+ return;
+ }
+ if (idle) {
+ preIdlePresence_ = lastSentPresence_;
+ boost::shared_ptr<Presence> presence(new Presence());
+ presence->setShow(StatusShow::Away);
+ presence->setStatus("Auto-away");
+ sendPresence(presence);
+ }
+ else {
+ if (client_) {
+ sendPresence(preIdlePresence_);
+ } else {
+ queuedPresence_ = preIdlePresence_;
+ }
}
}
@@ -304,8 +305,6 @@ void MainController::handleCancelLoginRequest() {
void MainController::signOut() {
logout();
- idleDetector_->onInputIdle.connect(boost::bind(&MainController::handleInputIdle, this));
- idleDetector_->onInputNotIdle.connect(boost::bind(&MainController::handleInputNotIdle, this));
loginWindow_->loggedOut();
foreach (JIDChatControllerPair controllerPair, chatControllers_) {
delete controllerPair.second;
diff --git a/Swift/Controllers/MainController.h b/Swift/Controllers/MainController.h
index df6901d..270b131 100644
--- a/Swift/Controllers/MainController.h
+++ b/Swift/Controllers/MainController.h
@@ -1,10 +1,13 @@
-#ifndef SWIFTEN_MainController_H
-#define SWIFTEN_MainController_H
+#pragma once
#include <boost/signals.hpp>
#include <boost/shared_ptr.hpp>
#include <vector>
+#include "Swiften/Network/BoostIOServiceThread.h"
+#include "Swiften/Network/BoostTimerFactory.h"
+#include "SwifTools/Idle/PlatformIdleQuerier.h"
+#include "SwifTools/Idle/ActualIdleDetector.h"
#include "Swiften/Base/String.h"
#include "Swiften/Client/ClientError.h"
#include "Swiften/JID/JID.h"
@@ -25,7 +28,6 @@ namespace Swift {
class ChatWindowFactory;
class ChatController;
class EventController;
- class IdleDetector;
class MainWindowFactory;
class MainWindow;
class NickResolver;
@@ -47,7 +49,7 @@ namespace Swift {
class MainController : public MUCRegistry {
public:
- MainController(ChatWindowFactory* chatWindowFactory, MainWindowFactory *mainWindowFactory, LoginWindowFactory *loginWindowFactory, TreeWidgetFactory* treeWidgetFactory, SettingsProvider *settings, Application* application, SystemTray* systemTray, SoundPlayer* soundPlayer, IdleDetector* idleDetector);
+ MainController(ChatWindowFactory* chatWindowFactory, MainWindowFactory *mainWindowFactory, LoginWindowFactory *loginWindowFactory, TreeWidgetFactory* treeWidgetFactory, SettingsProvider *settings, Application* application, SystemTray* systemTray, SoundPlayer* soundPlayer);
~MainController();
@@ -69,8 +71,7 @@ namespace Swift {
void handleOwnVCardReceived(boost::shared_ptr<VCard> vCard, const boost::optional<ErrorPayload>& error);
ChatController* getChatController(const JID &contact);
void sendPresence(boost::shared_ptr<Presence> presence);
- void handleInputIdle();
- void handleInputNotIdle();
+ void handleInputIdleChanged(bool);
void logout();
void signOut();
@@ -79,6 +80,11 @@ namespace Swift {
void performLoginFromCachedCredentials();
void reconnectAfterError();
void setManagersEnabled(bool enabled);
+
+ BoostIOServiceThread boostIOServiceThread_;
+ BoostTimerFactory timerFactory_;
+ PlatformIdleQuerier idleQuerier_;
+ ActualIdleDetector idleDetector_;
Client* client_;
ChatWindowFactory* chatWindowFactory_;
MainWindowFactory* mainWindowFactory_;
@@ -95,7 +101,6 @@ namespace Swift {
SoftwareVersionResponder* clientVersionResponder_;
NickResolver* nickResolver_;
DiscoInfoResponder* discoResponder_;
- IdleDetector* idleDetector_;
boost::shared_ptr<CapsInfo> capsInfo_;
std::map<JID, MUCController*> mucControllers_;
std::map<JID, ChatController*> chatControllers_;
@@ -114,5 +119,3 @@ namespace Swift {
String certificateFile_;
};
}
-#endif
-