summaryrefslogtreecommitdiffstats
path: root/smglobals.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'smglobals.cpp')
-rw-r--r--smglobals.cpp28
1 files changed, 26 insertions, 2 deletions
diff --git a/smglobals.cpp b/smglobals.cpp
index 8e49726..62e7537 100644
--- a/smglobals.cpp
+++ b/smglobals.cpp
@@ -188,7 +188,8 @@ const QPair<QString, QString> SmGlobals::FrameCache::prepFrame(const QString &so
if(when.isEmpty()){
when = mWhen;
}
- const QPair<QString, QString> source(sourceFile, when);
+ const QString fileName = QFileInfo(sourceFile).fileName();
+ const QPair<QString, QString> 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<QString, QString> pair(sourceFile, when);
+ QPair<QString, QString> pair(sourceInfo.fileName(), when);
mFrameCache.insert(pair, tempFile.fileName());
}
}
@@ -231,4 +232,27 @@ void SmGlobals::FrameCache::readCache(){
QPair<QString, QString> 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<QPair<QString, QString>, QString> newFrameCache;
+ QHash<QPair<QString, QString>, QString>::const_iterator it = mFrameCache.constBegin();
+ while(it != mFrameCache.constEnd()){
+ QPair<QString, QString> key = it.key();
+ QFileInfo fi(key.first);
+ QPair<QString, QString> newEntry(fi.fileName(), key.second);
+ if(!newFrameCache.contains(newEntry)){
+ newFrameCache.insert(newEntry, it.value());
+ }else{
+ QFile::remove(it.value());
+ }
+ ++it;
+ }
+ mFrameCache = newFrameCache;
}