Merge lp:~schwann/gallery-app/gallery-previewmanager-mediacollection into lp:gallery-app

Proposed by Günter Schwann
Status: Merged
Approved by: Gustavo Pichorim Boiko
Approved revision: 703
Merged at revision: 734
Proposed branch: lp:~schwann/gallery-app/gallery-previewmanager-mediacollection
Merge into: lp:gallery-app
Diff against target: 166 lines (+46/-19)
4 files modified
src/medialoader/preview-manager.cpp (+41/-10)
src/medialoader/preview-manager.h (+3/-4)
tests/unittests/gallerystandardimageprovider/tst_gallerystandardimageprovidertest.cpp (+1/-2)
tests/unittests/stubs/preview-manager_stub.cpp (+1/-3)
To merge this branch: bzr merge lp:~schwann/gallery-app/gallery-previewmanager-mediacollection
Reviewer Review Type Date Requested Status
Gustavo Pichorim Boiko (community) Approve
PS Jenkins bot continuous-integration Approve
Review via email: mp+169998@code.launchpad.net

Commit message

PreviewManager does the loading and orientating of photos on it's own

Description of the change

PreviewManager does the loading and orientating of photos on it's own
This reduces the dependencies. The performance hit is very minor, and only affects the thumbnail generation.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Gustavo Pichorim Boiko (boiko) wrote :

