summaryrefslogtreecommitdiffstats
path: root/archivemodel.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2014-04-07 16:16:55 +0200
committerArno <am@disconnect.de>2014-04-07 16:16:55 +0200
commit9f314ad26720a925e8e7a7f1a9f61330f3fd29c1 (patch)
tree9ca0661d1be109ac3df65d3e55b8629b295c1c3c /archivemodel.cpp
parent05c0ddf167054d1c7befe7440ff60718c98a8207 (diff)
downloadSheMov-9f314ad26720a925e8e7a7f1a9f61330f3fd29c1.tar.gz
SheMov-9f314ad26720a925e8e7a7f1a9f61330f3fd29c1.tar.bz2
SheMov-9f314ad26720a925e8e7a7f1a9f61330f3fd29c1.zip
Create new, empty Seriespart by contect menu
Preparation for drag and drop. Also make it possible to delete Seriesparts without files.
Diffstat (limited to 'archivemodel.cpp')
-rw-r--r--archivemodel.cpp55
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;
}