You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

269 lines
5.6 KiB
C++

#include "calbums.h"
#include <QSqlQuery>
#include <QDebug>
cAlbums::cAlbums(const qint32& id, cAlbumsList* albumsList, QSqlDatabase* dbDigikam, QSqlDatabase* dbThumbnail, QObject *parent) :
QObject(parent),
m_id(id),
m_albumRoots(nullptr),
m_relativePath(""),
m_date(QDate()),
m_caption(""),
m_collection(""),
m_modificationDate(QDateTime()),
m_parentAlbums(nullptr),
m_imagesList(nullptr),
m_albumsList(albumsList),
m_dbDigikam(dbDigikam),
m_dbThumbnail(dbThumbnail),
m_item(nullptr)
{
}
cAlbums::cAlbums(const qint32& id, cAlbumRoots* albumRoots, const QString& relativePath, const QDate& date, const QString& caption, const QString& collection, const QDateTime& modificationDate, cAlbumsList* albumsList, QSqlDatabase* dbDigikam, QSqlDatabase* dbThumbnail, QObject *parent) :
QObject(parent),
m_id(id),
m_albumRoots(albumRoots),
m_relativePath(relativePath),
m_date(date),
m_caption(caption),
m_collection(collection),
m_modificationDate(modificationDate),
m_parentAlbums(nullptr),
m_imagesList(nullptr),
m_albumsList(albumsList),
m_dbDigikam(dbDigikam),
m_dbThumbnail(dbThumbnail),
m_item(nullptr)
{
}
cAlbums::~cAlbums()
{
if(m_imagesList)
delete m_imagesList;
}
qint32 cAlbums::id()
{
return(m_id);
}
void cAlbums::setAlbumRoots(cAlbumRoots* albumRoots)
{
m_albumRoots = albumRoots;
}
cAlbumRoots* cAlbums::albumRoots()
{
return(m_albumRoots);
}
void cAlbums::setRelativePath(const QString& relativePath)
{
m_relativePath = relativePath;
}
QString cAlbums::relativePath()
{
return(m_relativePath);
}
QString cAlbums::path()
{
QString path = m_relativePath.mid(m_relativePath.lastIndexOf("/")+1);
return(path);
}
void cAlbums::setDate(const QDate& date)
{
m_date = date;
}
QDate cAlbums::date()
{
return(m_date);
}
void cAlbums::setCaption(const QString& caption)
{
m_caption = caption;
}
QString cAlbums::caption()
{
return(m_caption);
}
void cAlbums::setCollection(const QString& collection)
{
m_collection = collection;
}
QString cAlbums::collection()
{
return(m_collection);
}
void cAlbums::setModificationDate(const QDateTime modificationDate)
{
m_modificationDate = modificationDate;
}
QDateTime cAlbums::modificationDate()
{
return(m_modificationDate);
}
void cAlbums::setParentAlbums(cAlbums *parentAlbums)
{
m_parentAlbums = parentAlbums;
}
cAlbums* cAlbums::parentAlbums()
{
return(m_parentAlbums);
}
bool cAlbums::loadImages(bool loadThumbnails)
{
if(!m_imagesList)
{
m_imagesList = new cImagesList(m_dbDigikam, m_dbThumbnail, m_albumsList, this);
m_imagesList->load(loadThumbnails, this);
return(true);
}
else
m_imagesList->loadThumbnails();
return(false);
}
cImagesList* cAlbums::imagesList()
{
return(m_imagesList);
}
void cAlbums::setItem(QStandardItem* item)
{
m_item = item;
}
QStandardItem* cAlbums::item()
{
return(m_item);
}
cAlbumsList::cAlbumsList(QSqlDatabase* dbDigikam, QSqlDatabase *dbThumbnail, cAlbumRootsList* albumRootsList, QObject* parent) :
QObject(parent),
m_dbDigikam(dbDigikam),
m_dbThumbnail(dbThumbnail),
m_albumRootsList(albumRootsList)
{
}
cAlbumsList::~cAlbumsList()
{
}
bool cAlbumsList::load()
{
if(!m_dbDigikam)
return(false);
QSqlQuery query(*m_dbDigikam);
if(!query.exec("SELECT id, "
" albumRoot, "
" relativePath, "
" date, "
" caption, "
" collection, "
" modificationDate "
"FROM Albums "
"ORDER BY relativePath;"))
{
qDebug() << "cAlbumsList: loading failed.";
return(false);
}
while(query.next())
add(query.value("id").toInt(), query.value("albumRoot").toInt(), query.value("relativePath").toString(), query.value("date").toDate(), query.value("caption").toString(), query.value("collection").toString(), query.value("modificationDate").toDateTime(), this);
return(true);
}
cAlbums* cAlbumsList::add(const qint32& id, QObject* parent)
{
cAlbums* lpNew = find(id);
if(lpNew)
return(lpNew);
lpNew = new cAlbums(id, this, m_dbDigikam, m_dbThumbnail, parent);
lpNew->loadImages();
append(lpNew);
return(lpNew);
}
cAlbums* cAlbumsList::add(const qint32& id, cAlbumRoots* albumRoots, const QString& relativePath, const QDate& date, const QString& caption, const QString& collection, const QDateTime& modificationDate, QObject *parent)
{
cAlbums* lpNew = find(id);
if(lpNew)
return(lpNew);
lpNew = new cAlbums(id, albumRoots, relativePath, date, caption, collection, modificationDate, this, m_dbDigikam, m_dbThumbnail, parent);
lpNew->loadImages();
QString parentAlbum = relativePath.left(relativePath.lastIndexOf("/"));
if(!parentAlbum.isEmpty())
lpNew->setParentAlbums(find(parentAlbum));
append(lpNew);
return(lpNew);
}
cAlbums* cAlbumsList::add(const qint32& id, const qint32& albumRootsID, const QString& relativePath, const QDate& date, const QString& caption, const QString& collection, const QDateTime& modificationDate, QObject *parent)
{
cAlbums* lpNew = find(id);
if(lpNew)
return(lpNew);
cAlbumRoots* albumRoots = m_albumRootsList->find(albumRootsID);
lpNew = new cAlbums(id, albumRoots, relativePath, date, caption, collection, modificationDate, this, m_dbDigikam, m_dbThumbnail, parent);
lpNew->loadImages(false);
QString parentAlbum = relativePath.left(relativePath.lastIndexOf("/"));
if(!parentAlbum.isEmpty())
lpNew->setParentAlbums(find(parentAlbum));
else if(relativePath.length() > 1)
lpNew->setParentAlbums(at(0));
append(lpNew);
return(lpNew);
}
cAlbums* cAlbumsList::find(const qint32& id)
{
for(int i = 0;i < count();i++)
{
if(at(i)->id() == id)
return(at(i));
}
return(nullptr);
}
cAlbums* cAlbumsList::find(const QString& relativePath)
{
for(int i = 0;i < count();i++)
{
if(at(i)->relativePath() == relativePath)
return(at(i));
}
return(nullptr);
}