Andrea Diamantini schrieb am Sonntag 06 Juni 2010:
> Can you please take a look at actual code and try rebasing your patch?

done.
it's wasn't that much work. still the same applies like with the last patch.

regards,
mathias
diff --git a/src/bookmarks/bookmarksmanager.cpp b/src/bookmarks/bookmarksmanager.cpp
index 4e097d9..c6a6b4a 100644
--- a/src/bookmarks/bookmarksmanager.cpp
+++ b/src/bookmarks/bookmarksmanager.cpp
@@ -204,8 +204,6 @@ QAction * BookmarkMenu::actionForBookmark(const KBookmark &bookmark)
     }
     else
     {
-        UrlSearchItem urlSearchItem(UrlSearchItem::Bookmark, bookmark.url().prettyUrl() , bookmark.fullText(), QDateTime(), 1, bookmark.description(), QString());
-        Application::bookmarkProvider()->completionObject()->addItem(urlSearchItem);
         return  new KBookmarkAction(bookmark, owner(), this);
     }
 }
@@ -302,6 +300,8 @@ BookmarkProvider::BookmarkProvider(QObject *parent)
     // setup menu
     m_owner = new BookmarkOwner(this);
     connect(m_owner, SIGNAL(openUrl(const KUrl&, const Rekonq::OpenType &)), this, SIGNAL(openUrl(const KUrl&, const Rekonq::OpenType &)));
+    
+    updateCompletionObject();
 
     kDebug() << "Loading Bookmarks Manager... DONE!";
 }
@@ -338,11 +338,14 @@ void BookmarkProvider::removeToolBar(KToolBar *toolbar)
 
 void BookmarkProvider::slotBookmarksChanged(const QString &group, const QString &caller)
 {
+    //TODO: check why this is called every time a character is changed in the bookmark editor
+    //this should only be called after the bookmark editor is closed
+    //check how konqueror does this
+    //alternative: call at least updateCompletionObject only after this isn't called for a certain time, maybe 1 second
+    
     Q_UNUSED(group)
     Q_UNUSED(caller)
 
-    m_completion->clear();
-
     foreach(KToolBar *bookmarkToolBar, m_bookmarkToolBars)
     {
         if (bookmarkToolBar)
@@ -351,7 +354,8 @@ void BookmarkProvider::slotBookmarksChanged(const QString &group, const QString
             fillBookmarkBar(bookmarkToolBar);
         }
     }
-    //TODO: also change completion object
+    
+    updateCompletionObject();
 }
 
 
@@ -450,44 +454,38 @@ AwesomeUrlCompletion *BookmarkProvider::completionObject() const
     return m_completion;
 }
 
-
-QString BookmarkProvider::titleForBookmarkUrl(QString url)
+void BookmarkProvider::updateCompletionObject(KBookmarkGroup* bookmarkGroup)
 {
-    QString title = "";
-    KBookmarkGroup bookGroup = Application::bookmarkProvider()->rootGroup();
-    if (bookGroup.isNull())
+    //with 10000 bookmarks, this takes about 4 seconds
+    //because m_completion->addItem(...) checks for double entries
+    
+    KBookmarkGroup rootBookmarkGroup = rootGroup();
+    if(bookmarkGroup == 0)
     {
-        return title;
+        bookmarkGroup = &rootBookmarkGroup;
     }
-
-    KBookmark bookmark = bookGroup.first();
-    while (!bookmark.isNull() && title.isEmpty())
+    
+    if(*bookmarkGroup == rootBookmarkGroup)
     {
-        title = titleForBookmarkUrl(bookmark, url);
-        bookmark = bookGroup.next(bookmark);
+        m_completion->clear();
     }
-
-    return title;
-}
-
-
-QString BookmarkProvider::titleForBookmarkUrl(const KBookmark &bookmark, QString url)
-{
-    QString title = "";
-    if (bookmark.isGroup())
+    
+    for (KBookmark bookmark = bookmarkGroup->first(); !bookmark.isNull(); bookmark = bookmarkGroup->next(bookmark))
     {
-        KBookmarkGroup group = bookmark.toGroup();
-        KBookmark bm = group.first();
-        while (!bm.isNull() && title.isEmpty())
+        if(bookmark.isGroup())
         {
-            title = titleForBookmarkUrl(bm, url); // it is .bookfolder
-            bm = group.next(bm);
+            updateCompletionObject(&bookmark.toGroup());
+        }
+        else if(!bookmark.isSeparator())
+        {
+            UrlSearchItem urlSearchItem(UrlSearchItem::Bookmark,
+                                        bookmark.url().prettyUrl(),
+                                        bookmark.fullText(),
+                                        QDateTime(),
+                                        1, //TODO: check how to get the visit count
+                                        bookmark.description(),
+                                        QString());
+            m_completion->addItem(urlSearchItem);
         }
     }
-    else if (!bookmark.isSeparator() && bookmark.url() == url)
-    {
-        title = bookmark.fullText();
-    }
-
-    return title;
 }
