mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	Store Thumbnails with image hashes
This drastically improves the time it takes to select a dive with several pictures at the expense of longer startup and bigger hash files. Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
		
							parent
							
								
									e0f43d8a84
								
							
						
					
					
						commit
						2075038de1
					
				
					 2 changed files with 9 additions and 4 deletions
				
			
		| 
						 | 
					@ -6,19 +6,21 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <QtConcurrent>
 | 
					#include <QtConcurrent>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern QHash <QString, QImage > thumbnailCache;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SPixmap scaleImages(picturepointer picture)
 | 
					SPixmap scaleImages(picturepointer picture)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	static QHash <QString, QImage > cache;
 | 
					 | 
				
			||||||
	SPixmap ret;
 | 
						SPixmap ret;
 | 
				
			||||||
	ret.first = picture;
 | 
						ret.first = picture;
 | 
				
			||||||
	if (cache.contains(picture->filename) && !cache.value(picture->filename).isNull()) {
 | 
						if (thumbnailCache.contains(picture->filename) && !thumbnailCache.value(picture->filename).isNull()) {
 | 
				
			||||||
		ret.second = cache.value(picture->filename);
 | 
							ret.second = thumbnailCache.value(picture->filename);
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		int dim = defaultIconMetrics().sz_pic;
 | 
							int dim = defaultIconMetrics().sz_pic;
 | 
				
			||||||
		QImage p = SHashedImage(picture);
 | 
							QImage p = SHashedImage(picture);
 | 
				
			||||||
		if(!p.isNull()) {
 | 
							if(!p.isNull()) {
 | 
				
			||||||
			p = p.scaled(dim, dim, Qt::KeepAspectRatio);
 | 
								p = p.scaled(dim, dim, Qt::KeepAspectRatio);
 | 
				
			||||||
			cache.insert(picture->filename, p);
 | 
								thumbnailCache.insert(picture->filename, p);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ret.second = p;
 | 
							ret.second = p;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1129,6 +1129,7 @@ extern "C" void reverseGeoLookup(degrees_t latitude, degrees_t longitude, uint32
 | 
				
			||||||
QHash<QString, QByteArray> hashOf;
 | 
					QHash<QString, QByteArray> hashOf;
 | 
				
			||||||
QMutex hashOfMutex;
 | 
					QMutex hashOfMutex;
 | 
				
			||||||
QHash<QByteArray, QString> localFilenameOf;
 | 
					QHash<QByteArray, QString> localFilenameOf;
 | 
				
			||||||
 | 
					QHash <QString, QImage > thumbnailCache;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern "C" char * hashstring(char * filename)
 | 
					extern "C" char * hashstring(char * filename)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -1152,6 +1153,7 @@ void read_hashes()
 | 
				
			||||||
		QDataStream stream(&hashfile);
 | 
							QDataStream stream(&hashfile);
 | 
				
			||||||
		stream >> localFilenameOf;
 | 
							stream >> localFilenameOf;
 | 
				
			||||||
		stream >> hashOf;
 | 
							stream >> hashOf;
 | 
				
			||||||
 | 
							stream >> thumbnailCache;
 | 
				
			||||||
		hashfile.close();
 | 
							hashfile.close();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1163,6 +1165,7 @@ void write_hashes()
 | 
				
			||||||
		QDataStream stream(&hashfile);
 | 
							QDataStream stream(&hashfile);
 | 
				
			||||||
		stream << localFilenameOf;
 | 
							stream << localFilenameOf;
 | 
				
			||||||
		stream << hashOf;
 | 
							stream << hashOf;
 | 
				
			||||||
 | 
							stream << thumbnailCache;
 | 
				
			||||||
		hashfile.commit();
 | 
							hashfile.commit();
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		qDebug() << "cannot open" << hashfile.fileName();
 | 
							qDebug() << "cannot open" << hashfile.fileName();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue