Unit tests for RemoteList are now ready
[irwi] / src / remotelist.cpp
1 #include "remotelist.h"
2
3 #include <QFile> 
4 #include <QDomElement> 
5 #include <QDomNodeList> 
6 #include <QDebug> 
7
8 RemoteList::RemoteList()
9     : valid(false)
10 {
11 }
12
13 RemoteList::RemoteList(const RemoteList &r)
14     : valid(r.valid)
15     , mfgMap(r.mfgMap)
16     , modelMap(r.modelMap)
17 {
18 }
19
20 RemoteList::RemoteList(QDomDocument &doc)
21 {
22     parse(doc);
23 }
24
25 RemoteList::~RemoteList()
26 {
27 }
28
29 void RemoteList::setContent(QDomDocument &doc)
30 {
31     mfgMap.clear();
32     modelMap.clear();
33     parse(doc);
34 }
35
36 bool RemoteList::isValid()
37 {
38     return valid;
39 }
40
41 QStringList RemoteList::letters()
42 {
43     return mfgMap.keys();
44 }
45
46 QStringList RemoteList::manufacturers(const QString &letter)
47 {
48     return mfgMap.value(letter);
49 }
50
51 QList<Model> RemoteList::models(const QString &manufacturer)
52 {
53     return modelMap.value(manufacturer);
54 }
55
56 void RemoteList::parse(QDomDocument &doc)
57 {
58     QDomNodeList chars = doc.elementsByTagName("char");
59
60     for (int i = 0; i < chars.size(); ++i)
61     {
62         QDomElement charEl = chars.at(i).toElement();
63         if (!charEl.isNull())
64         {
65             if (charEl.hasAttribute("id"))
66                 mfgMap.insert(charEl.attribute("id").at(0), parseMfgs(charEl));
67         }
68     }
69
70     // TODO: more error handling
71     valid = (mfgMap.size() > 0 &&
72              modelMap.size() > 0);
73 }
74
75 QStringList RemoteList::parseMfgs(QDomElement &charEl)
76 {
77     QStringList mfgStrings;
78     QDomNodeList mfgs = charEl.elementsByTagName("mfg");
79
80     for (int i = 0; i < mfgs.size(); ++i)
81     {
82         QDomElement mfgEl = mfgs.at(i).toElement();
83         if (!mfgEl.isNull())
84         {
85             if (mfgEl.hasAttribute("id"))
86             {
87                 mfgStrings.append(mfgEl.attribute("id"));
88                 modelMap.insert(mfgStrings.last(), parseModels(mfgEl));
89             }
90         }
91     }
92     return mfgStrings;
93 }
94
95 QList<Model> RemoteList::parseModels(QDomElement &mfgEl)
96 {
97     QList<Model> modelList;
98     QDomNodeList models = mfgEl.elementsByTagName("model");
99
100     for (int i = 0; i < models.size(); ++i)
101     {
102         QDomElement modelEl = models.at(i).toElement();
103         if (!modelEl.isNull())
104         {
105             if (modelEl.hasAttribute("name") && modelEl.hasAttribute("file"))
106             {
107                 modelList.append(Model(modelEl.attribute("name"),
108                                        modelEl.attribute("file")));
109             }
110         }
111     }
112     return modelList;
113 }
114