Looks good and works as expected.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/medialoader/preview-manager.cpp'
2--- src/medialoader/preview-manager.cpp 2013-06-13 08:44:29 +0000
3+++ src/medialoader/preview-manager.cpp 2013-06-18 06:19:31 +0000
4@@ -18,13 +18,14 @@
5 */
6
7 #include "preview-manager.h"
8+#include "photo-metadata.h"
9
10 // media
11-#include "media-collection.h"
12 #include "media-source.h"
13
14 #include <QCryptographicHash>
15 #include <QDir>
16+#include <QImageReader>
17 #include <QMutexLocker>
18
19 // FIXME adapt to different sizes. This is fixed size for the demo device
20@@ -41,14 +42,10 @@
21 /*!
22 * \brief PreviewManager::PreviewManager
23 */
24-PreviewManager::PreviewManager(const QString &thumbnailDirectory,
25- MediaCollection *mediaCollection, QObject *parent)
26+PreviewManager::PreviewManager(const QString &thumbnailDirectory, QObject *parent)
27 : QObject(parent),
28- m_thumbnailDir(thumbnailDirectory),
29- m_mediaCollection(mediaCollection)
30+ m_thumbnailDir(thumbnailDirectory)
31 {
32- Q_ASSERT(m_mediaCollection);
33-
34 if (m_thumbnailDir.right(1) != QDir::separator())
35 m_thumbnailDir += QDir::separator();
36
37@@ -146,9 +143,8 @@
38
39 QImage thumbMaster;
40 if (updateNeeded(file, QFileInfo(preview)) || regen) {
41- MediaSource* photo = m_mediaCollection->mediaFromFileinfo(file);
42 QSize previewSize(PREVIEW_SIZE, PREVIEW_SIZE);
43- QImage fullsized(photo->image(true, previewSize));
44+ QImage fullsized = loadPhoto(file.canonicalFilePath(), previewSize);
45 if (fullsized.isNull()) {
46 qDebug() << "Unable to generate fullsized image for " << file.filePath() << "not generating preview";
47 return false;
48@@ -205,8 +201,10 @@
49 QString temporaryName(fileName+".tmp");
50 bool ok;
51 ok = image.save(temporaryName, PREVIEW_FILE_FORMAT, PREVIEW_QUALITY);
52- if (!ok)
53+ if (!ok) {
54+ qWarning() << "Unanble to save the thumbnail" << temporaryName;
55 return false;
56+ }
57
58 if (QFile::exists(fileName)) {
59 QFile::remove(fileName);
60@@ -282,3 +280,36 @@
61
62 return mediaFile.lastModified() > previewFile.lastModified();
63 }
64+
65+/*!
66+ * \brief PreviewManager::loadPhoto load a photo with correct orientation
67+ * The size can be limited as well, to speed upt the loading
68+ * \param fileName file name of the photo
69+ * \param maxSize limits the size, so that one side fits into maxSize. If an
70+ * invalid size is passed, the image is loaded in full size.
71+ * \return the photo corrctly sized and oriented
72+ */
73+QImage PreviewManager::loadPhoto(const QString &fileName, const QSize& maxSize) const
74+{
75+ QImageReader imageReader(fileName);
76+
77+ QSize imageSize = imageReader.size();
78+ if (maxSize.isValid()) {
79+ QSize size = imageSize;
80+ size.scale(maxSize, Qt::KeepAspectRatioByExpanding);
81+ imageReader.setScaledSize(size);
82+ }
83+
84+ QImage image = imageReader.read();
85+ if (!image.isNull()) {
86+ PhotoMetadata* metadata = PhotoMetadata::fromFile(fileName.toStdString().c_str());
87+ image = image.transformed(
88+ OrientationCorrection::fromOrientation(metadata->orientation())
89+ .toTransform());
90+ delete metadata;
91+ } else {
92+ qWarning() << "Could not load the image" << fileName << "for thumbnail generation";
93+ }
94+
95+ return image;
96+}
97
98=== modified file 'src/medialoader/preview-manager.h'
99--- src/medialoader/preview-manager.h 2013-06-06 08:50:04 +0000
100+++ src/medialoader/preview-manager.h 2013-06-18 06:19:31 +0000
101@@ -24,11 +24,11 @@
102 #include <QMutex>
103 #include <QObject>
104 #include <QSet>
105+#include <QSize>
106 #include <QString>
107
108 class QImage;
109 class DataObject;
110-class MediaCollection;
111 class MediaSource;
112
113 /*!
114@@ -56,8 +56,7 @@
115 static const QString PREVIEW_DIR;
116 static const QString THUMBNAIL_DIR;
117
118- PreviewManager(const QString& thumbnailDirectory, MediaCollection *mediaCollection,
119- QObject* parent = 0);
120+ PreviewManager(const QString& thumbnailDirectory, QObject* parent = 0);
121
122 QString previewFileName(const QFileInfo& file) const;
123 QString thumbnailFileName(const QFileInfo& file) const;
124@@ -78,10 +77,10 @@
125 QImage generateThumbnail(const QImage& master) const;
126 QString thumbnailFileName(const QString& fileName, const QString& levelName) const;
127 bool updateNeeded(const QFileInfo& mediaFile, const QFileInfo& previewFile) const;
128+ QImage loadPhoto(const QString& fileName, const QSize &maxSize) const;
129
130 static QMutex m_createMutex;
131 QString m_thumbnailDir;
132- MediaCollection *m_mediaCollection;
133 };
134
135 #endif // GALLERY_PREVIEW_MANAGER_H_
136
137=== modified file 'tests/unittests/gallerystandardimageprovider/tst_gallerystandardimageprovidertest.cpp'
138--- tests/unittests/gallerystandardimageprovider/tst_gallerystandardimageprovidertest.cpp 2013-06-10 06:20:05 +0000
139+++ tests/unittests/gallerystandardimageprovider/tst_gallerystandardimageprovidertest.cpp 2013-06-18 06:19:31 +0000
140@@ -73,8 +73,7 @@
141 QFETCH(QString, id);
142 QFETCH(QString, fileName);
143
144- MediaCollection mediaCollection;
145- PreviewManager previewManager("/home/user/thumbnails", &mediaCollection);
146+ PreviewManager previewManager("/home/user/thumbnails");
147 GalleryStandardImageProvider provider;
148 provider.setPreviewManager(&previewManager);
149 QCOMPARE(provider.idToFile(id), fileName);
150
151=== modified file 'tests/unittests/stubs/preview-manager_stub.cpp'
152--- tests/unittests/stubs/preview-manager_stub.cpp 2013-06-14 17:59:27 +0000
153+++ tests/unittests/stubs/preview-manager_stub.cpp 2013-06-18 06:19:31 +0000
154@@ -27,11 +27,9 @@
155 const QString PreviewManager::PREVIEW_DIR = ".thumbs";
156 const char* PreviewManager::PREVIEW_FILE_EXT = "JPG";
157
158-PreviewManager::PreviewManager(const QString &thumbnailDirectory,
159- MediaCollection *mediaCollection, QObject *parent)
160+PreviewManager::PreviewManager(const QString &thumbnailDirectory, QObject *parent)
161 {
162 Q_UNUSED(thumbnailDirectory);
163- Q_UNUSED(mediaCollection)
164 }
165
166 bool PreviewManager::ensurePreview(QFileInfo file, bool regen)

Subscribers

People subscribed via source and target branches