diff --git a/PadelClub/Data/Coredata/Persistence.swift b/PadelClub/Data/Coredata/Persistence.swift index e5953b6..56ac96e 100644 --- a/PadelClub/Data/Coredata/Persistence.swift +++ b/PadelClub/Data/Coredata/Persistence.swift @@ -99,6 +99,7 @@ class PersistenceController: NSObject { func batchInsertPlayers(_ importedPlayers: [FederalPlayer], importingDate: Date) async { guard !importedPlayers.isEmpty else { return } let context = newTaskContext() + context.performAndWait { context.transactionAuthor = PersistenceController.remoteDataImportAuthorName @@ -121,7 +122,16 @@ class PersistenceController: NSObject { // 1 var index = 0 let total = imported.count - + let replacements: [(Character, Character)] = [("Á", "ç"), ("‡", "à"), ("Ù", "ô"), ("Ë", "è"), ("Ó", "î"), ("Î", "ë"), ("…", "É"), ("Ô", "ï"), ("È", "é"), ("«", "Ç"), ("»", "È")] + + + let replacementsCharacters = replacements + var fixApril2024 = false + //april 04-2024 bug with accent characters / adobe / fft + if URL.importDateFormatter.string(from: importingDate) == "04-2024" { + fixApril2024 = true + } + // 2 let batchInsert = NSBatchInsertRequest( entity: ImportedPlayer.entity()) { (managedObject: NSManagedObject) -> Bool in @@ -133,15 +143,34 @@ class PersistenceController: NSObject { let data = imported[index] importedPlayer.license = data.license importedPlayer.ligueName = data.ligue + if fixApril2024 { + importedPlayer.ligueName?.replace(characters: replacementsCharacters) + } + importedPlayer.rank = Int64(data.rank) importedPlayer.points = data.points ?? 0 importedPlayer.assimilation = data.assimilation importedPlayer.country = data.country + if fixApril2024 { + importedPlayer.country?.replace(characters: replacementsCharacters) + } importedPlayer.tournamentCount = Int64(data.tournamentCount ?? 0) importedPlayer.lastName = data.lastName + if fixApril2024 { + importedPlayer.lastName?.replace(characters: replacementsCharacters) + } importedPlayer.firstName = data.firstName + if fixApril2024 { + importedPlayer.firstName?.replace(characters: replacementsCharacters) + } importedPlayer.fullName = data.firstName + " " + data.lastName + if fixApril2024 { + importedPlayer.fullName?.replace(characters: replacementsCharacters) + } importedPlayer.clubName = data.club + if fixApril2024 { + importedPlayer.clubName?.replace(characters: replacementsCharacters) + } importedPlayer.clubCode = data.clubCode.replaceCharactersFromSet(characterSet: .whitespaces) importedPlayer.male = data.isMale importedPlayer.importDate = importingDate diff --git a/PadelClub/Data/GroupStage.swift b/PadelClub/Data/GroupStage.swift index c703675..edca863 100644 --- a/PadelClub/Data/GroupStage.swift +++ b/PadelClub/Data/GroupStage.swift @@ -98,7 +98,16 @@ class GroupStage: ModelObject, Storable { func scoreLabel(forGroupStagePosition groupStagePosition: Int) -> String? { if let scoreData = _score(forGroupStagePosition: groupStagePosition) { - return "\(scoreData.wins)/\(scoreData.loses) " + scoreData.setDifference.formatted(.number.sign(strategy: .always(includingZero: false))) + let hideGameDifference = matchFormat.setsToWin == 1 + let setDifference = scoreData.setDifference.formatted(.number.sign(strategy: .always(includingZero: false))) + let gameDifference = scoreData.gameDifference.formatted(.number.sign(strategy: .always(includingZero: false))) + var differenceAsString = "\n" + gameDifference + " jeux" + if hideGameDifference == false { + differenceAsString = "\n" + setDifference + " sets" + differenceAsString + } else { + differenceAsString = setDifference + } + return "\(scoreData.wins)/\(scoreData.loses) " + differenceAsString } else { return nil } diff --git a/PadelClub/Data/Match.swift b/PadelClub/Data/Match.swift index c3a9669..ae76ae3 100644 --- a/PadelClub/Data/Match.swift +++ b/PadelClub/Data/Match.swift @@ -423,12 +423,12 @@ class Match: ModelObject, Storable { let endedSetsOne = teamScoreTeam.score?.components(separatedBy: ",").compactMap({ Int($0) }) ?? matchFormat.defaultWalkOutScore(teamScoreTeam.isWalkOut()) let endedSetsTwo = teamScoreOtherTeam.score?.components(separatedBy: ",").compactMap({ Int($0) }) ?? matchFormat.defaultWalkOutScore(teamScoreOtherTeam.isWalkOut()) var setDifference : Int = 0 - if endedSetsOne.count == 1 { + let zip = zip(endedSetsOne, endedSetsTwo) + if matchFormat.setsToWin == 1 { setDifference = endedSetsOne[0] - endedSetsTwo[0] } else { - setDifference = endedSetsOne.filter { $0 == matchFormat.setFormat.scoreToWin }.count - endedSetsTwo.filter { $0 == matchFormat.setFormat.scoreToWin }.count + setDifference = zip.filter { $0 > $1 }.count - zip.filter { $1 > $0 }.count } - let zip = zip(endedSetsOne, endedSetsTwo) let gameDifference = zip.map { ($0, $1) }.map { $0.0 - $0.1 }.reduce(0,+) return (setDifference * reverseValue, gameDifference * reverseValue) } diff --git a/PadelClub/Extensions/String+Extensions.swift b/PadelClub/Extensions/String+Extensions.swift index 10f3a0e..9eca94f 100644 --- a/PadelClub/Extensions/String+Extensions.swift +++ b/PadelClub/Extensions/String+Extensions.swift @@ -141,3 +141,12 @@ extension String { extension LosslessStringConvertible { var string: String { .init(self) } } + +extension String { + //april 04-2024 bug with accent characters / adobe / fft + mutating func replace(characters: [(Character, Character)]) { + for (targetChar, replacementChar) in characters { + self = String(self.map { $0 == targetChar ? replacementChar : $0 }) + } + } +} diff --git a/PadelClub/ViewModel/SearchViewModel.swift b/PadelClub/ViewModel/SearchViewModel.swift index 5a03c11..6e4d80c 100644 --- a/PadelClub/ViewModel/SearchViewModel.swift +++ b/PadelClub/ViewModel/SearchViewModel.swift @@ -118,7 +118,7 @@ class SearchViewModel: ObservableObject, Identifiable { } func wordsPredicates() -> NSPredicate? { - let words = words().filter({ $0.isEmpty }) + let words = words().filter({ $0.isEmpty == false }) switch words.count { case 2: let predicates = [ diff --git a/PadelClub/Views/Score/SetInputView.swift b/PadelClub/Views/Score/SetInputView.swift index 724c1b1..ebcea2f 100644 --- a/PadelClub/Views/Score/SetInputView.swift +++ b/PadelClub/Views/Score/SetInputView.swift @@ -95,7 +95,7 @@ struct SetInputView: View { return [6,5] } if valueTeamOne == 5 && setFormat == .four { - return [3,2] + return [4,3] } } return setFormat.possibleValues