summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'SwifTools')
-rw-r--r--SwifTools/Idle/MacOSXIdleQuerier.cpp25
-rw-r--r--SwifTools/Idle/MacOSXIdleQuerier.h17
-rw-r--r--SwifTools/Idle/PlatformIdleQuerier.cpp9
-rw-r--r--SwifTools/Idle/UnitTest/ActualIdleDetectorTest.cpp10
-rw-r--r--SwifTools/SConscript2
5 files changed, 55 insertions, 8 deletions
diff --git a/SwifTools/Idle/MacOSXIdleQuerier.cpp b/SwifTools/Idle/MacOSXIdleQuerier.cpp
new file mode 100644
index 0000000..ac6dff9
--- /dev/null
+++ b/SwifTools/Idle/MacOSXIdleQuerier.cpp
@@ -0,0 +1,25 @@
+#include "SwifTools/Idle/MacOSXIdleQuerier.h"
+
+#include <cassert>
+#include <iostream>
+#include <CoreFoundation/CoreFoundation.h>
+
+namespace Swift {
+
+MacOSXIdleQuerier::MacOSXIdleQuerier() : ioService(NULL) {
+ mach_port_t masterPort;
+ IOMasterPort(MACH_PORT_NULL, &masterPort);
+ ioService = IOServiceGetMatchingService(masterPort, IOServiceMatching("IOHIDSystem"));
+ assert(ioService);
+}
+
+int MacOSXIdleQuerier::getIdleTimeSeconds() {
+ CFTypeRef property = IORegistryEntryCreateCFProperty(ioService, CFSTR("HIDIdleTime"), kCFAllocatorDefault, 0);
+ uint64_t idle = 0;
+ bool result = CFNumberGetValue((CFNumberRef)property, kCFNumberSInt64Type, &idle);
+ assert(result);
+ CFRelease(property);
+ return idle / 1000000000;
+}
+
+}
diff --git a/SwifTools/Idle/MacOSXIdleQuerier.h b/SwifTools/Idle/MacOSXIdleQuerier.h
new file mode 100644
index 0000000..f70432d
--- /dev/null
+++ b/SwifTools/Idle/MacOSXIdleQuerier.h
@@ -0,0 +1,17 @@
+#pragma once
+
+#include <IOKit/IOKitLib.h>
+
+#include "SwifTools/Idle/IdleQuerier.h"
+
+namespace Swift {
+ class MacOSXIdleQuerier : public IdleQuerier {
+ public:
+ MacOSXIdleQuerier();
+
+ virtual int getIdleTimeSeconds();
+
+ private:
+ io_service_t ioService;
+ };
+}
diff --git a/SwifTools/Idle/PlatformIdleQuerier.cpp b/SwifTools/Idle/PlatformIdleQuerier.cpp
index 76a3f7d..80a5da3 100644
--- a/SwifTools/Idle/PlatformIdleQuerier.cpp
+++ b/SwifTools/Idle/PlatformIdleQuerier.cpp
@@ -1,26 +1,31 @@
#include "SwifTools/Idle/PlatformIdleQuerier.h"
+#include "Swiften/Base/Platform.h"
-#if defined(HAVE_XSS)
+#if defined(SWIFTEN_PLATFORM_MACOSX)
+#include "SwifTools/Idle/MacOSXIdleQuerier.h"
+#elif defined(HAVE_XSS)
#include "SwifTools/Idle/XSSIdleQuerier.h"
#else
#include "SwifTools/Idle/DummyIdleQuerier.h"
#endif
#include <cassert>
#include <iostream>
namespace Swift {
PlatformIdleQuerier::PlatformIdleQuerier() : querier(NULL) {
-#if defined(HAVE_XSS)
+#if defined(SWIFTEN_PLATFORM_MACOSX)
+ querier = new MacOSXIdleQuerier();
+#elif defined(HAVE_XSS)
querier = new XSSIdleQuerier();
#else
querier = new DummyIdleQuerier();
#endif
}
PlatformIdleQuerier::~PlatformIdleQuerier() {
delete querier;
}
}
diff --git a/SwifTools/Idle/UnitTest/ActualIdleDetectorTest.cpp b/SwifTools/Idle/UnitTest/ActualIdleDetectorTest.cpp
index 99a7099..a191b21 100644
--- a/SwifTools/Idle/UnitTest/ActualIdleDetectorTest.cpp
+++ b/SwifTools/Idle/UnitTest/ActualIdleDetectorTest.cpp
@@ -1,138 +1,138 @@
#include <cppunit/extensions/HelperMacros.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <boost/bind.hpp>
#include "SwifTools/Idle/ActualIdleDetector.h"
#include "SwifTools/Idle/IdleQuerier.h"
#include "Swiften/Base/foreach.h"
#include "Swiften/Network/TimerFactory.h"
#include "Swiften/Network/Timer.h"
using namespace Swift;
class ActualIdleDetectorTest : public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(ActualIdleDetectorTest);
CPPUNIT_TEST(testDestructor);
CPPUNIT_TEST(testHandleTick_Idle);
CPPUNIT_TEST(testHandleTick_Idle_AlreadyIdle);
CPPUNIT_TEST(testHandleTick_NotIdle);
CPPUNIT_TEST(testHandleTick_NotIdle_AlreadyNotIdle);
CPPUNIT_TEST_SUITE_END();
public:
void setUp() {
querier = new MockIdleQuerier();
timerFactory = new MockTimerFactory();
idleEvents.clear();
}
void tearDown() {
delete timerFactory;
delete querier;
}
void testDestructor() {
ActualIdleDetector* testling = createDetector();
testling->setIdleTimeSeconds(15);
delete testling;
querier->idleTime = 15;
timerFactory->updateTime(15000);
- CPPUNIT_ASSERT_EQUAL(0U, idleEvents.size());
+ CPPUNIT_ASSERT_EQUAL(0, static_cast<int>(idleEvents.size()));
}
void testHandleTick_Idle() {
std::auto_ptr<ActualIdleDetector> testling(createDetector());
testling->setIdleTimeSeconds(15);
querier->idleTime = 15;
timerFactory->updateTime(15000);
- CPPUNIT_ASSERT_EQUAL(1U, idleEvents.size());
+ CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(idleEvents.size()));
CPPUNIT_ASSERT(idleEvents[0]);
}
void testHandleTick_Idle_AlreadyIdle() {
std::auto_ptr<ActualIdleDetector> testling(createDetector());
testling->setIdleTimeSeconds(15);
querier->idleTime = 15;
timerFactory->updateTime(15000);
querier->idleTime = 30;
timerFactory->updateTime(30000);
- CPPUNIT_ASSERT_EQUAL(1U, idleEvents.size());
+ CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(idleEvents.size()));
CPPUNIT_ASSERT(idleEvents[0]);
}
void testHandleTick_NotIdle() {
std::auto_ptr<ActualIdleDetector> testling(createDetector());
testling->setIdleTimeSeconds(15);
querier->idleTime = 15;
timerFactory->updateTime(15000);
querier->idleTime = 5;
timerFactory->updateTime(30000);
- CPPUNIT_ASSERT_EQUAL(2U, idleEvents.size());
+ CPPUNIT_ASSERT_EQUAL(2, static_cast<int>(idleEvents.size()));
CPPUNIT_ASSERT(idleEvents[0]);
CPPUNIT_ASSERT(!idleEvents[1]);
}
void testHandleTick_NotIdle_AlreadyNotIdle() {
std::auto_ptr<ActualIdleDetector> testling(createDetector());
testling->setIdleTimeSeconds(15);
querier->idleTime = 5;
timerFactory->updateTime(15000);
- CPPUNIT_ASSERT_EQUAL(0U, idleEvents.size());
+ CPPUNIT_ASSERT_EQUAL(0, static_cast<int>(idleEvents.size()));
}
private:
ActualIdleDetector* createDetector() {
ActualIdleDetector* detector = new ActualIdleDetector(querier, timerFactory, 10);
detector->onIdleChanged.connect(boost::bind(&ActualIdleDetectorTest::handleIdle, this, _1));
return detector;
}
void handleIdle(bool b) {
idleEvents.push_back(b);
}
private:
struct MockIdleQuerier : public IdleQuerier {
MockIdleQuerier() : idleTime(0) {}
virtual int getIdleTimeSeconds() { return idleTime; }
int idleTime;
};
struct MockTimer : public Timer {
MockTimer(int interval) : interval(interval), running(false), lastTime(0) {}
virtual void start() {
running = true;
}
virtual void stop() {
running = false;
}
virtual void updateTime(int currentTime) {
if (lastTime == currentTime) {
return;
}
if (running) {
int time = lastTime;
while (time <= currentTime) {
onTick();
time += interval;
}
}
lastTime = currentTime;
}
int interval;
bool running;
int lastTime;
diff --git a/SwifTools/SConscript b/SwifTools/SConscript
index cff2c6b..a92e0dc 100644
--- a/SwifTools/SConscript
+++ b/SwifTools/SConscript
@@ -1,35 +1,35 @@
Import("env")
env["SWIFTOOLS_FLAGS"] = {
"LIBPATH": [Dir(".")],
"LIBS": ["SwifTools"]
}
myenv = env.Clone()
myenv.MergeFlags(myenv["BOOST_FLAGS"])
sources = [
"Idle/IdleDetector.cpp",
"Idle/ActualIdleDetector.cpp",
"Idle/IdleQuerier.cpp",
"Idle/PlatformIdleQuerier.cpp",
"Linkify.cpp",
]
if myenv["PLATFORM"] == "win32" :
pass
elif myenv["PLATFORM"] == "darwin" :
- pass
+ sources += ["Idle/MacOSXIdleQuerier.cpp"]
elif myenv["HAVE_XSS"] :
myenv.Append(CPPDEFINES = ["HAVE_XSS"])
sources += ["Idle/XSSIdleQuerier.cpp"]
else :
sources += ["Idle/DummyIdleQuerier.cpp"]
myenv.StaticLibrary("SwifTools", sources)
SConscript(dirs = [
"Idle/IdleQuerierTest",
"Idle/UnitTest",
"UnitTest"
])