From 4bbdf43ffa2878607c987b7b8f0962558900c4c1 Mon Sep 17 00:00:00 2001 From: Ange-Marie MAURIN Date: Mon, 14 Jul 2025 09:58:10 +0200 Subject: [PATCH] Update Function to ensure ref is returned instead of copy for GetContest GetContestForTime --- .../Private/widgets/DTFluxStatusWidget.cpp | 3 +- .../Private/DTFluxCoreSubsystem.cpp | 86 +++++++++++-------- .../Public/DTFluxCoreSubsystem.h | 18 ++-- 3 files changed, 62 insertions(+), 45 deletions(-) diff --git a/Source/DTFluxAPIStatus/Private/widgets/DTFluxStatusWidget.cpp b/Source/DTFluxAPIStatus/Private/widgets/DTFluxStatusWidget.cpp index 23667a4..f01c8a3 100644 --- a/Source/DTFluxAPIStatus/Private/widgets/DTFluxStatusWidget.cpp +++ b/Source/DTFluxAPIStatus/Private/widgets/DTFluxStatusWidget.cpp @@ -338,7 +338,8 @@ void SDTFluxStatusWidget::PopulateComboBoxItems() { FString Separator = " | "; FString RootSeparator = " -> "; - TArray DataFromSubsystem = DTFluxCore->GetContests(); + TArray DataFromSubsystem = TArray(); + DTFluxCore->GetContests(DataFromSubsystem); for (const auto& Contest : DataFromSubsystem) { diff --git a/Source/DTFluxCoreSubsystem/Private/DTFluxCoreSubsystem.cpp b/Source/DTFluxCoreSubsystem/Private/DTFluxCoreSubsystem.cpp index 4af6d6f..6557b65 100644 --- a/Source/DTFluxCoreSubsystem/Private/DTFluxCoreSubsystem.cpp +++ b/Source/DTFluxCoreSubsystem/Private/DTFluxCoreSubsystem.cpp @@ -554,24 +554,30 @@ TArray UDTFluxCoreSubsystem::GetCurrentContestsId() return GetContestsIdForTime(FDateTime::Now()); } -TArray UDTFluxCoreSubsystem::GetCurrentContests() +bool UDTFluxCoreSubsystem::GetCurrentContests(TArray& OutContests) { - return GetContestsForTime(FDateTime::Now()); + return GetContestsForTime(FDateTime::Now(), OutContests); } -TArray UDTFluxCoreSubsystem::GetContestsIdForTime(const FDateTime Time) const +TArray UDTFluxCoreSubsystem::GetContestsIdForTime(const FDateTime Time) { - TArray Contests; - for (const auto& Pair : DataStorage->Contests) + if (DataStorage) { - FDTFluxContest Contest = Pair.Value; - int ContestId = Contest.ContestId; - if (Contest.Date < Time && Contest.EndTime > Time) + TArray Contests; + if (GetContestsForTime(Time, Contests)) { - Contests.Add(ContestId); + TArray ContestIds = TArray(); + for (const auto& Contest : Contests) + { + ContestIds.Add(Contest.ContestId); + } + return ContestIds; } + UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("No Contest running for Time [%s]"), *Time.ToString()); + return TArray(); } - return Contests; + UE_LOG(logDTFluxCoreSubsystem, Error, TEXT("DataStorage not available")); + return TArray(); } bool UDTFluxCoreSubsystem::GetContestForId(const int Id, FDTFluxContest& OutContest) @@ -588,34 +594,46 @@ bool UDTFluxCoreSubsystem::GetContestForId(const int Id, FDTFluxContest& OutCont return false; } -TArray UDTFluxCoreSubsystem::GetContestsForTime(const FDateTime Time) -{ - TArray Contests; - for (const auto& Pair : DataStorage->Contests) - { - FDTFluxContest Contest = Pair.Value; - int ContestId = Contest.ContestId; - if (Contest.Date < Time && Contest.EndTime > Time) - { - Contests.Add(Contest); - } - } - return Contests; -} - -void UDTFluxCoreSubsystem::RequestRankingsForStages(TArray RequestedStages) const -{ -} - -TArray UDTFluxCoreSubsystem::GetContests() +bool UDTFluxCoreSubsystem::GetContestsForTime(const FDateTime Time, TArray& OutContests) { if (DataStorage) { - TArray OutContests; - DataStorage->Contests.GenerateValueArray(OutContests); - return OutContests; + OutContests.Empty(); + for (const auto& Pair : DataStorage->Contests) + { + FDTFluxContest Contest = Pair.Value; + int ContestId = Contest.ContestId; + + //ils ont commencé. + if (Contest.Date < Time && Contest.EndTime > Time) + { + // ils sont finis + if (!Contest.IsFinished()) + { + OutContests.Add(Contest); + } + } + } + if (!OutContests.IsEmpty()) + { + return true; + } + UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("No Contest running for Time [%s]"), *Time.ToString()); } - return TArray(); + UE_LOG(logDTFluxCoreSubsystem, Error, TEXT("DataStorage not available")); + return false; +} + +bool UDTFluxCoreSubsystem::GetContests(TArray& OutContests) +{ + OutContests.Empty(); + if (DataStorage) + { + DataStorage->Contests.GenerateValueArray(OutContests); + return !OutContests.IsEmpty(); + } + UE_LOG(logDTFluxCoreSubsystem, Error, TEXT("DataStorage not available")); + return false; } void UDTFluxCoreSubsystem::GetContest(const int ContestId, FDTFluxContest& OutContest) diff --git a/Source/DTFluxCoreSubsystem/Public/DTFluxCoreSubsystem.h b/Source/DTFluxCoreSubsystem/Public/DTFluxCoreSubsystem.h index 31e156c..8029005 100644 --- a/Source/DTFluxCoreSubsystem/Public/DTFluxCoreSubsystem.h +++ b/Source/DTFluxCoreSubsystem/Public/DTFluxCoreSubsystem.h @@ -107,20 +107,18 @@ public: TArray TrackedRequestSplitRankings(const TArray ForSplits, bool bEnableCache = true); UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") bool GetParticipant(int InBib, FDTFluxParticipant& OutParticipant); - UFUNCTION() + UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") TArray GetCurrentContestsId(); - UFUNCTION() - TArray GetCurrentContests(); - UFUNCTION() - TArray GetContestsIdForTime(const FDateTime Time) const; + UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") + bool GetCurrentContests(TArray& OutContests); + UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") + TArray GetContestsIdForTime(const FDateTime Time); UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") bool GetContestForId(const int Id, FDTFluxContest& OutContest); UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") - TArray GetContestsForTime(const FDateTime Time); - UFUNCTION() - void RequestRankingsForStages(const TArray RequestedStages) const; - UFUNCTION() - TArray GetContests(); + bool GetContestsForTime(const FDateTime Time, TArray& OutContests); + UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") + bool GetContests(TArray& OutContests); UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") void GetContest(const int ContestId, FDTFluxContest& OutContest); UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")