void AvatarManager::avatarFetched(ContactAccountData *contactAccountData, const QByteArray &data) { Avatar &avatar = contactAccountData->avatar(); avatar.setLastUpdated(QDateTime::currentDateTime()); QPixmap pixmap; pixmap.loadFromData(data); avatar.setPixmap(pixmap); QString avatarFile = avatarFileName(avatar); avatar.setFileName(avatarFile); QDir avatarsDir(ggPath("avatars")); if (!avatarsDir.exists()) avatarsDir.mkpath(ggPath("avatars")); QFile file(avatarsDir.canonicalPath() + "/" + avatarFile); if (!file.open(QIODevice::WriteOnly)) return; file.write(data); file.close(); emit avatarUpdated(contactAccountData); }
void AvatarService::onGetAvatarSuccess(const QImage& img) { if (!get_avatar_req_) { return; } const QString email = get_avatar_req_->email(); // if no change? early return if (img.isNull()) { get_avatar_req_->deleteLater(); get_avatar_req_ = NULL; queue_->clearWait(email); return; } image_ = img; cache_[email] = img; // save image to avatars/ folder QString path = avatarPathForEmail(get_avatar_req_->account(), email); if (!img.save(path, "PNG")) { qWarning("Unable to save new avatar file %s", path.toUtf8().data()); } // update cache db if (autoupdate_db_) { QString mtime = QString::number(get_avatar_req_->mtime()); char *zql = sqlite3_mprintf( "REPLACE INTO Avatar(filename, timestamp, url, username) " "VALUES (%Q, %Q, %Q, %Q)", path.toUtf8().data(), mtime.toUtf8().data(), get_avatar_req_->account().serverUrl.toEncoded().data(), get_avatar_req_->account().username.toUtf8().data()); sqlite_query_exec(autoupdate_db_, zql); sqlite3_free(zql); } emit avatarUpdated(email, img); get_avatar_req_->deleteLater(); get_avatar_req_ = NULL; queue_->clearWait(email); }