Skip to content

Commit 4ec6131

Browse files
committed
Improve draft documents permissions handling
1 parent e717e72 commit 4ec6131

File tree

5 files changed

+63
-5
lines changed

5 files changed

+63
-5
lines changed

src/cloud

Submodule cloud updated from 2982ef6 to a537384

src/core/management_layer/application_manager.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2009,7 +2009,8 @@ void ApplicationManager::Implementation::goToEditCurrentProject(bool _afterProje
20092009
projectsManager->setCurrentProjectCanBeSynced(true);
20102010
const auto unsyncedDocuments = projectManager->unsyncedDocuments();
20112011
for (const auto document : unsyncedDocuments) {
2012-
cloudServiceManager->openDocument(projectsManager->currentProject()->id(), document);
2012+
cloudServiceManager->openDocument(projectsManager->currentProject()->id(), document,
2013+
projectManager->draftSource(document->uuid()));
20132014
}
20142015
}
20152016
#endif
@@ -3433,7 +3434,7 @@ void ApplicationManager::initConnections()
34333434

34343435
//
34353436
// Для сложных типов документов, нужна подгрузка документов, которые с ним связаны,
3436-
// а смаа загрузка документов должна происходить в строго определённом порядке
3437+
// а сама загрузка документов должна происходить в строго определённом порядке
34373438
//
34383439
auto documentsToSync = d->projectManager->documentBundle(_documentUuid);
34393440
if (documentsToSync.isEmpty()) {
@@ -3518,7 +3519,8 @@ void ApplicationManager::initConnections()
35183519
//
35193520
if (_isNewDocument) {
35203521
d->cloudServiceManager->openDocument(
3521-
currentProject->id(), d->projectManager->documentToSync(_documentUuid));
3522+
currentProject->id(), d->projectManager->documentToSync(_documentUuid),
3523+
d->projectManager->draftSource(_documentUuid));
35223524
}
35233525
//
35243526
// В противном случае, запросим отправку изменений

src/core/management_layer/content/project/project_manager.cpp

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4720,6 +4720,57 @@ Domain::DocumentObject* ProjectManager::documentToSync(const QUuid& _documentUui
47204720
return DataStorageLayer::StorageFacade::documentStorage()->document(_documentUuid);
47214721
}
47224722

4723+
QUuid ProjectManager::draftSource(const QUuid& _documentUuid) const
4724+
{
4725+
const auto item = d->projectStructureModel->itemForUuid(_documentUuid);
4726+
const QSet<Domain::DocumentObjectType> textDocuments = {
4727+
Domain::DocumentObjectType::ScreenplayTitlePage,
4728+
Domain::DocumentObjectType::ScreenplaySynopsis,
4729+
Domain::DocumentObjectType::ScreenplayTreatment,
4730+
Domain::DocumentObjectType::ScreenplayText,
4731+
Domain::DocumentObjectType::ScreenplaySeriesTitlePage,
4732+
Domain::DocumentObjectType::ScreenplaySeriesSynopsis,
4733+
Domain::DocumentObjectType::ScreenplaySeriesTreatment,
4734+
Domain::DocumentObjectType::ScreenplaySeriesText,
4735+
Domain::DocumentObjectType::ComicBookTitlePage,
4736+
Domain::DocumentObjectType::ComicBookSynopsis,
4737+
Domain::DocumentObjectType::ComicBookText,
4738+
Domain::DocumentObjectType::AudioplayTitlePage,
4739+
Domain::DocumentObjectType::AudioplaySynopsis,
4740+
Domain::DocumentObjectType::AudioplayText,
4741+
Domain::DocumentObjectType::StageplayTitlePage,
4742+
Domain::DocumentObjectType::StageplaySynopsis,
4743+
Domain::DocumentObjectType::StageplayText,
4744+
Domain::DocumentObjectType::NovelTitlePage,
4745+
Domain::DocumentObjectType::NovelSynopsis,
4746+
Domain::DocumentObjectType::NovelOutline,
4747+
Domain::DocumentObjectType::NovelText,
4748+
Domain::DocumentObjectType::Folder,
4749+
Domain::DocumentObjectType::SimpleText,
4750+
};
4751+
if (item == nullptr || !textDocuments.contains(item->type()) || !item->hasParent()) {
4752+
return {};
4753+
}
4754+
4755+
const auto parent = item->parent();
4756+
for (int index = 0; index < parent->childCount(); ++index) {
4757+
const auto sibling = parent->childAt(index);
4758+
if (sibling->uuid() == _documentUuid) {
4759+
return {};
4760+
}
4761+
4762+
if (!sibling->drafts().isEmpty()) {
4763+
for (const auto& draft : sibling->drafts()) {
4764+
if (draft->uuid() == _documentUuid) {
4765+
return sibling->uuid();
4766+
}
4767+
}
4768+
}
4769+
}
4770+
4771+
return {};
4772+
}
4773+
47234774
QVector<QUuid> ProjectManager::documentBundle(const QUuid& _documentUuid) const
47244775
{
47254776
const auto item = d->projectStructureModel->itemForUuid(_documentUuid);

src/core/management_layer/content/project/project_manager.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,11 @@ class ProjectManager : public QObject
182182
*/
183183
Domain::DocumentObject* documentToSync(const QUuid& _documentUuid) const;
184184

185+
/**
186+
* @brief Получить документ, являющийся основным для заданного драфта
187+
*/
188+
QUuid draftSource(const QUuid& _documentUuid) const;
189+
185190
/**
186191
* @brief Получить полный комплект документов, связанных с заданным
187192
*/

0 commit comments

Comments
 (0)