File indexing completed on 2025-04-27 04:04:21
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 "imagelocationmodel.h" 0009 #include "imagestorage.h" 0010 #include "roles.h" 0011 0012 #include <kio/copyjob.h> 0013 #include <kio/jobuidelegate.h> 0014 0015 ImageLocationModel::ImageLocationModel(QObject *parent) 0016 : QAbstractListModel(parent) 0017 , m_group(Types::LocationGroup::City) 0018 { 0019 connect(ImageStorage::instance(), &ImageStorage::storageModified, this, &ImageLocationModel::slotPopulate); 0020 } 0021 0022 void ImageLocationModel::slotPopulate() 0023 { 0024 beginResetModel(); 0025 m_locations = ImageStorage::instance()->locations(static_cast<Types::LocationGroup>(m_group)); 0026 endResetModel(); 0027 } 0028 0029 QHash<int, QByteArray> ImageLocationModel::roleNames() const 0030 { 0031 return Roles::roleNames(); 0032 } 0033 0034 QVariant ImageLocationModel::data(const QModelIndex &index, int role) const 0035 { 0036 Q_ASSERT(checkIndex(index, CheckIndexOption::ParentIsInvalid | CheckIndexOption::IndexIsValid)); 0037 0038 const QByteArray key = m_locations.at(index.row()).first; 0039 const QString display = m_locations.at(index.row()).second; 0040 0041 switch (role) { 0042 case Roles::ContentRole: 0043 return display; 0044 0045 case Roles::FilesRole: { 0046 const auto group = static_cast<Types::LocationGroup>(m_group); 0047 return ImageStorage::instance()->imagesForLocation(key, group); 0048 } 0049 0050 case Roles::FileCountRole: { 0051 const auto group = static_cast<Types::LocationGroup>(m_group); 0052 return ImageStorage::instance()->imagesForLocation(key, group).size(); 0053 } 0054 0055 case Roles::ImageUrlRole: { 0056 const auto group = static_cast<Types::LocationGroup>(m_group); 0057 return ImageStorage::instance()->imageForLocation(key, group); 0058 } 0059 0060 case Roles::ItemTypeRole: { 0061 return Types::Album; 0062 } 0063 } 0064 0065 return {}; 0066 } 0067 0068 int ImageLocationModel::rowCount(const QModelIndex &parent) const 0069 { 0070 if (parent.isValid()) { 0071 return 0; 0072 } 0073 0074 return m_locations.size(); 0075 } 0076 0077 void ImageLocationModel::setGroup(Types::LocationGroup group) 0078 { 0079 beginResetModel(); 0080 m_group = group; 0081 m_locations = ImageStorage::instance()->locations(static_cast<Types::LocationGroup>(group)); 0082 endResetModel(); 0083 0084 emit groupChanged(); 0085 } 0086 0087 Types::LocationGroup ImageLocationModel::group() const 0088 { 0089 return m_group; 0090 }