45 } |
45 } |
46 |
46 |
47 /**============================================================== |
47 /**============================================================== |
48 * Description: Constructor of BrowserContent |
48 * Description: Constructor of BrowserContent |
49 ================================================================*/ |
49 ================================================================*/ |
50 BrowserContent::BrowserContent(QString aClientName) |
50 BrowserContent::BrowserContent(QString aClientName) //used for test purposes only |
51 { |
51 { |
52 BOOKMARKSCLIENT_INITIALIZE(BrowserContent); |
52 BOOKMARKSCLIENT_INITIALIZE(BrowserContent); |
53 |
53 |
54 priv->m_connectionName=aClientName; |
54 priv->m_connectionName=aClientName; |
55 createDatabase(); |
55 createDatabase(dbLocation); |
|
56 } |
|
57 |
|
58 BrowserContent::BrowserContent(QString aClientName, QString databaseName) |
|
59 { |
|
60 BOOKMARKSCLIENT_INITIALIZE(BrowserContent); |
|
61 |
|
62 priv->m_connectionName=aClientName; |
|
63 createDatabase(databaseName); |
56 } |
64 } |
57 |
65 |
58 /**============================================================== |
66 /**============================================================== |
59 * Description: creates the database |
67 * Description: creates the database |
60 ================================================================*/ |
68 ================================================================*/ |
61 int BrowserContent::createDatabase() |
69 int BrowserContent::createDatabase(QString name) |
62 { |
70 { |
63 BOOKMARKSCLIENT_PRIVATEPTR(BrowserContent); |
71 BOOKMARKSCLIENT_PRIVATEPTR(BrowserContent); |
64 |
72 |
65 QSqlDatabase sqlDB = QSqlDatabase::addDatabase("QSQLITE", priv->m_connectionName); |
73 QSqlDatabase sqlDB = QSqlDatabase::addDatabase("QSQLITE", priv->m_connectionName); |
66 sqlDB.setHostName("Simulator"); |
74 sqlDB.setHostName("Simulator"); |
67 sqlDB.setDatabaseName(dbLocation); |
75 sqlDB.setDatabaseName(name); |
68 |
|
69 |
76 |
70 if (!sqlDB.open()) |
77 if (!sqlDB.open()) |
71 return -1; |
78 return -1; |
72 QSqlError error; |
79 QSqlError error; |
73 |
80 |
98 ================================================================*/ |
105 ================================================================*/ |
99 BrowserContent::~BrowserContent() |
106 BrowserContent::~BrowserContent() |
100 { |
107 { |
101 } |
108 } |
102 |
109 |
103 /**============================================================== |
|
104 * Description: adds the bookmark to the database |
|
105 ================================================================*/ |
|
106 int BrowserContent::addBookmark( |
|
107 BookmarkLeaf* BookmarkContent) |
|
108 { |
|
109 BOOKMARKSCLIENT_PRIVATEPTR(BrowserContent); |
|
110 QSqlError error; |
|
111 QString title =BookmarkContent->getTitle(); |
|
112 QString url = BookmarkContent->getUrl(); |
|
113 QString adate =BookmarkContent->getDate().toString("dd.MM.yyyy"); |
|
114 QString tags = BookmarkContent->getTag(); |
|
115 int aIndex=BookmarkContent->getIndex(); |
|
116 QSqlDatabase db = QSqlDatabase::database(priv->m_connectionName); |
|
117 |
|
118 if (db.isOpen()) { |
|
119 QSqlQuery query(db); |
|
120 query.prepare("UPDATE BookMarkTable SET rowindex=rowindex+1 WHERE rowindex>=:aIndex"); |
|
121 query.bindValue(":aIndex", aIndex); |
|
122 query.exec(); |
|
123 error = query.lastError(); |
|
124 |
|
125 query.prepare("INSERT INTO BookMarkTable (title, url, adate, tags, rowindex, domain) " |
|
126 "VALUES (:title, :url, :adate, :tags, :aIndex, :domain)"); |
|
127 |
|
128 query.bindValue(":title", QVariant(title)); |
|
129 query.bindValue(":url", QVariant(url)); |
|
130 query.bindValue(":adate", QVariant(adate)); |
|
131 query.bindValue(":tags", QVariant(tags)); |
|
132 query.bindValue(":rowindex",QVariant(aIndex)); |
|
133 query.bindValue(":domain", QVariant(filterUrl(url))); |
|
134 |
|
135 query.exec(); |
|
136 error = query.lastError(); |
|
137 } |
|
138 |
|
139 if (error.type() == QSqlError::NoError) { |
|
140 return ErrNone; |
|
141 } else { |
|
142 return ErrGeneral; |
|
143 } |
|
144 } |
|
145 |
|
146 /**============================================================== |
|
147 * Description: deletes the requested bookmark |
|
148 ================================================================*/ |
|
149 int BrowserContent::deleteBookmark(QString atitle) |
|
150 { |
|
151 BOOKMARKSCLIENT_PRIVATEPTR(BrowserContent); |
|
152 QSqlError error; |
|
153 QString title = atitle; |
|
154 QSqlDatabase db = QSqlDatabase::database(priv->m_connectionName); |
|
155 bool ok; |
|
156 if (db.isOpen()) { |
|
157 QSqlQuery query(db); |
|
158 |
|
159 if(atitle.contains("'", Qt::CaseInsensitive)) |
|
160 atitle.replace(QString("'"), QString("''")); |
|
161 |
|
162 query.prepare("SELECT title,url,adate,tags,rowindex FROM BookMarkTable WHERE title=:title"); |
|
163 query.bindValue(":title", title); |
|
164 query.exec(); |
|
165 error = query.lastError(); |
|
166 query.next(); |
|
167 int aIndex=query.value(4).toInt(&ok); |
|
168 |
|
169 query.prepare("DELETE FROM BookMarkTable WHERE title=:title"); |
|
170 query.bindValue(":title", title); |
|
171 query.exec(); |
|
172 error = query.lastError(); |
|
173 if (error.type() == QSqlError::NoError) { |
|
174 query.prepare("UPDATE BookMarkTable set rowindex=rowindex-1 WHERE rowindex>:aIndex"); |
|
175 query.bindValue(":aIndex", aIndex); |
|
176 query.exec(); |
|
177 error = query.lastError(); |
|
178 } |
|
179 } |
|
180 |
|
181 if (error.type() == QSqlError::NoError) { |
|
182 return ErrNone; |
|
183 } else { |
|
184 return ErrGeneral; |
|
185 } |
|
186 |
|
187 } |
|
188 |
110 |
189 |
111 |
190 /**============================================================== |
112 /**============================================================== |
191 * Description: fetches Allbookmarks From database |
113 * Description: fetches Allbookmarks From database |
192 ================================================================*/ |
114 ================================================================*/ |
193 QList<BookmarkLeaf*> BrowserContent::fetchAllBookmarks() |
115 QList<BookmarkLeaf*> BrowserContent::fetchAllBookmarks() |
194 { |
116 { |
195 BOOKMARKSCLIENT_PRIVATEPTR(BrowserContent); |
117 BOOKMARKSCLIENT_PRIVATEPTR(BrowserContent); |
196 QSqlDatabase db = QSqlDatabase::database(priv->m_connectionName); |
118 QSqlDatabase db = QSqlDatabase::database(priv->m_connectionName); |
197 QList<BookmarkLeaf*> nodeslist; |
119 QList<BookmarkLeaf*> nodeslist; |
198 |
120 |
199 bool dbopen = db.isOpen(); |
121 bool dbopen = db.isOpen(); |
200 bool ok; |
122 bool ok; |
201 |
123 |
202 if (dbopen) { |
124 if (dbopen) { |
203 QSqlQuery query(db); |
125 QSqlQuery query(db); |
258 } |
180 } |
259 } |
181 } |
260 return nodeslist; |
182 return nodeslist; |
261 } |
183 } |
262 |
184 |
263 /**============================================================== |
|
264 * Description: Reoders the Bokmarks based on index |
|
265 ================================================================*/ |
|
266 int BrowserContent::reorderBokmarks(QString title,int new_index) |
|
267 { |
|
268 BOOKMARKSCLIENT_PRIVATEPTR(BrowserContent); |
|
269 QSqlDatabase db = QSqlDatabase::database(priv->m_connectionName); |
|
270 QSqlQuery query(db); |
|
271 QSqlError error; |
|
272 bool ok; |
|
273 |
|
274 if(title.contains("'", Qt::CaseInsensitive)) |
|
275 title.replace(QString("'"), QString("''")); |
|
276 |
|
277 query.prepare("SELECT title,url,adate,tags,rowindex FROM BookMarkTable WHERE title=:title"); |
|
278 query.bindValue(":title", title); |
|
279 query.exec(); |
|
280 error = query.lastError(); |
|
281 query.next(); |
|
282 int old_index=query.value(4).toInt(&ok); |
|
283 |
|
284 if(old_index>new_index) { |
|
285 //Moving the item UP |
|
286 query.prepare("UPDATE BookMarkTable set rowindex=rowindex+1 WHERE rowindex BETWEEN :new_index AND :old_index-1"); |
|
287 } else if(old_index<new_index) { |
|
288 //Moving items Down |
|
289 query.prepare("UPDATE BookMarkTable set rowindex=rowindex-1 WHERE rowindex BETWEEN :old_index+1 AND :new_index"); |
|
290 } |
|
291 |
|
292 query.bindValue(":old_index", old_index); |
|
293 query.bindValue(":new_index", new_index); |
|
294 //Moving items Down |
|
295 query.exec(); |
|
296 error= query.lastError(); |
|
297 |
|
298 if (error.type() == QSqlError::NoError) { |
|
299 query.prepare("UPDATE BookMarkTable set rowindex=:new_index WHERE title=:title"); |
|
300 query.bindValue(":title", title); |
|
301 query.bindValue(":new_index", new_index); |
|
302 query.exec(); |
|
303 error = query.lastError(); |
|
304 } |
|
305 |
|
306 if (error.type() == QSqlError::NoError) { |
|
307 //No error |
|
308 return ErrNone; |
|
309 } else { |
|
310 return ErrGeneral; |
|
311 } |
|
312 } |
|
313 |
|
314 |
|
315 /**============================================================== |
|
316 * Description: modify the requested bookmark |
|
317 ================================================================*/ |
|
318 int BrowserContent::modifyBookmark(QString aOrgTitle, QString aNewTitle, QString aNewUrl) |
|
319 { |
|
320 BOOKMARKSCLIENT_PRIVATEPTR(BrowserContent); |
|
321 QSqlError error; |
|
322 QSqlDatabase db = QSqlDatabase::database(priv->m_connectionName); |
|
323 |
|
324 if (db.isOpen()) { |
|
325 QSqlQuery query(db); |
|
326 query.prepare("UPDATE BookMarkTable set title=:aNewTitle, url=:aNewUrl, domain=:aNewDomain WHERE title=:aOrgTitle"); |
|
327 query.bindValue(":aNewTitle", aNewTitle); |
|
328 query.bindValue(":aNewUrl", aNewUrl); |
|
329 query.bindValue(":aNewDomain", filterUrl(aNewUrl)); |
|
330 query.bindValue(":aOrgTitle", aOrgTitle); |
|
331 query.exec(); |
|
332 error = query.lastError(); |
|
333 } |
|
334 |
|
335 if (error.type() == QSqlError::NoError) { |
|
336 return ErrNone; |
|
337 } else { |
|
338 return ErrGeneral; |
|
339 } |
|
340 } |
|
341 |
|
342 |
185 |
343 /**============================================================== |
186 /**============================================================== |
344 * Description: adds the bookmark to the database |
187 * Description: adds the bookmark to the database |
345 ================================================================*/ |
188 ================================================================*/ |
346 int BrowserContent::addHistory( |
189 int BrowserContent::addHistory( |
356 QSqlDatabase db = QSqlDatabase::database(priv->m_connectionName); |
199 QSqlDatabase db = QSqlDatabase::database(priv->m_connectionName); |
357 |
200 |
358 if (db.isOpen()) { |
201 if (db.isOpen()) { |
359 QSqlQuery query(db); |
202 QSqlQuery query(db); |
360 |
203 |
361 query.prepare("INSERT INTO HistoryTable (rowindex,pageTitle, url, domain, timestamp) " |
204 #ifdef Q_WS_MAEMO_5 |
|
205 // Update timestamp on existing entries that have the same URL and title and were time-stamped |
|
206 // within the last 24 hours. Normally there will only one of these entries. |
|
207 query.prepare(QString("UPDATE HistoryTable " |
|
208 "SET timestamp=%1 " |
|
209 "WHERE timestamp>%2 AND url='%3' AND pageTitle='%4'") |
|
210 .arg(timestamp) |
|
211 .arg(timestamp - (60 * 60 * 24)) |
|
212 .arg(url) |
|
213 .arg(title)); |
|
214 query.exec(); |
|
215 //qDebug() << "==" << __PRETTY_FUNCTION__ << query.executedQuery() << query.numRowsAffected() << query.lastError(); |
|
216 |
|
217 if(query.numRowsAffected() == 0) |
|
218 { |
|
219 // No recent duplicates found, create a new entry. |
|
220 query.clear(); |
|
221 query.prepare("INSERT INTO HistoryTable (rowindex,pageTitle, url, domain, timestamp) " |
|
222 "VALUES (NULL,:title, :url, :domain, :timestamp)"); |
|
223 |
|
224 query.bindValue(":title", QVariant(title)); |
|
225 query.bindValue(":url", QVariant(url)); |
|
226 query.bindValue(":domain", QVariant(filterUrl(url))); |
|
227 query.bindValue(":timestamp", QVariant(timestamp)); |
|
228 query.exec(); |
|
229 //qDebug() << "==" << __PRETTY_FUNCTION__ << query.executedQuery() << query.lastError(); |
|
230 error = query.lastError(); |
|
231 } |
|
232 #else |
|
233 query.prepare("INSERT INTO HistoryTable (rowindex,pageTitle, url, domain, timestamp) " |
362 "VALUES (NULL,:title, :url, :domain, :timestamp)"); |
234 "VALUES (NULL,:title, :url, :domain, :timestamp)"); |
363 |
235 |
364 query.bindValue(":title", QVariant(title)); |
236 query.bindValue(":title", QVariant(title)); |
365 query.bindValue(":url", QVariant(url)); |
237 query.bindValue(":url", QVariant(url)); |
366 query.bindValue(":domain", QVariant(filterUrl(url))); |
238 query.bindValue(":domain", QVariant(filterUrl(url))); |
367 query.bindValue(":timestamp", QVariant(timestamp)); |
239 query.bindValue(":timestamp", QVariant(timestamp)); |
368 query.exec(); |
240 query.exec(); |
369 error = query.lastError(); |
241 error = query.lastError(); |
|
242 #endif |
370 } |
243 } |
371 |
244 |
372 if (error.type() == QSqlError::NoError) { |
245 if (error.type() == QSqlError::NoError) { |
373 return ErrNone; |
246 return ErrNone; |
374 } else { |
247 } else { |