From 4b1798f0cdf87361869e7cf2b341acacd056c410 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 5 Apr 2017 15:04:00 +0200 Subject: Moved cpp code into src directory --- framework/src/domain/attachmentmodel.cpp | 145 +++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 framework/src/domain/attachmentmodel.cpp (limited to 'framework/src/domain/attachmentmodel.cpp') diff --git a/framework/src/domain/attachmentmodel.cpp b/framework/src/domain/attachmentmodel.cpp new file mode 100644 index 00000000..e98c6fc0 --- /dev/null +++ b/framework/src/domain/attachmentmodel.cpp @@ -0,0 +1,145 @@ +/* + Copyright (c) 2016 Sandro Knauß + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + This library is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public + License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. +*/ + +#include "messageparser.h" +#include "mimetreeparser/interface.h" + +#include +#include + +QString sizeHuman(const Content::Ptr &content) +{ + float num = content->content().size(); + QStringList list; + list << "KB" << "MB" << "GB" << "TB"; + + QStringListIterator i(list); + QString unit("Bytes"); + + while(num >= 1024.0 && i.hasNext()) + { + unit = i.next(); + num /= 1024.0; + } + + if (unit == "Bytes") { + return QString().setNum(num) + " " + unit; + } else { + return QString().setNum(num,'f',2)+" "+unit; + } +} + +class AttachmentModelPrivate +{ +public: + AttachmentModelPrivate(AttachmentModel *q_ptr, const std::shared_ptr &parser); + + AttachmentModel *q; + std::shared_ptr mParser; + QVector mAttachments; +}; + +AttachmentModelPrivate::AttachmentModelPrivate(AttachmentModel* q_ptr, const std::shared_ptr& parser) + : q(q_ptr) + , mParser(parser) +{ + mAttachments = mParser->collectAttachmentParts(); +} + +AttachmentModel::AttachmentModel(std::shared_ptr parser) + : d(std::unique_ptr(new AttachmentModelPrivate(this, parser))) +{ +} + +AttachmentModel::~AttachmentModel() +{ +} + +QHash AttachmentModel::roleNames() const +{ + QHash roles; + roles[TypeRole] = "type"; + roles[NameRole] = "name"; + roles[SizeRole] = "size"; + roles[IconRole] = "icon"; + roles[IsEncryptedRole] = "encrypted"; + roles[IsSignedRole] = "signed"; + return roles; +} + +QModelIndex AttachmentModel::index(int row, int column, const QModelIndex &parent) const +{ + if (row < 0 || column != 0) { + return QModelIndex(); + } + + if (row < d->mAttachments.size()) { + return createIndex(row, column, d->mAttachments.at(row).get()); + } + return QModelIndex(); +} + +QVariant AttachmentModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) { + switch (role) { + case Qt::DisplayRole: + return QString("root"); + } + return QVariant(); + } + + if (index.internalPointer()) { + const auto entry = static_cast(index.internalPointer()); + const auto content = entry->content().at(0); + switch(role) { + case TypeRole: + return content->mailMime()->mimetype().name(); + case NameRole: + return entry->mailMime()->filename(); + case IconRole: + return QIcon::fromTheme(content->mailMime()->mimetype().iconName()); + case SizeRole: + return sizeHuman(content); + case IsEncryptedRole: + return content->encryptions().size() > 0; + case IsSignedRole: + return content->signatures().size() > 0; + } + } + return QVariant(); +} + +QModelIndex AttachmentModel::parent(const QModelIndex &index) const +{ + return QModelIndex(); +} + +int AttachmentModel::rowCount(const QModelIndex &parent) const +{ + if (!parent.isValid()) { + return d->mAttachments.size(); + } + return 0; +} + +int AttachmentModel::columnCount(const QModelIndex &parent) const +{ + return 1; +} -- cgit v1.2.3