From 50783b0819531087266c626fa6066e8233bb0692 Mon Sep 17 00:00:00 2001 From: Arno Date: Mon, 22 Aug 2011 18:24:13 +0200 Subject: Fixes for SmGlobals::FrameCache Don't generate duplicate screenshots when the same file is indexed in different paths. Part of the frameCache key was the _full_ path, not just the filename, so duplicates piled up when hovering over the same file in the filesystem and the archive. Added a cleanup function to SmGlobals::FrameCache. Also, just use QFileInfo::fileName() as part of the key. --- smglobals.cpp | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) (limited to 'smglobals.cpp') diff --git a/smglobals.cpp b/smglobals.cpp index 8e49726..62e7537 100644 --- a/smglobals.cpp +++ b/smglobals.cpp @@ -188,7 +188,8 @@ const QPair SmGlobals::FrameCache::prepFrame(const QString &so if(when.isEmpty()){ when = mWhen; } - const QPair source(sourceFile, when); + const QString fileName = QFileInfo(sourceFile).fileName(); + const QPair source(fileName, when); if(!mFrameCache.contains(source)){ grabFrame(sourceFile, when); } @@ -211,7 +212,7 @@ void SmGlobals::FrameCache::grabFrame(const QString &sourceFile, QString when){ return; } ffmpeg.waitForFinished(); - QPair pair(sourceFile, when); + QPair pair(sourceInfo.fileName(), when); mFrameCache.insert(pair, tempFile.fileName()); } } @@ -231,4 +232,27 @@ void SmGlobals::FrameCache::readCache(){ QPair pair(source, pos); mFrameCache.insert(pair, cacheFile); } + cleanup(); +} + +/* cleanup function for fucked up framecache: + Key was full path until recently, not just the filename, so + duplicates showed up when hovering over the same in different + paths, eg, archive or filesystem. Should be removed in the future +*/ +void SmGlobals::FrameCache::cleanup(){ + QHash, QString> newFrameCache; + QHash, QString>::const_iterator it = mFrameCache.constBegin(); + while(it != mFrameCache.constEnd()){ + QPair key = it.key(); + QFileInfo fi(key.first); + QPair newEntry(fi.fileName(), key.second); + if(!newFrameCache.contains(newEntry)){ + newFrameCache.insert(newEntry, it.value()); + }else{ + QFile::remove(it.value()); + } + ++it; + } + mFrameCache = newFrameCache; } -- cgit v1.2.3-70-g09d2