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 "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 }