summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2016-11-06 06:07:07 +0100
committerArno <arno@disconnect.de>2016-11-06 06:07:07 +0100
commitaea54efd00c1cbd0f66bcda83e9c7a196d3c317b (patch)
tree26b3e7586420f5ef490faf60a466a51560446a44
parent6274b353c2f22703371e4751b6cb7f96a38d94e9 (diff)
downloadSheMov-aea54efd00c1cbd0f66bcda83e9c7a196d3c317b.tar.gz
SheMov-aea54efd00c1cbd0f66bcda83e9c7a196d3c317b.tar.bz2
SheMov-aea54efd00c1cbd0f66bcda83e9c7a196d3c317b.zip
Kinda fix display of metadata
If a seriespart is selected in the tree, display a summary. When a file is selected, display the actual metadata. It's much more consistent. Before, the metadata of the first *item in the selected list was displayed.
-rw-r--r--archivecontroller.cpp71
-rw-r--r--archivemodel.cpp6
-rw-r--r--archivemodel.h8
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 {