aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/imagedownloader.cpp3
-rw-r--r--core/qthelper.cpp5
-rw-r--r--core/qthelper.h2
-rw-r--r--desktop-widgets/divelistview.cpp6
-rw-r--r--tests/testpicture.cpp19
5 files changed, 21 insertions, 14 deletions
diff --git a/core/imagedownloader.cpp b/core/imagedownloader.cpp
index 3b55dfd06..e486830d2 100644
--- a/core/imagedownloader.cpp
+++ b/core/imagedownloader.cpp
@@ -71,8 +71,7 @@ void ImageDownloader::saveImage(QNetworkReply *reply, bool &success)
stream.writeRawData(imageData.data(), imageData.length());
imageFile.waitForBytesWritten(-1);
imageFile.close();
- add_hash(imageFile.fileName(), hash.result());
- learnHash(picture, hash.result());
+ learnHash(QString(picture->filename), imageFile.fileName(), hash.result());
}
// This should be called to make the picture actually show.
// Problem is DivePictureModel is not in core.
diff --git a/core/qthelper.cpp b/core/qthelper.cpp
index 0029ca13a..e03f86739 100644
--- a/core/qthelper.cpp
+++ b/core/qthelper.cpp
@@ -1149,12 +1149,13 @@ QByteArray hashFile(const QString filename)
}
}
-void learnHash(const struct picture *picture, QByteArray hash)
+void learnHash(const QString &originalName, const QString &localName, const QByteArray &hash)
{
if (hash.isNull())
return;
+ add_hash(localName, hash);
QMutexLocker locker(&hashOfMutex);
- hashOf[QString(picture->filename)] = hash;
+ hashOf[originalName] = hash;
}
static bool haveHash(const QString &filename)
diff --git a/core/qthelper.h b/core/qthelper.h
index a71960c86..948ca234d 100644
--- a/core/qthelper.h
+++ b/core/qthelper.h
@@ -40,7 +40,7 @@ void hashPicture(struct picture *picture);
extern "C" char *hashstring(const char *filename);
QString localFilePath(const QString originalFilename);
QString fileFromHash(const char *hash);
-void learnHash(const struct picture *picture, QByteArray hash);
+void learnHash(const QString &originalName, const QString &localName, const QByteArray &hash);
weight_t string_to_weight(const char *str);
depth_t string_to_depth(const char *str);
pressure_t string_to_pressure(const char *str);
diff --git a/desktop-widgets/divelistview.cpp b/desktop-widgets/divelistview.cpp
index 104b65a63..b32493a5d 100644
--- a/desktop-widgets/divelistview.cpp
+++ b/desktop-widgets/divelistview.cpp
@@ -1000,11 +1000,7 @@ void DiveListView::loadImageFromURL(QUrl url)
stream.writeRawData(imageData.data(), imageData.length());
imageFile.waitForBytesWritten(-1);
imageFile.close();
- add_hash(imageFile.fileName(), hash.result());
- struct picture picture;
- picture.hash = NULL;
- picture.filename = strdup(url.toString().toUtf8().data());
- learnHash(&picture, hash.result());
+ learnHash(url.toString(), imageFile.fileName(), hash.result());
matchImagesToDives(QStringList(url.toString()));
}
}
diff --git a/tests/testpicture.cpp b/tests/testpicture.cpp
index 94b1fe0ee..752166cd4 100644
--- a/tests/testpicture.cpp
+++ b/tests/testpicture.cpp
@@ -12,6 +12,11 @@ void TestPicture::initTestCase()
Q_INIT_RESOURCE(subsurface);
}
+#define PIC1_NAME "/dives/images/wreck.jpg"
+#define PIC2_NAME "/dives/images/data_after_EOI.jpg"
+#define PIC1_HASH "929ad9499b7ae7a9e39ef63eb6c239604ac2adfa"
+#define PIC2_HASH "fa8bd48f8f24017a81e1204f52300bd98b43d4a7"
+
void TestPicture::addPicture()
{
struct dive *dive;
@@ -41,10 +46,16 @@ void TestPicture::addPicture()
QVERIFY(pic1->hash == NULL);
QVERIFY(pic2->hash == NULL);
- learnHash(pic1, hashFile(localFilePath(pic1->filename)));
- learnHash(pic2, hashFile(localFilePath(pic2->filename)));
- QCOMPARE(hashstring(pic1->filename), "929ad9499b7ae7a9e39ef63eb6c239604ac2adfa");
- QCOMPARE(hashstring(pic2->filename), "fa8bd48f8f24017a81e1204f52300bd98b43d4a7");
+ QByteArray hash1 = hashFile(localFilePath(pic1->filename));
+ QByteArray hash2 = hashFile(localFilePath(pic2->filename));
+ learnHash(pic1->filename, PIC1_NAME, hash1);
+ learnHash(pic2->filename, PIC2_NAME, hash2);
+ QCOMPARE(hashstring(pic1->filename), PIC1_HASH);
+ QCOMPARE(hashstring(pic2->filename), PIC2_HASH);
+ QCOMPARE(hashstring(PIC1_NAME), PIC1_HASH);
+ QCOMPARE(hashstring(PIC2_NAME), PIC2_HASH);
+ QCOMPARE(fileFromHash(PIC1_HASH), QString(PIC1_NAME));
+ QCOMPARE(fileFromHash(PIC2_HASH), QString(PIC2_NAME));
}