Use of gcsDebug instead of qDebug
[meego-garage:garage-client-services.git] / src / catalog.cpp
1 #include <QTimer>
2 #include <QtDebug>
3 #include <QFile>
4 #include <QStringList>
5 #include <QListIterator>
6 #include <QNetworkAccessManager>
7 #include "applicationmanager.h"
8 #include <garageclientservices.h>
9 #include "errorhandler.h"
10 #include "category.h"
11 #include "garagesettings.h"
12 #include "utils.h"
13 #include "catalog.h"
14
15 using namespace MeeGoGarage;
16
17 /**
18   Simulates a login after 1 second
19   */
20 void LoginJob::loginDone(void) {
21     m_catalog->m_userLoggedIn = (m_userName == QString("mbatle") && m_password == QString("mbatle"));
22     if (m_catalog->m_userLoggedIn) {
23         m_catalog->m_username = m_userName;
24     } else {
25         m_catalog->m_username.clear();
26     }
27     setResult(m_catalog->m_userLoggedIn);
28     connect(this, SIGNAL(jobOver()), m_catalog, SIGNAL(loginStatusChanged()));
29     setState(SuccessfulState);
30 }
31
32 bool LoginJob::doStart(void) {
33     QTimer::singleShot(1000, this, SLOT(loginDone()));
34     return true;
35 }
36
37 Catalog::Catalog(QObject *parent) :
38     QObject(parent),
39     m_categoryListRequested(false),
40     m_userLoggedIn(false)
41 {
42 }
43
44 CategoryList Catalog::categoryList()
45 {
46     if (!m_categoryListRequested) {
47         CategoryListJob *job = requestCategoryList();
48         //connect(job, SIGNAL(jobOver()), SLOT(onCategoryListJobOver()));
49         connect(job, SIGNAL(jobOver()), job, SLOT(deleteLater()));
50         job->start();
51         m_categoryListRequested = true;
52     }
53     return m_categoryList;
54 }
55
56 /*
57 void Catalog::onCategoryListJobFinished()
58 {
59     gcsDebug();
60
61     CategoryListJob * job = static_cast<CategoryListJob*> (sender());
62     if (job) {
63         CategoryList categoryList = job->result();
64         this->mergeCategoryList(categoryList);
65     }
66     job->deleteLater();
67 }
68
69 void Catalog::onCategoryListJobError()
70 {
71     gcsDebug();
72
73     CategoryListJob * job = static_cast<CategoryListJob*> (sender());
74     if (job) {
75         qWarning() << "Error getting category list " << job->errorString();
76     }
77     job->deleteLater();
78 }*/
79
80 bool Catalog::categoryNameLessThan(Category *&a1, Category *&a2)
81 {
82     return a1->name() < a2->name();
83 }
84
85 bool Catalog::mergeCategoryList(const CategoryList &categoryList)
86 {
87     gcsDebug();
88
89     bool updatedCategories = false;
90     Category * category;
91     foreach(category, categoryList) {
92         updatedCategories |= mergeCategory(category, false, false);
93     }
94
95     qSort(m_categoryList.begin(), m_categoryList.end(), categoryNameLessThan);
96
97     if (updatedCategories) {
98         emit categoryListUpdated();
99     }
100
101     return updatedCategories;
102 }
103
104 bool Catalog::mergeCategory(Category * category, bool sortCategories, bool emitUpdated)
105 {
106     bool updatedCategories = false;
107     Category * foundCategory = findCategoryByName(category->name());
108     if (!foundCategory) {
109         m_categoryList.append(category);
110         updatedCategories = true;
111     } else {
112         foundCategory->mergeCategory(category);
113     }
114
115     if (sortCategories) {
116         qSort(m_categoryList.begin(), m_categoryList.end(), categoryNameLessThan);
117     }
118
119     if (updatedCategories && emitUpdated) {
120         emit categoryListUpdated();
121     }
122
123     return updatedCategories;
124 }
125
126 Category *Catalog::findCategoryById(const QString & id)
127 {
128     Category *category;
129     foreach(category, m_categoryList) {
130         if (category->id() == id) {
131             return category;
132         }
133     }
134
135     return 0;
136 }
137
138 Category *Catalog::findCategoryByName(const QString & name)
139 {
140     Category *category;
141     foreach(category, m_categoryList) {
142         if (category->name() == name) {
143             return category;
144         }
145     }
146
147     return 0;
148 }
149
150 void Catalog::dumpCategories()
151 {
152     gcsDebug();
153     Utils::dumpCategoryList(m_categoryList);
154 }
155
156 QNetworkAccessManager *Catalog::networkAccessManager()
157 {
158     return GarageClientServices::instance()->networkAccessManager();
159 }
160
161 bool Catalog::mergeApplicationList(const ApplicationList &applicationList)
162 {
163     gcsDebug();
164
165     bool updated = false;
166     ApplicationList::const_iterator m;
167     for (m = applicationList.constBegin(); m != applicationList.constEnd(); m++) {
168         Application *app1 = *m;
169         Application *app2 = findApplicationByName(app1->name());
170         if (app2) {
171             m_applicationMap.insert(app1->name(), app1);
172             updated = true;
173         }
174     }
175
176     return updated;
177 }
178
179 Application * Catalog::findApplicationByName(const QString &name)
180 {
181     QMap<QString, Application*>::const_iterator i = m_applicationMap.find(name);
182     if (i == m_applicationMap.constEnd()) {
183         return 0;
184     }
185
186     return i.value();
187 }
188
189 Application * Catalog::findApplicationByPackageName(const QString &packageName)
190 {
191     QMap<QString, Application*>::const_iterator i = m_applicationMap.constBegin();
192     while (i != m_applicationMap.constEnd()) {
193         if (i.value()->packageName() == packageName) {
194             return i.value();
195         }
196     }
197
198     return 0;
199 }
200
201 void Catalog::dumpApplicationList()
202 {
203     gcsDebug();
204     Utils::dumpApplicationList(m_applicationMap.values());
205 }
206
207 LoginJob *Catalog::requestLogin(const QString & userName, const QString & password)
208 {
209     return new LoginJob(this, userName, password);
210 }
211
212 void Catalog::logout()
213 {
214     m_userLoggedIn = false;
215     m_username.clear();
216     emit loginStatusChanged();
217 }
218
219 bool Catalog::isUserLoggedIn() const
220 {
221     return m_userLoggedIn;
222 }
223
224 QString Catalog::currentUser() const
225 {
226     return m_username;
227 }