diff options
Diffstat (limited to 'archivemodel.cpp')
-rw-r--r-- | archivemodel.cpp | 55 |
1 files changed, 41 insertions, 14 deletions
diff --git a/archivemodel.cpp b/archivemodel.cpp index b845812..5369ff7 100644 --- a/archivemodel.cpp +++ b/archivemodel.cpp @@ -99,8 +99,8 @@ QVariant ArchiveModel::data(const QModelIndex &index, int role) const{ if(role == NameRole){ return item->data(Name); } - if(role == TypeRole){ - return item->data(Type); + if(role == GenericIdRole){ + return item->data(GenericId); } if(role == SeriesPartIdRole){ return item->data(SeriesPartId); @@ -108,12 +108,18 @@ QVariant ArchiveModel::data(const QModelIndex &index, int role) const{ if(role == SeriesPartRole){ return item->data(SeriesPart); } - if(role == SubtitleRole){ - return item->data(Subtitle); + if(role == TypeRole){ + return item->data(Type); } if(role == FavoriteRole){ return item->data(Favorite); } + if(role == SubtitleRole){ + return item->data(Subtitle); + } + if(role == CountRole){ + return item->data(Count); + } if(role == Qt::DecorationRole){ if(index.column() == 0){ return mNodeIcons.value(item->data(Type).toInt()); @@ -512,6 +518,9 @@ bool ArchiveModel::deleteSeriesPart(int partId){ QSqlQuery filesQ(mDb); filesQ.prepare("SELECT cmd5sum,tfilename FROM files WHERE iseriespart_id = :id"); filesQ.bindValue(":id", partId); + QSqlQuery deleteQ(mDb); + deleteQ.prepare("DELETE FROM seriesparts WHERE iseriesparts_id = :id"); + deleteQ.bindValue(":id", partId); QStringList fileNames; if(filesQ.exec()){ while(filesQ.next()){ @@ -519,19 +528,37 @@ bool ArchiveModel::deleteSeriesPart(int partId){ QString fn = filesQ.value(1).toString(); fileNames << Helper::createArchivePath(fn, md5); } - bool success = true; foreach(QString f, fileNames){ - if(!QFile::remove(f)){ - success = false; - break; - } + QFile::remove(f); } - if(success){ - QSqlQuery deleteQ(mDb); - deleteQ.prepare("DELETE FROM seriesparts WHERE iseriesparts_id = :id"); - deleteQ.bindValue(":id", partId); - return deleteQ.exec(); + } + return deleteQ.exec(); +} + +bool ArchiveModel::addSeriesPart(int partno, QString subtitle, const QModelIndex &parent){ + int seriesId = parent.data(ArchiveModel::GenericIdRole).toInt(); + mDb.transaction(); + QSqlQuery insertQ(mDb); + if(!subtitle.isEmpty()){ + insertQ.prepare("INSERT INTO seriesparts(iseriespart, iseries_id, tsubtitle) VALUES(:pno, :sid, :subtitle)"); + insertQ.bindValue(":pno", partno); + insertQ.bindValue(":sid", seriesId); + insertQ.bindValue(":subtitle", subtitle); + }else{ + insertQ.prepare("INSERT INTO seriesparts(iseriespart, iseries_id) VALUES(:pno, :sid)"); + insertQ.bindValue(":pno", partno); + insertQ.bindValue(":sid", seriesId); + } + if(insertQ.exec()){ + int nextPartId = -1; + QSqlQuery pidQ("SELECT currval('seriesparts_seriesparts_id__seq')", mDb); + while(pidQ.next()){ + nextPartId = pidQ.value(0).toInt(); } + QList<QVariant> data; + data << parent.data(ArchiveModel::NameRole).toString() << seriesId << nextPartId << partno << ArchiveModel::SeriesPartNode << false << subtitle << QVariant(); + mDb.commit(); + return addRow(data, parent, true); } return false; } |