diff --git a/runners/bookmarks/browsers/firefox.h b/runners/bookmarks/browsers/firefox.h --- a/runners/bookmarks/browsers/firefox.h +++ b/runners/bookmarks/browsers/firefox.h @@ -40,9 +40,12 @@ private: virtual void reloadConfiguration(); QString m_dbFile; + QString m_dbFile_fav; QString m_dbCacheFile; + QString m_dbCacheFile_fav; Favicon * m_favicon; FetchSqlite *m_fetchsqlite; + FetchSqlite *m_fetchsqlite_fav; }; #endif // FIREFOX_H diff --git a/runners/bookmarks/browsers/firefox.cpp b/runners/bookmarks/browsers/firefox.cpp --- a/runners/bookmarks/browsers/firefox.cpp +++ b/runners/bookmarks/browsers/firefox.cpp @@ -34,7 +34,8 @@ Firefox::Firefox(QObject *parent) : QObject(parent), m_favicon(new FallbackFavicon(this)), - m_fetchsqlite(0) + m_fetchsqlite(nullptr), + m_fetchsqlite_fav(nullptr) { reloadConfiguration(); //qDebug() << "Loading Firefox Bookmarks Browser"; @@ -57,14 +58,21 @@ if (m_dbCacheFile.isEmpty()) { m_dbCacheFile = QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QStringLiteral("bookmarkrunnerfirefoxdbfile.sqlite"); } + if (m_dbCacheFile_fav.isEmpty()) { + m_dbCacheFile_fav = QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QStringLiteral("/bookmarkrunnerfirefoxfavdbfile.sqlite"); + } if (!m_dbFile.isEmpty()) { m_fetchsqlite = new FetchSqlite(m_dbFile, m_dbCacheFile); m_fetchsqlite->prepare(); + } + if (!m_dbFile_fav.isEmpty()) { + m_fetchsqlite_fav = new FetchSqlite(m_dbFile_fav, m_dbCacheFile_fav); + m_fetchsqlite_fav->prepare(); delete m_favicon; m_favicon = 0; - m_favicon = FaviconFromBlob::firefox(m_fetchsqlite, this); + m_favicon = FaviconFromBlob::firefox(m_fetchsqlite_fav, this); } } @@ -112,6 +120,9 @@ { if(m_fetchsqlite) { m_fetchsqlite->teardown(); + } + if(m_fetchsqlite_fav) { + m_fetchsqlite_fav->teardown(); delete m_favicon; m_favicon = 0; } @@ -158,6 +169,7 @@ profilePath.prepend(QStringLiteral("%1/.mozilla/firefox/").arg(QDir::homePath())); m_dbFile = profilePath + "/places.sqlite"; grp.writeEntry("dbfile", m_dbFile); + m_dbFile_fav = profilePath + "/favicons.sqlite"; } } else { //qDebug() << "SQLITE driver isn't available"; diff --git a/runners/bookmarks/faviconfromblob.cpp b/runners/bookmarks/faviconfromblob.cpp --- a/runners/bookmarks/faviconfromblob.cpp +++ b/runners/bookmarks/faviconfromblob.cpp @@ -77,9 +77,10 @@ FaviconFromBlob *FaviconFromBlob::firefox(FetchSqlite *fetchSqlite, QObject *parent) { - QString faviconQuery = QStringLiteral("SELECT moz_favicons.data FROM moz_favicons" \ - " inner join moz_places ON moz_places.favicon_id = moz_favicons.id" \ - " WHERE moz_places.url = :url LIMIT 1;"); + QString faviconQuery = QStringLiteral("SELECT moz_icons.data FROM moz_icons" \ + " INNER JOIN moz_icons_to_pages ON moz_icons.id = moz_icons_to_pages.icon_id" \ + " INNER JOIN moz_pages_w_icons ON moz_icons_to_pages.page_id = moz_pages_w_icons.id" \ + " WHERE moz_pages_w_icons.page_url = :url LIMIT 1;"); return new FaviconFromBlob(QStringLiteral("firefox-default"), new StaticQuery(faviconQuery), QStringLiteral("data"), fetchSqlite, parent); } @@ -128,13 +129,13 @@ iconFile.remove(); if(!iconFile.exists()) { QMap bindVariables; - bindVariables.insert(QStringLiteral("url"), url); + bindVariables.insert(QStringLiteral(":url"), url); QList faviconFound = m_fetchsqlite->query(m_buildQuery, bindVariables); if(faviconFound.isEmpty()) return defaultIcon(); QByteArray iconData = faviconFound.first().value(m_blobcolumn).toByteArray(); //qDebug() << "Favicon found: " << iconData.size() << " bytes"; - if(iconData.size() <=0) + if(iconData.size() <=0) return defaultIcon(); iconFile.open(QFile::WriteOnly);