summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--framecache.cpp56
-rw-r--r--framecache.h8
-rw-r--r--shemov.cpp42
-rw-r--r--shemov.h8
-rw-r--r--smglobals.cpp4
5 files changed, 46 insertions, 72 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();
diff --git a/framecache.h b/framecache.h
index 509fea6..867eda7 100644
--- a/framecache.h
+++ b/framecache.h
@@ -27,6 +27,9 @@ class FrameCache : public QObject {
const QPixmap entry(const QString &sourcePath, const QString &when = QString());
const QString entryPath(const QString &sourcePath, const QString &when);
+ public slots:
+ void rebuild();
+
private:
QHash<QPair<QString, QString>, QString> *mFrameCache;
QQueue<QPair<QString, QString> > *mDataQueue;
@@ -45,9 +48,8 @@ class FrameCacheGenerator : public QThread {
explicit FrameCacheGenerator(QObject *parent = 0);
void init(QSemaphore *set, QSemaphore *get, QMutex *cachemx, QQueue<QPair<QString, QString> > *data, QHash<QPair<QString, QString>, QString> *cache);
const QString cacheFile() const { return mCacheFile; }
- qint32 magic() const { return mMagic; };
+ const QString cacheDir() const { return mCacheDir; }
void readConfig();
- void readCache();
public slots:
void run();
@@ -61,9 +63,7 @@ class FrameCacheGenerator : public QThread {
QHash<QPair<QString, QString>, QString> *mFrameCache;
QString mCacheDir;
QString mCacheFile;
- //QString mWhen;
QString mFfMpegPath;
- const qint32 mMagic;
const QString mCacheSubDir;
const QString mCacheFileName;
diff --git a/shemov.cpp b/shemov.cpp
index a2fd195..a99025f 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -6,42 +6,24 @@
*/
#include <QtWidgets/QApplication>
-#include <QtWidgets/QTabWidget>
#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QAction>
#include <QtWidgets/QMenuBar>
-#include <QtWidgets/QMenu>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QLabel>
-#include <QItemSelection>
#include <QSignalMapper>
#include <QSettings>
#include <QtWidgets/QMessageBox>
-#include <QSqlDatabase>
-#include <QImage>
-#include <QPainter>
-#include <QFont>
-#include <QFontMetrics>
-#include <QLocale>
#include <QCloseEvent>
-#include <QtWidgets/QActionGroup>
-#include <QtWidgets/QFileSystemModel>
#include <QtWidgets/QToolBar>
-#include <QIcon>
-#include <QtWidgets/QHeaderView>
-#include <QDir>
-#include <QFileInfo>
#include <QtWidgets/QSplashScreen>
#include <sys/vfs.h>
#include "shemov.h"
#include "filesystemwidget.h"
-#include "filestreewidget.h"
#include "fileview.h"
#include "configurationdialog.h"
#include "statisticsdialog.h"
-#include "filesystemfileproxy.h"
#include "archivetreeview.h"
#include "smglobals.h"
#include "seriestreewidget.h"
@@ -53,13 +35,10 @@
#include "mappingtableeditor.h"
#include "mappingtablemodel.h"
#include "dbanalyzer.h"
-#include "mappingtreewidget.h"
#include "newpicsdialog.h"
#include "pictureswidget.h"
-#include "pictureviewer2.h"
-#include "helper.h"
#include "smdirmodel.h"
-#include "smtreeview.h"
+#include "framecache.h"
SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, flags), mOpenWithGroupFS(0), mOpenWithGroupAV(0) {
//application icon
@@ -164,9 +143,9 @@ void SheMov::closeEvent(QCloseEvent *event){
mATree->filesWidget()->filesTree()->writeSettings();
mPicWidget->picViewer2()->writeSettings();
mPicWidget->writeSettings();
- FilesTreeModel *filesModel = static_cast<FilesTreeModel*>(SmGlobals::instance()->model("FilesModel"));
- filesModel->writeCache();
writeSettings();
+ SmGlobals *globals = SmGlobals::instance();
+ delete globals;
event->accept();
}
@@ -407,13 +386,17 @@ void SheMov::createActions(){
//connnect
mQuitA = new QAction(tr("Quit"), this);
mQuitA->setShortcut(tr("CTRL+q"));
+ mRebuildFrameCacheA = new QAction(tr("Rebuild frame cache") ,this);
+
+ // general actions
+ connect(mQuitA, SIGNAL(triggered()), qApp, SLOT(closeAllWindows()));
+ connect(mRebuildFrameCacheA, SIGNAL(triggered()), this, SLOT(rebuildFrameCache()));
//Edit menu (FS)
mCdupA = new QAction(QIcon(":/up_dick.png"), tr("Go up"), this);
connect(mCdupA, SIGNAL(triggered()), mFSWidget, SLOT(parentDir()));
mBackDirA = new QAction(QIcon(":/back_dick.png"), tr("Go back"), this);
connect(mBackDirA, SIGNAL(triggered()), mFSWidget, SLOT(goBack()));
- connect(mQuitA, SIGNAL(triggered()), qApp, SLOT(closeAllWindows()));
mMarkFilesA = new QAction(tr("Select files..."), this);
mMarkFilesA->setShortcut(tr("CTRL++"));
connect(mMarkFilesA, SIGNAL(triggered()), mFSWidget->fileView(), SLOT(markFiles()));
@@ -766,7 +749,7 @@ void SheMov::createMenus(){
fileMenu->addSeparator();
fileMenu->addAction(mConsistencyA);
fileMenu->addAction(mAnalyzerA);
- //fileMenu->addAction(mMappingEditorA);
+ fileMenu->addAction(mRebuildFrameCacheA);
fileMenu->addSeparator();
fileMenu->addAction(mQuitA);
menuBar()->addMenu(fileMenu);
@@ -1119,6 +1102,13 @@ void SheMov::createPalette(){
}
}
+void SheMov::rebuildFrameCache(){
+ int retval = QMessageBox::question(this, tr("Question"), tr("Rebuild frame cache from directory?"), QMessageBox::Yes | QMessageBox::No);
+ if(retval == QMessageBox::Yes){
+ SmGlobals::instance()->frameCache()->rebuild();
+ }
+}
+
void SheMov::checkConsistency(){
ConsistencyCheck c;
c.exec();
diff --git a/shemov.h b/shemov.h
index cb3d3d3..5d5bdd1 100644
--- a/shemov.h
+++ b/shemov.h
@@ -9,22 +9,16 @@
#define SHEMOV_H
#include <QtWidgets/QMainWindow>
-#include <QList>
-#include <QThread>
#include <QVariant>
class QTabWidget;
class FilesystemWidget;
-class QAction;
class QLabel;
-class QItemSelection;
class QSignalMapper;
-class QMenu;
class QActionGroup;
class ArchiveTreeView;
class NewMovieWizard;
class DbAnalyzerDialog;
-class MappingTreeWidget;
class PicturesWidget;
class SmTreeModel;
class NewPicsDialog;
@@ -60,6 +54,7 @@ class SheMov : public QMainWindow {
void editMappings(QString table);
void newPicsDialog();
void newPicsDialogWithFiles();
+ void rebuildFrameCache();
signals:
void configChanged();
@@ -113,6 +108,7 @@ class SheMov : public QMainWindow {
QAction *mAnalyzerA;
QAction *mNewPicsA;
QAction *mHoverDirectoriesA;
+ QAction *mRebuildFrameCacheA;
//TreeView Actions
//Series Actions
diff --git a/smglobals.cpp b/smglobals.cpp
index 9f52854..6652d0e 100644
--- a/smglobals.cpp
+++ b/smglobals.cpp
@@ -35,9 +35,9 @@ SmGlobals *SmGlobals::mInstance = 0;
SmGlobals::~SmGlobals(){
foreach(QAbstractItemModel *model, mModels.values()){
- delete model;
+ model->deleteLater();
}
- delete mFrameCache;
+ mFrameCache->deleteLater();
}
SmGlobals *SmGlobals::instance(){