summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--filestreemodel.cpp32
-rw-r--r--filestreemodel.h4
-rw-r--r--seriestreemodel.cpp52
-rw-r--r--seriestreemodel.h5
4 files changed, 92 insertions, 1 deletions
diff --git a/filestreemodel.cpp b/filestreemodel.cpp
index cbfbd24..35883d3 100644
--- a/filestreemodel.cpp
+++ b/filestreemodel.cpp
@@ -8,6 +8,7 @@
#include <QSqlQuery>
#include <QLocale>
#include <QIcon>
+#include <QFileInfo>
#include "filestreemodel.h"
#include "smtreeitem.h"
@@ -19,10 +20,14 @@ FilesTreeModel::FilesTreeModel(QStringList &headers, QObject *parent) : SmTreeMo
mUpdateDvdQuery->prepare("UPDATE files SET idvd = :dvd WHERE ifiles_id = :id");
mUpdateQualityQuery = new QSqlQuery(mDb);
mUpdateQualityQuery->prepare("UPDATE files SET siquality = :quality WHERE ifiles_id = :id");
+ mInsertFileQuery = new QSqlQuery(mDb);
+ mInsertFileQuery->prepare("INSERT INTO files(iseriespart_id, tfilename, cmd5sum, bisize, idvd, sifiletype, sifileno, siqualiy) VALUES(:seriespartid, :fname, :md5, :size, :dvd, :type, :fileno, :quality)");
}
FilesTreeModel::~FilesTreeModel(){
delete mUpdateDvdQuery;
+ delete mUpdateQualityQuery;
+ delete mInsertFileQuery;
mDb = QSqlDatabase();
}
@@ -195,3 +200,30 @@ Qt::ItemFlags FilesTreeModel::flags(const QModelIndex &index) const{
}
return retval;
}
+
+bool FilesTreeModel::addFile(const QString &fullPath, int type, int quality, int filePart, int seriesPartId, int dvd){
+ QFileInfo fi(fullPath);
+ qint64 size = fi.size();
+ if(!fi.exists()){
+ //should be a dvd
+ size = Q_INT64_C(4707319808);
+ }
+
+ QString md5Sum = Helper::md5Sum(fullPath);
+
+ //prepare query
+ mDb.transaction();
+ mInsertFileQuery->bindValue(":seriespartid", seriesPartId);
+ mInsertFileQuery->bindValue(":fname", fi.fileName());
+ mInsertFileQuery->bindValue(":md5", md5Sum);
+ mInsertFileQuery->bindValue(":size", size);
+ mInsertFileQuery->bindValue(":dvd", dvd);
+ mInsertFileQuery->bindValue(":type", type);
+ mInsertFileQuery->bindValue(":fileno", filePart);
+ mInsertFileQuery->bindValue(":quality", quality);
+
+ //insert item
+ if(mInsertFileQuery->exec()){
+
+ }
+}
diff --git a/filestreemodel.h b/filestreemodel.h
index ffa23f8..1e3f40e 100644
--- a/filestreemodel.h
+++ b/filestreemodel.h
@@ -30,10 +30,14 @@ class FilesTreeModel : public SmTreeModel {
bool setData(const QModelIndex &index, const QVariant &value, int role);
Qt::ItemFlags flags(const QModelIndex &index) const;
+ //file manipulation
+ bool addFile(const QString &fullPath, int type, int quality, int filePart, int seriesPartId, int dvd = -1);
+
private:
QSqlDatabase mDb;
QSqlQuery *mUpdateDvdQuery;
QSqlQuery *mUpdateQualityQuery;
+ QSqlQuery *mInsertFileQuery;
};
#endif // FILESTREEMODEL_H
diff --git a/seriestreemodel.cpp b/seriestreemodel.cpp
index d5257bb..4ff34e0 100644
--- a/seriestreemodel.cpp
+++ b/seriestreemodel.cpp
@@ -34,6 +34,8 @@ SeriesTreeModel::SeriesTreeModel(QStringList &headers, QObject *parent) : SmTree
mSeriesFilesQuery->prepare("SELECT files.tfilename, files.cmd5sum FROM series, seriesparts, files WHERE series.iseries_id = :id AND series.iseries_id = seriesparts.iseries_id AND seriesparts.iseriesparts_id = files.iseriespart_id");
mSeriesPartFilesQuery = new QSqlQuery(mDb);
mSeriesPartFilesQuery->prepare("SELECT files.tfilename, files.cmd5sum FROM seriesparts, files WHERE seriesparts.iseriesparts_id = :id AND seriesparts.iseriesparts_id = files.iseriespart_id");
+ mSeriesPartInsertQuery = new QSqlQuery(mDb);
+ mSeriesPartInsertQuery->prepare("INSERT INTO seriesparts(iseriespart, iseries_id) VALUES(:part, :id)");
mSortedMovieListQuery = new QSqlQuery(mDb);
mSortedMovieListQuery->prepare("SELECT files.tfilename, files.cmd5sum FROM series, seriesparts, files WHERE series.iseries_id = :id AND seriesparts.iseries_id = series.iseries_id AND seriesparts.iseriesparts_id = files.iseriespart_id AND files.sifiletype = 1 ORDER BY seriesparts.iseriespart, files.sifileno");
mNextDvdNoQuery = new QSqlQuery(mDb);
@@ -49,6 +51,9 @@ SeriesTreeModel::~SeriesTreeModel(){
delete mSeriesInsertQuery;
delete mSeriesFilesQuery;
delete mSeriesPartFilesQuery;
+ delete mSeriesPartInsertQuery;
+ delete mSortedMovieListQuery;
+ delete mNextDvdNoQuery;
mDb.close();
mDb = QSqlDatabase();
}
@@ -264,6 +269,53 @@ bool SeriesTreeModel::deleteFromSeries(const QModelIndex &what){
return false;
}
+bool SeriesTreeModel::addSeries(const QVariant &seriesName, const QModelIndex &parent){
+ const QString name = seriesName.toString().toLower().trimmed();
+ if(name.isEmpty()){
+ return false;
+ }
+ mDb.transaction();
+ mSeriesInsertQuery->bindValue(":name", name);
+ if(mSeriesInsertQuery->exec()){
+ QSqlQuery lastId("SELECT currval('series_iseries_id__seq')", mDb);
+ if(lastId.next()){
+ int id = lastId.value(0).toInt();
+ QList<QVariant> seriesData;
+ seriesData << name << id << QVariant() << QVariant() << Series;
+ if(addRow(seriesData, parent)){
+ mDb.commit();
+ return true;
+ }
+ }
+ }
+ mDb.rollback();
+ return false;
+}
+
+bool SeriesTreeModel::addSeriesPart(int seriesPart, const QModelIndex &parent){
+ if(!parent.isValid() || parent.data(TypeRole) != Series){
+ return false;
+ }
+ int seriesId = parent.data(SeriesIdRole).toInt();
+ mDb.transaction();
+ mSeriesPartInsertQuery->bindValue(":part", seriesPart);
+ mSeriesPartInsertQuery->bindValue(":id", seriesId);
+ if(mSeriesPartInsertQuery->exec()){
+ QSqlQuery lastId("SELECT currval('seriesparts_seriesparts_id__seq')", mDb);
+ if(lastId.exec()){
+ int id = lastId.value(0).toInt();
+ QList<QVariant> partData;
+ partData << parent.data(NameRole) << seriesId << id << seriesPart << Part;
+ if(addRow(partData, parent)){
+ mDb.commit();
+ return true;
+ }
+ }
+ }
+ mDb.rollback();
+ return false;
+}
+
void SeriesTreeModel::populate(){
QSqlQuery seriesQuery = QSqlQuery("SELECT iseries_id, tseries_name FROM series ORDER BY tseries_name", mDb);
SmTreeItem *rootItem = new SmTreeItem(5);
diff --git a/seriestreemodel.h b/seriestreemodel.h
index 416e43c..b25198b 100644
--- a/seriestreemodel.h
+++ b/seriestreemodel.h
@@ -38,8 +38,10 @@ class SeriesTreeModel : public SmTreeModel {
QFileInfoList findSortedMovies(const QModelIndex &from) const;
int findNextDvdNo() const;
- //delete
+ //series data manipulation
bool deleteFromSeries(const QModelIndex &what);
+ bool addSeries(const QVariant &seriesName, const QModelIndex &parent);
+ bool addSeriesPart(int seriesPart, const QModelIndex &parent);
signals:
void needResort();
@@ -58,6 +60,7 @@ class SeriesTreeModel : public SmTreeModel {
QSqlQuery *mSeriesInsertQuery;
QSqlQuery *mSeriesFilesQuery;
QSqlQuery *mSeriesPartFilesQuery;
+ QSqlQuery *mSeriesPartInsertQuery;
QSqlQuery *mSortedMovieListQuery;
QSqlQuery *mNextDvdNoQuery;
};