Update FormatedName functionality now just truncates and adds OverflowChar + fixing getter Split, Stage, Contest

This commit is contained in:
2025-07-13 04:48:05 +02:00
parent c2733a2b97
commit a1e6902a15
2 changed files with 59 additions and 81 deletions

View File

@ -35,73 +35,74 @@ FString FDTFluxPerson::GetNormalizedString() const
bool FDTFluxPerson::IsValid() const bool FDTFluxPerson::IsValid() const
{ {
return !FirstName.TrimStartAndEnd().IsEmpty() && return !FirstName.TrimStartAndEnd().IsEmpty() &&
!LastName.TrimStartAndEnd().IsEmpty() && !LastName.TrimStartAndEnd().IsEmpty() &&
!Gender.TrimStartAndEnd().IsEmpty(); !Gender.TrimStartAndEnd().IsEmpty();
} }
FDTFluxParticipant::FDTFluxParticipant() FDTFluxParticipant::FDTFluxParticipant()
: Bib(-1) : Bib(-1)
, ContestId(-1) , ContestId(-1)
, Elite(false) , Elite(false)
, Status(static_cast<EDTFluxParticipantStatusType>(0)) , Status(static_cast<EDTFluxParticipantStatusType>(0))
, bIsMassStartParticipant(false) , bIsMassStartParticipant(false)
, CurrentSplit(-1) , CurrentSplit(-1)
{ {
Teammate.Reset(); Teammate.Reset();
} }
FDTFluxParticipant::FDTFluxParticipant(const TSharedPtr<FJsonObject>& JsonObject) FDTFluxParticipant::FDTFluxParticipant(const TSharedPtr<FJsonObject>& JsonObject)
: Bib(JsonObject->GetIntegerField(TEXT("bib"))) : Bib(JsonObject->GetIntegerField(TEXT("bib")))
, ContestId(JsonObject->GetIntegerField(TEXT("contestId"))) , ContestId(JsonObject->GetIntegerField(TEXT("contestId")))
, Category(JsonObject->GetStringField(TEXT("category"))) , Category(JsonObject->GetStringField(TEXT("category")))
, Club(JsonObject->GetStringField(TEXT("club"))) , Club(JsonObject->GetStringField(TEXT("club")))
, Elite(JsonObject->GetBoolField(TEXT("elite"))) , Elite(JsonObject->GetBoolField(TEXT("elite")))
, Status(static_cast<EDTFluxParticipantStatusType>(JsonObject->GetIntegerField(TEXT("status")))) , Status(static_cast<EDTFluxParticipantStatusType>(JsonObject->GetIntegerField(TEXT("status"))))
, Team(JsonObject->GetStringField(TEXT("team"))) , Team(JsonObject->GetStringField(TEXT("team")))
, CurrentSplit(-1) , CurrentSplit(-1)
{ {
UE_LOG(logDTFluxCore, Log, TEXT("Creating participant from JSON - Bib: %d, Contest: %d"), Bib, ContestId); UE_LOG(logDTFluxCore, Log, TEXT("Creating participant from JSON - Bib: %d, Contest: %d"), Bib, ContestId);
for (uint8 Index = 1; Index <= 10; Index++) for (uint8 Index = 1; Index <= 10; Index++)
{ {
FString FirstNameKey = Index == 1 ? TEXT("firstName") : FString::Printf(TEXT("firstName%d"), Index); FString FirstNameKey = Index == 1 ? TEXT("firstName") : FString::Printf(TEXT("firstName%d"), Index);
FString LastNameKey = Index == 1 ? TEXT("lastName") : FString::Printf(TEXT("lastName%d"), Index); FString LastNameKey = Index == 1 ? TEXT("lastName") : FString::Printf(TEXT("lastName%d"), Index);
FString GenderKey = Index == 1 ? TEXT("gender") : FString::Printf(TEXT("gender%d"), Index); FString GenderKey = Index == 1 ? TEXT("gender") : FString::Printf(TEXT("gender%d"), Index);
// Vérifie si au moins un des champs existe // Vérifie si au moins un des champs existe
if (!JsonObject->HasField(FirstNameKey) && !JsonObject->HasField(LastNameKey) && !JsonObject->HasField(GenderKey)) if (!JsonObject->HasField(FirstNameKey) && !JsonObject->HasField(LastNameKey) && !JsonObject->
HasField(GenderKey))
{ {
break; break;
} }
const FString FirstName = JsonObject->GetStringField(FirstNameKey); const FString FirstName = JsonObject->GetStringField(FirstNameKey);
const FString LastName = JsonObject->GetStringField(LastNameKey); const FString LastName = JsonObject->GetStringField(LastNameKey);
const FString Gender = JsonObject->GetStringField(GenderKey); const FString Gender = JsonObject->GetStringField(GenderKey);
if (FirstName.TrimStartAndEnd().IsEmpty() && LastName.TrimStartAndEnd().IsEmpty()) if (FirstName.TrimStartAndEnd().IsEmpty() && LastName.TrimStartAndEnd().IsEmpty())
{ {
continue; continue;
} }
FDTFluxPerson Person; FDTFluxPerson Person;
Person.FirstName = FirstName.TrimStartAndEnd(); Person.FirstName = FirstName.TrimStartAndEnd();
Person.LastName = LastName.TrimStartAndEnd(); Person.LastName = LastName.TrimStartAndEnd();
Person.Gender = Gender.TrimStartAndEnd(); Person.Gender = Gender.TrimStartAndEnd();
if (Person.IsValid()) if (Person.IsValid())
{ {
Teammate.Add(Person); Teammate.Add(Person);
UE_LOG(logDTFluxCore, Verbose, TEXT("Added person %d: %s %s (%s)"), UE_LOG(logDTFluxCore, Verbose, TEXT("Added person %d: %s %s (%s)"),
Index, *Person.FirstName, *Person.LastName, *Person.Gender); Index, *Person.FirstName, *Person.LastName, *Person.Gender);
} }
else else
{ {
UE_LOG(logDTFluxCore, Warning, TEXT("Invalid person data at index %d: '%s' '%s' '%s'"), UE_LOG(logDTFluxCore, Warning, TEXT("Invalid person data at index %d: '%s' '%s' '%s'"),
Index, *FirstName, *LastName, *Gender); Index, *FirstName, *LastName, *Gender);
} }
} }
UE_LOG(logDTFluxCore, Log, TEXT("Participant created with %d teammates"), Teammate.Num()); UE_LOG(logDTFluxCore, Log, TEXT("Participant created with %d teammates"), Teammate.Num());
} }
@ -138,7 +139,7 @@ void FDTFluxParticipant::AddTeammate(const FString& LastName, const FString& Fir
Person.FirstName = FirstName.TrimStartAndEnd(); Person.FirstName = FirstName.TrimStartAndEnd();
Person.LastName = LastName.TrimStartAndEnd(); Person.LastName = LastName.TrimStartAndEnd();
Person.Gender = Gender.TrimStartAndEnd(); Person.Gender = Gender.TrimStartAndEnd();
AddTeammate(Person); AddTeammate(Person);
} }
@ -157,16 +158,15 @@ const TArray<FDTFluxPerson>& FDTFluxParticipant::GetTeammate() const
return Teammate; return Teammate;
} }
FString FDTFluxParticipant::GetFormattedName(const int MaxChar, const FString& Separator, const FString& OverflowChar) const FString FDTFluxParticipant::GetFormattedName(const int MaxChar, const FString& Separator,
const FString& OverflowChar) const
{ {
if (MaxChar <= 0) if (MaxChar <= 0)
{ {
return TEXT(""); return TEXT("");
} }
FString FirstName; FString FirstName;
FString LastName; FString LastName;
if (IsTeam()) if (IsTeam())
{ {
if (!Team.IsEmpty()) if (!Team.IsEmpty())
@ -197,92 +197,64 @@ FString FDTFluxParticipant::GetFormattedName(const int MaxChar, const FString& S
{ {
Initial = FirstName.Left(1).ToUpper() + Separator; Initial = FirstName.Left(1).ToUpper() + Separator;
} }
FString FormattedLastName = LastName.ToUpper(); FString FormattedLastName = LastName.ToUpper();
FString FullName = Initial + FormattedLastName; FString FullName = Initial + FormattedLastName;
if (FullName.Len() <= MaxChar) if (FullName.Len() <= MaxChar)
{ {
return FullName; return FullName;
} }
return FullName.Left(MaxChar) + OverflowChar;
const int32 OverflowLength = OverflowChar.Len();
if (OverflowLength > MaxChar)
{
return FullName.Left(MaxChar);
}
if (Initial.Len() + OverflowLength > MaxChar)
{
return FullName.Left(MaxChar);
}
const int32 AvailableForLastName = MaxChar - Initial.Len() - OverflowLength;
if (AvailableForLastName <= 0)
{
return FullName.Left(MaxChar);
}
FString TruncatedName = Initial + FormattedLastName.Left(AvailableForLastName) + OverflowChar;
if (TruncatedName.Len() > MaxChar)
{
return TruncatedName.Left(MaxChar);
}
return TruncatedName;
} }
FString FDTFluxParticipant::GetConcatFormattedName(const int MaxChar, const FString& Separator, FString FDTFluxParticipant::GetConcatFormattedName(const int MaxChar, const FString& Separator,
const FString& OverflowChar, const FString& BibSeparator) const const FString& OverflowChar, const FString& BibSeparator) const
{ {
FString BibText = FString::FromInt(Bib) + BibSeparator; FString BibText = FString::FromInt(Bib) + BibSeparator;
int32 RemainingChars = MaxChar - BibText.Len(); int32 RemainingChars = MaxChar - BibText.Len();
if (RemainingChars <= 0) if (RemainingChars <= 0)
{ {
return BibText.Left(MaxChar); return BibText.Left(MaxChar);
} }
FString FormattedName = GetFormattedName(RemainingChars, Separator, OverflowChar); FString FormattedName = GetFormattedName(RemainingChars, Separator, OverflowChar);
return BibText + FormattedName; return BibText + FormattedName;
} }
FText FDTFluxParticipant::GetFormattedNameText(const int MaxChar, const FString& Separator, const FString& OverflowChar) const FText FDTFluxParticipant::GetFormattedNameText(const int MaxChar, const FString& Separator,
const FString& OverflowChar) const
{ {
return FText::FromString(GetFormattedName(MaxChar, Separator, OverflowChar)); return FText::FromString(GetFormattedName(MaxChar, Separator, OverflowChar));
} }
FText FDTFluxParticipant::GetConcatFormattedNameText(const int MaxChar, const FString& Separator, FText FDTFluxParticipant::GetConcatFormattedNameText(const int MaxChar, const FString& Separator,
const FString& OverflowChar, const FString& BibSeparator) const const FString& OverflowChar, const FString& BibSeparator) const
{ {
return FText::FromString(GetConcatFormattedName(MaxChar, Separator, OverflowChar, BibSeparator)); return FText::FromString(GetConcatFormattedName(MaxChar, Separator, OverflowChar, BibSeparator));
} }
FString FDTFluxParticipant::GetFormattedName(const FDTFluxParticipant& Participant, const int MaxChar, FString FDTFluxParticipant::GetFormattedName(const FDTFluxParticipant& Participant, const int MaxChar,
const FString& Separator, const FString& OverflowChar) const FString& Separator, const FString& OverflowChar)
{ {
return Participant.GetFormattedName(MaxChar, Separator, OverflowChar); return Participant.GetFormattedName(MaxChar, Separator, OverflowChar);
} }
FString FDTFluxParticipant::GetConcatFormattedName(const FDTFluxParticipant& Participant, const int MaxChar, FString FDTFluxParticipant::GetConcatFormattedName(const FDTFluxParticipant& Participant, const int MaxChar,
const FString& Separator, const FString& OverflowChar, const FString& Separator, const FString& OverflowChar,
const FString& BibSeparator) const FString& BibSeparator)
{ {
return Participant.GetConcatFormattedName(MaxChar, Separator, OverflowChar, BibSeparator); return Participant.GetConcatFormattedName(MaxChar, Separator, OverflowChar, BibSeparator);
} }
FText FDTFluxParticipant::GetFormattedNameText(const FDTFluxParticipant& Participant, const int MaxChar, FText FDTFluxParticipant::GetFormattedNameText(const FDTFluxParticipant& Participant, const int MaxChar,
const FString& Separator, const FString& OverflowChar) const FString& Separator, const FString& OverflowChar)
{ {
return Participant.GetFormattedNameText(MaxChar, Separator, OverflowChar); return Participant.GetFormattedNameText(MaxChar, Separator, OverflowChar);
} }
FText FDTFluxParticipant::GetConcatFormattedNameText(const FDTFluxParticipant& Participant, const int MaxChar, FText FDTFluxParticipant::GetConcatFormattedNameText(const FDTFluxParticipant& Participant, const int MaxChar,
const FString& Separator, const FString& OverflowChar, const FString& Separator, const FString& OverflowChar,
const FString& BibSeparator) const FString& BibSeparator)
{ {
return Participant.GetConcatFormattedNameText(MaxChar, Separator, OverflowChar, BibSeparator); return Participant.GetConcatFormattedNameText(MaxChar, Separator, OverflowChar, BibSeparator);
} }
@ -294,12 +266,12 @@ FDTFluxParticipant FDTFluxParticipant::CreateFromJson(const TSharedPtr<FJsonObje
UE_LOG(logDTFluxCore, Error, TEXT("Cannot create participant from invalid JSON object")); UE_LOG(logDTFluxCore, Error, TEXT("Cannot create participant from invalid JSON object"));
return FDTFluxParticipant(); return FDTFluxParticipant();
} }
return FDTFluxParticipant(JsonObject); return FDTFluxParticipant(JsonObject);
} }
FDTFluxTeamStatusUpdate::FDTFluxTeamStatusUpdate(const int InBib, const int InStatus) FDTFluxTeamStatusUpdate::FDTFluxTeamStatusUpdate(const int InBib, const int InStatus)
: Bib(InBib) : Bib(InBib)
, Status(static_cast<EDTFluxParticipantStatusType>(InStatus)) , Status(static_cast<EDTFluxParticipantStatusType>(InStatus))
{ {
} }

