scaled all downloaded icons to 48x48 to avoid DB size exploding
This commit is contained in:
parent
50a7546f15
commit
6358e8aa0e
@ -149,7 +149,7 @@ QString NetworkFactory::sanitizeUrl(const QString& url) {
|
|||||||
|
|
||||||
QNetworkReply::NetworkError NetworkFactory::downloadIcon(const QList<QPair<QString, bool>>& urls,
|
QNetworkReply::NetworkError NetworkFactory::downloadIcon(const QList<QPair<QString, bool>>& urls,
|
||||||
int timeout,
|
int timeout,
|
||||||
QIcon& output,
|
QPixmap& output,
|
||||||
const QList<QPair<QByteArray, QByteArray>>& additional_headers,
|
const QList<QPair<QByteArray, QByteArray>>& additional_headers,
|
||||||
const QNetworkProxy& custom_proxy) {
|
const QNetworkProxy& custom_proxy) {
|
||||||
QNetworkReply::NetworkError network_result = QNetworkReply::NetworkError::UnknownNetworkError;
|
QNetworkReply::NetworkError network_result = QNetworkReply::NetworkError::UnknownNetworkError;
|
||||||
@ -179,9 +179,12 @@ QNetworkReply::NetworkError NetworkFactory::downloadIcon(const QList<QPair<QStri
|
|||||||
QPixmap icon_pixmap;
|
QPixmap icon_pixmap;
|
||||||
|
|
||||||
icon_pixmap.loadFromData(icon_data);
|
icon_pixmap.loadFromData(icon_data);
|
||||||
output = QIcon(icon_pixmap);
|
output = icon_pixmap;
|
||||||
|
|
||||||
if (!output.isNull()) {
|
if (!output.isNull()) {
|
||||||
|
output = output.scaled(QSize(48, 48),
|
||||||
|
Qt::AspectRatioMode::KeepAspectRatio,
|
||||||
|
Qt::TransformationMode::SmoothTransformation);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -222,9 +225,13 @@ QNetworkReply::NetworkError NetworkFactory::downloadIcon(const QList<QPair<QStri
|
|||||||
QPixmap icon_pixmap;
|
QPixmap icon_pixmap;
|
||||||
|
|
||||||
icon_pixmap.loadFromData(icon_data);
|
icon_pixmap.loadFromData(icon_data);
|
||||||
output = QIcon(icon_pixmap);
|
output = icon_pixmap;
|
||||||
|
|
||||||
if (!output.isNull()) {
|
if (!output.isNull()) {
|
||||||
|
output = output.scaled(QSize(48, 48),
|
||||||
|
Qt::AspectRatioMode::KeepAspectRatio,
|
||||||
|
Qt::TransformationMode::SmoothTransformation);
|
||||||
|
|
||||||
return network_result;
|
return network_result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,11 +43,11 @@ class NetworkFactory {
|
|||||||
static QString networkErrorText(QNetworkReply::NetworkError error_code);
|
static QString networkErrorText(QNetworkReply::NetworkError error_code);
|
||||||
static QString sanitizeUrl(const QString& url);
|
static QString sanitizeUrl(const QString& url);
|
||||||
|
|
||||||
// Performs SYNCHRONOUS download if favicon for the site,
|
// Performs SYNCHRONOUS favicon download for the site,
|
||||||
// given URL belongs to.
|
// given URL belongs to.
|
||||||
static QNetworkReply::NetworkError downloadIcon(const QList<QPair<QString, bool>>& urls,
|
static QNetworkReply::NetworkError downloadIcon(const QList<QPair<QString, bool>>& urls,
|
||||||
int timeout,
|
int timeout,
|
||||||
QIcon& output,
|
QPixmap& output,
|
||||||
const QList<QPair<QByteArray, QByteArray>>& additional_headers,
|
const QList<QPair<QByteArray, QByteArray>>& additional_headers,
|
||||||
const QNetworkProxy& custom_proxy =
|
const QNetworkProxy& custom_proxy =
|
||||||
QNetworkProxy::ProxyType::DefaultProxy);
|
QNetworkProxy::ProxyType::DefaultProxy);
|
||||||
|
@ -562,7 +562,7 @@ RootItem* FeedlyNetwork::decodeCollections(const QByteArray& json,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (obtain_icons) {
|
if (obtain_icons) {
|
||||||
QIcon icon;
|
QPixmap icon;
|
||||||
auto result = NetworkFactory::downloadIcon({{fee_obj[QSL("iconUrl")].toString(), true},
|
auto result = NetworkFactory::downloadIcon({{fee_obj[QSL("iconUrl")].toString(), true},
|
||||||
{fee_obj[QSL("website")].toString(), false},
|
{fee_obj[QSL("website")].toString(), false},
|
||||||
{fee_obj[QSL("logo")].toString(), true}},
|
{fee_obj[QSL("logo")].toString(), true}},
|
||||||
|
@ -720,7 +720,7 @@ RootItem* GreaderNetwork::decodeTagsSubscriptions(const QString& categories,
|
|||||||
|
|
||||||
icon_urls.append({url, false});
|
icon_urls.append({url, false});
|
||||||
|
|
||||||
QIcon icon;
|
QPixmap icon;
|
||||||
|
|
||||||
if (NetworkFactory::downloadIcon(icon_urls, 1000, icon, {}, proxy) == QNetworkReply::NetworkError::NoError) {
|
if (NetworkFactory::downloadIcon(icon_urls, 1000, icon, {}, proxy) == QNetworkReply::NetworkError::NoError) {
|
||||||
feed->setIcon(icon);
|
feed->setIcon(icon);
|
||||||
|
@ -21,8 +21,7 @@
|
|||||||
|
|
||||||
NewsBlurNetwork::NewsBlurNetwork(QObject* parent)
|
NewsBlurNetwork::NewsBlurNetwork(QObject* parent)
|
||||||
: QObject(parent), m_root(nullptr), m_username(QString()), m_password(QString()), m_baseUrl(QSL(NEWSBLUR_URL)),
|
: QObject(parent), m_root(nullptr), m_username(QString()), m_password(QString()), m_baseUrl(QSL(NEWSBLUR_URL)),
|
||||||
m_batchSize(NEWSBLUR_DEFAULT_BATCH_SIZE),
|
m_batchSize(NEWSBLUR_DEFAULT_BATCH_SIZE), m_downloadOnlyUnreadMessages(false) {
|
||||||
m_downloadOnlyUnreadMessages(false) {
|
|
||||||
clearCredentials();
|
clearCredentials();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,9 +30,7 @@ RootItem* NewsBlurNetwork::categoriesFeedsLabelsTree(const QNetworkProxy& proxy)
|
|||||||
RootItem* root = new RootItem();
|
RootItem* root = new RootItem();
|
||||||
const auto timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt();
|
const auto timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt();
|
||||||
QMap<QString, RootItem*> cats;
|
QMap<QString, RootItem*> cats;
|
||||||
QList<QPair<RootItem*, QJsonArray>> cats_array = {
|
QList<QPair<RootItem*, QJsonArray>> cats_array = {{root, json.object()["folders"].toArray()}};
|
||||||
{ root, json.object()["folders"].toArray() }
|
|
||||||
};
|
|
||||||
|
|
||||||
while (!cats_array.isEmpty()) {
|
while (!cats_array.isEmpty()) {
|
||||||
// Add direct descendants as categories to parent, then process their children.
|
// Add direct descendants as categories to parent, then process their children.
|
||||||
@ -54,9 +51,9 @@ RootItem* NewsBlurNetwork::categoriesFeedsLabelsTree(const QNetworkProxy& proxy)
|
|||||||
QString favicon_url = feed_json["favicon_url"].toString();
|
QString favicon_url = feed_json["favicon_url"].toString();
|
||||||
|
|
||||||
if (!favicon_url.isEmpty()) {
|
if (!favicon_url.isEmpty()) {
|
||||||
QIcon icon;
|
QPixmap icon;
|
||||||
|
|
||||||
if (NetworkFactory::downloadIcon({ { favicon_url, true } }, timeout, icon, {}, proxy) ==
|
if (NetworkFactory::downloadIcon({{favicon_url, true}}, timeout, icon, {}, proxy) ==
|
||||||
QNetworkReply::NetworkError::NoError) {
|
QNetworkReply::NetworkError::NoError) {
|
||||||
feed->setIcon(icon);
|
feed->setIcon(icon);
|
||||||
}
|
}
|
||||||
@ -72,10 +69,7 @@ RootItem* NewsBlurNetwork::categoriesFeedsLabelsTree(const QNetworkProxy& proxy)
|
|||||||
category->setCustomId(category_name);
|
category->setCustomId(category_name);
|
||||||
|
|
||||||
cats_for_parent.first->appendChild(category);
|
cats_for_parent.first->appendChild(category);
|
||||||
cats_array.append({
|
cats_array.append({category, var.toObject()[category_name].toArray()});
|
||||||
category,
|
|
||||||
var.toObject()[category_name].toArray()
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -101,7 +95,8 @@ QJsonDocument NewsBlurNetwork::feeds(const QNetworkProxy& proxy) {
|
|||||||
proxy);
|
proxy);
|
||||||
|
|
||||||
if (network_result.m_networkError == QNetworkReply::NetworkError::NoError) {
|
if (network_result.m_networkError == QNetworkReply::NetworkError::NoError) {
|
||||||
ApiResult res; res.decodeBaseResponse(output);
|
ApiResult res;
|
||||||
|
res.decodeBaseResponse(output);
|
||||||
|
|
||||||
return res.m_json;
|
return res.m_json;
|
||||||
}
|
}
|
||||||
@ -115,27 +110,29 @@ LoginResult NewsBlurNetwork::login(const QNetworkProxy& proxy) {
|
|||||||
const auto timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt();
|
const auto timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt();
|
||||||
const QString data = QSL("username=%1&password=%2").arg(m_username, m_password);
|
const QString data = QSL("username=%1&password=%2").arg(m_username, m_password);
|
||||||
QByteArray output;
|
QByteArray output;
|
||||||
auto network_result = NetworkFactory::performNetworkOperation(full_url,
|
auto network_result =
|
||||||
timeout,
|
NetworkFactory::performNetworkOperation(full_url,
|
||||||
data.toUtf8(),
|
timeout,
|
||||||
output,
|
data.toUtf8(),
|
||||||
QNetworkAccessManager::Operation::PostOperation,
|
output,
|
||||||
{ {
|
QNetworkAccessManager::Operation::PostOperation,
|
||||||
QSL(HTTP_HEADERS_CONTENT_TYPE).toLocal8Bit(),
|
{{QSL(HTTP_HEADERS_CONTENT_TYPE).toLocal8Bit(),
|
||||||
QSL("application/x-www-form-urlencoded").toLocal8Bit()
|
QSL("application/x-www-form-urlencoded").toLocal8Bit()}},
|
||||||
} },
|
false,
|
||||||
false,
|
{},
|
||||||
{},
|
{},
|
||||||
{},
|
proxy);
|
||||||
proxy);
|
|
||||||
|
|
||||||
if (network_result.m_networkError == QNetworkReply::NetworkError::NoError) {
|
if (network_result.m_networkError == QNetworkReply::NetworkError::NoError) {
|
||||||
LoginResult res; res.decodeBaseResponse(output);
|
LoginResult res;
|
||||||
|
res.decodeBaseResponse(output);
|
||||||
|
|
||||||
res.m_userId = res.m_json.object()["user_id"].toInt();
|
res.m_userId = res.m_json.object()["user_id"].toInt();
|
||||||
res.m_sessiodId = boolinq::from(network_result.m_cookies).firstOrDefault([](const QNetworkCookie& c) {
|
res.m_sessiodId = boolinq::from(network_result.m_cookies)
|
||||||
return c.name() == QSL(NEWSBLUS_AUTH_COOKIE);
|
.firstOrDefault([](const QNetworkCookie& c) {
|
||||||
}).value();
|
return c.name() == QSL(NEWSBLUS_AUTH_COOKIE);
|
||||||
|
})
|
||||||
|
.value();
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -169,8 +166,7 @@ void NewsBlurNetwork::setBaseUrl(const QString& base_url) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
QPair<QByteArray, QByteArray> NewsBlurNetwork::authHeader() const {
|
QPair<QByteArray, QByteArray> NewsBlurNetwork::authHeader() const {
|
||||||
return { QSL("Cookie").toLocal8Bit(),
|
return {QSL("Cookie").toLocal8Bit(), QSL("newsblur_sessionid=%1").arg(m_authSid).toLocal8Bit()};
|
||||||
QSL("newsblur_sessionid=%1").arg(m_authSid).toLocal8Bit() };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NewsBlurNetwork::ensureLogin(const QNetworkProxy& proxy) {
|
void NewsBlurNetwork::ensureLogin(const QNetworkProxy& proxy) {
|
||||||
@ -258,7 +254,7 @@ void ApiResult::decodeBaseResponse(const QByteArray& json_data) {
|
|||||||
QJsonObject obj_errs = doc.object()["errors"].toObject();
|
QJsonObject obj_errs = doc.object()["errors"].toObject();
|
||||||
|
|
||||||
for (const QString& key : obj_errs.keys()) {
|
for (const QString& key : obj_errs.keys()) {
|
||||||
for (const QJsonValue& val: obj_errs.value(key).toArray()) {
|
for (const QJsonValue& val : obj_errs.value(key).toArray()) {
|
||||||
errs << val.toString();
|
errs << val.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -187,7 +187,7 @@ QList<Feed*> RedditNetworkFactory::subreddits(const QNetworkProxy& custom_proxy)
|
|||||||
|
|
||||||
new_sub->setPrefixedName(sub_obj["url"].toString());
|
new_sub->setPrefixedName(sub_obj["url"].toString());
|
||||||
|
|
||||||
QIcon icon;
|
QPixmap icon;
|
||||||
QString icon_url = sub_obj["community_icon"].toString();
|
QString icon_url = sub_obj["community_icon"].toString();
|
||||||
|
|
||||||
if (icon_url.isEmpty()) {
|
if (icon_url.isEmpty()) {
|
||||||
|
@ -445,7 +445,7 @@ StandardFeed* StandardFeed::guessFeed(StandardFeed::SourceType source_type,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Try to obtain icon.
|
// Try to obtain icon.
|
||||||
QIcon icon_data;
|
QPixmap icon_data;
|
||||||
|
|
||||||
if (NetworkFactory::downloadIcon(icon_possible_locations, DOWNLOAD_TIMEOUT, icon_data, {}, custom_proxy) ==
|
if (NetworkFactory::downloadIcon(icon_possible_locations, DOWNLOAD_TIMEOUT, icon_data, {}, custom_proxy) ==
|
||||||
QNetworkReply::NetworkError::NoError) {
|
QNetworkReply::NetworkError::NoError) {
|
||||||
|
@ -931,7 +931,7 @@ RootItem* TtRssGetFeedsCategoriesResponse::feedsCategories(TtRssNetworkFactory*
|
|||||||
if (!icon_path.isEmpty()) {
|
if (!icon_path.isEmpty()) {
|
||||||
// Chop the "api/" suffix out and append
|
// Chop the "api/" suffix out and append
|
||||||
QString full_icon_address = base_address + QL1C('/') + icon_path;
|
QString full_icon_address = base_address + QL1C('/') + icon_path;
|
||||||
QIcon icon;
|
QPixmap icon;
|
||||||
QList<QPair<QByteArray, QByteArray>> headers;
|
QList<QPair<QByteArray, QByteArray>> headers;
|
||||||
|
|
||||||
if (network->authIsUsed()) {
|
if (network->authIsUsed()) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user