File indexing completed on 2025-04-27 04:04:22
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 }