From c8ecfc05baea732224e5a5a38ad3abb1d782207c Mon Sep 17 00:00:00 2001 From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> Date: Mon, 7 Mar 2022 15:08:39 -0500 Subject: [PATCH] vcard: don't use QTextStream to read vcards Just read the binary data to avoid time consuming text processing during the read in the case of oversized vcard images. Change-Id: I009332a99b7057549da57fd7c432d6731ab752b8 --- src/authority/storagehelper.cpp | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/authority/storagehelper.cpp b/src/authority/storagehelper.cpp index aa6e78a5..dfd15af4 100644 --- a/src/authority/storagehelper.cpp +++ b/src/authority/storagehelper.cpp @@ -298,8 +298,7 @@ setProfile(const QString& accountId, const api::profile::Info& profileInfo, cons qWarning().noquote() << "Can't open file for writing: " << file.fileName(); return; } - QTextStream in(&file); - in << vcard; + QTextStream(&file) << vcard; file.close(); lf.unlock(); } @@ -361,8 +360,7 @@ getAccountAvatar(const QString& accountId) qWarning() << "Can't open file: " << filePath; return {}; } - QTextStream in(&file); - const auto vCard = lrc::vCard::utils::toHashMap(in.readAll().toUtf8()); + const auto vCard = lrc::vCard::utils::toHashMap(file.readAll()); const auto photo = (vCard.find(vCard::Property::PHOTO_PNG) == vCard.end()) ? vCard[vCard::Property::PHOTO_JPEG] : vCard[vCard::Property::PHOTO_PNG]; @@ -398,9 +396,7 @@ buildContactFromProfile(const QString& accountId, return {profileInfo, "", true, false}; } } - QTextStream in(&file); - QByteArray vcard = in.readAll().toUtf8(); - const auto vCard = lrc::vCard::utils::toHashMap(vcard); + const auto vCard = lrc::vCard::utils::toHashMap(file.readAll()); const auto alias = vCard[vCard::Property::FORMATTED_NAME]; if (lrc::api::Lrc::cacheAvatars.load()) { for (const auto& key : vCard.keys()) { @@ -424,9 +420,7 @@ avatar(const QString& accountId, const QString& contactId) if (!file.open(QIODevice::ReadOnly)) { return {}; } - QTextStream in(&file); - QByteArray vcard = in.readAll().toUtf8(); - const auto vCard = lrc::vCard::utils::toHashMap(vcard); + const auto vCard = lrc::vCard::utils::toHashMap(file.readAll()); for (const auto& key : vCard.keys()) { if (key.contains("PHOTO")) return vCard[key]; @@ -434,7 +428,6 @@ avatar(const QString& accountId, const QString& contactId) return {}; } - VectorString getAllConversations(Database& db) { -- GitLab