diff --git a/qmlUiKirigami/main.qml b/qmlUiKirigami/main.qml --- a/qmlUiKirigami/main.qml +++ b/qmlUiKirigami/main.qml @@ -97,53 +97,53 @@ Koko.SortModel { id: imageTimeModelYear sourceModel: Koko.ImageTimeModel { - group: Koko.ImageTimeModel.Year + group: Koko.Types.Year } sortRoleName: "date" } Koko.SortModel { id: imageTimeModelMonth sourceModel: Koko.ImageTimeModel { - group: Koko.ImageTimeModel.Month + group: Koko.Types.Month } sortRoleName: "date" } Koko.SortModel { id: imageTimeModelWeek sourceModel: Koko.ImageTimeModel { - group: Koko.ImageTimeModel.Week + group: Koko.Types.Week } sortRoleName: "date" } Koko.SortModel { id: imageTimeModelDay sourceModel: Koko.ImageTimeModel { - group: Koko.ImageTimeModel.Day + group: Koko.Types.Day } sortRoleName: "date" } Koko.SortModel { id: imageLocationModelCountry sourceModel: Koko.ImageLocationModel { - group: Koko.ImageLocationModel.Country + group: Koko.Types.Country } } Koko.SortModel { id: imageLocationModelState sourceModel: Koko.ImageLocationModel { - group: Koko.ImageLocationModel.State + group: Koko.Types.State } } Koko.SortModel { id: imageLocationModelCity sourceModel: Koko.ImageLocationModel { - group: Koko.ImageLocationModel.City + group: Koko.Types.City } } diff --git a/src/imagelocationmodel.h b/src/imagelocationmodel.h --- a/src/imagelocationmodel.h +++ b/src/imagelocationmodel.h @@ -25,35 +25,30 @@ #include #include +#include "types.h" + class ImageLocationModel : public QAbstractListModel { Q_OBJECT - Q_PROPERTY(LocationGroup group READ group WRITE setGroup NOTIFY groupChanged) + Q_PROPERTY(Types::LocationGroup group READ group WRITE setGroup NOTIFY groupChanged) public: explicit ImageLocationModel(QObject* parent = 0); virtual QHash< int, QByteArray > roleNames() const; virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; virtual int rowCount(const QModelIndex& parent = QModelIndex()) const; - enum LocationGroup { - Country, - State, - City - }; - Q_ENUMS(LocationGroup) - - LocationGroup group() const; - void setGroup(LocationGroup group); + Types::LocationGroup group() const; + void setGroup(Types::LocationGroup group); signals: void groupChanged(); private slots: void slotPopulate(); private: - LocationGroup m_group; + Types::LocationGroup m_group; QList > m_locations; }; diff --git a/src/imagelocationmodel.cpp b/src/imagelocationmodel.cpp --- a/src/imagelocationmodel.cpp +++ b/src/imagelocationmodel.cpp @@ -20,23 +20,22 @@ #include "imagelocationmodel.h" #include "imagestorage.h" -#include "types.h" #include "roles.h" #include #include ImageLocationModel::ImageLocationModel(QObject* parent) : QAbstractListModel(parent) - , m_group(ImageLocationModel::City) + , m_group(Types::LocationGroup::City) { connect(ImageStorage::instance(), SIGNAL(storageModified()), this, SLOT(slotPopulate())); } void ImageLocationModel::slotPopulate() { beginResetModel(); - m_locations = ImageStorage::instance()->locations(static_cast(m_group)); + m_locations = ImageStorage::instance()->locations(static_cast(m_group)); endResetModel(); } @@ -66,17 +65,17 @@ return display; case Roles::FilesRole: { - auto group = static_cast(m_group); + auto group = static_cast(m_group); return ImageStorage::instance()->imagesForLocation(key, group); } case Roles::FileCountRole: { - auto group = static_cast(m_group); + auto group = static_cast(m_group); return ImageStorage::instance()->imagesForLocation(key, group).size(); } case Roles::ImageUrlRole: { - auto group = static_cast(m_group); + auto group = static_cast(m_group); return ImageStorage::instance()->imageForLocation(key, group); } @@ -98,17 +97,17 @@ return m_locations.size(); } -void ImageLocationModel::setGroup(ImageLocationModel::LocationGroup group) +void ImageLocationModel::setGroup(Types::LocationGroup group) { beginResetModel(); m_group = group; - m_locations = ImageStorage::instance()->locations(static_cast(group)); + m_locations = ImageStorage::instance()->locations(static_cast(group)); endResetModel(); emit groupChanged(); } -ImageLocationModel::LocationGroup ImageLocationModel::group() const +Types::LocationGroup ImageLocationModel::group() const { return m_group; } diff --git a/src/imagestorage.h b/src/imagestorage.h --- a/src/imagestorage.h +++ b/src/imagestorage.h @@ -29,6 +29,7 @@ #include #include +#include "types.h" #include "koko_export.h" struct ImageInfo { @@ -50,26 +51,15 @@ static ImageStorage* instance(); - enum LocationGroup { - Country, - State, - City - }; - QList< QPair > locations(LocationGroup loca); - QStringList imagesForLocation(const QByteArray& name, LocationGroup loc); - QString imageForLocation(const QByteArray& name, LocationGroup loc); - - enum TimeGroup { - Year, - Month, - Week, - Day - }; - QList< QPair > timeGroups(TimeGroup group); - QStringList imagesForTime(const QByteArray& name, TimeGroup group); - QString imageForTime(const QByteArray& name, TimeGroup group); - - QDate dateForKey(const QByteArray& key, TimeGroup group); + QList< QPair > locations(Types::LocationGroup loca); + QStringList imagesForLocation(const QByteArray& name, Types::LocationGroup loc); + QString imageForLocation(const QByteArray& name, Types::LocationGroup loc); + + QList< QPair > timeTypes(Types::TimeGroup group); + QStringList imagesForTime(const QByteArray& name, Types::TimeGroup group); + QString imageForTime(const QByteArray& name, Types::TimeGroup group); + + QDate dateForKey(const QByteArray& key, Types::TimeGroup group); /** * Fetch all the images ordered by descending date time. diff --git a/src/imagestorage.cpp b/src/imagestorage.cpp --- a/src/imagestorage.cpp +++ b/src/imagestorage.cpp @@ -180,12 +180,12 @@ emit storageModified(); } -QList > ImageStorage::locations(ImageStorage::LocationGroup loca) +QList > ImageStorage::locations(Types::LocationGroup loca) { QMutexLocker lock(&m_mutex); QList< QPair > list; - if (loca == Country) { + if (loca == Types::LocationGroup::Country) { QSqlQuery query; query.prepare("SELECT DISTINCT country from locations"); @@ -200,7 +200,7 @@ } return list; } - else if (loca == State) { + else if (loca == Types::LocationGroup::State) { QSqlQuery query; query.prepare("SELECT DISTINCT country, state from locations"); @@ -223,7 +223,7 @@ } return list; } - else if (loca == City) { + else if (loca == Types::LocationGroup::City) { QSqlQuery query; query.prepare("SELECT DISTINCT country, state, city from locations"); @@ -256,15 +256,15 @@ return list; } -QStringList ImageStorage::imagesForLocation(const QByteArray& name, ImageStorage::LocationGroup loc) +QStringList ImageStorage::imagesForLocation(const QByteArray& name, Types::LocationGroup loc) { QMutexLocker lock(&m_mutex); QSqlQuery query; - if (loc == Country) { + if (loc == Types::LocationGroup::Country) { query.prepare("SELECT DISTINCT url from files, locations where country = ? AND files.location = locations.id"); query.addBindValue(QString::fromUtf8(name)); } - else if (loc == State) { + else if (loc == Types::LocationGroup::State) { QDataStream st(name); QString country; @@ -275,7 +275,7 @@ query.addBindValue(country); query.addBindValue(state); } - else if (loc == City) { + else if (loc == Types::LocationGroup::City) { QDataStream st(name); QString country; @@ -300,15 +300,15 @@ return files; } -QString ImageStorage::imageForLocation(const QByteArray& name, ImageStorage::LocationGroup loc) +QString ImageStorage::imageForLocation(const QByteArray& name, Types::LocationGroup loc) { QMutexLocker lock(&m_mutex); QSqlQuery query; - if (loc == Country) { + if (loc == Types::LocationGroup::Country) { query.prepare("SELECT DISTINCT url from files, locations where country = ? AND files.location = locations.id"); query.addBindValue(QString::fromUtf8(name)); } - else if (loc == State) { + else if (loc == Types::LocationGroup::State) { QDataStream st(name); QString country; @@ -319,7 +319,7 @@ query.addBindValue(country); query.addBindValue(state); } - else if (loc == City) { + else if (loc == Types::LocationGroup::City) { QDataStream st(name); QString country; @@ -343,14 +343,13 @@ return QString(); } - -QList > ImageStorage::timeGroups(ImageStorage::TimeGroup group) +QList > ImageStorage::timeTypes(Types::TimeGroup group) { QMutexLocker lock(&m_mutex); QList< QPair > list; QSqlQuery query; - if (group == Year) { + if (group == Types::TimeGroup::Year) { query.prepare("SELECT DISTINCT strftime('%Y', dateTime) from files"); if (!query.exec()) { qDebug() << group << query.lastError(); @@ -363,7 +362,7 @@ } return list; } - else if (group == Month) { + else if (group == Types::TimeGroup::Month) { query.prepare("SELECT DISTINCT strftime('%Y', dateTime), strftime('%m', dateTime) from files"); if (!query.exec()) { qDebug() << group << query.lastError(); @@ -385,7 +384,7 @@ } return list; } - else if (group == Week) { + else if (group == Types::TimeGroup::Week) { query.prepare("SELECT DISTINCT strftime('%Y', dateTime), strftime('%m', dateTime), strftime('%W', dateTime) from files"); if (!query.exec()) { qDebug() << group << query.lastError(); @@ -407,7 +406,7 @@ } return list; } - else if (group == Day) { + else if (group == Types::TimeGroup::Day) { query.prepare("SELECT DISTINCT date(dateTime) from files"); if (!query.exec()) { qDebug() << group << query.lastError(); @@ -429,15 +428,15 @@ return list; } -QStringList ImageStorage::imagesForTime(const QByteArray& name, ImageStorage::TimeGroup group) +QStringList ImageStorage::imagesForTime(const QByteArray& name, Types::TimeGroup group) { QMutexLocker lock(&m_mutex); QSqlQuery query; - if (group == Year) { + if (group == Types::TimeGroup::Year) { query.prepare("SELECT DISTINCT url from files where strftime('%Y', dateTime) = ?"); query.addBindValue(QString::fromUtf8(name)); } - else if (group == Month) { + else if (group == Types::TimeGroup::Month) { QDataStream stream(name); QString year; QString month; @@ -447,7 +446,7 @@ query.addBindValue(year); query.addBindValue(month); } - else if (group == Week) { + else if (group == Types::TimeGroup::Week) { QDataStream stream(name); QString year; QString week; @@ -457,7 +456,7 @@ query.addBindValue(year); query.addBindValue(week); } - else if (group == Day) { + else if (group == Types::TimeGroup::Day) { QDate date = QDate::fromString(QString::fromUtf8(name), Qt::ISODate); query.prepare("SELECT DISTINCT url from files where date(dateTime) = ?"); @@ -478,17 +477,17 @@ return files; } -QString ImageStorage::imageForTime(const QByteArray& name, ImageStorage::TimeGroup group) +QString ImageStorage::imageForTime(const QByteArray& name, Types::TimeGroup group) { QMutexLocker lock(&m_mutex); Q_ASSERT(!name.isEmpty()); QSqlQuery query; - if (group == Year) { + if (group == Types::TimeGroup::Year) { query.prepare("SELECT DISTINCT url from files where strftime('%Y', dateTime) = ? LIMIT 1"); query.addBindValue(QString::fromUtf8(name)); } - else if (group == Month) { + else if (group == Types::TimeGroup::Month) { QDataStream stream(name); QString year; QString month; @@ -498,7 +497,7 @@ query.addBindValue(year); query.addBindValue(month); } - else if (group == Week) { + else if (group == Types::TimeGroup::Week) { QDataStream stream(name); QString year; QString week; @@ -508,7 +507,7 @@ query.addBindValue(year); query.addBindValue(week); } - else if (group == Day) { + else if (group == Types::TimeGroup::Day) { QDate date = QDate::fromString(QString::fromUtf8(name), Qt::ISODate); query.prepare("SELECT DISTINCT url from files where date(dateTime) = ? LIMIT 1"); @@ -528,31 +527,31 @@ return QString(); } -QDate ImageStorage::dateForKey(const QByteArray& name, ImageStorage::TimeGroup group) +QDate ImageStorage::dateForKey(const QByteArray& key, Types::TimeGroup group) { - if (group == Year) { - return QDate(name.toInt(), 1, 1); + if (group == Types::TimeGroup::Year) { + return QDate(key.toInt(), 1, 1); } - else if (group == Month) { - QDataStream stream(name); + else if (group == Types::TimeGroup::Month) { + QDataStream stream(key); QString year; QString month; stream >> year >> month; return QDate(year.toInt(), month.toInt(), 1); } - else if (group == Week) { - QDataStream stream(name); + else if (group == Types::TimeGroup::Week) { + QDataStream stream(key); QString year; QString week; stream >> year >> week; int month = week.toInt() / 4; int day = week.toInt() % 4; return QDate(year.toInt(), month, day); } - else if (group == Day) { - return QDate::fromString(QString::fromUtf8(name), Qt::ISODate); + else if (group == Types::TimeGroup::Day) { + return QDate::fromString(QString::fromUtf8(key), Qt::ISODate); } Q_ASSERT(0); diff --git a/src/imagetimemodel.h b/src/imagetimemodel.h --- a/src/imagetimemodel.h +++ b/src/imagetimemodel.h @@ -24,36 +24,30 @@ #include #include +#include "types.h" + class ImageTimeModel : public QAbstractListModel { Q_OBJECT - Q_PROPERTY(TimeGroup group READ group WRITE setGroup NOTIFY groupChanged) + Q_PROPERTY(Types::TimeGroup group READ group WRITE setGroup NOTIFY groupChanged) public: explicit ImageTimeModel(QObject* parent = 0); virtual QHash< int, QByteArray > roleNames() const; virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; virtual int rowCount(const QModelIndex& parent = QModelIndex()) const; - enum TimeGroup { - Year, - Month, - Week, - Day - }; - Q_ENUMS(TimeGroup) - - TimeGroup group() const; - void setGroup(TimeGroup group); + Types::TimeGroup group() const; + void setGroup(Types::TimeGroup group); signals: void groupChanged(); private slots: void slotPopulate(); private: - TimeGroup m_group; + Types::TimeGroup m_group; QList< QPair > m_times; }; diff --git a/src/imagetimemodel.cpp b/src/imagetimemodel.cpp --- a/src/imagetimemodel.cpp +++ b/src/imagetimemodel.cpp @@ -20,24 +20,23 @@ #include "imagetimemodel.h" #include "imagestorage.h" -#include "types.h" #include "roles.h" #include #include ImageTimeModel::ImageTimeModel(QObject* parent) : QAbstractListModel(parent) - , m_group(ImageTimeModel::Day) + , m_group(Types::TimeGroup::Day) { connect(ImageStorage::instance(), SIGNAL(storageModified()), this, SLOT(slotPopulate())); } void ImageTimeModel::slotPopulate() { beginResetModel(); - auto tg = static_cast(m_group); - m_times = ImageStorage::instance()->timeGroups(tg); + auto tg = static_cast(m_group); + m_times = ImageStorage::instance()->timeTypes(tg); endResetModel(); } @@ -68,22 +67,22 @@ return display; case Roles::FilesRole: { - auto tg = static_cast(m_group); + auto tg = static_cast(m_group); return ImageStorage::instance()->imagesForTime(key, tg); } case Roles::FileCountRole: { - auto tg = static_cast(m_group); + auto tg = static_cast(m_group); return ImageStorage::instance()->imagesForTime(key, tg).size(); } case Roles::ImageUrlRole: { - auto tg = static_cast(m_group); + auto tg = static_cast(m_group); return ImageStorage::instance()->imageForTime(key, tg); } case Roles::DateRole: { - auto tg = static_cast(m_group); + auto tg = static_cast(m_group); return ImageStorage::instance()->dateForKey(key, tg); } @@ -105,18 +104,18 @@ return m_times.size(); } -ImageTimeModel::TimeGroup ImageTimeModel::group() const +Types::TimeGroup ImageTimeModel::group() const { return m_group; } -void ImageTimeModel::setGroup(ImageTimeModel::TimeGroup group) +void ImageTimeModel::setGroup(Types::TimeGroup group) { beginResetModel(); m_group = group; - auto tg = static_cast(m_group); - m_times = ImageStorage::instance()->timeGroups(tg); + auto tg = static_cast(m_group); + m_times = ImageStorage::instance()->timeTypes(tg); endResetModel(); emit groupChanged(); diff --git a/src/types.h b/src/types.h --- a/src/types.h +++ b/src/types.h @@ -24,11 +24,26 @@ class Types : public QObject { Q_OBJECT Q_ENUMS(ItemTypes) + Q_ENUMS(TimeGroup) + Q_ENUMS(LocationGroup) public: Types(QObject* parent); ~Types(); - enum ItemTypes { Album, Folder, Image }; + enum ItemTypes { Album = 0 , Folder, Image }; + + enum TimeGroup { + Year = 3, + Month, + Week, + Day + }; + + enum LocationGroup { + Country = 7, + State, + City + }; };