diff options
author | Arno <am@disconnect.de> | 2013-07-10 12:25:04 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2013-07-10 12:25:04 +0200 |
commit | 493b6f3020dcd97697bb785fa47b8712b97189f8 (patch) | |
tree | 02c0098c157dd5e313b3083ddf5bcc03bc9d32c5 /archivemodel.cpp | |
parent | 59300b5b8663ecfdd8a55935641cbd0f04c79773 (diff) | |
download | SheMov-493b6f3020dcd97697bb785fa47b8712b97189f8.tar.gz SheMov-493b6f3020dcd97697bb785fa47b8712b97189f8.tar.bz2 SheMov-493b6f3020dcd97697bb785fa47b8712b97189f8.zip |
Make experimental view editable
Create new dialogs for editing actors, genres and metadata. IMHO like
this it's much clearer who does what. KISS!
Diffstat (limited to 'archivemodel.cpp')
-rw-r--r-- | archivemodel.cpp | 162 |
1 files changed, 161 insertions, 1 deletions
diff --git a/archivemodel.cpp b/archivemodel.cpp index 4c0439c..95e4081 100644 --- a/archivemodel.cpp +++ b/archivemodel.cpp @@ -92,6 +92,9 @@ QVariant ArchiveModel::data(const QModelIndex &index, int role) const{ if(role == TypeRole){ return item->data(Type); } + if(role == SeriesPartIdRole){ + return item->data(SeriesPartId); + } return SmTreeModel::data(index, role); } @@ -270,6 +273,53 @@ QStringList ArchiveModel::actors(const QSet<int> &partIds) const{ return retval; } +QStringList ArchiveModel::allActors() const{ + QStringList retval; + QSqlQuery q("SELECT tactorname FROM actors ORDER BY tactorname ASC", mDb); + while(q.next()){ + retval << q.value(0).toString(); + } + return retval; +} + +void ArchiveModel::setActors(int partId, const QStringList &actors){ + QStringList actorsForQ; + foreach(QString actor, actors){ + actorsForQ << QString("\'%1\'").arg(actor); + } + + QString actorIdQString = QString("SELECT iactors_id FROM actors WHERE tactorname IN (%1)").arg(actorsForQ.join(",")); + QSqlQuery actorIdQ(actorIdQString, mDb); + QList<int> actorIds; + while(actorIdQ.next()){ + actorIds << actorIdQ.value(0).toInt(); + } + if(actorIds.isEmpty()){ + return; + } + mDb.transaction(); + QSqlQuery deleteActorsQ(mDb); + deleteActorsQ.prepare("DELETE FROM seriesparts_actormap WHERE iseriesparts_id = :pid"); + deleteActorsQ.bindValue(":pid", partId); + if(!deleteActorsQ.exec()){ + mDb.rollback(); + return; + } + QSqlQuery insertActorsQ(mDb); + insertActorsQ.prepare("INSERT INTO seriesparts_actormap (iseriesparts_id, iactors_id) VALUES(:pid, :aid)"); + bool success = false; + foreach(int aid, actorIds){ + insertActorsQ.bindValue(":pid", partId); + insertActorsQ.bindValue(":aid", aid); + success = insertActorsQ.exec(); + } + if(!success){ + mDb.rollback(); + return; + } + mDb.commit(); +} + QStringList ArchiveModel::genres(const QSet<int> &genreIds) const{ QStringList ids; foreach(int i, genreIds){ @@ -284,6 +334,54 @@ QStringList ArchiveModel::genres(const QSet<int> &genreIds) const{ return retval; } +QStringList ArchiveModel::allGenres() const{ + QStringList retval; + QSqlQuery q("SELECT tgenrename FROM genres ORDER BY tgenrename ASC", mDb); + while(q.next()){ + retval << q.value(0).toString(); + } + return retval; +} + +void ArchiveModel::setGenres(int partId, const QStringList &genres){ + QStringList genresForQ; + foreach(QString genre, genres){ + genresForQ << QString("\'%1\'").arg(genre); + } + + QString genreIdQString = QString("SELECT igenres_id FROM genres WHERE tgenrename IN (%1)").arg(genresForQ.join(",")); + QSqlQuery genreIdQ(genreIdQString, mDb); + QList<int> genreIds; + while(genreIdQ.next()){ + genreIds << genreIdQ.value(0).toInt(); + } + if(genreIds.isEmpty()){ + return; + } + mDb.transaction(); + QSqlQuery deleteGenresQ(mDb); + deleteGenresQ.prepare("DELETE FROM seriesparts_genremap WHERE iseriesparts_id = :pid"); + deleteGenresQ.bindValue(":pid", partId); + if(!deleteGenresQ.exec()){ + mDb.rollback(); + return; + } + QSqlQuery insertGenresQ(mDb); + insertGenresQ.prepare("INSERT INTO seriesparts_genremap (iseriesparts_id, igenres_id) VALUES(:pid, :aid)"); + bool success = false; + foreach(int gid, genreIds){ + insertGenresQ.bindValue(":pid", partId); + insertGenresQ.bindValue(":aid", gid); + success = insertGenresQ.exec(); + } + if(!success){ + mDb.rollback(); + return; + } + mDb.commit(); +} + + QString ArchiveModel::metadata(int partId) const{ QString retval; retval.append("<html><table>"); @@ -297,7 +395,7 @@ QString ArchiveModel::metadata(int partId) const{ retval.append(QString("<tr><td><i>Subject</i></td><td>%1</td></tr>").arg(metadataQuery.value(2).toString())); retval.append(QString("<tr><td><i>Rel. Group</i></td><td>%1</td></tr>").arg(metadataQuery.value(3).toString())); retval.append(QString("<tr><td><i>Enc. Opts</i></td><td>%1</td></tr>").arg(metadataQuery.value(4).toString())); - retval.append(QString("<tr><td><i>Passes</i></td><td>%1</td></tr>").arg(metadataQuery.value(1).toString())); + retval.append(QString("<tr><td><i>Passes</i></td><td>%1</td></tr>").arg(QString::number(metadataQuery.value(6).toInt()))); QDate added = metadataQuery.value(7).toDate(); retval.append(QString("<tr><td><i>Added</i></td><td>%1</td></tr>").arg(added.toString("yyyy-MM-dd"))); retval.append(QString("<tr><td><i>Comment</i></td><td>%1</td></tr>").arg(metadataQuery.value(5).toString())); @@ -306,6 +404,68 @@ QString ArchiveModel::metadata(int partId) const{ return retval; } +QList<QVariant> ArchiveModel::metadataList(int partId) const{ + QSqlQuery metadataQuery(mDb); + metadataQuery.prepare("SELECT sireleaseyear, tsourcemedium, tsubject, treleasegroup, tencoderopts, tcomment, sipasses, dadded FROM metadata WHERE iseriespart_id = :id"); + metadataQuery.bindValue(":id", partId); + metadataQuery.exec(); + QList<QVariant> retval; + for(int i = 0; i < MetadataNumFields; ++i){ + retval << QVariant(); + } + while(metadataQuery.next()){ + for(int i = 0; i < MetadataNumFields; ++i){ + retval[i] = metadataQuery.value(i); + } + } + return retval; +} + +void ArchiveModel::setMetadata(int partId, const QList<QVariant> &data){ + mDb.transaction(); + QSqlQuery delMetadataQ(mDb); + delMetadataQ.prepare("DELETE FROM metadata WHERE iseriespart_id = :pid"); + delMetadataQ.bindValue(":pid", partId); + if(!delMetadataQ.exec()){ + mDb.rollback(); + return; + } + QSqlQuery insertMetadataQ(mDb); + insertMetadataQ.prepare("INSERT INTO metadata (iseriespart_id, sireleaseyear, tsourcemedium, tsubject, treleasegroup, tencoderopts, tcomment, sipasses, dadded) VALUES(:pid, :rely, :source, :sub, :group, :encopts, :comment, :passes, :added)"); + insertMetadataQ.bindValue(":pid", partId); + insertMetadataQ.bindValue(":rely", data.at(ReleaseYear)); + insertMetadataQ.bindValue(":source", data.at(Source)); + insertMetadataQ.bindValue(":sub", data.at(Subject)); + insertMetadataQ.bindValue(":group", data.at(ReleaseGroup)); + insertMetadataQ.bindValue(":encopts", data.at(EncoderOpts)); + insertMetadataQ.bindValue(":comment", data.at(Comment)); + insertMetadataQ.bindValue(":passes", data.at(Passes)); + insertMetadataQ.bindValue(":added", data.at(Added)); + if(!insertMetadataQ.exec()){ + mDb.rollback(); + return; + } + mDb.commit(); +} + +QStringList ArchiveModel::allSources() const{ + QSqlQuery sQ("SELECT DISTINCT(tsourcemedium) FROM metadata ORDER BY tsourcemedium ASC", mDb); + QStringList retval; + while(sQ.next()){ + retval << sQ.value(0).toString(); + } + return retval; +} + +QStringList ArchiveModel::allReleaseGroups() const{ + QSqlQuery rQ("SELECT DISTINCT(treleasegroup) FROM metadata ORDER BY treleasegroup ASC", mDb); + QStringList retval; + while(rQ.next()){ + retval << rQ.value(0).toString(); + } + return retval; +} + void ArchiveModel::setOrder(int order) { mOrder = order; SmTreeItem *rootItem = readCache(mOrder); |