/* SPDX-FileCopyrightText: 2004 Esben Mose Hansen SPDX-License-Identifier: GPL-2.0-or-later */ #include "historyurlitem.h" #include #include #include namespace { QByteArray compute_uuid(const QList &_urls, const KUrlMimeData::MetaDataMap &_metaData, bool _cut) { QCryptographicHash hash(QCryptographicHash::Sha1); for (const QUrl &url : _urls) { hash.addData(url.toEncoded()); hash.addData("\0", 1); // Use binary zero as that is not a valid path character } QByteArray buffer; QDataStream out(&buffer, QIODevice::WriteOnly); out << _metaData << "\0" << _cut; hash.addData(buffer); return hash.result(); } } HistoryURLItem::HistoryURLItem(const QList &_urls, const KUrlMimeData::MetaDataMap &_metaData, bool _cut) : HistoryItem(compute_uuid(_urls, _metaData, _cut)) , m_urls(_urls) , m_metaData(_metaData) , m_cut(_cut) { } /* virtual */ void HistoryURLItem::write(QDataStream &stream) const { stream << QStringLiteral("url") << m_urls << m_metaData << (int)m_cut; } QString HistoryURLItem::text() const { QString ret; bool first = true; for (const QUrl &url : m_urls) { if (!first) { ret.append(QLatin1Char(' ')); } first = false; ret.append(url.toString(QUrl::FullyEncoded)); } return ret; } QMimeData *HistoryURLItem::mimeData() const { QMimeData *data = new QMimeData(); data->setUrls(m_urls); KUrlMimeData::setMetaData(m_metaData, data); KUrlMimeData::exportUrlsToPortal(data); data->setData(QStringLiteral("application/x-kde-cutselection"), QByteArray(m_cut ? "1" : "0")); return data; } bool HistoryURLItem::operator==(const HistoryItem &rhs) const { if (const HistoryURLItem *casted_rhs = dynamic_cast(&rhs)) { return casted_rhs->m_urls == m_urls && casted_rhs->m_metaData.count() == m_metaData.count() && std::equal(casted_rhs->m_metaData.begin(), casted_rhs->m_metaData.end(), m_metaData.begin()) && casted_rhs->m_cut == m_cut; } return false; }