Skip to content

Commit

Permalink
deleting simulations/genomes asynchronously
Browse files Browse the repository at this point in the history
  • Loading branch information
chrxh committed Oct 16, 2024
1 parent 6094411 commit bb82124
Show file tree
Hide file tree
Showing 20 changed files with 187 additions and 15 deletions.
16 changes: 3 additions & 13 deletions source/Gui/BrowserWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1259,7 +1259,6 @@ void _BrowserWindow::sortUserList()

void _BrowserWindow::onDownloadResource(BrowserLeaf const& leaf)
{
printOverlayMessage("Downloading ...");
++leaf.rawTO->numDownloads;

NetworkTransferController::get().onDownload(DownloadNetworkResourceRequestData{
Expand All @@ -1273,8 +1272,6 @@ void _BrowserWindow::onDownloadResource(BrowserLeaf const& leaf)
void _BrowserWindow::onReplaceResource(BrowserLeaf const& leaf)
{
auto func = [&] {
printOverlayMessage("Replacing ...");

auto data = [&]() -> std::variant<ReplaceNetworkResourceRequestData::SimulationData, ReplaceNetworkResourceRequestData::GenomeData> {
if (_currentWorkspace.resourceType == NetworkResourceType_Simulation) {
return ReplaceNetworkResourceRequestData::SimulationData{.zoom = Viewport::getZoomFactor(), .center = Viewport::getCenterInWorldPos()};
Expand Down Expand Up @@ -1363,16 +1360,9 @@ void _BrowserWindow::onDeleteResource(NetworkResourceTreeTO const& treeTO)
}

//apply changes to server
printOverlayMessage("Deleting ...");
delayedExecution([rawTOs = rawTOs, this] {
for (auto const& rawTO : rawTOs) {
if (!NetworkService::deleteResource(rawTO->id)) {
MessageDialog::get().information("Error", "Failed to delete item. Please try again later.");
refreshIntern(true);
return;
}
}
});
for (auto const& rawTO : rawTOs) {
NetworkTransferController::get().onDelete({.resourceId = rawTO->id});
}
});
}

Expand Down
25 changes: 25 additions & 0 deletions source/Gui/NetworkTransferController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include "EditorController.h"
#include "GenomeEditorWindow.h"
#include "BrowserWindow.h"
#include "OverlayMessageController.h"

void NetworkTransferController::init(
SimulationController const& simController,
Expand All @@ -26,10 +27,13 @@ void NetworkTransferController::init(
_downloadProcessor = _TaskProcessor::createTaskProcessor(_persisterController);
_uploadProcessor = _TaskProcessor::createTaskProcessor(_persisterController);
_replaceProcessor = _TaskProcessor::createTaskProcessor(_persisterController);
_deleteProcessor = _TaskProcessor::createTaskProcessor(_persisterController);
}

void NetworkTransferController::onDownload(DownloadNetworkResourceRequestData const& requestData)
{
printOverlayMessage("Downloading ...");

_downloadProcessor->executeTask(
[&](auto const& senderId) {
return _persisterController->scheduleDownloadNetworkResource(
Expand Down Expand Up @@ -92,6 +96,8 @@ void NetworkTransferController::onDownload(DownloadNetworkResourceRequestData co

void NetworkTransferController::onUpload(UploadNetworkResourceRequestData const& requestData)
{
printOverlayMessage("Uploading ...");

_uploadProcessor->executeTask(
[&](auto const& senderId) {
return _persisterController->scheduleUploadNetworkResource(
Expand All @@ -106,6 +112,8 @@ void NetworkTransferController::onUpload(UploadNetworkResourceRequestData const&

void NetworkTransferController::onReplace(ReplaceNetworkResourceRequestData const& requestData)
{
printOverlayMessage("Replacing ...");

_replaceProcessor->executeTask(
[&](auto const& senderId) {
return _persisterController->scheduleReplaceNetworkResource(
Expand All @@ -118,9 +126,26 @@ void NetworkTransferController::onReplace(ReplaceNetworkResourceRequestData cons
[](auto const& errors) { MessageDialog::get().information("Error", errors); });
}

void NetworkTransferController::onDelete(DeleteNetworkResourceRequestData const& requestData)
{
printOverlayMessage("Deleting ...");

_deleteProcessor->executeTask(
[&](auto const& senderId) {
return _persisterController->scheduleDeleteNetworkResource(
SenderInfo{.senderId = senderId, .wishResultData = true, .wishErrorInfo = true}, requestData);
},
[&](auto const& requestId) {
_persisterController->fetchDeleteNetworkResourcesData(requestId);
_browserWindow->onRefresh();
},
[](auto const& errors) { MessageDialog::get().information("Error", errors); });
}

void NetworkTransferController::process()
{
_downloadProcessor->process();
_uploadProcessor->process();
_replaceProcessor->process();
_deleteProcessor->process();
}
3 changes: 3 additions & 0 deletions source/Gui/NetworkTransferController.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include "PersisterInterface/DownloadNetworkResourceRequestData.h"
#include "PersisterInterface/UploadNetworkResourceRequestData.h"
#include "PersisterInterface/ReplaceNetworkResourceRequestData.h"
#include "PersisterInterface/DeleteNetworkResourceRequestData.h"

#include "Definitions.h"

Expand All @@ -26,6 +27,7 @@ class NetworkTransferController
void onDownload(DownloadNetworkResourceRequestData const& requestData);
void onUpload(UploadNetworkResourceRequestData const& requestData);
void onReplace(ReplaceNetworkResourceRequestData const& requestData);
void onDelete(DeleteNetworkResourceRequestData const& requestData);

void process();

Expand All @@ -39,4 +41,5 @@ class NetworkTransferController
TaskProcessor _downloadProcessor;
TaskProcessor _uploadProcessor;
TaskProcessor _replaceProcessor;
TaskProcessor _deleteProcessor;
};
2 changes: 0 additions & 2 deletions source/Gui/UploadSimulationDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -142,8 +142,6 @@ void _UploadSimulationDialog::processIntern()

void _UploadSimulationDialog::onUpload()
{
printOverlayMessage("Uploading ...");

auto data = [&]() -> std::variant<UploadNetworkResourceRequestData::SimulationData, UploadNetworkResourceRequestData::GenomeData> {
if (_resourceType == NetworkResourceType_Simulation) {
return UploadNetworkResourceRequestData::SimulationData{.zoom = Viewport::getZoomFactor(), .center = Viewport::getCenterInWorldPos()};
Expand Down
40 changes: 40 additions & 0 deletions source/PersisterImpl/PersisterControllerImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,46 @@ GetUserNamesForEmojiResultData _PersisterControllerImpl::fetchGetUserNamesForEmo
return fetchData<_GetUserNamesForEmojiRequestResult, GetUserNamesForEmojiResultData>(id);
}

PersisterRequestId _PersisterControllerImpl::scheduleDeleteNetworkResource(SenderInfo const& senderInfo, DeleteNetworkResourceRequestData const& data)
{
return scheduleRequest<_DeleteNetworkResourceRequest>(senderInfo, data);
}

DeleteNetworkResourceResultData _PersisterControllerImpl::fetchDeleteNetworkResourcesData(PersisterRequestId const& id)
{
return fetchData<_DeleteNetworkResourceRequestResult, DeleteNetworkResourceResultData>(id);
}

PersisterRequestId _PersisterControllerImpl::scheduleEditNetworkResource(SenderInfo const& senderInfo, EditNetworkResourceRequestData const& data)
{
return scheduleRequest<_EditNetworkResourceRequest>(senderInfo, data);
}

EditNetworkResourceResultData _PersisterControllerImpl::fetchEditNetworkResourcesData(PersisterRequestId const& id)
{
return fetchData<_EditNetworkResourceRequestResult, EditNetworkResourceResultData>(id);
}

PersisterRequestId _PersisterControllerImpl::scheduleMoveNetworkResource(SenderInfo const& senderInfo, MoveNetworkResourceRequestData const& data)
{
return scheduleRequest<_MoveNetworkResourceRequest>(senderInfo, data);
}

MoveNetworkResourceResultData _PersisterControllerImpl::fetchMoveNetworkResourcesData(PersisterRequestId const& id)
{
return fetchData<_MoveNetworkResourceRequestResult, MoveNetworkResourceResultData>(id);
}

PersisterRequestId _PersisterControllerImpl::scheduleToggleLikeNetworkResource(SenderInfo const& senderInfo, ToggleLikeNetworkResourceRequestData const& data)
{
return scheduleRequest<_ToggleLikeNetworkResourceRequest>(senderInfo, data);
}

ToggleLikeNetworkResourceResultData _PersisterControllerImpl::fetchToggleLikeNetworkResourcesData(PersisterRequestId const& id)
{
return fetchData<_ToggleLikeNetworkResourceRequestResult, ToggleLikeNetworkResourceResultData>(id);
}

PersisterRequestId _PersisterControllerImpl::generateNewRequestId()
{
++_latestRequestId;
Expand Down
12 changes: 12 additions & 0 deletions source/PersisterImpl/PersisterControllerImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,18 @@ class _PersisterControllerImpl : public _PersisterController
PersisterRequestId scheduleGetUserNamesForEmoji(SenderInfo const& senderInfo, GetUserNamesForEmojiRequestData const& data) override;
GetUserNamesForEmojiResultData fetchGetUserNamesForEmojiData(PersisterRequestId const& id) override;

PersisterRequestId scheduleDeleteNetworkResource(SenderInfo const& senderInfo, DeleteNetworkResourceRequestData const& data) override;
DeleteNetworkResourceResultData fetchDeleteNetworkResourcesData(PersisterRequestId const& id) override;

PersisterRequestId scheduleEditNetworkResource(SenderInfo const& senderInfo, EditNetworkResourceRequestData const& data) override;
EditNetworkResourceResultData fetchEditNetworkResourcesData(PersisterRequestId const& id) override;

PersisterRequestId scheduleMoveNetworkResource(SenderInfo const& senderInfo, MoveNetworkResourceRequestData const& data) override;
MoveNetworkResourceResultData fetchMoveNetworkResourcesData(PersisterRequestId const& id) override;

PersisterRequestId scheduleToggleLikeNetworkResource(SenderInfo const& senderInfo, ToggleLikeNetworkResourceRequestData const& data) override;
ToggleLikeNetworkResourceResultData fetchToggleLikeNetworkResourcesData(PersisterRequestId const& id) override;

private:
static auto constexpr MaxWorkerThreads = 4;

Expand Down
16 changes: 16 additions & 0 deletions source/PersisterImpl/PersisterRequest.h
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
#pragma once

#include "PersisterInterface/DeleteNetworkResourceRequestData.h"
#include "PersisterInterface/DownloadNetworkResourceRequestData.h"
#include "PersisterInterface/EditNetworkResourceRequestData.h"
#include "PersisterInterface/GetNetworkResourcesRequestData.h"
#include "PersisterInterface/GetUserNamesForEmojiRequestData.h"
#include "PersisterInterface/LoginRequestData.h"
#include "PersisterInterface/MoveNetworkResourceRequestData.h"
#include "PersisterInterface/ReadSimulationRequestData.h"
#include "PersisterInterface/PersisterRequestId.h"
#include "PersisterInterface/ReplaceNetworkResourceRequestData.h"
#include "PersisterInterface/SenderInfo.h"
#include "PersisterInterface/SaveSimulationRequestData.h"
#include "PersisterInterface/ToggleLikeNetworkResourceRequestData.h"
#include "PersisterInterface/UploadNetworkResourceRequestData.h"

class _PersisterRequest
Expand Down Expand Up @@ -75,3 +79,15 @@ using ReplaceNetworkResourceRequest = std::shared_ptr<_ReplaceNetworkResourceReq

using _GetUserNamesForEmojiRequest = _ConcreteRequest<GetUserNamesForEmojiRequestData>;
using GetUserNamesForEmojiRequest = std::shared_ptr<_GetUserNamesForEmojiRequest>;

using _DeleteNetworkResourceRequest = _ConcreteRequest<DeleteNetworkResourceRequestData>;
using DeleteNetworkResourceRequest = std::shared_ptr<_DeleteNetworkResourceRequest>;

using _EditNetworkResourceRequest = _ConcreteRequest<EditNetworkResourceRequestData>;
using EditNetworkResourceRequest = std::shared_ptr<_EditNetworkResourceRequest>;

using _MoveNetworkResourceRequest = _ConcreteRequest<MoveNetworkResourceRequestData>;
using MoveNetworkResourceRequest = std::shared_ptr<_MoveNetworkResourceRequest>;

using _ToggleLikeNetworkResourceRequest = _ConcreteRequest<ToggleLikeNetworkResourceRequestData>;
using ToggleLikeNetworkResourceRequest = std::shared_ptr<_ToggleLikeNetworkResourceRequest>;
4 changes: 4 additions & 0 deletions source/PersisterImpl/PersisterRequestResult.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,7 @@ using _DownloadNetworkResourceRequestResult = _ConcreteRequestResult<DownloadNet
using _UploadNetworkResourceRequestResult = _ConcreteRequestResult<UploadNetworkResourceResultData>;
using _ReplaceNetworkResourceRequestResult = _ConcreteRequestResult<ReplaceNetworkResourceResultData>;
using _GetUserNamesForEmojiRequestResult = _ConcreteRequestResult<GetUserNamesForEmojiResultData>;
using _DeleteNetworkResourceRequestResult = _ConcreteRequestResult<DeleteNetworkResourceResultData>;
using _EditNetworkResourceRequestResult = _ConcreteRequestResult<EditNetworkResourceResultData>;
using _MoveNetworkResourceRequestResult = _ConcreteRequestResult<MoveNetworkResourceResultData>;
using _ToggleLikeNetworkResourceRequestResult = _ConcreteRequestResult<ToggleLikeNetworkResourceResultData>;
19 changes: 19 additions & 0 deletions source/PersisterImpl/PersisterWorker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,9 @@ void _PersisterWorker::processRequests(std::unique_lock<std::mutex>& lock)
if (auto const& concreteRequest = std::dynamic_pointer_cast<_GetUserNamesForEmojiRequest>(request)) {
processingResult = processRequest(lock, concreteRequest);
}
if (auto const& concreteRequest = std::dynamic_pointer_cast<_DeleteNetworkResourceRequest>(request)) {
processingResult = processRequest(lock, concreteRequest);
}
auto inProgressJobsIter = std::ranges::find_if(
_inProgressRequests, [&](PersisterRequest const& otherRequest) { return otherRequest->getRequestId() == request->getRequestId(); });
_inProgressRequests.erase(inProgressJobsIter);
Expand Down Expand Up @@ -533,3 +536,19 @@ _PersisterWorker::PersisterRequestResultOrError _PersisterWorker::processRequest

return std::make_shared<_GetUserNamesForEmojiRequestResult>(request->getRequestId(), resultData);
}

_PersisterWorker::PersisterRequestResultOrError _PersisterWorker::processRequest(
std::unique_lock<std::mutex>& lock,
DeleteNetworkResourceRequest const& request)
{
UnlockGuard unlockGuard(lock);

auto const& requestData = request->getData();

if (!NetworkService::deleteResource(requestData.resourceId)) {
return std::make_shared<_PersisterRequestError>(
request->getRequestId(), request->getSenderInfo().senderId, PersisterErrorInfo{"Failed to delete item. Please try again later."});
}

return std::make_shared<_DeleteNetworkResourceRequestResult>(request->getRequestId(), DeleteNetworkResourceResultData{});
}
1 change: 1 addition & 0 deletions source/PersisterImpl/PersisterWorker.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ class _PersisterWorker
PersisterRequestResultOrError processRequest(std::unique_lock<std::mutex>& lock, UploadNetworkResourceRequest const& request);
PersisterRequestResultOrError processRequest(std::unique_lock<std::mutex>& lock, ReplaceNetworkResourceRequest const& request);
PersisterRequestResultOrError processRequest(std::unique_lock<std::mutex>& lock, GetUserNamesForEmojiRequest const& request);
PersisterRequestResultOrError processRequest(std::unique_lock<std::mutex>& lock, DeleteNetworkResourceRequest const& request);

SimulationController _simController;

Expand Down
8 changes: 8 additions & 0 deletions source/PersisterInterface/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@

add_library(PersisterInterface
Definitions.h
DeleteNetworkResourceRequestData.h
DeleteNetworkResourceResultData.h
DownloadCache.h
DownloadNetworkResourceRequestData.h
DownloadNetworkResourceResultData.h
EditNetworkResourceRequestData.h
EditNetworkResourceResultData.h
GetNetworkResourcesRequestData.h
GetNetworkResourcesResultData.h
GetUserNamesForEmojiRequestData.h
GetUserNamesForEmojiResultData.h
LoginRequestData.h
LoginResultData.h
MoveNetworkResourceRequestData.h
MoveNetworkResourceResultData.h
PersisterController.cpp
PersisterController.h
PersisterErrorInfo.h
Expand All @@ -25,6 +31,8 @@ add_library(PersisterInterface
SenderInfo.h
TaskProcessor.cpp
TaskProcessor.h
ToggleLikeNetworkResourceRequestData.h
ToggleLikeNetworkResourceResultData.h
UploadNetworkResourceRequestData.h
UploadNetworkResourceResultData.h)

Expand Down
7 changes: 7 additions & 0 deletions source/PersisterInterface/DeleteNetworkResourceRequestData.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#pragma once
#include <string>

struct DeleteNetworkResourceRequestData
{
std::string resourceId;
};
5 changes: 5 additions & 0 deletions source/PersisterInterface/DeleteNetworkResourceResultData.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#pragma once

struct DeleteNetworkResourceResultData
{
};
4 changes: 4 additions & 0 deletions source/PersisterInterface/EditNetworkResourceRequestData.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#pragma once

struct EditNetworkResourceRequestData
{};
4 changes: 4 additions & 0 deletions source/PersisterInterface/EditNetworkResourceResultData.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#pragma once

struct EditNetworkResourceResultData
{};
4 changes: 4 additions & 0 deletions source/PersisterInterface/MoveNetworkResourceRequestData.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#pragma once

struct MoveNetworkResourceRequestData
{};
4 changes: 4 additions & 0 deletions source/PersisterInterface/MoveNetworkResourceResultData.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#pragma once

struct MoveNetworkResourceResultData
{};
20 changes: 20 additions & 0 deletions source/PersisterInterface/PersisterController.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,20 @@
#include "EngineInterface/Definitions.h"

#include "Definitions.h"
#include "DeleteNetworkResourceRequestData.h"
#include "DeleteNetworkResourceResultData.h"
#include "DownloadNetworkResourceRequestData.h"
#include "DownloadNetworkResourceResultData.h"
#include "EditNetworkResourceRequestData.h"
#include "EditNetworkResourceResultData.h"
#include "GetNetworkResourcesRequestData.h"
#include "GetNetworkResourcesResultData.h"
#include "GetUserNamesForEmojiRequestData.h"
#include "GetUserNamesForEmojiResultData.h"
#include "LoginRequestData.h"
#include "LoginResultData.h"
#include "MoveNetworkResourceRequestData.h"
#include "MoveNetworkResourceResultData.h"
#include "ReadSimulationResultData.h"
#include "ReadSimulationRequestData.h"
#include "PersisterErrorInfo.h"
Expand All @@ -25,6 +31,8 @@
#include "SaveSimulationRequestData.h"
#include "SenderId.h"
#include "SenderInfo.h"
#include "ToggleLikeNetworkResourceRequestData.h"
#include "ToggleLikeNetworkResourceResultData.h"
#include "UploadNetworkResourceRequestData.h"
#include "UploadNetworkResourceResultData.h"

Expand Down Expand Up @@ -68,4 +76,16 @@ class _PersisterController

virtual PersisterRequestId scheduleGetUserNamesForEmoji(SenderInfo const& senderInfo, GetUserNamesForEmojiRequestData const& data) = 0;
virtual GetUserNamesForEmojiResultData fetchGetUserNamesForEmojiData(PersisterRequestId const& id) = 0;

virtual PersisterRequestId scheduleDeleteNetworkResource(SenderInfo const& senderInfo, DeleteNetworkResourceRequestData const& data) = 0;
virtual DeleteNetworkResourceResultData fetchDeleteNetworkResourcesData(PersisterRequestId const& id) = 0;

virtual PersisterRequestId scheduleEditNetworkResource(SenderInfo const& senderInfo, EditNetworkResourceRequestData const& data) = 0;
virtual EditNetworkResourceResultData fetchEditNetworkResourcesData(PersisterRequestId const& id) = 0;

virtual PersisterRequestId scheduleMoveNetworkResource(SenderInfo const& senderInfo, MoveNetworkResourceRequestData const& data) = 0;
virtual MoveNetworkResourceResultData fetchMoveNetworkResourcesData(PersisterRequestId const& id) = 0;

virtual PersisterRequestId scheduleToggleLikeNetworkResource(SenderInfo const& senderInfo, ToggleLikeNetworkResourceRequestData const& data) = 0;
virtual ToggleLikeNetworkResourceResultData fetchToggleLikeNetworkResourcesData(PersisterRequestId const& id) = 0;
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#pragma once

struct ToggleLikeNetworkResourceRequestData
{};
Loading

0 comments on commit bb82124

Please sign in to comment.