Changeset View
Changeset View
Standalone View
Standalone View
runners/bookmarks/faviconfromblob.cpp
Show All 29 Lines | |||||
30 | #include "bookmarksrunner_defs.h" | 30 | #include "bookmarksrunner_defs.h" | ||
31 | #include "fetchsqlite.h" | 31 | #include "fetchsqlite.h" | ||
32 | 32 | | |||
33 | #include <QSqlDatabase> | 33 | #include <QSqlDatabase> | ||
34 | #include <QSqlQuery> | 34 | #include <QSqlQuery> | ||
35 | #include <QSqlError> | 35 | #include <QSqlError> | ||
36 | #include <QSqlRecord> | 36 | #include <QSqlRecord> | ||
37 | 37 | | |||
38 | FaviconFromBlob *FaviconFromBlob::chrome(const QString &profileDirectory, QObject *parent) | 38 | FaviconFromBlob *FaviconFromBlob::chrome(const QString &profileName, const QString &faviconCache, QObject *parent) | ||
39 | { | 39 | { | ||
40 | QString profileName = QFileInfo(profileDirectory).fileName(); | | |||
41 | QString faviconCache = QStringLiteral("%1/KRunner-Chrome-Favicons-%2.sqlite") | | |||
42 | .arg(QStandardPaths::writableLocation(QStandardPaths::CacheLocation), profileName); | | |||
43 | FetchSqlite *fetchSqlite = new FetchSqlite(faviconCache, parent); | 40 | FetchSqlite *fetchSqlite = new FetchSqlite(faviconCache, parent); | ||
44 | 41 | | |||
45 | QString faviconQuery; | 42 | QString faviconQuery; | ||
46 | if(fetchSqlite->tables().contains(QLatin1String("favicon_bitmaps"))) { | 43 | if(fetchSqlite->tables().contains(QLatin1String("favicon_bitmaps"))) { | ||
47 | faviconQuery = QLatin1String("SELECT * FROM favicons " \ | 44 | faviconQuery = QLatin1String("SELECT * FROM favicons " \ | ||
48 | "inner join icon_mapping on icon_mapping.icon_id = favicons.id " \ | 45 | "inner join icon_mapping on icon_mapping.icon_id = favicons.id " \ | ||
49 | "inner join favicon_bitmaps on icon_mapping.icon_id = favicon_bitmaps.icon_id " \ | 46 | "inner join favicon_bitmaps on icon_mapping.icon_id = favicon_bitmaps.icon_id " \ | ||
50 | "WHERE page_url = :url ORDER BY height desc LIMIT 1;"); | 47 | "WHERE page_url = :url ORDER BY height desc LIMIT 1;"); | ||
Show All 15 Lines | 60 | QString faviconQuery = QStringLiteral("SELECT moz_icons.data FROM moz_icons" \ | |||
66 | " WHERE moz_pages_w_icons.page_url = :url LIMIT 1;"); | 63 | " WHERE moz_pages_w_icons.page_url = :url LIMIT 1;"); | ||
67 | return new FaviconFromBlob(QStringLiteral("firefox-default"), faviconQuery, QStringLiteral("data"), fetchSqlite, parent); | 64 | return new FaviconFromBlob(QStringLiteral("firefox-default"), faviconQuery, QStringLiteral("data"), fetchSqlite, parent); | ||
68 | } | 65 | } | ||
69 | 66 | | |||
70 | 67 | | |||
71 | FaviconFromBlob::FaviconFromBlob(const QString &profileName, const QString &query, const QString &blobColumn, FetchSqlite *fetchSqlite, QObject *parent) | 68 | FaviconFromBlob::FaviconFromBlob(const QString &profileName, const QString &query, const QString &blobColumn, FetchSqlite *fetchSqlite, QObject *parent) | ||
72 | : Favicon(parent), m_query(query), m_blobcolumn(blobColumn), m_fetchsqlite(fetchSqlite) | 69 | : Favicon(parent), m_query(query), m_blobcolumn(blobColumn), m_fetchsqlite(fetchSqlite) | ||
73 | { | 70 | { | ||
71 | // Directory where the icons from the DB blob are cached | ||||
74 | m_profileCacheDirectory = QStringLiteral("%1/KRunner-Favicons-%2") | 72 | m_profileCacheDirectory = QStringLiteral("%1/KRunner-Favicons-%2") | ||
75 | .arg(QStandardPaths::writableLocation(QStandardPaths::CacheLocation), profileName); | 73 | .arg(QStandardPaths::writableLocation(QStandardPaths::CacheLocation), profileName); | ||
76 | //qDebug() << "got cache directory: " << m_profileCacheDirectory; | | |||
77 | cleanCacheDirectory(); | 74 | cleanCacheDirectory(); | ||
78 | QDir().mkpath(m_profileCacheDirectory); | 75 | QDir().mkpath(m_profileCacheDirectory); | ||
79 | } | 76 | } | ||
80 | 77 | | |||
81 | FaviconFromBlob::~FaviconFromBlob() | 78 | FaviconFromBlob::~FaviconFromBlob() | ||
82 | { | 79 | { | ||
83 | cleanCacheDirectory(); | 80 | cleanCacheDirectory(); | ||
84 | } | 81 | } | ||
Show All 19 Lines | 99 | { | |||
104 | QString fileChecksum = QString::number(qChecksum(url.toLatin1(), url.toLatin1().size())); | 101 | QString fileChecksum = QString::number(qChecksum(url.toLatin1(), url.toLatin1().size())); | ||
105 | QFile iconFile( m_profileCacheDirectory + QDir::separator() + fileChecksum + QStringLiteral("_favicon") ); | 102 | QFile iconFile( m_profileCacheDirectory + QDir::separator() + fileChecksum + QStringLiteral("_favicon") ); | ||
106 | if(iconFile.size() == 0) | 103 | if(iconFile.size() == 0) | ||
107 | iconFile.remove(); | 104 | iconFile.remove(); | ||
108 | if(!iconFile.exists()) { | 105 | if(!iconFile.exists()) { | ||
109 | QMap<QString,QVariant> bindVariables; | 106 | QMap<QString,QVariant> bindVariables; | ||
110 | bindVariables.insert(QStringLiteral(":url"), url); | 107 | bindVariables.insert(QStringLiteral(":url"), url); | ||
111 | QList<QVariantMap> faviconFound = m_fetchsqlite->query(m_query, bindVariables); | 108 | QList<QVariantMap> faviconFound = m_fetchsqlite->query(m_query, bindVariables); | ||
112 | if(faviconFound.isEmpty()) return defaultIcon(); | 109 | if(faviconFound.isEmpty()) { | ||
110 | return defaultIcon(); | ||||
111 | } | ||||
113 | 112 | | |||
114 | QByteArray iconData = faviconFound.first().value(m_blobcolumn).toByteArray(); | 113 | const QByteArray iconData = faviconFound.first().value(m_blobcolumn).toByteArray(); | ||
115 | //qDebug() << "Favicon found: " << iconData.size() << " bytes"; | 114 | if(iconData.isEmpty()) { | ||
116 | if(iconData.size() <=0) | | |||
117 | return defaultIcon(); | 115 | return defaultIcon(); | ||
116 | } | ||||
118 | 117 | | |||
119 | iconFile.open(QFile::WriteOnly); | 118 | iconFile.open(QFile::WriteOnly); | ||
120 | iconFile.write(iconData); | 119 | iconFile.write(iconData); | ||
121 | iconFile.close(); | 120 | iconFile.close(); | ||
122 | } | 121 | } | ||
123 | return QIcon(iconFile.fileName()); | 122 | return QIcon(iconFile.fileName()); | ||
124 | } | 123 | } | ||
125 | 124 | |