summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fswidget.cpp1
-rw-r--r--movieinfopage.cpp307
-rw-r--r--movieinfopage.h70
-rw-r--r--newmoviewizard.cpp301
-rw-r--r--newmoviewizard.h65
-rw-r--r--shemov.pro6
6 files changed, 385 insertions, 365 deletions
diff --git a/fswidget.cpp b/fswidget.cpp
index 4c04ecd..ddda387 100644
--- a/fswidget.cpp
+++ b/fswidget.cpp
@@ -26,6 +26,7 @@
#include "helper.h"
#include "smglobals.h"
#include "newmoviewizard.h"
+#include "movieinfopage.h"
#include "newpicsdialog.h"
#include "fsproxy.h"
#include "smview.h"
diff --git a/movieinfopage.cpp b/movieinfopage.cpp
new file mode 100644
index 0000000..4784858
--- /dev/null
+++ b/movieinfopage.cpp
@@ -0,0 +1,307 @@
+/*
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version
+ 2 of the License, or (at your option) any later version.
+*/
+
+#include <QHBoxLayout>
+#include <QFormLayout>
+#include <QSortFilterProxyModel>
+#include <QStringListModel>
+#include <QHeaderView>
+#include <QCompleter>
+#include <QSettings>
+#include <QFileInfo>
+#include <QSqlDatabase>
+#include <QSqlQuery>
+#include <QJsonObject>
+#include <QDirIterator>
+#include <QLabel>
+#include <QPushButton>
+#include <QLineEdit>
+#include <QSpinBox>
+#include <QFileDialog>
+
+#include "movieinfopage.h"
+#include "wizardtreemodel.h"
+#include "smtreeview.h"
+#include "delegates.h"
+#include "smglobals.h"
+#include "helper.h"
+
+MovieInfoPage::MovieInfoPage(QWidget *parent) : QWizardPage(parent), mCurSeriesno(0), mCurQuality(8){
+ setupGui();
+}
+
+void MovieInfoPage::setupGui(){
+ setTitle(tr("Collect files for movie"));
+ setSubTitle(tr("Select files by clicking the \"Add files...\" button. After adding files select one by one and set the appropriate file type. The series no is the number the movie has in the series: 14 in case of e.g. rogue adventures 14. The part number only has to be set if the movie is split in several parts."));
+ setPixmap(QWizard::LogoPixmap, QPixmap(":/shemov.png"));
+
+ //files model setup
+ QStringList modelHeaders = QStringList() << tr("File name") << tr("Size") << tr("File Type") << tr("No.") << tr("Full path");
+ mFileModel = new WizardTreeModel(modelHeaders, this);
+
+ //files view
+ mFileView = new SmTreeView;
+ mProxy = new QSortFilterProxyModel(this);
+ mProxy->setSourceModel(mFileModel);
+ mFileView->setModel(mProxy);
+ mFileView->setItemDelegateForColumn(WizardTreeModel::FileType, new FileTypeDelegate(mFileView));
+ mFileView->setItemDelegateForColumn(WizardTreeModel::FileSize, new SizeDelegate(mFileView));
+ mFileView->setItemDelegateForColumn(WizardTreeModel::FilePart, new FileNoDelegate(mFileView));
+ mFileView->setSortingEnabled(true);
+ mFileView->header()->moveSection(1, 3);
+ mFileView->setSelectionMode(QAbstractItemView::ExtendedSelection);
+
+ //add + remove files
+ QHBoxLayout *fileButtonLayout = new QHBoxLayout;
+ fileButtonLayout->addStretch();
+ mExtractTitle = new QPushButton(tr("Title"));
+ fileButtonLayout->addWidget(mExtractTitle);
+ connect(mExtractTitle, SIGNAL(clicked()), this, SLOT(extractTitle()));
+ mAddOld = new QPushButton(tr("Add Old..."));
+ fileButtonLayout->addWidget(mAddOld);
+ connect(mAddOld, SIGNAL(clicked()), this, SLOT(addOld()));
+ mAddFile = new QPushButton(tr("Add files..."));
+ fileButtonLayout->addWidget(mAddFile);
+ connect(mAddFile, SIGNAL(clicked()), this, SLOT(addFiles()));
+ mRemoveFile = new QPushButton(tr("Remove from list"));
+ fileButtonLayout->addWidget(mRemoveFile);
+ connect(mRemoveFile, SIGNAL(clicked()), this, SLOT(removeFile()));
+
+ //movie name + subtitle
+ QFormLayout *movieTitleLayout = new QFormLayout;
+ mTitle = new QLineEdit;
+ mSubtitle = new QLineEdit;
+ movieTitleLayout->addRow(tr("Movie &title"), mTitle);
+ movieTitleLayout->addRow(tr("Movie &subtitle"), mSubtitle);
+ mSeriesCompleter = new QCompleter(this);
+ mSeriesCompleterModel = new QStringListModel(this);
+ mSeriesCompleter->setModel(mSeriesCompleterModel);
+ mTitle->setCompleter(mSeriesCompleter);
+
+ //series, part + quality
+ QHBoxLayout *numberLayout = new QHBoxLayout;
+ numberLayout->addStretch();
+ QLabel *l3 = new QLabel(tr("&Series no."));
+ mSeriesNo = new QSpinBox;
+ l3->setBuddy(mSeriesNo);
+ mSeriesNo->setMinimum(0);
+ numberLayout->addWidget(l3);
+ numberLayout->addWidget(mSeriesNo);
+ QLabel *l5 = new QLabel(tr("&Quality"));
+ mQuality = new QSpinBox;
+ l5->setBuddy(mQuality);
+ mQuality->setMinimum(1);
+ mQuality->setMaximum(10);
+ numberLayout->addWidget(l5);
+ numberLayout->addWidget(mQuality);
+
+ QVBoxLayout *mainLayout = new QVBoxLayout;
+ mainLayout->addWidget(mFileView);
+ mainLayout->addLayout(fileButtonLayout);
+ mainLayout->addLayout(movieTitleLayout);
+ mainLayout->addLayout(numberLayout);
+ setLayout(mainLayout);
+ initCompleters();
+
+ //expose data
+ registerField("title*", mTitle);
+ registerField("subtitle", mSubtitle);
+ registerField("seriesNo", mSeriesNo);
+ registerField("quality", mQuality);
+}
+
+void MovieInfoPage::initializePage(){
+ initCompleters();
+ QSettings s;
+ bool clearPage = s.value("ui/clearnewmoviewizard").toBool();
+ if(clearPage == false){
+ restoreData();
+ }
+ mFileModel->clear();
+ mOrigins.clear();
+}
+
+void MovieInfoPage::addFile(const QString &file){
+ QFileInfo fi(file);
+ if(fi.exists()){
+ if(mFileModel->find(file, WizardTreeModel::FullPath).isValid()){
+ return;
+ }
+ QList<QVariant> itemData;
+ itemData << fi.fileName() << fi.size() << QVariant() << QVariant() << fi.absoluteFilePath();
+ QString mimeType = Helper::mimeType(fi.absoluteFilePath());
+ if(mimeType.startsWith("video") || fi.suffix() == "mkv"){
+ itemData[WizardTreeModel::FileType] = WizardTreeModel::Movie;
+ }else{
+ QString baseName = fi.completeBaseName();
+ QRegExp reFront = QRegExp("front");
+ reFront.setCaseSensitivity(Qt::CaseInsensitive);
+ QRegExp reBack = QRegExp("back");
+ reBack.setCaseSensitivity(Qt::CaseInsensitive);
+ if(baseName.endsWith('f') || (reFront.indexIn(baseName) != -1)){
+ itemData[WizardTreeModel::FileType] = WizardTreeModel::FrontCover;
+ }else if(baseName.endsWith('b') || (reBack.indexIn(baseName) != -1)){
+ itemData[WizardTreeModel::FileType] = WizardTreeModel::BackCover;
+ }else{
+ itemData[WizardTreeModel::FileType] = WizardTreeModel::GeneralCover;
+ }
+ }
+ mFileModel->appendRow(itemData, mFileModel->rootIndex());
+ }
+ mFileView->resizeColumnToContents(0);
+ mFileView->resizeColumnToContents(1);
+ mFileView->resizeColumnToContents(2);
+}
+
+void MovieInfoPage::selectFirst(){
+ QModelIndex fIdx = mFileModel->index(0, 0, mFileModel->rootIndex());
+ if(fIdx.isValid()){
+ mFileView->selectionModel()->select(fIdx, QItemSelectionModel::Rows | QItemSelectionModel::ClearAndSelect);
+ }
+
+}
+
+void MovieInfoPage::saveData(){
+ mCurQuality = mQuality->value();
+ mCurSeriesno = mSeriesNo->value();
+ mCurTitle = mTitle->text();
+ mCurSubtitle = mSubtitle->text();
+}
+
+void MovieInfoPage::restoreData(){
+ mQuality->setValue(mCurQuality);
+ mSeriesNo->setValue(mCurSeriesno);
+ mTitle->setText(mCurTitle);
+ mSubtitle->setText(mCurSubtitle);
+}
+
+void MovieInfoPage::initCompleters(){
+ QSqlDatabase db = QSqlDatabase::database("treedb");
+ db.open();
+ QStringList series;
+ QSqlQuery seriesQ("SELECT tseries_name FROM series", db);
+ while(seriesQ.next()){
+ series << seriesQ.value(0).toString();
+ }
+ mSeriesCompleterModel->setStringList(series);
+}
+
+void MovieInfoPage::extractTitle(){
+ QModelIndexList curIdxList = mFileView->selectionModel()->selectedRows();
+ if(!curIdxList.isEmpty()){
+ QString fp = curIdxList.at(0).data(WizardTreeModel::FullPathRole).toString();
+ QJsonDocument jDoc = Helper::streamData(fp);
+ if(!jDoc.isNull()){
+ QJsonObject jObj1 = jDoc.object().value("format").toObject();
+ QJsonObject jObj2 = jObj1.value("tags").toObject();
+ QString title = jObj2.value("title").toString().toLower();
+ mSubtitle->setText(title);
+ }
+ }
+}
+
+void MovieInfoPage::addOld(){
+ QFileDialog *oldFileDlg = new QFileDialog(this, tr("Select source"), mCurrentDir);
+ int retval = oldFileDlg->exec();
+ if(retval != QDialog::Accepted || oldFileDlg->selectedFiles().isEmpty()){
+ oldFileDlg->deleteLater();
+ return;
+ }
+ QStringList files = oldFileDlg->selectedFiles();
+ QString oldFile = files.first();
+ QFileInfo fi(oldFile);
+ qint64 oldSize = fi.size();
+ QString fullPath = fi.absoluteFilePath();
+ QString fn = fi.fileName();
+ int filetype = FT_ORIGIN;
+
+ //prepare item data
+ QList<QVariant> itemData;
+ itemData << fn << oldSize << filetype << QVariant() << fullPath;
+ QModelIndexList curIdxList = mFileView->selectionModel()->selectedRows();
+ if(!curIdxList.isEmpty()){
+ QModelIndex realIdx = mProxy->mapToSource(curIdxList[0]);
+ mFileModel->appendRow(itemData, realIdx);
+ mFileView->expandAll();
+ mOrigins << fullPath;
+ }
+ oldFileDlg->deleteLater();
+}
+
+void MovieInfoPage::guessOld(const QString &fullPath){
+ QFileInfo fi(fullPath);
+ QString baseName = fi.completeBaseName();
+ QString fnReStr = QString("^%1").arg(baseName);
+ QRegularExpression fnRe(fnReStr);
+ QModelIndex parent;
+ QDirIterator it(fi.dir());
+ QList<QVariant> itemData;
+ while(it.hasNext()){
+ QFileInfo curFi = it.next();
+ QString curBaseName = curFi.completeBaseName();
+ for(int i = 0; i < mFileModel->rowCount(mFileModel->rootIndex()); ++i){
+ QModelIndex curIdx = mFileModel->index(i, WizardTreeModel::FileName, mFileModel->rootIndex());
+ if(curIdx.isValid()){
+ if(fnRe.match(curBaseName).hasMatch()){
+ if(curFi.absoluteFilePath() != fi.absoluteFilePath()){
+ parent = curIdx;
+ itemData << curFi.fileName() << curFi.size() << FT_ORIGIN << QVariant() << curFi.absoluteFilePath();
+ mOrigins << curFi.absoluteFilePath();
+ mFileModel->appendRow(itemData, parent);
+ break;
+ }
+ }
+ }
+ }
+ }
+ mFileView->expandAll();
+}
+
+void MovieInfoPage::addFiles(){
+ QSettings s;
+ QString startDir = s.value("paths/addfilespath", QDir::homePath()).toString();
+ QStringList files = QFileDialog::getOpenFileNames(this, tr("Select files"), startDir);
+ if(files.isEmpty()){
+ return;
+ }
+ for(const QString &f : files){
+ addFile(f);
+ }
+ QFileInfo fi(files.at(0));
+ s.setValue("paths/addfilespath", fi.absolutePath());
+}
+
+void MovieInfoPage::removeFile(){
+ QModelIndexList selected = mFileView->selectionModel()->selectedRows();
+ QList<QPersistentModelIndex> curSel;
+ for(const QModelIndex &idx : selected){
+ curSel << QPersistentModelIndex(idx);
+ }
+ if(selected.isEmpty()){
+ return;
+ }
+ for(const QPersistentModelIndex &pi : curSel){
+ QModelIndex cur = mProxy->mapToSource(pi);
+ if(cur.isValid()){
+ int type = cur.data(WizardTreeModel::FileTypeRole).toInt();
+ if(type == FT_ORIGIN){
+ mOrigins.removeAll(pi.data(WizardTreeModel::FullPathRole).toString());
+ }else{
+ for(int i = 0; i < mProxy->rowCount(pi); ++i){
+ QModelIndex child = mProxy->index(0, pi.column(), pi);
+ if(child.isValid()){
+ int type = child.data(WizardTreeModel::FileTypeRole).toInt();
+ if(type == FT_ORIGIN){
+ mOrigins.removeAll(child.data(WizardTreeModel::FullPathRole).toString());
+ }
+ }
+ }
+ }
+ mFileModel->removeRow(cur.row(), cur.parent());
+ }
+ }
+}
diff --git a/movieinfopage.h b/movieinfopage.h
new file mode 100644
index 0000000..87f5376
--- /dev/null
+++ b/movieinfopage.h
@@ -0,0 +1,70 @@
+/*
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version
+ 2 of the License, or (at your option) any later version.
+*/
+
+#ifndef MOVIEINFOPAGE_H
+#define MOVIEINFOPAGE_H
+
+#include <QWizardPage>
+
+class WizardTreeModel;
+class SmTreeView;
+class SmTreeItem;
+class QSpinBox;
+class QLineEdit;
+class QSortFilterProxyModel;
+class QStringListModel;
+class QCompleter;
+
+class MovieInfoPage : public QWizardPage {
+ Q_OBJECT
+ public:
+ explicit MovieInfoPage(QWidget *parent = nullptr);
+ WizardTreeModel *model() { return mFileModel; }
+ virtual void initializePage();
+ void addFile(const QString &file);
+ void setCurrentDir(const QString &dir) { mCurrentDir = dir; }
+ void selectFirst();
+ void saveData();
+ void restoreData();
+ const QStringList &origins() const { return mOrigins; }
+
+ public slots:
+ void initCompleters();
+ void guessOld(const QString &fullPath);
+
+ private slots:
+ void extractTitle();
+ void addOld();
+ void addFiles();
+ void removeFile();
+
+ private:
+ void setupGui();
+ SmTreeView *mFileView;
+ QLineEdit *mTitle;
+ QLineEdit *mSubtitle;
+ QSpinBox *mSeriesNo;
+ QSpinBox *mQuality;
+ QPushButton *mExtractTitle;
+ QPushButton *mAddOld;
+ QPushButton *mAddFile;
+ QPushButton *mRemoveFile;
+ WizardTreeModel *mFileModel;
+ SmTreeItem *mMoviesItem;
+ SmTreeItem *mCoversItem;
+ QCompleter *mSeriesCompleter;
+ QStringListModel *mSeriesCompleterModel;
+ QSortFilterProxyModel *mProxy;
+ QString mCurrentDir;
+ QString mCurTitle;
+ QString mCurSubtitle;
+ QStringList mOrigins;
+ int mCurSeriesno;
+ int mCurQuality;
+};
+
+#endif // MOVIEINFOPAGE_H
diff --git a/newmoviewizard.cpp b/newmoviewizard.cpp
index 1de5871..e481b3b 100644
--- a/newmoviewizard.cpp
+++ b/newmoviewizard.cpp
@@ -5,39 +5,18 @@
2 of the License, or (at your option) any later version.
*/
-#include <QLabel>
-#include <QPushButton>
-#include <QComboBox>
-#include <QLineEdit>
-#include <QSpinBox>
-#include <QFileDialog>
-#include <QCompleter>
-#include <QCheckBox>
#include <QMessageBox>
-#include <QSettings>
-#include <QDate>
-#include <QPlainTextEdit>
-#include <QFormLayout>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QFileInfo>
-#include <QPixmap>
-#include <QHeaderView>
-#include <QSortFilterProxyModel>
-#include <QJsonObject>
-#include <QRegularExpression>
-#include <QDirIterator>
#include "newmoviewizard.h"
-#include "moviemetadatapage.h"
+#include "movieinfopage.h"
#include "moviemappingpage.h"
+#include "moviemetadatapage.h"
#include "wizardtreemodel.h"
#include "smglobals.h"
-#include "mappingtablemodel.h"
-#include "delegates.h"
#include "helper.h"
-#include "pictureviewer2.h"
-#include "archiveview.h"
NewMovieWizard::NewMovieWizard(QWidget *parent) : QWizard(parent){
mInfoPage = new MovieInfoPage;
@@ -310,279 +289,3 @@ void NewMovieWizard::accept(){
}
QWizard::accept();
}
-
-MovieInfoPage::MovieInfoPage(QWidget *parent) : QWizardPage(parent), mCurSeriesno(0), mCurQuality(8){
- setupGui();
-}
-
-void MovieInfoPage::setupGui(){
- setTitle(tr("Collect files for movie"));
- setSubTitle(tr("Select files by clicking the \"Add files...\" button. After adding files select one by one and set the appropriate file type. The series no is the number the movie has in the series: 14 in case of e.g. rogue adventures 14. The part number only has to be set if the movie is split in several parts."));
- setPixmap(QWizard::LogoPixmap, QPixmap(":/shemov.png"));
-
- //files model setup
- QStringList modelHeaders = QStringList() << tr("File name") << tr("Size") << tr("File Type") << tr("No.") << tr("Full path");
- mFileModel = new WizardTreeModel(modelHeaders, this);
-
- //files view
- mFileView = new SmTreeView;
- mProxy = new QSortFilterProxyModel(this);
- mProxy->setSourceModel(mFileModel);
- mFileView->setModel(mProxy);
- mFileView->setItemDelegateForColumn(WizardTreeModel::FileType, new FileTypeDelegate(mFileView));
- mFileView->setItemDelegateForColumn(WizardTreeModel::FileSize, new SizeDelegate(mFileView));
- mFileView->setItemDelegateForColumn(WizardTreeModel::FilePart, new FileNoDelegate(mFileView));
- mFileView->setSortingEnabled(true);
- mFileView->header()->moveSection(1, 3);
- mFileView->setSelectionMode(QAbstractItemView::ExtendedSelection);
-
- //add + remove files
- QHBoxLayout *fileButtonLayout = new QHBoxLayout;
- fileButtonLayout->addStretch();
- mExtractTitle = new QPushButton(tr("Title"));
- fileButtonLayout->addWidget(mExtractTitle);
- connect(mExtractTitle, SIGNAL(clicked()), this, SLOT(extractTitle()));
- mAddOld = new QPushButton(tr("Add Old..."));
- fileButtonLayout->addWidget(mAddOld);
- connect(mAddOld, SIGNAL(clicked()), this, SLOT(addOld()));
- mAddFile = new QPushButton(tr("Add files..."));
- fileButtonLayout->addWidget(mAddFile);
- connect(mAddFile, SIGNAL(clicked()), this, SLOT(addFiles()));
- mRemoveFile = new QPushButton(tr("Remove from list"));
- fileButtonLayout->addWidget(mRemoveFile);
- connect(mRemoveFile, SIGNAL(clicked()), this, SLOT(removeFile()));
-
- //movie name + subtitle
- QFormLayout *movieTitleLayout = new QFormLayout;
- mTitle = new QLineEdit;
- mSubtitle = new QLineEdit;
- movieTitleLayout->addRow(tr("Movie &title"), mTitle);
- movieTitleLayout->addRow(tr("Movie &subtitle"), mSubtitle);
- mSeriesCompleter = new QCompleter(this);
- mSeriesCompleterModel = new QStringListModel(this);
- mSeriesCompleter->setModel(mSeriesCompleterModel);
- mTitle->setCompleter(mSeriesCompleter);
-
- //series, part + quality
- QHBoxLayout *numberLayout = new QHBoxLayout;
- numberLayout->addStretch();
- QLabel *l3 = new QLabel(tr("&Series no."));
- mSeriesNo = new QSpinBox;
- l3->setBuddy(mSeriesNo);
- mSeriesNo->setMinimum(0);
- numberLayout->addWidget(l3);
- numberLayout->addWidget(mSeriesNo);
- QLabel *l5 = new QLabel(tr("&Quality"));
- mQuality = new QSpinBox;
- l5->setBuddy(mQuality);
- mQuality->setMinimum(1);
- mQuality->setMaximum(10);
- numberLayout->addWidget(l5);
- numberLayout->addWidget(mQuality);
-
- QVBoxLayout *mainLayout = new QVBoxLayout;
- mainLayout->addWidget(mFileView);
- mainLayout->addLayout(fileButtonLayout);
- mainLayout->addLayout(movieTitleLayout);
- mainLayout->addLayout(numberLayout);
- setLayout(mainLayout);
- initCompleters();
-
- //expose data
- registerField("title*", mTitle);
- registerField("subtitle", mSubtitle);
- registerField("seriesNo", mSeriesNo);
- registerField("quality", mQuality);
-}
-
-void MovieInfoPage::initializePage(){
- initCompleters();
- QSettings s;
- bool clearPage = s.value("ui/clearnewmoviewizard").toBool();
- if(clearPage == false){
- restoreData();
- }
- mFileModel->clear();
- mOrigins.clear();
-}
-
-void MovieInfoPage::addFile(const QString &file){
- QFileInfo fi(file);
- if(fi.exists()){
- if(mFileModel->find(file, WizardTreeModel::FullPath).isValid()){
- return;
- }
- QList<QVariant> itemData;
- itemData << fi.fileName() << fi.size() << QVariant() << QVariant() << fi.absoluteFilePath();
- QString mimeType = Helper::mimeType(fi.absoluteFilePath());
- if(mimeType.startsWith("video") || fi.suffix() == "mkv"){
- itemData[WizardTreeModel::FileType] = WizardTreeModel::Movie;
- }else{
- QString baseName = fi.completeBaseName();
- QRegExp reFront = QRegExp("front");
- reFront.setCaseSensitivity(Qt::CaseInsensitive);
- QRegExp reBack = QRegExp("back");
- reBack.setCaseSensitivity(Qt::CaseInsensitive);
- if(baseName.endsWith('f') || (reFront.indexIn(baseName) != -1)){
- itemData[WizardTreeModel::FileType] = WizardTreeModel::FrontCover;
- }else if(baseName.endsWith('b') || (reBack.indexIn(baseName) != -1)){
- itemData[WizardTreeModel::FileType] = WizardTreeModel::BackCover;
- }else{
- itemData[WizardTreeModel::FileType] = WizardTreeModel::GeneralCover;
- }
- }
- mFileModel->appendRow(itemData, mFileModel->rootIndex());
- }
- mFileView->resizeColumnToContents(0);
- mFileView->resizeColumnToContents(1);
- mFileView->resizeColumnToContents(2);
-}
-
-void MovieInfoPage::selectFirst(){
- QModelIndex fIdx = mFileModel->index(0, 0, mFileModel->rootIndex());
- if(fIdx.isValid()){
- mFileView->selectionModel()->select(fIdx, QItemSelectionModel::Rows | QItemSelectionModel::ClearAndSelect);
- }
-
-}
-
-void MovieInfoPage::saveData(){
- mCurQuality = mQuality->value();
- mCurSeriesno = mSeriesNo->value();
- mCurTitle = mTitle->text();
- mCurSubtitle = mSubtitle->text();
-}
-
-void MovieInfoPage::restoreData(){
- mQuality->setValue(mCurQuality);
- mSeriesNo->setValue(mCurSeriesno);
- mTitle->setText(mCurTitle);
- mSubtitle->setText(mCurSubtitle);
-}
-
-void MovieInfoPage::initCompleters(){
- QSqlDatabase db = QSqlDatabase::database("treedb");
- db.open();
- QStringList series;
- QSqlQuery seriesQ("SELECT tseries_name FROM series", db);
- while(seriesQ.next()){
- series << seriesQ.value(0).toString();
- }
- mSeriesCompleterModel->setStringList(series);
-}
-
-void MovieInfoPage::extractTitle(){
- QModelIndexList curIdxList = mFileView->selectionModel()->selectedRows();
- if(!curIdxList.isEmpty()){
- QString fp = curIdxList.at(0).data(WizardTreeModel::FullPathRole).toString();
- QJsonDocument jDoc = Helper::streamData(fp);
- if(!jDoc.isNull()){
- QJsonObject jObj1 = jDoc.object().value("format").toObject();
- QJsonObject jObj2 = jObj1.value("tags").toObject();
- QString title = jObj2.value("title").toString().toLower();
- mSubtitle->setText(title);
- }
- }
-}
-
-void MovieInfoPage::addOld(){
- QFileDialog *oldFileDlg = new QFileDialog(this, tr("Select source"), mCurrentDir);
- int retval = oldFileDlg->exec();
- if(retval != QDialog::Accepted || oldFileDlg->selectedFiles().isEmpty()){
- oldFileDlg->deleteLater();
- return;
- }
- QStringList files = oldFileDlg->selectedFiles();
- QString oldFile = files.first();
- QFileInfo fi(oldFile);
- qint64 oldSize = fi.size();
- QString fullPath = fi.absoluteFilePath();
- QString fn = fi.fileName();
- int filetype = FT_ORIGIN;
-
- //prepare item data
- QList<QVariant> itemData;
- itemData << fn << oldSize << filetype << QVariant() << fullPath;
- QModelIndexList curIdxList = mFileView->selectionModel()->selectedRows();
- if(!curIdxList.isEmpty()){
- QModelIndex realIdx = mProxy->mapToSource(curIdxList[0]);
- mFileModel->appendRow(itemData, realIdx);
- mFileView->expandAll();
- mOrigins << fullPath;
- }
- oldFileDlg->deleteLater();
-}
-
-void MovieInfoPage::guessOld(const QString &fullPath){
- QFileInfo fi(fullPath);
- QString baseName = fi.completeBaseName();
- QString fnReStr = QString("^%1").arg(baseName);
- QRegularExpression fnRe(fnReStr);
- QModelIndex parent;
- QDirIterator it(fi.dir());
- QList<QVariant> itemData;
- while(it.hasNext()){
- QFileInfo curFi = it.next();
- QString curBaseName = curFi.completeBaseName();
- for(int i = 0; i < mFileModel->rowCount(mFileModel->rootIndex()); ++i){
- QModelIndex curIdx = mFileModel->index(i, WizardTreeModel::FileName, mFileModel->rootIndex());
- if(curIdx.isValid()){
- if(fnRe.match(curBaseName).hasMatch()){
- if(curFi.absoluteFilePath() != fi.absoluteFilePath()){
- parent = curIdx;
- itemData << curFi.fileName() << curFi.size() << FT_ORIGIN << QVariant() << curFi.absoluteFilePath();
- mOrigins << curFi.absoluteFilePath();
- mFileModel->appendRow(itemData, parent);
- break;
- }
- }
- }
- }
- }
- mFileView->expandAll();
-}
-
-void MovieInfoPage::addFiles(){
- QSettings s;
- QString startDir = s.value("paths/addfilespath", QDir::homePath()).toString();
- QStringList files = QFileDialog::getOpenFileNames(this, tr("Select files"), startDir);
- if(files.isEmpty()){
- return;
- }
- for(const QString &f : files){
- addFile(f);
- }
- QFileInfo fi(files.at(0));
- s.setValue("paths/addfilespath", fi.absolutePath());
-}
-
-void MovieInfoPage::removeFile(){
- QModelIndexList selected = mFileView->selectionModel()->selectedRows();
- QList<QPersistentModelIndex> curSel;
- for(const QModelIndex &idx : selected){
- curSel << QPersistentModelIndex(idx);
- }
- if(selected.isEmpty()){
- return;
- }
- for(const QPersistentModelIndex &pi : curSel){
- QModelIndex cur = mProxy->mapToSource(pi);
- if(cur.isValid()){
- int type = cur.data(WizardTreeModel::FileTypeRole).toInt();
- if(type == FT_ORIGIN){
- mOrigins.removeAll(pi.data(WizardTreeModel::FullPathRole).toString());
- }else{
- for(int i = 0; i < mProxy->rowCount(pi); ++i){
- QModelIndex child = mProxy->index(0, pi.column(), pi);
- if(child.isValid()){
- int type = child.data(WizardTreeModel::FileTypeRole).toInt();
- if(type == FT_ORIGIN){
- mOrigins.removeAll(child.data(WizardTreeModel::FullPathRole).toString());
- }
- }
- }
- }
- mFileModel->removeRow(cur.row(), cur.parent());
- }
- }
-}
diff --git a/newmoviewizard.h b/newmoviewizard.h
index cd739bf..5d84928 100644
--- a/newmoviewizard.h
+++ b/newmoviewizard.h
@@ -8,26 +8,11 @@
#ifndef NEWMOVIEWIZARD_H
#define NEWMOVIEWIZARD_H
-#include <QWizardPage>
-#include <QStyledItemDelegate>
+#include <QWizard>
-#include "smtreemodel.h"
-#include "mappingtablewidget.h"
-
-class QSpinBox;
-class QComboBox;
-class QCheckBox;
-class QPlainTextEdit;
-class QSortFilterProxyModel;
-class WizardTreeModel;
class MovieInfoPage;
class MovieMappingPage;
class MovieMetadataPage;
-class PictureViewer2;
-class QCompleter;
-class QStringListModel;
-class MappingEditorWidget;
-class MetadataEditorWidget;
class NewMovieWizard : public QWizard {
Q_OBJECT
@@ -46,52 +31,4 @@ class NewMovieWizard : public QWizard {
MovieMetadataPage *mMetadataPage;
};
-class MovieInfoPage : public QWizardPage {
- Q_OBJECT
- public:
- explicit MovieInfoPage(QWidget *parent = nullptr);
- WizardTreeModel *model() { return mFileModel; }
- virtual void initializePage();
- void addFile(const QString &file);
- void setCurrentDir(const QString &dir) { mCurrentDir = dir; }
- void selectFirst();
- void saveData();
- void restoreData();
- const QStringList &origins() const { return mOrigins; }
-
- public slots:
- void initCompleters();
- void guessOld(const QString &fullPath);
-
- private slots:
- void extractTitle();
- void addOld();
- void addFiles();
- void removeFile();
-
- private:
- void setupGui();
- SmTreeView *mFileView;
- QLineEdit *mTitle;
- QLineEdit *mSubtitle;
- QSpinBox *mSeriesNo;
- QSpinBox *mQuality;
- QPushButton *mExtractTitle;
- QPushButton *mAddOld;
- QPushButton *mAddFile;
- QPushButton *mRemoveFile;
- WizardTreeModel *mFileModel;
- SmTreeItem *mMoviesItem;
- SmTreeItem *mCoversItem;
- QCompleter *mSeriesCompleter;
- QStringListModel *mSeriesCompleterModel;
- QSortFilterProxyModel *mProxy;
- QString mCurrentDir;
- QString mCurTitle;
- QString mCurSubtitle;
- QStringList mOrigins;
- int mCurSeriesno;
- int mCurQuality;
-};
-
#endif
diff --git a/shemov.pro b/shemov.pro
index eea1b1c..94a100a 100644
--- a/shemov.pro
+++ b/shemov.pro
@@ -61,7 +61,8 @@ SOURCES = main.cpp \
videoviewer.cpp \
wizardtreemodel.cpp \
moviemetadatapage.cpp \
- moviemappingpage.cpp
+ moviemappingpage.cpp \
+ movieinfopage.cpp
HEADERS = \
shemov.h \
helper.h \
@@ -117,7 +118,8 @@ HEADERS = \
videoviewer.h \
wizardtreemodel.h \
moviemetadatapage.h \
- moviemappingpage.h
+ moviemappingpage.h \
+ movieinfopage.h
LIBS += -lmagic -lXfixes -lX11 -lMagick++-6.Q16HDRI
INCLUDEPATH += /usr/include/ImageMagick-6/
RESOURCES = shemov.qrc