Added RemoteList for handling remote xml files.
authorJari Jarvi <t7jaja00@students.oamk.fi>
Thu, 10 Jun 2010 10:14:06 +0000 (13:14 +0300)
committerJari Jarvi <t7jaja00@students.oamk.fi>
Thu, 10 Jun 2010 10:14:06 +0000 (13:14 +0300)
Not tested and incomplete.

src/advsettingsdlg.cpp
src/irctrl.cpp
src/remotelist.cpp [new file with mode: 0644]
src/remotelist.h [new file with mode: 0644]
src/src.pro
ut/ut_irctrl/ut_irctrl.cpp
ut/ut_remotelist/ut_remotelist.cpp [new file with mode: 0644]
ut/ut_remotelist/ut_remotelist.h [new file with mode: 0644]
ut/ut_remotelist/ut_remotelist.pro [new file with mode: 0644]

index 9d1ee65..16a0c89 100644 (file)
@@ -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",
index 1eb8e36..5a647d0 100644 (file)
@@ -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 (file)
index 0000000..6fc7cd1
--- /dev/null
@@ -0,0 +1,147 @@
+#include "remotelist.h"
+#include <QFile> 
+#include <QDomElement> 
+#include <QDomNodeList> 
+#include <QDebug> 
+
+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<QChar> RemoteList::letters()
+{
+    return mfgMap.keys();
+}
+
+QStringList RemoteList::manufacturers(const QChar &letter)
+{
+    return mfgMap.value(letter);
+}
+
+QList<Model> 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<Model> RemoteList::parseModels(QDomElement &mfgEl)
+{
+    QList<Model> 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 (file)
index 0000000..796bce0
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef _REMOTELIST_H_
+#define _REMOTELIST_H_
+
+#include <QDomDocument>
+#include <QStringList>
+#include <QMap>
+#include <QList>
+#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<QChar> letters();
+    QStringList manufacturers(const QChar &letter);
+    QList<Model> models(const QString &manufacturer);
+
+private:
+    void parse(const QString &xmlFile);
+    void parse(QDomDocument &doc);
+    QStringList parseMfgs(QDomElement &charEl);
+    QList<Model> parseModels(QDomElement &mfgEl);
+    void printMaps();
+    
+private:
+    bool valid;
+    QMap<QChar, QStringList> mfgMap;
+    QMap<QString, QList<Model> > modelMap;
+};
+
+#endif // _REMOTELIST_H_
+
+
+
index 4d5df7b..e0ad1a6 100644 (file)
@@ -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)
index c39acff..ff22bfd 100644 (file)
@@ -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 (file)
index 0000000..16b9daa
--- /dev/null
@@ -0,0 +1,60 @@
+#include "ut_remotelist.h"
+#include "remotelist.h"
+#include <QtTest>
+#include <QStringList>
+
+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 (file)
index 0000000..939e234
--- /dev/null
@@ -0,0 +1,25 @@
+#ifndef _UT_REMOTELIST_H_
+#define _UT_REMOTELIST_H_
+
+#include <QObject>
+
+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 (file)
index 0000000..471db5a
--- /dev/null
@@ -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
+