Plasma
pollingwatcher.cpp
Go to the documentation of this file.00001 #include "pollingwatcher.h"
00002
00003 #include <QTimer>
00004
00005 #include <KDebug>
00006
00007 #include "player.h"
00008 #include "playerfactory.h"
00009
00010 PollingWatcher::PollingWatcher(QObject* parent)
00011 : QObject(parent),
00012 m_timer(0)
00013 {
00014 setObjectName("PollingWatcher");
00015 }
00016
00017 QList<Player::Ptr> PollingWatcher::players()
00018 {
00019 return m_players.values();
00020 }
00021
00022 void PollingWatcher::addFactory(PollingPlayerFactory* factory)
00023 {
00024 if (factory->exists()) {
00025 Player::Ptr player = factory->create();
00026 if (!player.isNull()) {
00027 m_players.insert(player);
00028 m_usedFactories.insert(factory);
00029 emit newPlayer(player);
00030 } else {
00031 kWarning() << "Failed to create a player";
00032 m_polledFactories.insert(factory);
00033 }
00034 } else {
00035 m_polledFactories.insert(factory);
00036 }
00037 if (!m_timer) {
00038 m_timer = new QTimer(this);
00039 m_timer->setInterval(5000);
00040 connect(m_timer, SIGNAL(timeout()), this, SLOT(checkPlayers()));
00041 m_timer->start();
00042 }
00043 }
00044
00045 void PollingWatcher::checkPlayers()
00046 {
00047 foreach (Player::Ptr player, m_players) {
00048 if (!player->isRunning()) {
00049 m_players.remove(player);
00050 PollingPlayerFactory* factory =
00051 qobject_cast<PollingPlayerFactory*>(player->factory());
00052 if (factory) {
00053 m_usedFactories.remove(factory);
00054 m_polledFactories.insert(factory);
00055 } else {
00056 kWarning() << "Missing factory for player" << player->name();
00057 }
00058 emit playerDisappeared(player);
00059 }
00060 }
00061 foreach (PollingPlayerFactory* factory, m_polledFactories) {
00062 if (factory->exists()) {
00063 Player::Ptr player = factory->create();
00064 if (!player.isNull()) {
00065 m_players.insert(player);
00066 m_polledFactories.remove(factory);
00067 m_usedFactories.insert(factory);
00068 emit newPlayer(player);
00069 } else {
00070 kWarning() << "Failed to create a player";
00071 }
00072 }
00073 }
00074 m_timer->start();
00075 }
00076