File indexing completed on 2024-05-12 15:54:50

0001 /*
0002  * SPDX-FileCopyrightText: (C) 2014 Vishesh Handa <vhanda@kde.org>
0003  * SPDX-FileCopyrightText: (C) 2017 Atul Sharma <atulsharma406@gmail.com>
0004  *
0005  * SPDX-License-Identifier: LGPL-2.1-or-later
0006  */
0007 
0008 #include "imagetimemodel.h"
0009 #include "imagestorage.h"
0010 #include "roles.h"
0011 
0012 #include <kio/copyjob.h>
0013 #include <kio/jobuidelegate.h>
0014 
0015 ImageTimeModel::ImageTimeModel(QObject *parent)
0016     : QAbstractListModel(parent)
0017     , m_group(Types::TimeGroup::Day)
0018 {
0019     connect(ImageStorage::instance(), &ImageStorage::storageModified, this, &ImageTimeModel::slotPopulate);
0020 }
0021 
0022 void ImageTimeModel::slotPopulate()
0023 {
0024     beginResetModel();
0025     auto tg = static_cast<Types::TimeGroup>(m_group);
0026     m_times = ImageStorage::instance()->timeTypes(tg);
0027     endResetModel();
0028 }
0029 
0030 QHash<int, QByteArray> ImageTimeModel::roleNames() const
0031 {
0032     return Roles::roleNames();
0033 }
0034 
0035 QVariant ImageTimeModel::data(const QModelIndex &index, int role) const
0036 {
0037     Q_ASSERT(checkIndex(index, CheckIndexOption::ParentIsInvalid | CheckIndexOption::IndexIsValid));
0038 
0039     const QByteArray key = m_times.at(index.row()).first;
0040 
0041     switch (role) {
0042     case Roles::ContentRole:
0043         return m_times.at(index.row()).second;
0044 
0045     case Roles::FilesRole: {
0046         const auto tg = static_cast<Types::TimeGroup>(m_group);
0047         return ImageStorage::instance()->imagesForTime(key, tg);
0048     }
0049 
0050     case Roles::FileCountRole: {
0051         const auto tg = static_cast<Types::TimeGroup>(m_group);
0052         return ImageStorage::instance()->imagesForTime(key, tg).size();
0053     }
0054 
0055     case Roles::ImageUrlRole: {
0056         const auto tg = static_cast<Types::TimeGroup>(m_group);
0057         return ImageStorage::instance()->imageForTime(key, tg);
0058     }
0059 
0060     case Roles::DateRole: {
0061         const auto tg = static_cast<Types::TimeGroup>(m_group);
0062         return ImageStorage::instance()->dateForKey(key, tg);
0063     }
0064 
0065     case Roles::ItemTypeRole: {
0066         return Types::Album;
0067     }
0068     }
0069 
0070     return {};
0071 }
0072 
0073 int ImageTimeModel::rowCount(const QModelIndex &parent) const
0074 {
0075     if (parent.isValid()) {
0076         return 0;
0077     }
0078 
0079     return m_times.size();
0080 }
0081 
0082 Types::TimeGroup ImageTimeModel::group() const
0083 {
0084     return m_group;
0085 }
0086 
0087 void ImageTimeModel::setGroup(Types::TimeGroup group)
0088 {
0089     beginResetModel();
0090     m_group = group;
0091 
0092     auto tg = static_cast<Types::TimeGroup>(m_group);
0093     m_times = ImageStorage::instance()->timeTypes(tg);
0094     endResetModel();
0095 
0096     emit groupChanged();
0097 }