summaryrefslogtreecommitdiffstats
path: root/archivemodel.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2013-07-10 12:25:04 +0200
committerArno <am@disconnect.de>2013-07-10 12:25:04 +0200
commit493b6f3020dcd97697bb785fa47b8712b97189f8 (patch)
tree02c0098c157dd5e313b3083ddf5bcc03bc9d32c5 /archivemodel.cpp
parent59300b5b8663ecfdd8a55935641cbd0f04c79773 (diff)
downloadSheMov-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.cpp162
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);