// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Models/SwarmReview.h" #include "Services/Interfaces/ISubmitToolService.h" #include "Services/Interfaces/ISTSourceControlService.h" #include "HttpModule.h" class FSubmitToolServiceProvider; DECLARE_DELEGATE_TwoParams(OnGetReviewComplete, const TUniquePtr&, const FString&) DECLARE_DELEGATE_TwoParams(OnCreateReviewComplete, bool, const FString&) class FSwarmService : public ISubmitToolService { public: FSwarmService(TWeakPtr InServiceProvider); void FetchReview(const OnGetReviewComplete& OnComplete); void CreateReview(const TArray& InReviewers, const OnCreateReviewComplete& OnComplete); void UpdateReviewDescription(const TDelegate& OnComplete, const FString& InDescription); const TUniquePtr& GetReview() const { return Review; } bool GetCurrentReviewUrl(FString& OutUrl) const { if(Review.IsValid()) { OutUrl = BuildReviewURL(FString::FromInt(Review->Id)); } return Review.IsValid(); } FString BuildReviewURL(const FString& InReviewId) const { return FString::Printf(TEXT("%s/reviews/%s"), *SwarmURL, *InReviewId); } void CancelOperations() { if(CreateSwarmRequest.IsValid()) { CreateSwarmRequest->CancelRequest(); } } bool IsRequestRunning() const { return (CreateSwarmRequest.IsValid() && CreateSwarmRequest->GetStatus() == EHttpRequestStatus::Processing) || (UpdateSwarmRequest.IsValid() && UpdateSwarmRequest->GetStatus() == EHttpRequestStatus::Processing); } const TArray GetUsersInSwarmTag() const; private: const FString& GetSwarmURL(); FString ReviewsURL() const; private: TSharedPtr CreateSwarmRequest; TSharedPtr UpdateSwarmRequest; TWeakPtr ServiceProvider; FString SwarmURL; TUniquePtr Review = nullptr; bool bCanConnect; TArray>* Users; TArray>* Groups; }; Expose_TNameOf(FSwarmService);