@ -19,6 +19,7 @@ struct EventListView: View {
let sortAscending : Bool
@ State var showUserSearch : Bool = false
@ State private var sectionImporting : Int ? = nil
var lastDataSource : Date ? {
guard let _lastDataSource = dataStore . appSettings . lastDataSource else { return nil }
@ -49,9 +50,19 @@ struct EventListView: View {
if let pcTournaments = _tournaments as ? [ Tournament ] {
_menuOptions ( pcTournaments )
} else if let federalTournaments = _tournaments as ? [ FederalTournament ] , navigation . agendaDestination = = . tenup {
FooterButtonView ( " Tout récupérer " , role : . destructive ) {
federalTournaments . forEach { federalTournament in
_importFederalTournamentBatch ( federalTournament : federalTournament )
HStack {
FooterButtonView ( " Tout récupérer " , role : . destructive ) {
Task {
sectionImporting = sectionIndex
for federalTournament in federalTournaments {
await _importFederalTournamentBatch ( federalTournament : federalTournament )
}
sectionImporting = nil
}
}
if sectionImporting = = sectionIndex {
Spacer ( )
ProgressView ( )
}
}
}
@ -293,6 +304,32 @@ struct EventListView: View {
} label : {
Text ( " Utiliser les réglages par défaut " )
}
Button {
Task {
await pcTournaments . concurrentForEach { tournament in
if let tenupId = tournament . eventObject ( ) ? . tenupId {
let umpireData = try ? await NetworkFederalService . shared . getUmpireData ( idTournament : tenupId )
if let email = umpireData ? . email {
tournament . umpireCustomMail = email
}
if let name = umpireData ? . name {
tournament . umpireCustomContact = name . lowercased ( ) . capitalized
}
if let phone = umpireData ? . phone {
tournament . umpireCustomPhone = phone
}
}
}
await MainActor . run {
dataStore . tournaments . addOrUpdate ( contentOfs : pcTournaments )
}
}
} label : {
Text ( " Récuperer via Tenup " )
}
} label : {
Text ( " Informations de contact Juge-Arbitre " )
}
@ -406,32 +443,72 @@ struct EventListView: View {
return dataStore . events . first ( where : { $0 . tenupId = = tournament . id . string } )
}
private func _importFederalTournamentBatch ( federalTournament : FederalTournament ) {
private func _importFederalTournamentBatch ( federalTournament : FederalTournament ) async {
let templateTournament = Tournament . getTemplateTournament ( )
let newTournaments = federalTournament . tournaments . compactMap { tournament in
_create ( federalTournament : federalTournament , existingTournament : _event ( of : federalTournament ) ? . existingBuild ( tournament ) , build : tournament , templateTournament : templateTournament )
let newTournaments = await withTaskGroup ( of : Tournament ? . self ) { group in
var tournaments : [ Tournament ] = [ ]
for tournament in federalTournament . tournaments {
group . addTask {
await self . _create (
federalTournament : federalTournament ,
existingTournament : self . _event ( of : federalTournament ) ? . existingBuild ( tournament ) ,
build : tournament ,
templateTournament : templateTournament
)
}
}
for await tournament in group {
if let tournament = tournament {
tournaments . append ( tournament )
}
}
return tournaments
}
dataStore . tournaments . addOrUpdate ( contentOfs : newTournaments )
}
private func _create ( federalTournament : FederalTournament , existingTournament : Tournament ? , build : any TournamentBuildHolder , templateTournament : Tournament ? ) -> Tournament ? {
if existingTournament = = nil {
let event = federalTournament . getEvent ( )
let newTournament = Tournament . newEmptyInstance ( )
newTournament . event = event . id
// t o d o
// n e w T o u r n a m e n t . u m p i r e M a i l ( )
// n e w T o u r n a m e n t . j s o n D a t a = j s o n D a t a
newTournament . tournamentLevel = build . level
newTournament . tournamentCategory = build . category
newTournament . federalTournamentAge = build . age
newTournament . dayDuration = federalTournament . dayDuration
newTournament . startDate = federalTournament . startDate . atBeginningOfDay ( hourInt : 9 )
newTournament . initSettings ( templateTournament : templateTournament )
return newTournament
} else {
return nil
private func _create ( federalTournament : FederalTournament , existingTournament : Tournament ? , build : any TournamentBuildHolder , templateTournament : Tournament ? ) async -> Tournament ? {
guard existingTournament = = nil else { return nil }
let event = federalTournament . getEvent ( )
let newTournament = Tournament . newEmptyInstance ( )
newTournament . event = event . id
// t o d o
// n e w T o u r n a m e n t . j s o n D a t a = j s o n D a t a
newTournament . tournamentLevel = build . level
newTournament . tournamentCategory = build . category
newTournament . federalTournamentAge = build . age
newTournament . dayDuration = federalTournament . dayDuration
newTournament . startDate = federalTournament . startDate . atBeginningOfDay ( hourInt : 9 )
newTournament . initSettings ( templateTournament : templateTournament )
if federalTournament . umpireLabel ( ) . isEmpty = = false {
newTournament . umpireCustomContact = federalTournament . umpireLabel ( )
}
if federalTournament . mailLabel ( ) . isEmpty = = false {
newTournament . umpireCustomMail = federalTournament . mailLabel ( )
}
do {
let umpireData = try await NetworkFederalService . shared . getUmpireData ( idTournament : federalTournament . id )
if let email = umpireData . email {
newTournament . umpireCustomMail = email
}
if let name = umpireData . name {
newTournament . umpireCustomContact = name . lowercased ( ) . capitalized
}
if let phone = umpireData . phone {
newTournament . umpireCustomPhone = phone
}
} catch {
Logger . error ( error )
}
return newTournament
}
}