diff --git a/src/bookmarks/bookmarksmanager.h b/src/bookmarks/bookmarksmanager.h
index 0087c60..edc5f8d 100644
--- a/src/bookmarks/bookmarksmanager.h
+++ b/src/bookmarks/bookmarksmanager.h
@@ -235,8 +235,6 @@ public:
     */
     AwesomeUrlCompletion *completionObject() const;
 
-    QString titleForBookmarkUrl(QString url);
-
 signals:
     /**
     * @short This signal is emitted when an url has to be loaded
@@ -268,7 +266,7 @@ private slots:
     
 private:
     void fillBookmarkBar(KToolBar *toolBar);
-    QString titleForBookmarkUrl(const KBookmark &bookmark, QString url);
+    void updateCompletionObject(KBookmarkGroup *bookmarkGroup = 0);
 
     KBookmarkManager *m_manager;
     BookmarkOwner *m_owner;
diff --git a/src/history/historymanager.cpp b/src/history/historymanager.cpp
index d531c18..fd90de0 100644
--- a/src/history/historymanager.cpp
+++ b/src/history/historymanager.cpp
@@ -131,9 +131,11 @@ void HistoryManager::addHistoryEntry(const QString &url)
     addHistoryEntry(item);
 
     // Add item to completion object
-    QString _url(url);
-    _url.remove(QRegExp("^http://|/$"));
-    UrlSearchItem urlSearchItem(UrlSearchItem::History, _url, QString(), item.dateTime, 1, QString(), QString());
+    UrlSearchItem urlSearchItem(UrlSearchItem::History,
+                                url,
+                                QString(),
+                                item.dateTime,
+                                1);
     m_completion->addItem(urlSearchItem);
 }
 
@@ -267,7 +269,10 @@ void HistoryManager::removeHistoryEntry(const KUrl &url, const QString &title)
     }
 
     // Remove item from completion object
-    UrlSearchItem urlSearchItem(UrlSearchItem::History, item.url, item.title, item.dateTime, 0, QString(), QString());
+    UrlSearchItem urlSearchItem(UrlSearchItem::History,
+                                item.url,
+                                item.title,
+                                item.dateTime);
     m_completion->removeItem(urlSearchItem);
 }
 
@@ -371,9 +376,18 @@ void HistoryManager::load()
         lastInsertedItem = item;
 
         // Add item to completion object
-        //QString _url = item.url;
-        //_url.remove(QRegExp("^http://|/$"));
-        UrlSearchItem urlSearchItem(UrlSearchItem::History, item.url, item.title, item.dateTime, 1, QString(), QString());
+        UrlSearchItem urlSearchItem(UrlSearchItem::History,
+                                    item.url,
+                                    item.title,
+                                    item.dateTime,
+                                    1);
+        //this might increase startup time if there are many history items,
+        //because addItem(...) checks for double items
+        //with about 15000 history items and about 7000 after the double check,
+        //this increases the startup time by about 1.5 seconds
+        //10000 bookmark items with no doubel entries increase the startup time by about 4 seconds, btw
+        //TODO: check if it is possible to change the history file data format,
+        //so that there can't be any double entry
         m_completion->addItem(urlSearchItem);
     }
     if (needToSort)
diff --git a/src/urlbar/urlresolver.cpp b/src/urlbar/urlresolver.cpp
index e4e2cd7..a2794ee 100644
--- a/src/urlbar/urlresolver.cpp
+++ b/src/urlbar/urlresolver.cpp
@@ -102,9 +102,6 @@ UrlSearchList UrlResolver::orderedSearchItems()
     // There are 8 remaining: if bookmarkResults + historyResults <= 8, catch all, else
     // catch first 4 results from the two resulting lists :)
 
-    QTime myTime;
-    myTime.start();
-    
     UrlSearchList list;
 
     if( _typedString == QL1S("about:") )
@@ -263,7 +260,6 @@ UrlSearchList UrlResolver::orderedSearchItems()
     }
     
     list = list + historyList + commonList + bookmarksList;
-    qWarning() << "orderedSearchItems leave: " << " elapsed: " << myTime.elapsed();
     
     return list;
 }
@@ -353,27 +349,22 @@ AwesomeUrlCompletion::~AwesomeUrlCompletion()
 
 void AwesomeUrlCompletion::addItem(const UrlSearchItem& itemToAdd)
 {
-    bool match = false;
-    QTime myTime;
-    myTime.start();
-    for(int i = 0; i < m_items.count(); i++)
+    //check if item is already in list; the items are equal if the url and the title are equal
+    int nIndex = m_items.indexOf(itemToAdd);
+    if(nIndex != -1)
     {
-        //check if item is already in list; the items are equal if the url and the title are equal
-        if(m_items[i] == itemToAdd)
+        //TODO: check what to do if comment or bookmarkPath are different
+        if(m_items[nIndex] < itemToAdd)
         {
-            match = true;
-            //TODO: check what to do if comment or bookmarkPath are different
-            if(m_items[i] < itemToAdd)
-            {
-                m_items[i].visitDateTime = itemToAdd.visitDateTime;
-            }
-            m_items[i].visitCount += itemToAdd.visitCount;
+            m_items[nIndex].visitDateTime = itemToAdd.visitDateTime;
         }
+        m_items[nIndex].visitCount += itemToAdd.visitCount;
     }
-    if(!match)
+    else
     {
         m_items.append(itemToAdd);
     }
+    
     m_resetCompletion = true;
 }
 
diff --git a/src/urlbar/urlresolver.h b/src/urlbar/urlresolver.h
index 8322814..8c4b30a 100644
--- a/src/urlbar/urlresolver.h
+++ b/src/urlbar/urlresolver.h
@@ -81,22 +81,24 @@ public:
                       bookmarkPath(QString())
     {};
     
-    UrlSearchItem(const int &_type,
-                  const QString &_url,
-                  const QString &_title = QString(),
-                  const QDateTime &visitDateTime  = QDateTime(),
-                  const int       &visitCount     = 0,
-                  const QString   &description    = QString(),
-                  const QString   &bookmarkPath   = QString()
+    UrlSearchItem(const int         &_type,
+                  const QString     &_url,
+                  const QString     &_title         = QString(),
+                  const QDateTime   &_visitDateTime = QDateTime(),
+                  const int         &_visitCount    = 0,
+                  const QString     &_description   = QString(),
+                  const QString     &_bookmarkPath  = QString()
                   )
                   : type(_type),
-                  url(_url),
-                  title(_title),
-                  visitDateTime(visitDateTime),
-                  visitCount(visitCount),
-                  description(description),
-                  bookmarkPath(bookmarkPath)
-    {};
+                    url(_url),
+                    title(_title),
+                    visitDateTime(_visitDateTime),
+                    visitCount(_visitCount),
+                    description(_description),
+                    bookmarkPath(_bookmarkPath)
+    {
+        url.remove(QRegExp("/$"));
+    };
 
     inline bool operator==(const UrlSearchItem &i) const
     {
_______________________________________________
rekonq mailing list
[email protected]
https://mail.kde.org/mailman/listinfo/rekonq

Reply via email to