From a2a3cd7ff10e25a54676bf17b25b93eb90c365c6 Mon Sep 17 00:00:00 2001 From: Jari Jarvi Date: Thu, 10 Jun 2010 13:14:06 +0300 Subject: [PATCH] Added RemoteList for handling remote xml files. Not tested and incomplete. --- src/advsettingsdlg.cpp | 8 +- src/irctrl.cpp | 8 +- src/remotelist.cpp | 147 ++++++++++++++++++++++++++++++++++++ src/remotelist.h | 45 +++++++++++ src/src.pro | 2 + ut/ut_irctrl/ut_irctrl.cpp | 19 +++-- ut/ut_remotelist/ut_remotelist.cpp | 60 +++++++++++++++ ut/ut_remotelist/ut_remotelist.h | 25 ++++++ ut/ut_remotelist/ut_remotelist.pro | 14 ++++ 9 files changed, 314 insertions(+), 14 deletions(-) create mode 100644 src/remotelist.cpp create mode 100644 src/remotelist.h create mode 100644 ut/ut_remotelist/ut_remotelist.cpp create mode 100644 ut/ut_remotelist/ut_remotelist.h create mode 100644 ut/ut_remotelist/ut_remotelist.pro diff --git a/src/advsettingsdlg.cpp b/src/advsettingsdlg.cpp index 9d1ee65..16a0c89 100644 --- a/src/advsettingsdlg.cpp +++ b/src/advsettingsdlg.cpp @@ -73,10 +73,10 @@ void AdvSettingsDlg::setDefaults() settings->setValue("lircPort", 8765); settings->setValue("remoteName", "No remote selected"); settings->setValue("lircConf", "/etc/lircd.conf"); - settings->setValue("cmd0", "VOL+"); - settings->setValue("cmd1", "VOL-"); - settings->setValue("cmd2", "P+"); - settings->setValue("cmd3", "P-"); + settings->setValue("cmd0", "VOLUP"); + settings->setValue("cmd1", "VOLDOWN"); + settings->setValue("cmd2", "CHUP"); + settings->setValue("cmd3", "CHDOWN"); settings->setValue("cmd4", "POWER"); settings->setValue("cmd5", "MUTE"); settings->setValue("remoteUrl", diff --git a/src/irctrl.cpp b/src/irctrl.cpp index 1eb8e36..5a647d0 100644 --- a/src/irctrl.cpp +++ b/src/irctrl.cpp @@ -26,25 +26,25 @@ IrCtrl::~IrCtrl() void IrCtrl::sendCmd0() { Q_D(IrCtrl); - d->genericSendCmd(d->settings->value("cmd0", "VOL+").toString()); + d->genericSendCmd(d->settings->value("cmd0", "VOLUP").toString()); } void IrCtrl::sendCmd1() { Q_D(IrCtrl); - d->genericSendCmd(d->settings->value("cmd1", "VOL-").toString()); + d->genericSendCmd(d->settings->value("cmd1", "VOLDOWN-").toString()); } void IrCtrl::sendCmd2() { Q_D(IrCtrl); - d->genericSendCmd(d->settings->value("cmd2", "P+").toString()); + d->genericSendCmd(d->settings->value("cmd2", "CHUP").toString()); } void IrCtrl::sendCmd3() { Q_D(IrCtrl); - d->genericSendCmd(d->settings->value("cmd3", "P-").toString()); + d->genericSendCmd(d->settings->value("cmd3", "CHDOWN").toString()); } void IrCtrl::sendCmd4() diff --git a/src/remotelist.cpp b/src/remotelist.cpp new file mode 100644 index 0000000..6fc7cd1 --- /dev/null +++ b/src/remotelist.cpp @@ -0,0 +1,147 @@ +#include "remotelist.h" +#include +#include +#include +#include + +RemoteList::RemoteList() + : valid(false) +{ +} + +RemoteList::RemoteList(const RemoteList &r) + : valid(r.valid) + , mfgMap(r.mfgMap) + , modelMap(r.modelMap) +{ +} + +RemoteList::RemoteList(QDomDocument &doc) +{ + parse(doc); +} + +RemoteList::RemoteList(const QString &xmlFile) +{ + parse(xmlFile); +} + +RemoteList::~RemoteList() +{ +} + +void RemoteList::setContent(QDomDocument &doc) +{ + mfgMap.clear(); + modelMap.clear(); + parse(doc); +} + +void RemoteList::setContent(const QString &xmlFile) +{ + mfgMap.clear(); + modelMap.clear(); + parse(xmlFile); +} + +bool RemoteList::isValid() +{ + return valid; +} + +QList RemoteList::letters() +{ + return mfgMap.keys(); +} + +QStringList RemoteList::manufacturers(const QChar &letter) +{ + return mfgMap.value(letter); +} + +QList RemoteList::models(const QString &manufacturer) +{ + return modelMap.value(manufacturer); +} + +void RemoteList::parse(const QString &xmlFile) +{ + QFile file(xmlFile); + QDomDocument doc; + + if (!file.open(QIODevice::ReadOnly)) + { + valid = false; + return; + } + + if (!doc.setContent(&file)) + { + file.close(); + valid = false; + return; + } + file.close(); + + parse(doc); +} + +void RemoteList::parse(QDomDocument &doc) +{ + QDomNodeList chars = doc.elementsByTagName("char"); + + for (int i = 0; i < chars.size(); ++i) + { + QDomElement charEl = chars.at(i).toElement(); + if (!charEl.isNull()) + { + if (charEl.hasAttribute("id")) + mfgMap.insert(charEl.attribute("id").at(0), parseMfgs(charEl)); + } + } + + valid = (mfgMap.size() > 0 && + modelMap.size() > 0 && + mfgMap.values().size() == modelMap.keys().size()); +} + +QStringList RemoteList::parseMfgs(QDomElement &charEl) +{ + QStringList mfgStrings; + QDomNodeList mfgs = charEl.elementsByTagName("mfg"); + + for (int i = 0; i < mfgs.size(); ++i) + { + QDomElement mfgEl = mfgs.at(i).toElement(); + if (!mfgEl.isNull()) + { + if (mfgEl.hasAttribute("id")) + { + mfgStrings.append(mfgEl.attribute("id")); + modelMap.insert(mfgStrings.last(), parseModels(mfgEl)); + } + } + } + return mfgStrings; +} + +QList RemoteList::parseModels(QDomElement &mfgEl) +{ + QList modelList; + QDomNodeList models = mfgEl.elementsByTagName("model"); + + for (int i = 0; i < models.size(); ++i) + { + QDomElement modelEl = models.at(i).toElement(); + if (!modelEl.isNull()) + { + if (modelEl.hasAttribute("name") && modelEl.hasAttribute("file")) + { + modelList.append(Model(modelEl.attribute("name"), + modelEl.attribute("file"))); + } + } + } + return modelList; +} + diff --git a/src/remotelist.h b/src/remotelist.h new file mode 100644 index 0000000..796bce0 --- /dev/null +++ b/src/remotelist.h @@ -0,0 +1,45 @@ +#ifndef _REMOTELIST_H_ +#define _REMOTELIST_H_ + +#include +#include +#include +#include +#include "model.h" + +class RemoteList +{ +public: + RemoteList(); + RemoteList(const RemoteList &); + RemoteList(QDomDocument &); + RemoteList(const QString &xmlFile); + ~RemoteList(); + + void setContent(QDomDocument &); + void setContent(const QString &xmlFile); + + // Returns false if document is not set or it's invalid + bool isValid(); + + QList letters(); + QStringList manufacturers(const QChar &letter); + QList models(const QString &manufacturer); + +private: + void parse(const QString &xmlFile); + void parse(QDomDocument &doc); + QStringList parseMfgs(QDomElement &charEl); + QList parseModels(QDomElement &mfgEl); + void printMaps(); + +private: + bool valid; + QMap mfgMap; + QMap > modelMap; +}; + +#endif // _REMOTELIST_H_ + + + diff --git a/src/src.pro b/src/src.pro index 4d5df7b..e0ad1a6 100644 --- a/src/src.pro +++ b/src/src.pro @@ -10,6 +10,7 @@ SOURCES += selectremotedlg.cpp SOURCES += advsettingsdlg.cpp SOURCES += settingstable.cpp SOURCES += aboutdlg.cpp +SOURCES += remotelist.cpp HEADERS += mainwidget.h HEADERS += irctrl.h @@ -19,6 +20,7 @@ HEADERS += selectremotedlg.h HEADERS += advsettingsdlg.h HEADERS += settingstable.h HEADERS += aboutdlg.h +HEADERS += remotelist.h include(qmaemo5homescreenadaptor/qmaemo5homescreenadaptor.pri) diff --git a/ut/ut_irctrl/ut_irctrl.cpp b/ut/ut_irctrl/ut_irctrl.cpp index c39acff..ff22bfd 100644 --- a/ut/ut_irctrl/ut_irctrl.cpp +++ b/ut/ut_irctrl/ut_irctrl.cpp @@ -41,7 +41,8 @@ void Ut_IrCtrl::testSendCmd0() QCOMPARE(socketOut.size(), 0); subject.sendCmd0(); QCOMPARE(socketOut.size(), 1); - QCOMPARE(socketOut.at(0), QString("SEND_ONCE REMOTE_NAME_MISSING VOL+\n")); + QCOMPARE(socketOut.at(0), + QString("SEND_ONCE REMOTE_NAME_MISSING VOLUP\n")); } void Ut_IrCtrl::testSendCmd1() @@ -50,7 +51,8 @@ void Ut_IrCtrl::testSendCmd1() QCOMPARE(socketOut.size(), 0); subject.sendCmd1(); QCOMPARE(socketOut.size(), 1); - QCOMPARE(socketOut.at(0), QString("SEND_ONCE REMOTE_NAME_MISSING VOL-\n")); + QCOMPARE(socketOut.at(0), + QString("SEND_ONCE REMOTE_NAME_MISSING VOLDOWN\n")); } void Ut_IrCtrl::testSendCmd2() @@ -59,7 +61,8 @@ void Ut_IrCtrl::testSendCmd2() QCOMPARE(socketOut.size(), 0); subject.sendCmd2(); QCOMPARE(socketOut.size(), 1); - QCOMPARE(socketOut.at(0), QString("SEND_ONCE REMOTE_NAME_MISSING P+\n")); + QCOMPARE(socketOut.at(0), + QString("SEND_ONCE REMOTE_NAME_MISSING CHUP\n")); } void Ut_IrCtrl::testSendCmd3() @@ -68,7 +71,8 @@ void Ut_IrCtrl::testSendCmd3() QCOMPARE(socketOut.size(), 0); subject.sendCmd3(); QCOMPARE(socketOut.size(), 1); - QCOMPARE(socketOut.at(0), QString("SEND_ONCE REMOTE_NAME_MISSING P-\n")); + QCOMPARE(socketOut.at(0), + QString("SEND_ONCE REMOTE_NAME_MISSING CHDOWN\n")); } void Ut_IrCtrl::testSendCmd4() @@ -77,7 +81,8 @@ void Ut_IrCtrl::testSendCmd4() QCOMPARE(socketOut.size(), 0); subject.sendCmd4(); QCOMPARE(socketOut.size(), 1); - QCOMPARE(socketOut.at(0), QString("SEND_ONCE REMOTE_NAME_MISSING POWER\n")); + QCOMPARE(socketOut.at(0), + QString("SEND_ONCE REMOTE_NAME_MISSING POWER\n")); } void Ut_IrCtrl::testSendCmd5() @@ -86,8 +91,10 @@ void Ut_IrCtrl::testSendCmd5() QCOMPARE(socketOut.size(), 0); subject.sendCmd5(); QCOMPARE(socketOut.size(), 1); - QCOMPARE(socketOut.at(0), QString("SEND_ONCE REMOTE_NAME_MISSING MUTE\n")); + QCOMPARE(socketOut.at(0), + QString("SEND_ONCE REMOTE_NAME_MISSING MUTE\n")); } QTEST_MAIN(Ut_IrCtrl) + diff --git a/ut/ut_remotelist/ut_remotelist.cpp b/ut/ut_remotelist/ut_remotelist.cpp new file mode 100644 index 0000000..16b9daa --- /dev/null +++ b/ut/ut_remotelist/ut_remotelist.cpp @@ -0,0 +1,60 @@ +#include "ut_remotelist.h" +#include "remotelist.h" +#include +#include + +void Ut_RemoteList::initTestCase() +{ +} + +void Ut_RemoteList::cleanupTestCase() +{ +} + +void Ut_RemoteList::init() +{ +} + +void Ut_RemoteList::testSetContent() +{ +} + +void Ut_RemoteList::testIsValid() +{ + RemoteList subject("remotes.xml"); + QCOMPARE(subject.isValid(), true); +} + +void Ut_RemoteList::testIsValid_InvalidFile() +{ +// RemoteList subject("notxmlfile"); +// QCOMPARE(subject.isValid(), false); +} + +void Ut_RemoteList::testIsValid_FileNotFound() +{ +// RemoteList subject("thisdoesnotexist"); +// QCOMPARE(subject.isValid(), false); +} + +void Ut_RemoteList::testLetters() +{ + +} + +void Ut_RemoteList::testManufacturers() +{ + +} + +void Ut_RemoteList::testModels() +{ + +} + + + + +QTEST_MAIN(Ut_RemoteList) + + diff --git a/ut/ut_remotelist/ut_remotelist.h b/ut/ut_remotelist/ut_remotelist.h new file mode 100644 index 0000000..939e234 --- /dev/null +++ b/ut/ut_remotelist/ut_remotelist.h @@ -0,0 +1,25 @@ +#ifndef _UT_REMOTELIST_H_ +#define _UT_REMOTELIST_H_ + +#include + +class Ut_RemoteList: public QObject +{ + Q_OBJECT + +private slots: + void initTestCase(); + void cleanupTestCase(); + void init(); // Before each test case + + void testSetContent(); + void testIsValid(); + void testIsValid_InvalidFile(); + void testIsValid_FileNotFound(); + void testLetters(); + void testManufacturers(); + void testModels(); +}; + +#endif // UT_REMOTELIST_H + diff --git a/ut/ut_remotelist/ut_remotelist.pro b/ut/ut_remotelist/ut_remotelist.pro new file mode 100644 index 0000000..471db5a --- /dev/null +++ b/ut/ut_remotelist/ut_remotelist.pro @@ -0,0 +1,14 @@ +!include( ../ut.pri ) { + error( Could not find the ut.pri file ) +} + +QT += xml +QT += testlib + +HEADERS += model.h +HEADERS += ut_remotelist.h +HEADERS += remotelist.h + +SOURCES += ut_remotelist.cpp +SOURCES += remotelist.cpp + -- 1.7.9.5