From b4d637a8f01bc994eb8264a03f79ebf2da8359d3 Mon Sep 17 00:00:00 2001 From: "Robert C. Helling" Date: Tue, 24 Feb 2015 14:30:32 +0100 Subject: [PATCH] Add load and save git for image hashes and tame too aggressive parallelism I don't use the git storage myself, but this should add the hashes there as well. PLEASE TEST! Furthermore, only update the image display when image hashing is complete (not on a per directory basis as that lead to problems with non-reentrant code). Signed-off-by: Robert C. Helling --- load-git.c | 8 +++++++- qt-ui/mainwindow.cpp | 2 +- qthelper.cpp | 7 ++++--- qthelper.h | 2 +- save-git.c | 1 + 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/load-git.c b/load-git.c index 053a714..be25e8e 100644 --- a/load-git.c +++ b/load-git.c @@ -828,6 +828,12 @@ static void parse_picture_gps(char *line, struct membuffer *str, void *_pic) pic->longitude = parse_degrees(line, &line); } +static void parse_picture_hash(char *line, struct membuffer *str, void *_pic) +{ + struct picture *pic = _pic; + pic->hash = get_utf8(str); +} + /* These need to be sorted! */ struct keyword_action dc_action[] = { #undef D @@ -900,7 +906,7 @@ static void settings_parser(char *line, struct membuffer *str, void *_unused) static struct keyword_action picture_action[] = { #undef D #define D(x) { #x, parse_picture_ ## x } - D(filename), D(gps) + D(filename), D(gps), D(hash) }; static void picture_parser(char *line, struct membuffer *str, void *_pic) diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp index f2d7869..520b457 100644 --- a/qt-ui/mainwindow.cpp +++ b/qt-ui/mainwindow.cpp @@ -332,7 +332,7 @@ void MainWindow::on_actionHash_images_triggered() if (dirnames.isEmpty()) return; foreach (QString dir, dirnames) { - QtConcurrent::run(learnImages, QDir(dir), 10); + QtConcurrent::run(learnImages, QDir(dir), 10, 0); } } diff --git a/qthelper.cpp b/qthelper.cpp index 09d84d8..a1e01d4 100644 --- a/qthelper.cpp +++ b/qthelper.cpp @@ -460,7 +460,7 @@ void learnImage(const QByteArray filename) MainWindow::instance()->localFilenameOf[hashFile(filename.data())] = strdup(filename.data()); } -void learnImages(const QDir &dir, int maxdepth) +void learnImages(const QDir &dir, int maxdepth, int depth) { QDir current(dir); QList files; @@ -468,7 +468,7 @@ void learnImages(const QDir &dir, int maxdepth) if (maxdepth) { foreach (QString dirname, dir.entryList(QStringList(), QDir::NoDotAndDotDot | QDir::Dirs)) { - learnImages(QDir(dir.filePath(dirname)), maxdepth - 1); + learnImages(QDir(dir.filePath(dirname)), maxdepth - 1, depth + 1); } } @@ -481,5 +481,6 @@ void learnImages(const QDir &dir, int maxdepth) } QtConcurrent::blockingMap(files, learnImage); - DivePictureModel::instance()->updateDivePictures(); + if (depth == 0) + DivePictureModel::instance()->updateDivePictures(); } diff --git a/qthelper.h b/qthelper.h index 3826efa..b1ccb8a 100644 --- a/qthelper.h +++ b/qthelper.h @@ -21,5 +21,5 @@ void read_hashes(); void write_hashes(); void updateHash(struct picture *picture); QByteArray hashFile(const char *filename); -void learnImages(const QDir &dir, int maxdepth); +void learnImages(const QDir &dir, int maxdepth, int depth); #endif // QTHELPER_H diff --git a/save-git.c b/save-git.c index 0125f64..a7b5144 100644 --- a/save-git.c +++ b/save-git.c @@ -585,6 +585,7 @@ static int save_one_picture(git_repository *repo, struct dir *dir, struct pictur show_utf8(&buf, "filename ", pic->filename, "\n"); show_gps(&buf, pic->latitude, pic->longitude); + show_utf8(&buf, "hash ", pic->hash, "\n"); /* Picture loading will load even negative offsets.. */ if (offset < 0) { -- 1.9.3 (Apple Git-50)