tageditor/renamingutility/renamingengine.h

127 lines
3.1 KiB
C
Raw Normal View History

2015-04-22 19:33:53 +02:00
#ifndef RENAMINGUTILITY_RENAMINGENGINE_H
#define RENAMINGUTILITY_RENAMINGENGINE_H
2015-10-16 22:07:04 +02:00
#include "./filesystemitem.h"
#include "./scriptdefs.h"
2015-10-16 22:07:04 +02:00
2015-04-22 19:33:53 +02:00
#include <QObject>
#include <QList>
#include <QDir>
#if TAGEDITOR_USE_JSENGINE
# include <QJSEngine>
# include <QJSValue>
#else
# include <QScriptEngine>
# include <QScriptValue>
#endif
2015-04-22 19:33:53 +02:00
#include <memory>
#include <mutex>
2015-10-13 20:12:00 +02:00
#include <atomic>
2015-04-22 19:33:53 +02:00
2015-10-16 22:07:04 +02:00
QT_FORWARD_DECLARE_CLASS(QFileInfo)
2015-04-22 19:33:53 +02:00
namespace RenamingUtility {
class FileSystemItemModel;
class FilteredFileSystemItemModel;
class TagEditorObject;
2015-04-22 19:33:53 +02:00
class RemamingEngine : public QObject
{
Q_OBJECT
public:
RemamingEngine(QObject *parent = nullptr);
FileSystemItem *rootItem() const;
const TAGEDITOR_JS_VALUE &scriptProgram() const;
bool setProgram(const TAGEDITOR_JS_VALUE &program);
bool setProgram(const QString &program);
2015-04-22 19:33:53 +02:00
const QDir &rootDirectory() const;
bool subdirsIncluded() const;
bool isBusy();
bool isAborted();
bool clearPreview();
FileSystemItemModel *model();
FilteredFileSystemItemModel *currentModel();
FilteredFileSystemItemModel *previewModel();
const QString &errorMessage() const;
int errorLineNumber() const;
2015-04-22 19:33:53 +02:00
public slots:
bool generatePreview(const QDir &rootDirectory, bool includeSubdirs);
2015-04-22 19:33:53 +02:00
bool applyChangings();
void abort();
signals:
void previewGenerated();
void changingsApplied();
void progress(int itemsProcessed, int errorsOccured);
private slots:
void processPreviewGenerated();
void processChangingsApplied();
private:
2015-10-13 20:12:00 +02:00
void setRootItem(std::unique_ptr<FileSystemItem> &&rootItem = std::unique_ptr<FileSystemItem>());
2015-04-22 19:33:53 +02:00
void updateModel(FileSystemItem *rootItem);
2015-10-13 20:12:00 +02:00
std::unique_ptr<FileSystemItem> generatePreview(const QDir &dir, FileSystemItem *parent = nullptr);
2015-04-22 19:33:53 +02:00
void applyChangings(FileSystemItem *parentItem);
static void setError(const QList<FileSystemItem *> items);
void executeScriptForItem(const QFileInfo &fileInfo, FileSystemItem *item);
TagEditorObject *m_tagEditorQObj;
TAGEDITOR_JS_ENGINE m_engine;
TAGEDITOR_JS_VALUE m_tagEditorJsObj;
2015-04-22 19:33:53 +02:00
std::unique_ptr<FileSystemItem> m_rootItem;
std::unique_ptr<FileSystemItem> m_newlyGeneratedRootItem;
int m_itemsProcessed;
int m_errorsOccured;
2015-10-13 20:12:00 +02:00
std::atomic<bool> m_aborted;
TAGEDITOR_JS_VALUE m_program;
2015-04-22 19:33:53 +02:00
QDir m_dir;
bool m_includeSubdirs;
std::mutex m_mutex;
FileSystemItemModel *m_model;
FilteredFileSystemItemModel *m_currentModel;
FilteredFileSystemItemModel *m_previewModel;
QString m_errorMessage;
int m_errorLineNumber;
2015-04-22 19:33:53 +02:00
};
inline FileSystemItem *RemamingEngine::rootItem() const
{
return m_rootItem.get();
}
inline const TAGEDITOR_JS_VALUE &RemamingEngine::scriptProgram() const
2015-04-22 19:33:53 +02:00
{
return m_program;
}
inline const QDir &RemamingEngine::rootDirectory() const
{
return m_dir;
}
inline bool RemamingEngine::subdirsIncluded() const
{
return m_includeSubdirs;
}
inline const QString &RemamingEngine::errorMessage() const
{
return m_errorMessage;
}
inline int RemamingEngine::errorLineNumber() const
{
return m_errorLineNumber;
}
2015-04-22 19:33:53 +02:00
} // namespace RenamingUtility
#endif // RENAMINGUTILITY_RENAMINGENGINE_H