diff options
Diffstat (limited to 'framecache.cpp')
-rw-r--r-- | framecache.cpp | 56 |
1 files changed, 22 insertions, 34 deletions
diff --git a/framecache.cpp b/framecache.cpp index ef5329a..e6fceaa 100644 --- a/framecache.cpp +++ b/framecache.cpp @@ -26,9 +26,7 @@ FrameCache::FrameCache(QObject *parent) : QObject(parent){ mGenerator = new FrameCacheGenerator(this); mGenerator->init(mSemFree, mSemUsed, mCacheMx, mDataQueue, mFrameCache); mGenerator->readConfig(); - mGenerator->readCache(); - mCacheFile = mGenerator->cacheFile(); - mMagic = mGenerator->magic(); + rebuild(); mGenerator->start(); QSettings s; mWhen = s.value("ui/grabframe", "00:00:00").toString(); @@ -36,14 +34,6 @@ FrameCache::FrameCache(QObject *parent) : QObject(parent){ FrameCache::~FrameCache(){ mGenerator->exit(); - QFile outfile(mCacheFile); - outfile.open(QIODevice::WriteOnly | QIODevice::Truncate); - QDataStream ds(&outfile); - ds << (qint32)mMagic; - for(QHash<QPair<QString, QString>, QString>::const_iterator it = mFrameCache->constBegin(); it != mFrameCache->constEnd(); ++it){ - ds << it.key().first << it.key().second << it.value(); - } - outfile.close(); } const QPixmap FrameCache::entry(const QString &sourcePath, const QString &when){ @@ -80,7 +70,27 @@ const QString FrameCache::entryPath(const QString &sourcePath, const QString &wh return mFrameCache->value(data); } -FrameCacheGenerator::FrameCacheGenerator(QObject *parent) : QThread(parent), mMagic(0xDEADBEEF), mCacheSubDir(".frameCache"), mCacheFileName("cache") {} +void FrameCache::rebuild(){ + QMutexLocker l(mCacheMx); + QDir cdir(mGenerator->cacheDir()); + QFileInfoList files = cdir.entryInfoList(QDir::Files); + mFrameCache->clear(); + foreach(QFileInfo fi, files){ + QString base = fi.fileName(); + base.chop(fi.suffix().size() + 1); // basename doesn't work, b/c we have filenames w spaces + base.chop(7); //remove temp. extension + QString when = base.right(8); + base.chop(9); //remove when + _, leaving the orig. filename + QPair<QString, QString> key = qMakePair<QString, QString>(base, when); + if(mFrameCache->contains(key)){ + QFile::remove(fi.absoluteFilePath()); + }else{ + mFrameCache->insert(key, fi.absoluteFilePath()); + } + } +} + +FrameCacheGenerator::FrameCacheGenerator(QObject *parent) : QThread(parent), mCacheSubDir(".frameCache"), mCacheFileName("cache") {} void FrameCacheGenerator::init(QSemaphore *set, QSemaphore *get, QMutex *cachemx, QQueue<QPair<QString, QString> > *data, QHash<QPair<QString, QString>, QString> *cache){ mSemFree = set; @@ -106,28 +116,6 @@ void FrameCacheGenerator::readConfig(){ mFfMpegPath = s.value("paths/ffmpeg").toString(); } -void FrameCacheGenerator::readCache(){ - QFile cache(mCacheFile); - cache.open(QIODevice::ReadOnly); - QDataStream ds(&cache); - qint32 magic; - ds >> magic; - if(magic != mMagic){ - return; - } - while(!ds.atEnd()){ - QString source, pos, cacheFile; - ds >> source >> pos >> cacheFile; - QFileInfo fi(cacheFile); - if(fi.size() == 0){ - QFile::remove(fi.absoluteFilePath()); - continue; - } - QPair<QString, QString> pair(source, pos); - mFrameCache->insert(pair, cacheFile); - } -} - void FrameCacheGenerator::run(){ forever{ mSemUsed->acquire(); |