diff options
-rw-r--r-- | archivecontroller.cpp | 71 | ||||
-rw-r--r-- | archivemodel.cpp | 6 | ||||
-rw-r--r-- | archivemodel.h | 8 |
3 files changed, 71 insertions, 14 deletions
diff --git a/archivecontroller.cpp b/archivecontroller.cpp index d13eb14..087fd67 100644 --- a/archivecontroller.cpp +++ b/archivecontroller.cpp @@ -289,21 +289,63 @@ void ArchiveController::setMetadata(QTextEdit *metaEdit){ void ArchiveController::getMetadata(QSet<int> ids){ mMetaEdit->clear(); - QList<QVariant> metadata = mArchiveModel->metadataList(*ids.begin()); + if(ids.isEmpty()){ + return; + } + QString meta; - meta.append("<html><body style=\"font-family: courier new; font-weight: bold\"><table>"); - meta.append(QString("<tr><td>Release year</td><td style=\"padding-left: 30px\">%1</td></tr>").arg(metadata.at(ArchiveModel::ReleaseYear).toString())); - meta.append(QString("<tr><td>Source</td><td style=\"padding-left: 30px\">%1</td></tr>").arg(metadata.at(ArchiveModel::Source).toString())); - meta.append(QString("<tr><td>Subj./Name</td><td style=\"padding-left: 30px\">%1</td></tr>").arg(metadata.at(ArchiveModel::Subject).toString())); - meta.append(QString("<tr><td>Added</td><td style=\"padding-left: 30px\">%1</td></tr>").arg(metadata.at(ArchiveModel::Added).toDateTime().toString())); - - meta.append("</table>"); - QString comment = metadata.at(ArchiveModel::Comment).toString(); - if(comment.isEmpty()){ - comment = tr("(none)"); + + if(ids.size() == 1){ + QList<QVariant> metadata = mArchiveModel->metadataList(*ids.begin()); + if(metadata.at(0).isValid()){ + meta.append("<html><body style=\"font-family: courier new; font-weight: bold\"><table>"); + meta.append(QString("<tr><td>Release year</td><td style=\"padding-left: 30px\">%1</td></tr>").arg(metadata.at(ArchiveModel::ReleaseYear).toString())); + meta.append(QString("<tr><td>Source</td><td style=\"padding-left: 30px\">%1</td></tr>").arg(metadata.at(ArchiveModel::Source).toString())); + meta.append(QString("<tr><td>Subj./Name</td><td style=\"padding-left: 30px\">%1</td></tr>").arg(metadata.at(ArchiveModel::Subject).toString())); + meta.append(QString("<tr><td>Added</td><td style=\"padding-left: 30px\">%1</td></tr>").arg(metadata.at(ArchiveModel::Added).toDateTime().toString())); + + meta.append("</table>"); + QString comment = metadata.at(ArchiveModel::Comment).toString(); + if(comment.isEmpty()){ + comment = tr("(none)"); + } + meta.append(QString("<p style=\"font-style: italic; margin-bottom: 0px\">Comments:</p><p style=\"margin-left: 10px; margin-top: 0px\">%1</p>").arg(comment)); + meta.append("</body></html>"); + }else{ + meta = tr("No metadata available"); + } + }else{ + QStringList tmpH; + for(int i = 0; i < ArchiveFilesModel::NumFields; ++i){ + tmpH << ""; + } + tmpH.reserve(ArchiveFilesModel::NumFields); + ArchiveFilesModel tmpFModel(tmpH, this); + tmpFModel.populate(ids); + quint64 totalSize = tmpFModel.totalSize(); + QString sizeStr; + QLocale l; + if(totalSize / 1024 / 1024 / 1024 > 0){ //display GB + double ts = (double)totalSize / 1024.0 / 1024.0 / 1024.0; + sizeStr = QString("%1 GB").arg(l.toString(ts)); + }else if(totalSize / 1024 / 1024 > 0){ //display MB + double ts = (double)totalSize / 1024.0 / 1024.0; + sizeStr = QString("%1 MB").arg(l.toString(ts)); + }else if(totalSize == 0){ + sizeStr = tr("n/a"); + } + meta.append("<html><body style=\"font-family: courier new; font-weight: bold\"><table>"); + meta.append(QString("<tr><td>Total Size</td><td style=\"padding-left: 30px\">%1</td></tr>").arg(sizeStr)); + quint64 totalDur = tmpFModel.totalDuration(); + Helper::Duration dur(totalDur); + meta.append(QString("<tr><td>Total Duration</td><td style=\"padding-left: 30px\">%1</td></tr>").arg(dur.toString())); + int moviefiles = tmpFModel.movieFilesCount(); + meta.append(QString("<tr><td>Movie files</td><td style=\"padding-left: 30px\">%1</td></tr>").arg(QString::number(moviefiles))); + int otherfiles = tmpFModel.otherFilesCount(); + meta.append(QString("<tr><td>Other files</td><td style=\"padding-left: 30px\">%1</td></tr>").arg(QString::number(otherfiles))); + meta.append("</table>"); + meta.append("</body></html>"); } - meta.append(QString("<p style=\"font-style: italic; margin-bottom: 0px\">Comments:</p><p style=\"margin-left: 10px; margin-top: 0px\">%1</p>").arg(comment)); - meta.append("</body></html>"); mMetaEdit->setHtml(meta); } @@ -317,7 +359,9 @@ void ArchiveController::fileSelectionChanged(const QItemSelection &selected, con qint64 size = 0; qint64 duration = 0; bool maybeMore = false; + QSet<int> seriesParts; foreach(QModelIndex i, sel){ + seriesParts << i.data(ArchiveFilesModel::SeriesPartIdRole).toInt(); size += i.data(ArchiveFilesModel::SizeRole).toInt(); int type = i.data(ArchiveFilesModel::FileTypeRole).toInt(); if(type == FT_MOVIE){ @@ -328,6 +372,7 @@ void ArchiveController::fileSelectionChanged(const QItemSelection &selected, con } } } + getMetadata(seriesParts); emit sizeChanged(size); emit durationChanged(duration, maybeMore); } diff --git a/archivemodel.cpp b/archivemodel.cpp index d08b7ce..cace26b 100644 --- a/archivemodel.cpp +++ b/archivemodel.cpp @@ -776,7 +776,7 @@ const QString ArchiveModel::cacheFile(int o) const{ /* * ArchiveFilesModel BEGIN */ -ArchiveFilesModel::ArchiveFilesModel(const QStringList &headers, QObject *parent) : SmTreeModel(headers, parent) { +ArchiveFilesModel::ArchiveFilesModel(const QStringList &headers, QObject *parent) : SmTreeModel(headers, parent), mTotalSize(0), mTotalDuration(0), mTotalMovies(0), mTotalOthers(0) { mDb = QSqlDatabase::database("treedb"); mRoleDbColumnMap.insert(FilenameRole, "tfilename"); mRoleDbColumnMap.insert(DvdNoRole, "idvd"); @@ -968,6 +968,8 @@ void ArchiveFilesModel::populate(const QSet<int> &seriesPartIds){ QList<QVariant> data; data << QVariant(); //expansion (empty) data << q.value(0) << q.value(1) << q.value(2) << q.value(3) << q.value(4) << q.value(5) << q.value(6) << q.value(7) << q.value(8); + mTotalSize += q.value(3).toULongLong(); + mTotalDuration += q.value(10).toULongLong(); if(!q.value(9).isNull()){ data << q.value(9); }else if(!q.value(10).isNull()){ @@ -986,6 +988,7 @@ void ArchiveFilesModel::populate(const QSet<int> &seriesPartIds){ } data << fullPath << q.value(11) << q.value(12) << q.value(13); if(data.at(FileType).toInt() == FT_MOVIE){ + ++mTotalMovies; SmTreeItem *newItem = new SmTreeItem(data, movies); movies->appendChild(newItem); if((data.at(DvdNo).toInt() < 0) && (data.at(SizeDur) == 0)){ @@ -1001,6 +1004,7 @@ void ArchiveFilesModel::populate(const QSet<int> &seriesPartIds){ } } }else{ + ++mTotalOthers; SmTreeItem *newItem = new SmTreeItem(data, pictures); pictures->appendChild(newItem); } diff --git a/archivemodel.h b/archivemodel.h index da673c7..ad11fce 100644 --- a/archivemodel.h +++ b/archivemodel.h @@ -106,6 +106,10 @@ class ArchiveFilesModel : public SmTreeModel { void populate(const QSet<int> &seriesPartIds); QStringList filesForSeriespart(int seriesPartId) const; void updateSeriesPartForFile(const QString &md5sum, int newSeriesPart); + quint64 totalDuration() const { return mTotalDuration; } + quint64 totalSize() const { return mTotalSize; } + int movieFilesCount() const { return mTotalMovies; } + int otherFilesCount() const { return mTotalOthers; } static bool hasFile(const QString &md5); static bool setDvdNo(const QString &md5, int dvdno); @@ -117,6 +121,10 @@ class ArchiveFilesModel : public SmTreeModel { QSet<int> mSeriesPartIds; QHash<int, QString> mRoleDbColumnMap; QSqlDatabase mDb; + quint64 mTotalSize; + quint64 mTotalDuration; + int mTotalMovies; + int mTotalOthers; }; class ArchiveCollector : public QThread { |