sync_v2
Laurent 7 months ago
parent bee68f916f
commit c0ab6418d8
  1. 13
      PadelClub/Data/DataStore.swift
  2. 29
      PadelClub/Data/Tournament.swift
  3. 8
      PadelClub/Data/TournamentStore.swift
  4. 5
      PadelClub/Views/Navigation/Toolbox/DebugSettingsView.swift
  5. 106
      PadelClub/Views/Tournament/Screen/InscriptionManagerView.swift

@ -15,17 +15,14 @@ class DataStore: ObservableObject {
@Published var user: CustomUser = CustomUser.placeHolder() { @Published var user: CustomUser = CustomUser.placeHolder() {
didSet { didSet {
let loggedUser = StoreCenter.main.userId != nil let loggedUser = StoreCenter.main.isAuthenticated
StoreCenter.main.collectionsCanSynchronize = loggedUser
if loggedUser { if loggedUser {
if self.user.id != self.userStorage.item()?.id { if self.user.id != self.userStorage.item()?.id {
self.userStorage.setItemNoSync(self.user) self.userStorage.setItemNoSync(self.user)
if StoreCenter.main.collectionsCanSynchronize { StoreCenter.main.initialSynchronization(clear: false)
StoreCenter.main.initialSynchronization() self._fixMissingClubCreatorIfNecessary(self.clubs)
self._fixMissingClubCreatorIfNecessary(self.clubs) self._fixMissingEventCreatorIfNecessary(self.events)
self._fixMissingEventCreatorIfNecessary(self.events)
}
} }
} else { } else {
self._temporaryLocalUser.item = self.user self._temporaryLocalUser.item = self.user
@ -224,8 +221,6 @@ class DataStore: ObservableObject {
fileprivate func _localDisconnect() { fileprivate func _localDisconnect() {
StoreCenter.main.collectionsCanSynchronize = false
let tournamendIds: [String] = self.tournaments.map { $0.id } let tournamendIds: [String] = self.tournaments.map { $0.id }
TournamentLibrary.shared.reset() TournamentLibrary.shared.reset()

@ -2406,17 +2406,24 @@ defer {
func insertOnServer() throws { func insertOnServer() throws {
// DataStore.shared.tournaments.writeChangeAndInsertOnServer(instance: self) DataStore.shared.tournaments.writeChangeAndInsertOnServer(instance: self)
//
// for teamRegistration in self.tournamentStore?.teamRegistrations { if let teamRegistrations = self.tournamentStore?.teamRegistrations {
// teamRegistration.insertOnServer() for teamRegistration in teamRegistrations {
// } teamRegistration.insertOnServer()
// for groupStage in self.tournamentStore?.groupStages { }
// groupStage.insertOnServer() }
// }
// for round in self.tournamentStore.rounds { if let groupStages = self.tournamentStore?.groupStages {
// round.insertOnServer() for groupStage in groupStages {
// } groupStage.insertOnServer()
}
}
if let rounds = self.tournamentStore?.rounds {
for round in rounds {
round.insertOnServer()
}
}
} }

@ -36,16 +36,8 @@ class TournamentStore: ObservableObject {
fileprivate func _initialize() { fileprivate func _initialize() {
var synchronized: Bool = true
let indexed: Bool = true let indexed: Bool = true
#if DEBUG
if let sync = PListReader.readBool(plist: "local", key: "synchronized") {
synchronized = sync
}
#endif
StoreCenter.main.collectionsCanSynchronize = synchronized
self.groupStages = self.store.registerSynchronizedCollection(indexed: indexed) self.groupStages = self.store.registerSynchronizedCollection(indexed: indexed)
self.rounds = self.store.registerSynchronizedCollection(indexed: indexed) self.rounds = self.store.registerSynchronizedCollection(indexed: indexed)
self.teamRegistrations = self.store.registerSynchronizedCollection(indexed: indexed) self.teamRegistrations = self.store.registerSynchronizedCollection(indexed: indexed)

@ -25,7 +25,6 @@ struct DebugSettingsView: View {
LabeledContent("Token", value: self._token) LabeledContent("Token", value: self._token)
LabeledContent("Server", value: self._apiURL) LabeledContent("Server", value: self._apiURL)
LabeledContent("Synchronized", value: self._synchronized) LabeledContent("Synchronized", value: self._synchronized)
LabeledContent("CollectionsCanSynchronize", value: self._canSynchronize)
} }
} }
} }
@ -55,10 +54,6 @@ struct DebugSettingsView: View {
} }
} }
fileprivate var _canSynchronize: String {
return "\(StoreCenter.main.collectionsCanSynchronize)"
}
fileprivate var _wsPingStatus: String { fileprivate var _wsPingStatus: String {
return "\(StoreCenter.main.websocketPingStatus)" return "\(StoreCenter.main.websocketPingStatus)"
} }

@ -1048,59 +1048,59 @@ struct InscriptionManagerView: View {
} }
} }
@ViewBuilder // @ViewBuilder
private func _prioritizeClubMembersButton() -> some View { // private func _prioritizeClubMembersButton() -> some View {
@Bindable var tournament = tournament // @Bindable var tournament = tournament
if let federalClub = tournament.club() { // if let federalClub = tournament.club() {
Menu { // Menu {
Picker(selection: $tournament.prioritizeClubMembers) { // Picker(selection: $tournament.prioritizeClubMembers) {
Text("Oui").tag(true) // Text("Oui").tag(true)
Text("Non").tag(false) // Text("Non").tag(false)
} label: { // } label: {
//
} // }
.labelsHidden() // .labelsHidden()
//
Divider() // Divider()
NavigationLink { // NavigationLink {
ClubsView() { club in // ClubsView() { club in
if let event = tournament.eventObject() { // if let event = tournament.eventObject() {
event.club = club.id // event.club = club.id
do { // do {
try dataStore.events.addOrUpdate(instance: event) // try dataStore.events.addOrUpdate(instance: event)
} catch { // } catch {
Logger.error(error) // Logger.error(error)
} // }
} // }
_save() // _save()
} // }
} label: { // } label: {
Text("Changer de club") // Text("Changer de club")
} // }
} label: { // } label: {
Text("Membres prioritaires") // Text("Membres prioritaires")
Text(federalClub.acronym) // Text(federalClub.acronym)
} // }
Divider() // Divider()
} else { // } else {
NavigationLink { // NavigationLink {
ClubsView() { club in // ClubsView() { club in
if let event = tournament.eventObject() { // if let event = tournament.eventObject() {
event.club = club.id // event.club = club.id
do { // do {
try dataStore.events.addOrUpdate(instance: event) // try dataStore.events.addOrUpdate(instance: event)
} catch { // } catch {
Logger.error(error) // Logger.error(error)
} // }
} // }
_save() // _save()
} // }
} label: { // } label: {
Text("Identifier le club") // Text("Identifier le club")
} // }
Divider() // Divider()
} // }
} // }
private func _teamFooterView(_ team: TeamRegistration) -> some View { private func _teamFooterView(_ team: TeamRegistration) -> some View {
HStack { HStack {

Loading…
Cancel
Save