diff options
-rw-r--r-- | filestreemodel.cpp | 32 | ||||
-rw-r--r-- | filestreemodel.h | 4 | ||||
-rw-r--r-- | seriestreemodel.cpp | 52 | ||||
-rw-r--r-- | seriestreemodel.h | 5 |
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; }; |