diff options
author | Remko Tronçon <git@el-tramo.be> | 2009-11-24 20:03:09 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2009-11-24 20:03:09 (GMT) |
commit | 48fc9e9fb0abd42d47a95042837a026730f20f34 (patch) | |
tree | 3390dbf200fcde18c2b1c6877c29a143e80671fd /Swift/Controllers | |
parent | 3b7e581ad1d57170d9809e27437ee3c468c5702f (diff) | |
download | swift-contrib-48fc9e9fb0abd42d47a95042837a026730f20f34.zip swift-contrib-48fc9e9fb0abd42d47a95042837a026730f20f34.tar.bz2 |
Integrated new IdleDetector.
Diffstat (limited to 'Swift/Controllers')
-rw-r--r-- | Swift/Controllers/IdleDetector.h | 16 | ||||
-rw-r--r-- | Swift/Controllers/MainController.cpp | 45 | ||||
-rw-r--r-- | Swift/Controllers/MainController.h | 21 |
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 - |