summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--archivemodel.cpp18
-rw-r--r--archivemodel.h2
-rw-r--r--archiveview.cpp78
-rw-r--r--archiveview.h11
-rw-r--r--newmoviewizard.cpp107
-rw-r--r--newmoviewizard.h11
-rw-r--r--smglobals.cpp1
-rw-r--r--smglobals.h1
8 files changed, 130 insertions, 99 deletions
diff --git a/archivemodel.cpp b/archivemodel.cpp
index 1da5833..ff37e73 100644
--- a/archivemodel.cpp
+++ b/archivemodel.cpp
@@ -603,24 +603,6 @@ bool ArchiveModel::addSeriesPart(int partno, QString subtitle, const QModelIndex
return false;
}
-QStringList ArchiveModel::allSources() const{
- QSqlQuery sQ("SELECT DISTINCT(tsourcemedium) FROM metadata ORDER BY tsourcemedium ASC", mDb);
- QStringList retval;
- while(sQ.next()){
- retval << sQ.value(0).toString();
- }
- return retval;
-}
-
-QStringList ArchiveModel::allReleaseGroups() const{
- QSqlQuery rQ("SELECT DISTINCT(treleasegroup) FROM metadata ORDER BY treleasegroup ASC", mDb);
- QStringList retval;
- while(rQ.next()){
- retval << rQ.value(0).toString();
- }
- return retval;
-}
-
void ArchiveModel::setOrder(int order) {
mOrder = order;
SmTreeItem *rootItem = readCache(mOrder);
diff --git a/archivemodel.h b/archivemodel.h
index 0c66b0d..6903cfd 100644
--- a/archivemodel.h
+++ b/archivemodel.h
@@ -50,8 +50,6 @@ class ArchiveModel : public SmTreeModel {
QString metadata(int partId) const;
QList<QVariant> metadataList(int partId) const;
void setMetadata(int partId, const QList<QVariant> &data);
- QStringList allSources() const;
- QStringList allReleaseGroups() const;
bool setPartNo(int partId, int newPartId, const QString &subtitle);
bool setFavorite(int partId, bool favorite);
void addFiles(int partId, const QStringList files);
diff --git a/archiveview.cpp b/archiveview.cpp
index 2f4c77c..95fc7aa 100644
--- a/archiveview.cpp
+++ b/archiveview.cpp
@@ -11,9 +11,12 @@
#include <QInputDialog>
#include <QLabel>
#include <QLineEdit>
+#include <QRadioButton>
+#include <QFileDialog>
#include <QMessageBox>
#include <QPushButton>
#include <QSettings>
+#include <QStandardPaths>
#include <QSplitter>
#include <QVBoxLayout>
#include <QHeaderView>
@@ -361,10 +364,6 @@ void ArchiveTree::editMetadata(){
}
MetadataEditor e(this);
ArchiveController *c = SmGlobals::instance()->archiveController();
- QStringList sources = c->archiveTreeModel()->allSources();
- e.widget()->setSources(sources);
- QStringList relGroups = c->archiveTreeModel()->allReleaseGroups();
- e.widget()->setReleaseGroups(relGroups);
int pId = idx.data(ArchiveModel::SeriesPartIdRole).toInt();
QList<QVariant> curMetadata = c->archiveTreeModel()->metadataList(pId);
e.widget()->setMetadata(curMetadata);
@@ -741,61 +740,55 @@ MappingEditor::MappingEditor(const QString &caption, QWidget *parent, Qt::Window
/* Metadata Editor Widget */
-MetadataEditorWidget::MetadataEditorWidget(QWidget *parent) : QWidget(parent) {
+MetadataEditorWidget::MetadataEditorWidget(QWidget *parent) : QWidget(parent){
QLabel *captionL = new QLabel(tr("<b>Edit Metadata</b>"));
- QFormLayout *dataLayout = new QFormLayout;
+ QGroupBox *genGB = new QGroupBox(tr("General"));
+ QFormLayout *genGBL = new QFormLayout;
mReleaseYear = new QSpinBox;
mReleaseYear->setMinimum(1900);
mReleaseYear->setMaximum(3000);
- dataLayout->addRow(tr("&Release Year"), mReleaseYear);
- mSource = new QComboBox;
- mSource->setEditable(true);
- dataLayout->addRow(tr("&Source"), mSource);
- mRelGroup = new QComboBox;
- mRelGroup->setEditable(true);
- dataLayout->addRow(tr("Release &Group"), mRelGroup);
+ genGBL->addRow(tr("&Release Year"), mReleaseYear);
mSubject = new QLineEdit;
- dataLayout->addRow(tr("Sub&ject"), mSubject);
- mEncoderOpts = new QLineEdit;
- dataLayout->addRow(tr("&Encoder Opts."), mEncoderOpts);
- mPasses = new QSpinBox;
- mPasses->setMinimum(0);
- mPasses->setMaximum(10);
- dataLayout->addRow(tr("&Passes"), mPasses);
-
- QVBoxLayout *commentLayout = new QVBoxLayout;
- QLabel *commentL = new QLabel(tr("<b>Comment</b>"));
- commentLayout->addWidget(commentL);
+ genGBL->addRow(tr("Name/Sub&ject"), mSubject);
+ genGB->setLayout(genGBL);
+
+ QGroupBox *srcGB = new QGroupBox(tr("Source"));
+ QHBoxLayout *srcGBL = new QHBoxLayout;
+ mTorrent = new QRadioButton(tr("BitTorrent"));
+ mUsenet = new QRadioButton(tr("Usenet"));
+ srcGBL->addWidget(mTorrent);
+ srcGBL->addWidget(mUsenet);
+ srcGBL->addStretch();
+ srcGB->setLayout(srcGBL);
+
+ //comment
+ QGroupBox *commentGB = new QGroupBox(tr("Comment"));
mComment = new QTextEdit;
- commentLayout->addWidget(mComment);
-
- mWidgets << mReleaseYear << mSource << mRelGroup << mSubject << mEncoderOpts << mPasses << mComment;
+ QHBoxLayout *commentGBL = new QHBoxLayout;
+ commentGBL->addWidget(mComment);
+ commentGB->setLayout(commentGBL);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(captionL);
- mainLayout->addLayout(dataLayout);
- mainLayout->addLayout(commentLayout);
- setLayout(mainLayout);
-}
-void MetadataEditorWidget::setSources(const QStringList &sources){
- mSource->clear();
- mSource->addItems(sources);
-}
+ mainLayout->addWidget(genGB);
+ mainLayout->addWidget(srcGB);
+ mainLayout->addWidget(commentGB);
+ setLayout(mainLayout);
-void MetadataEditorWidget::setReleaseGroups(const QStringList &relGroups){
- mRelGroup->clear();
- mRelGroup->addItems(relGroups);
+ connect(this, SIGNAL(oldSelected(QString)), this, SLOT(setOld(QString)));
}
void MetadataEditorWidget::setMetadata(const QList<QVariant> &data){
mReleaseYear->setValue(data.at(ArchiveModel::ReleaseYear).toInt());
- mSource->setCurrentText(data.at(ArchiveModel::Source).toString());
+ QString src = data.at(ArchiveModel::Source).toString();
+ if(src == "torrent"){
+ mTorrent->toggle();
+ }else{
+ mUsenet->toggle();
+ }
mSubject->setText(data.at(ArchiveModel::Subject).toString());
- mRelGroup->setCurrentText(data.at(ArchiveModel::ReleaseGroup).toString());
- mEncoderOpts->setText(data.at(ArchiveModel::EncoderOpts).toString());
- mPasses->setValue(data.at(ArchiveModel::Passes).toInt());
mComment->setText(data.at(ArchiveModel::Comment).toString());
mAdded = data.at(ArchiveModel::Added).toDate();
}
@@ -823,7 +816,6 @@ void MetadataEditorWidget::setEnabledAll(bool enabled){
}
/* Metadata Editor */
-
MetadataEditor::MetadataEditor(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f){
mWidget = new MetadataEditorWidget;
diff --git a/archiveview.h b/archiveview.h
index e6f741d..ffb4c0d 100644
--- a/archiveview.h
+++ b/archiveview.h
@@ -35,6 +35,7 @@ class QSpinBox;
class QToolBar;
class QMouseEvent;
class QDragEnterEvent;
+class QRadioButton;
class ArchiveView : public QWidget {
Q_OBJECT
@@ -201,13 +202,14 @@ class MetadataEditorWidget : public QWidget {
Q_OBJECT
public:
explicit MetadataEditorWidget(QWidget *parent = 0);
- void setSources(const QStringList &sources);
- void setReleaseGroups(const QStringList &relGroups);
void setMetadata(const QList<QVariant> &data);
QList<QVariant> metadata() const;
public slots:
- void setEnabledAll(bool enabled);
+ void setEnabledAll(bool enabled);
+
+ signals:
+ void oldSelected(const QString &);
private:
QSpinBox *mReleaseYear;
@@ -217,6 +219,9 @@ class MetadataEditorWidget : public QWidget {
QLineEdit *mEncoderOpts;
QSpinBox *mPasses;
QTextEdit *mComment;
+ QRadioButton *mTorrent;
+ QRadioButton *mUsenet;
+ QLineEdit *mOldSizeLE;
QDate mAdded;
QList<QWidget*> mWidgets;
};
diff --git a/newmoviewizard.cpp b/newmoviewizard.cpp
index 0fe0bae..2500e78 100644
--- a/newmoviewizard.cpp
+++ b/newmoviewizard.cpp
@@ -23,6 +23,7 @@
#include <QFileInfo>
#include <QPixmap>
#include <QHeaderView>
+#include <QSortFilterProxyModel>
#include "newmoviewizard.h"
#include "smtreeitem.h"
@@ -113,9 +114,12 @@ void NewMovieWizard::accept(){
WizardTreeModel *wizardModel = movieInfoPage->model();
QSqlQuery insertFilesQ(db);
insertFilesQ.prepare("INSERT INTO files (iseriespart_id, tfilename, cmd5sum, bisize, sifiletype, sifileno, siquality, cpicsize, iduration) VALUES(:ipid, :tfn, :md5, :size, :ft, :fno, :qual, :psize, :dur)");
+ QSqlQuery insertOriginQ(db);
+ insertOriginQ.prepare("INSERT INTO files_origin (ifiles_id, tname, cmd5sum, bisize, ibitrate) VALUES(:oid, :oname, :omd5, :osize, :obitrate)");
QHash<QString, QString> md5Sums;
for(int i = 0; i < wizardModel->rowCount(QModelIndex()); ++i){
- QList<QVariant> fData = wizardModel->fileData(i);
+ QModelIndex curIdx = wizardModel->index(i, 0, QModelIndex());
+ QList<QVariant> fData = wizardModel->fileData(curIdx);
QString fullPath = fData.value(WizardTreeModel::FullPath).toString();
QFileInfo fi(fullPath);
qint64 size = fi.size();
@@ -125,10 +129,28 @@ void NewMovieWizard::accept(){
QString picSize;
int type = fData.value(WizardTreeModel::FileType).toInt();
QVariant quality;
+ QString oName, oMD5;
+ qint64 oSize, oldBitrate;
+ bool hasOrigin = false;
if(type == FT_MOVIE){
QVariantMap m = Helper::ffmpegData(fullPath);
secs = m.value("duration").toDouble();
quality = field("quality").toInt();
+ //check for origin
+ QModelIndex oIdx = curIdx.child(0, 0);
+ if(oIdx.isValid()){
+ QList<QVariant> oData = wizardModel->fileData(oIdx);
+ QString oFullPath = oData.value(WizardTreeModel::FullPath).toString();
+ QFileInfo oFi(oFullPath);
+ oName = fi.fileName();
+ oSize = oFi.size();
+ oMD5 = Helper::md5Sum(oFullPath);
+ QVariantMap oldFfmpeg = Helper::ffmpegData(oFullPath);
+ oldBitrate = oldFfmpeg.value("bit_rate").toLongLong();
+ oldBitrate /= 1000;
+ hasOrigin = true;
+ }
+
}else{
QPixmap pix(fullPath);
picSize = QString("%1x%2").arg(QString::number(pix.width())).arg(QString::number(pix.height()));
@@ -142,10 +164,28 @@ void NewMovieWizard::accept(){
insertFilesQ.bindValue(":qual", quality);
insertFilesQ.bindValue(":psize", picSize);
insertFilesQ.bindValue(":dur", secs);
- if(!insertFilesQ.exec()){
+ if(insertFilesQ.exec()){
+ if(hasOrigin){
+ int curFileId = -1;
+ QSqlQuery curval("SELECT currval('files_ifiles_id__seq')", db);
+ while(curval.next()){
+ curFileId= curval.value(0).toInt();
+ }
+ insertOriginQ.bindValue(":oid", curFileId);
+ insertOriginQ.bindValue(":oname", oName);
+ insertOriginQ.bindValue(":omd5", oMD5);
+ insertOriginQ.bindValue(":osize", oSize);
+ insertOriginQ.bindValue(":obitrate", oldBitrate);
+ if(!insertOriginQ.exec()){
+ db.rollback();
+ return;
+ }
+ }
+ }else{
db.rollback();
return;
}
+
}
//files have landed
//handle actors
@@ -240,7 +280,8 @@ void NewMovieWizard::accept(){
//we're still here, good
//now actually move the files
for(int i = 0; i < wizardModel->rowCount(QModelIndex()); ++i){
- QList<QVariant> fData = wizardModel->fileData(i);
+ QModelIndex curIdx = wizardModel->index(i, 0, QModelIndex());
+ QList<QVariant> fData = wizardModel->fileData(curIdx);
QString fullPath = fData.value(WizardTreeModel::FullPath).toString();
QString md5 = md5Sums.value(fullPath);
Helper::moveToArchive(fullPath, md5);
@@ -264,9 +305,9 @@ void MovieInfoPage::setupGui(){
//files view
mFileView = new SmTreeView;
- QSortFilterProxyModel *p = new QSortFilterProxyModel(this);
- p->setSourceModel(mFileModel);
- mFileView->setModel(p);
+ 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));
@@ -276,6 +317,9 @@ void MovieInfoPage::setupGui(){
//add + remove files
QHBoxLayout *fileButtonLayout = new QHBoxLayout;
fileButtonLayout->addStretch();
+ 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()));
@@ -377,6 +421,30 @@ void MovieInfoPage::initCompleters(){
mSeriesCompleterModel->setStringList(series);
}
+void MovieInfoPage::addOld(){
+ QSettings s;
+ QString startDir = s.value("paths/addfilespath", QDir::homePath()).toString();
+ QString oldFile = QFileDialog::getOpenFileName(this, tr("Select files"), startDir);
+ if(oldFile.isEmpty()){
+ return;
+ }
+ 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();
+ }
+}
+
void MovieInfoPage::addFiles(){
QSettings s;
QString startDir = s.value("paths/addfilespath", QDir::homePath()).toString();
@@ -385,7 +453,7 @@ void MovieInfoPage::addFiles(){
return;
}
foreach(QString f, files){
- addFile(f);
+ addFile(f);
}
QFileInfo fi(files.at(0));
s.setValue("paths/addfilespath", fi.absolutePath());
@@ -432,40 +500,23 @@ MovieMetadataPage::MovieMetadataPage(QWidget *parent) : QWizardPage(parent){
void MovieMetadataPage::setupGui(){
mWidget = new MetadataEditorWidget;
-
- QHBoxLayout *enabledLayout = new QHBoxLayout;
- enabledLayout->setAlignment(Qt::AlignRight);
- mMetadataEnabled = new QCheckBox(tr("Enable metadata"));
- enabledLayout->addWidget(mMetadataEnabled);
- connect(mMetadataEnabled, SIGNAL(stateChanged(int)), this, SLOT(toggleMetadata(int)));
- toggleMetadata(Qt::Unchecked);
- registerField("enabled", mMetadataEnabled);
-
- QVBoxLayout *mainLayout = new QVBoxLayout;
+ QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(mWidget);
- mainLayout->addLayout(enabledLayout);
setLayout(mainLayout);
}
void MovieMetadataPage::initializePage(){
- ArchiveController *c = SmGlobals::instance()->archiveController();
- mWidget->setReleaseGroups(c->archiveTreeModel()->allReleaseGroups());
- mWidget->setSources(c->archiveTreeModel()->allSources());
QList<QVariant> curMetadata;
for(int i = 0; i < ArchiveModel::MetadataNumFields; ++i){
curMetadata << QVariant();
}
curMetadata[ArchiveModel::ReleaseYear] = QDate::currentDate().year();
- curMetadata[ArchiveModel::Source] = "unknown";
+ curMetadata[ArchiveModel::Source] = "torrent";
curMetadata[ArchiveModel::ReleaseGroup] = "unknown";
curMetadata[ArchiveModel::Added] = QDate::currentDate();
mWidget->setMetadata(curMetadata);
}
-void MovieMetadataPage::toggleMetadata(int state){
- mWidget->setEnabledAll(state == Qt::Checked);
-}
-
WizardTreeModel::WizardTreeModel(QStringList &headers, QObject *parent) : SmTreeModel(headers, parent){
mFiletypeMap = SmGlobals::instance()->filetypeMap();
}
@@ -477,8 +528,8 @@ Qt::ItemFlags WizardTreeModel::flags(const QModelIndex &index) const{
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}
-QList<QVariant> WizardTreeModel::fileData(int row) const{
- SmTreeItem *item = root()->child(row);
+QList<QVariant> WizardTreeModel::fileData(const QModelIndex &idx) const{
+ SmTreeItem *item = itemAt(idx);
QList<QVariant> retval;
for(int i = 0; i < item->columnCount(); ++i){
retval << item->data(i);
diff --git a/newmoviewizard.h b/newmoviewizard.h
index 20c0b89..b198267 100644
--- a/newmoviewizard.h
+++ b/newmoviewizard.h
@@ -18,6 +18,7 @@ class QSpinBox;
class QComboBox;
class QCheckBox;
class QPlainTextEdit;
+class QSortFilterProxyModel;
class SeriesMetadataModel;
class WizardTreeModel;
class MovieInfoPage;
@@ -60,6 +61,7 @@ class MovieInfoPage : public QWizardPage {
void initCompleters();
private slots:
+ void addOld();
void addFiles();
void removeFile();
@@ -70,6 +72,7 @@ class MovieInfoPage : public QWizardPage {
QLineEdit *mSubtitle;
QSpinBox *mSeriesNo;
QSpinBox *mQuality;
+ QPushButton *mAddOld;
QPushButton *mAddFile;
QPushButton *mRemoveFile;
WizardTreeModel *mFileModel;
@@ -77,6 +80,7 @@ class MovieInfoPage : public QWizardPage {
SmTreeItem *mCoversItem;
QCompleter *mSeriesCompleter;
QStringListModel *mSeriesCompleterModel;
+ QSortFilterProxyModel *mProxy;
};
class MovieMappingPage : public QWizardPage {
@@ -99,9 +103,6 @@ class MovieMetadataPage : public QWizardPage {
MetadataEditorWidget *widget() { return mWidget; }
virtual void initializePage();
- private slots:
- void toggleMetadata(int state);
-
private:
void setupGui();
/* defined in archiveview.h */
@@ -115,14 +116,14 @@ class WizardTreeModel : public SmTreeModel {
enum CustomRoles { FileNameRole = Qt::UserRole + 1, FileSizeRole = Qt::UserRole + 2, FileTypeRole = Qt::UserRole + 3, FilePartRole = Qt::UserRole + 4, FullPathRole = Qt::UserRole + 5 };
enum Fields { FileName = 0, FileSize = 1, FileType = 2, FilePart = 3, FullPath = 4 };
enum { NumFields = 5 };
- enum Types { Movie = 1, FrontCover = 2, BackCover = 3, GeneralCover = 4 };
+ enum Types { Movie = 1, FrontCover = 2, BackCover = 3, GeneralCover = 4, Origin = 5 };
explicit WizardTreeModel(QStringList &headers, QObject *parent = 0);
//data + flags
virtual QVariant data(const QModelIndex &index, int role) const;
virtual bool setData(const QModelIndex &index, const QVariant &value, int role);
virtual Qt::ItemFlags flags(const QModelIndex &index) const;
- QList<QVariant> fileData(int row) const;
+ QList<QVariant> fileData(const QModelIndex &idx) const;
void clear();
private:
diff --git a/smglobals.cpp b/smglobals.cpp
index 24a89bf..f228504 100644
--- a/smglobals.cpp
+++ b/smglobals.cpp
@@ -169,4 +169,5 @@ SmGlobals::SmGlobals() : mPictureViewer(0), mArchiveController(0){
mFiletypeMap.insert(FT_FRONTCOVER, tr("Front Cover"));
mFiletypeMap.insert(FT_BACKCOVER, tr("Back Cover"));
mFiletypeMap.insert(FT_GENERALCOVER, tr("General Cover"));
+ mFiletypeMap.insert(FT_ORIGIN, tr("Origin"));
}
diff --git a/smglobals.h b/smglobals.h
index 9bd6fd2..cbabbde 100644
--- a/smglobals.h
+++ b/smglobals.h
@@ -26,6 +26,7 @@ class ArchiveController;
#define FT_FRONTCOVER 2
#define FT_BACKCOVER 3
#define FT_GENERALCOVER 4
+#define FT_ORIGIN 5
class SmGlobals : public QObject {
Q_OBJECT