|
|
|
@ -123,36 +123,65 @@ UBPersistenceManager::~UBPersistenceManager() |
|
|
|
|
{ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void UBPersistenceManager::createDocumentProxiesStructure(bool interactive) |
|
|
|
|
void UBPersistenceManager::createDocumentProxiesStructure(const QFileInfoList &contentInfoList, bool interactive) |
|
|
|
|
{ |
|
|
|
|
mDocumentRepositoryPath = UBSettings::userDocumentDirectory(); |
|
|
|
|
|
|
|
|
|
QDir rootDir(mDocumentRepositoryPath); |
|
|
|
|
rootDir.mkpath(rootDir.path()); |
|
|
|
|
|
|
|
|
|
QFileInfoList contentList = rootDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Time | QDir::Reversed); |
|
|
|
|
|
|
|
|
|
mProgress.setWindowFlags(Qt::Window | Qt::WindowTitleHint | Qt::CustomizeWindowHint); |
|
|
|
|
mProgress.setLabelText(QString("retrieving all your documents (found %1)").arg(contentList.size())); |
|
|
|
|
mProgress.setCancelButton(nullptr); |
|
|
|
|
|
|
|
|
|
// Create a QFutureWatcher and connect signals and slots.
|
|
|
|
|
QFutureWatcher<void> futureWatcher; |
|
|
|
|
QFutureWatcher<UBDocumentProxy*> futureWatcher; |
|
|
|
|
QObject::connect(&futureWatcher, &QFutureWatcher<void>::finished, &mProgress, &QProgressDialog::reset); |
|
|
|
|
QObject::connect(&futureWatcher, &QFutureWatcher<void>::progressRangeChanged, &mProgress, &QProgressDialog::setRange); |
|
|
|
|
QObject::connect(&futureWatcher, &QFutureWatcher<void>::progressValueChanged, &mProgress, &QProgressDialog::setValue); |
|
|
|
|
|
|
|
|
|
// Start the computation.
|
|
|
|
|
futureWatcher.setFuture(QtConcurrent::map(contentList, [=] (QFileInfo& contentInfo) |
|
|
|
|
{ |
|
|
|
|
createDocumentProxyStructure(contentInfo); |
|
|
|
|
})); |
|
|
|
|
std::function<UBDocumentProxy* (QFileInfo contentInfo)> createDocumentProxyLambda = [=](QFileInfo contentInfo) { |
|
|
|
|
return createDocumentProxyStructure(contentInfo); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
QFuture<UBDocumentProxy*> proxiesFuture = QtConcurrent::mapped(contentInfoList, createDocumentProxyLambda); |
|
|
|
|
futureWatcher.setFuture(proxiesFuture); |
|
|
|
|
|
|
|
|
|
// Display the dialog and start the event loop.
|
|
|
|
|
mProgress.exec(); |
|
|
|
|
|
|
|
|
|
futureWatcher.waitForFinished(); |
|
|
|
|
|
|
|
|
|
QList<UBDocumentProxy*> proxies = futureWatcher.future().results(); |
|
|
|
|
|
|
|
|
|
for (auto&& proxy : qAsConst(proxies)) |
|
|
|
|
{ |
|
|
|
|
if (proxy) |
|
|
|
|
{ |
|
|
|
|
QString docGroupName = proxy->metaData(UBSettings::documentGroupName).toString(); |
|
|
|
|
QModelIndex parentIndex = mDocumentTreeStructureModel->goTo(docGroupName); |
|
|
|
|
if (parentIndex.isValid()) |
|
|
|
|
{ |
|
|
|
|
if (!interactive) |
|
|
|
|
mDocumentTreeStructureModel->addDocument(proxy, parentIndex); |
|
|
|
|
else |
|
|
|
|
processInteractiveReplacementDialog(proxy); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
qDebug() << "something went wrong"; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void UBPersistenceManager::createDocumentProxiesStructure(bool interactive) |
|
|
|
|
{ |
|
|
|
|
mDocumentRepositoryPath = UBSettings::userDocumentDirectory(); |
|
|
|
|
|
|
|
|
|
QDir rootDir(mDocumentRepositoryPath); |
|
|
|
|
rootDir.mkpath(rootDir.path()); |
|
|
|
|
|
|
|
|
|
QFileInfoList contentInfoList = rootDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Time | QDir::Reversed); |
|
|
|
|
|
|
|
|
|
mProgress.setWindowFlags(Qt::Window | Qt::WindowTitleHint | Qt::CustomizeWindowHint); |
|
|
|
|
mProgress.setLabelText(QString("retrieving all your documents (found %1)").arg(contentInfoList.size())); |
|
|
|
|
mProgress.setCancelButton(nullptr); |
|
|
|
|
|
|
|
|
|
createDocumentProxiesStructure(contentInfoList, interactive); |
|
|
|
|
|
|
|
|
|
if (QFileInfo(mFoldersXmlStorageName).exists()) { |
|
|
|
|
QDomDocument xmlDom; |
|
|
|
|
QFile inFile(mFoldersXmlStorageName); |
|
|
|
@ -178,15 +207,7 @@ void UBPersistenceManager::createDocumentProxiesStructure(bool interactive) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void UBPersistenceManager::createDocumentProxiesStructure(const QFileInfoList &contentInfoList, bool interactive) |
|
|
|
|
{ |
|
|
|
|
foreach(QFileInfo contentInfo, contentInfoList) |
|
|
|
|
{ |
|
|
|
|
createDocumentProxyStructure(contentInfo, interactive); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void UBPersistenceManager::createDocumentProxyStructure(const QFileInfo &contentInfo, bool interactive) |
|
|
|
|
UBDocumentProxy* UBPersistenceManager::createDocumentProxyStructure(QFileInfo& contentInfo) |
|
|
|
|
{ |
|
|
|
|
QString fullPath = contentInfo.absoluteFilePath(); |
|
|
|
|
QDir dir(fullPath); |
|
|
|
@ -199,12 +220,7 @@ void UBPersistenceManager::createDocumentProxyStructure(const QFileInfo &content |
|
|
|
|
|
|
|
|
|
if (docName.isEmpty()) { |
|
|
|
|
qDebug() << "Group name and document name are empty in UBPersistenceManager::createDocumentProxiesStructure()"; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
QModelIndex parentIndex = mDocumentTreeStructureModel->goTo(docGroupName); |
|
|
|
|
if (!parentIndex.isValid()) { |
|
|
|
|
return; |
|
|
|
|
return nullptr; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
UBDocumentProxy* docProxy = new UBDocumentProxy(fullPath); // managed in UBDocumentTreeNode
|
|
|
|
@ -214,11 +230,12 @@ void UBPersistenceManager::createDocumentProxyStructure(const QFileInfo &content |
|
|
|
|
|
|
|
|
|
docProxy->setPageCount(sceneCount(docProxy)); |
|
|
|
|
|
|
|
|
|
if (!interactive) |
|
|
|
|
mDocumentTreeStructureModel->addDocument(docProxy, parentIndex); |
|
|
|
|
else |
|
|
|
|
processInteractiveReplacementDialog(docProxy); |
|
|
|
|
docProxy->moveToThread(UBApplication::instance()->thread()); |
|
|
|
|
|
|
|
|
|
return docProxy; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return nullptr; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
QDialog::DialogCode UBPersistenceManager::processInteractiveReplacementDialog(UBDocumentProxy *pProxy) |
|
|
|
|