View File

@ -129,10 +129,13 @@ public:
FDTFluxContest ContestDefinition; FDTFluxContest ContestDefinition;
if (GetContestForId(ContestId, ContestDefinition)) if (GetContestForId(ContestId, ContestDefinition))
{ {
if (ContestDefinition.Stages.IsValidIndex(StageId)) for (auto& Stage : ContestDefinition.Stages)
{ {
OutStageDefinition = ContestDefinition.Stages[StageId]; if (Stage.StageId == StageId)
return true; {
OutStageDefinition = Stage;
return true;
}
} }
} }
OutStageDefinition = FDTFluxStage(); OutStageDefinition = FDTFluxStage();
@ -149,10 +152,13 @@ public:
FDTFluxContest ContestDefinition; FDTFluxContest ContestDefinition;
if (GetContestForId(ContestId, ContestDefinition)) if (GetContestForId(ContestId, ContestDefinition))
{ {
if (ContestDefinition.Splits.IsValidIndex(SplitId)) for (auto& Split : ContestDefinition.Splits)
{ {
OutSplitDefinition = ContestDefinition.Splits[SplitId]; if (Split.SplitId == SplitId)
return true; {
OutSplitDefinition = Split;
return true;
}
} }
} }
OutSplitDefinition = FDTFluxSplit(); OutSplitDefinition = FDTFluxSplit();