renaming utility: Get rid of useless mutex
This commit is contained in:
parent
537d31289d
commit
0531460df9
|
@ -5,14 +5,11 @@
|
||||||
|
|
||||||
#include <c++utilities/misc/memory.h>
|
#include <c++utilities/misc/memory.h>
|
||||||
|
|
||||||
#include <qtutilities/misc/trylocker.h>
|
|
||||||
|
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QStringBuilder>
|
#include <QStringBuilder>
|
||||||
#include <QtConcurrent>
|
#include <QtConcurrent>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace ThreadingUtils;
|
|
||||||
|
|
||||||
namespace RenamingUtility {
|
namespace RenamingUtility {
|
||||||
|
|
||||||
|
@ -26,6 +23,7 @@ RenamingEngine::RenamingEngine(QObject *parent) :
|
||||||
m_errorsOccured(0),
|
m_errorsOccured(0),
|
||||||
m_aborted(false),
|
m_aborted(false),
|
||||||
m_includeSubdirs(false),
|
m_includeSubdirs(false),
|
||||||
|
m_isBusy(false),
|
||||||
m_model(nullptr),
|
m_model(nullptr),
|
||||||
m_currentModel(nullptr),
|
m_currentModel(nullptr),
|
||||||
m_previewModel(nullptr)
|
m_previewModel(nullptr)
|
||||||
|
@ -70,25 +68,20 @@ bool RenamingEngine::setProgram(const QString &program)
|
||||||
bool RenamingEngine::generatePreview(const QDir &rootDirectory, bool includeSubdirs)
|
bool RenamingEngine::generatePreview(const QDir &rootDirectory, bool includeSubdirs)
|
||||||
{
|
{
|
||||||
#ifndef TAGEDITOR_NO_JSENGINE
|
#ifndef TAGEDITOR_NO_JSENGINE
|
||||||
TryLocker<> locker(m_mutex);
|
if(m_isBusy) {
|
||||||
if(locker) {
|
|
||||||
setRootItem();
|
|
||||||
m_includeSubdirs = includeSubdirs;
|
|
||||||
m_dir = rootDirectory;
|
|
||||||
QtConcurrent::run([this] () {
|
|
||||||
{
|
|
||||||
QMutexLocker locker(&m_mutex);
|
|
||||||
m_aborted.store(false);
|
|
||||||
m_itemsProcessed = 0;
|
|
||||||
m_errorsOccured = 0;
|
|
||||||
m_newlyGeneratedRootItem = generatePreview(m_dir);
|
|
||||||
}
|
|
||||||
emit previewGenerated();
|
|
||||||
});
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
setRootItem();
|
||||||
|
m_includeSubdirs = includeSubdirs;
|
||||||
|
m_dir = rootDirectory;
|
||||||
|
QtConcurrent::run([this] () {
|
||||||
|
m_aborted.store(false);
|
||||||
|
m_itemsProcessed = 0;
|
||||||
|
m_errorsOccured = 0;
|
||||||
|
m_newlyGeneratedRootItem = generatePreview(m_dir);
|
||||||
|
emit previewGenerated();
|
||||||
|
});
|
||||||
|
return m_isBusy = true;
|
||||||
#else
|
#else
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
|
@ -96,57 +89,28 @@ bool RenamingEngine::generatePreview(const QDir &rootDirectory, bool includeSubd
|
||||||
|
|
||||||
bool RenamingEngine::applyChangings()
|
bool RenamingEngine::applyChangings()
|
||||||
{
|
{
|
||||||
if(!m_rootItem) {
|
if(!m_rootItem || m_isBusy) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
TryLocker<> locker(m_mutex);
|
QtConcurrent::run([this] () {
|
||||||
if(locker) {
|
m_aborted.store(false);
|
||||||
QtConcurrent::run([this] () {
|
m_itemsProcessed = 0;
|
||||||
{
|
m_errorsOccured = 0;
|
||||||
QMutexLocker locker(&m_mutex);
|
applyChangings(m_rootItem.get());
|
||||||
m_aborted.store(false);
|
emit changingsApplied();
|
||||||
m_itemsProcessed = 0;
|
});
|
||||||
m_errorsOccured = 0;
|
return m_isBusy = true;
|
||||||
applyChangings(m_rootItem.get());
|
|
||||||
}
|
|
||||||
emit changingsApplied();
|
|
||||||
});
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool RenamingEngine::isBusy()
|
|
||||||
{
|
|
||||||
if(m_mutex.tryLock()) {
|
|
||||||
m_mutex.unlock();
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void RenamingEngine::abort()
|
|
||||||
{
|
|
||||||
m_aborted.store(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool RenamingEngine::isAborted()
|
|
||||||
{
|
|
||||||
return m_aborted.load();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RenamingEngine::clearPreview()
|
bool RenamingEngine::clearPreview()
|
||||||
{
|
{
|
||||||
TryLocker<> locker(m_mutex);
|
if(m_isBusy) {
|
||||||
if(locker) {
|
|
||||||
updateModel(nullptr);
|
|
||||||
m_rootItem.reset();
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateModel(nullptr);
|
||||||
|
m_rootItem.reset();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
FileSystemItemModel *RenamingEngine::model()
|
FileSystemItemModel *RenamingEngine::model()
|
||||||
|
@ -177,11 +141,13 @@ FilteredFileSystemItemModel *RenamingEngine::previewModel()
|
||||||
|
|
||||||
void RenamingEngine::processPreviewGenerated()
|
void RenamingEngine::processPreviewGenerated()
|
||||||
{
|
{
|
||||||
|
m_isBusy = false;
|
||||||
setRootItem(move(m_newlyGeneratedRootItem));
|
setRootItem(move(m_newlyGeneratedRootItem));
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenamingEngine::processChangingsApplied()
|
void RenamingEngine::processChangingsApplied()
|
||||||
{
|
{
|
||||||
|
m_isBusy = false;
|
||||||
updateModel(nullptr);
|
updateModel(nullptr);
|
||||||
updateModel(m_rootItem.get());
|
updateModel(m_rootItem.get());
|
||||||
}
|
}
|
||||||
|
@ -240,9 +206,9 @@ void RenamingEngine::applyChangings(FileSystemItem *parentItem)
|
||||||
if(!item->applied() && !item->errorOccured()) {
|
if(!item->applied() && !item->errorOccured()) {
|
||||||
switch(item->status()) {
|
switch(item->status()) {
|
||||||
case ItemStatus::New: {
|
case ItemStatus::New: {
|
||||||
FileSystemItem *counterpartItem = item->counterpart(); // holds current name
|
const FileSystemItem *counterpartItem = item->counterpart(); // holds current name
|
||||||
QString currentPath = counterpartItem ? counterpartItem->relativePath() : QString();
|
const QString currentPath = counterpartItem ? counterpartItem->relativePath() : QString();
|
||||||
QString newPath = item->relativePath();
|
const QString newPath = item->relativePath();
|
||||||
if(item->name().isEmpty()) {
|
if(item->name().isEmpty()) {
|
||||||
// new item name mustn't be empty
|
// new item name mustn't be empty
|
||||||
item->setNote(tr("generated name is empty"));
|
item->setNote(tr("generated name is empty"));
|
||||||
|
@ -292,8 +258,6 @@ void RenamingEngine::applyChangings(FileSystemItem *parentItem)
|
||||||
break;
|
break;
|
||||||
} case ItemStatus::Current:
|
} case ItemStatus::Current:
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(item->errorOccured()) {
|
if(item->errorOccured()) {
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QList>
|
#include <QList>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QMutex>
|
|
||||||
#include <QAtomicInteger>
|
#include <QAtomicInteger>
|
||||||
#if defined(TAGEDITOR_USE_JSENGINE)
|
#if defined(TAGEDITOR_USE_JSENGINE)
|
||||||
# include <QJSEngine>
|
# include <QJSEngine>
|
||||||
|
@ -92,7 +91,7 @@ private:
|
||||||
#endif
|
#endif
|
||||||
QDir m_dir;
|
QDir m_dir;
|
||||||
bool m_includeSubdirs;
|
bool m_includeSubdirs;
|
||||||
QMutex m_mutex;
|
bool m_isBusy;
|
||||||
FileSystemItemModel *m_model;
|
FileSystemItemModel *m_model;
|
||||||
FilteredFileSystemItemModel *m_currentModel;
|
FilteredFileSystemItemModel *m_currentModel;
|
||||||
FilteredFileSystemItemModel *m_previewModel;
|
FilteredFileSystemItemModel *m_previewModel;
|
||||||
|
@ -132,6 +131,21 @@ inline int RenamingEngine::errorLineNumber() const
|
||||||
return m_errorLineNumber;
|
return m_errorLineNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool RenamingEngine::isBusy()
|
||||||
|
{
|
||||||
|
return m_isBusy;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void RenamingEngine::abort()
|
||||||
|
{
|
||||||
|
m_aborted.store(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool RenamingEngine::isAborted()
|
||||||
|
{
|
||||||
|
return m_aborted.load();
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace RenamingUtility
|
} // namespace RenamingUtility
|
||||||
|
|
||||||
#endif // RENAMINGUTILITY_RENAMINGENGINE_H
|
#endif // RENAMINGUTILITY_RENAMINGENGINE_H
|
||||||
|
|
Loading…
Reference in New Issue