diff options
author | Arno <arno@disconnect.de> | 2024-06-26 09:58:19 +0200 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2024-06-26 09:58:19 +0200 |
commit | 0990aaa7ff6d35780b8cad838bf458a630e63e5a (patch) | |
tree | caf92db6ed1a35f14f5a4e8ec4cff5793452d643 | |
parent | c7b0d2967acf2430aabfda4910e77f4cf4827f55 (diff) | |
download | SheMov-0990aaa7ff6d35780b8cad838bf458a630e63e5a.tar.gz SheMov-0990aaa7ff6d35780b8cad838bf458a630e63e5a.tar.bz2 SheMov-0990aaa7ff6d35780b8cad838bf458a630e63e5a.zip |
Extract more metadata from original
If the metadata tag creation_time exists in the original, use it to
determine the release year. To avoid calling ffprobe twice, do it on
movieinfopage and pass the value along by a registered field.
-rw-r--r-- | movieinfopage.cpp | 39 | ||||
-rw-r--r-- | movieinfopage.h | 5 | ||||
-rw-r--r-- | moviemetadatapage.cpp | 5 |
3 files changed, 36 insertions, 13 deletions
diff --git a/movieinfopage.cpp b/movieinfopage.cpp index 9d19e48..dab024e 100644 --- a/movieinfopage.cpp +++ b/movieinfopage.cpp @@ -24,6 +24,7 @@ #include <QFileDialog> #include <QMessageBox> #include <QToolBar> +#include <QDateEdit> #include <QApplication> #include "movieinfopage.h" @@ -60,10 +61,14 @@ void MovieInfoPage::setupGui(){ //add + remove files QHBoxLayout *fileButtonLayout = new QHBoxLayout; + mCreationDate = new QDateEdit; + mCreationDate->setDisplayFormat("dd. MMMM yyyy"); + mCreationDate->setDate(QDate::currentDate()); + fileButtonLayout->addWidget(mCreationDate); fileButtonLayout->addStretch(); - QPushButton *extractTitleB = new QPushButton(tr("Title")); + QPushButton *extractTitleB = new QPushButton(tr("Meta")); fileButtonLayout->addWidget(extractTitleB); - connect(extractTitleB, &QPushButton::clicked, this, &MovieInfoPage::extractTitle); + connect(extractTitleB, &QPushButton::clicked, this, &MovieInfoPage::extractMetadata); QPushButton *addOldB = new QPushButton(tr("Add Old...")); fileButtonLayout->addWidget(addOldB); connect(addOldB, &QPushButton::clicked, this, &MovieInfoPage::addOld); @@ -125,6 +130,7 @@ void MovieInfoPage::setupGui(){ registerField("subtitle", mSubtitle); registerField("seriesNo", mSeriesNo); registerField("quality", mQuality); + registerField("creationDate", mCreationDate); } void MovieInfoPage::initializePage(){ @@ -201,23 +207,32 @@ void MovieInfoPage::initCompleters(){ mSeriesCompleterModel->setStringList(series); } -void MovieInfoPage::extractTitle(){ +void MovieInfoPage::extractMetadata(){ QModelIndexList curIdxList = mFileView->selectionModel()->selectedRows(); if(!curIdxList.isEmpty()){ - QString fp = curIdxList.at(0).data(WizardTreeModel::FullPathRole).toString(); + QModelIndex selIdx = curIdxList.at(0); + QModelIndex selChild = selIdx.model()->index(0, 0, selIdx); + if(selChild.isValid()){ + selIdx = selChild; + } + QString fp = selIdx.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(); - if(!title.isEmpty()){ - mSubtitle->setText(title); - }else{ - QString fn = curIdxList.at(0).data(WizardTreeModel::FileNameRole).toString().toLower(); - fn.replace(".mkv", ""); - fn.replace(".", " "); - mSubtitle->setText(fn); + QString creationTime = jObj2.value("creation_time").toString(); + if(!creationTime.isNull()){ + QDateTime creationTimeObj = QDateTime::fromString(creationTime, Qt::ISODateWithMs); + if(creationTimeObj.isValid()){ + mCreationDate->setDate(creationTimeObj.date()); + } } + QString fn = curIdxList.at(0).data(WizardTreeModel::FileNameRole).toString().toLower(); + fn.replace(".mkv", ""); + fn.replace(".mp4", ""); + fn.replace(".", " "); + mSubtitle->setText(fn); + } } } diff --git a/movieinfopage.h b/movieinfopage.h index 9d728d7..0407c33 100644 --- a/movieinfopage.h +++ b/movieinfopage.h @@ -8,6 +8,7 @@ #ifndef MOVIEINFOPAGE_H #define MOVIEINFOPAGE_H +#include <QDateTime> #include <QWizardPage> class WizardTreeModel; @@ -18,6 +19,7 @@ class QLineEdit; class QSortFilterProxyModel; class QStringListModel; class QCompleter; +class QDateEdit; class MovieInfoPage : public QWizardPage { Q_OBJECT @@ -37,7 +39,7 @@ class MovieInfoPage : public QWizardPage { void guessOld(const QString &fullPath); private slots: - void extractTitle(); + void extractMetadata(); void addOld(); void addFiles(); void removeFile(); @@ -51,6 +53,7 @@ class MovieInfoPage : public QWizardPage { QLineEdit *mSubtitle; QSpinBox *mSeriesNo; QSpinBox *mQuality; + QDateEdit *mCreationDate; WizardTreeModel *mFileModel; SmTreeItem *mMoviesItem; SmTreeItem *mCoversItem; diff --git a/moviemetadatapage.cpp b/moviemetadatapage.cpp index 597ea85..b688f6d 100644 --- a/moviemetadatapage.cpp +++ b/moviemetadatapage.cpp @@ -37,6 +37,11 @@ void MovieMetadataPage::initializePage(){ curMetadata[ArchiveModel::ReleaseGroup] = "unknown"; curMetadata[ArchiveModel::Added] = QDate::currentDate(); mWidget->setMetadata(curMetadata); + }else{ + auto curMetadata = mWidget->metadata(); + auto creationDate = field("creationDate").toDate(); + curMetadata[ArchiveModel::ReleaseYear] = creationDate.year(); + mWidget->setMetadata(curMetadata); } } |