bookmarksengine/browsercontentdll/src/browsercontentdll.cpp
changeset 15 5ea3798f1248
parent 12 d26902edeef5
equal deleted inserted replaced
14:1d6c4b7a8fbd 15:5ea3798f1248
    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 {
   807             QSqlError error = query.lastError();
   680             QSqlError error = query.lastError();
   808         }
   681         }
   809     }
   682     }
   810     return map;
   683     return map;
   811 }    
   684 }    
       
   685