diff --git a/.gitignore b/.gitignore index a9607ad..79709a0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ */.DS_Store **/*/.DS* +PadelClub/local.plist + build/ *.xcodeproj/.pbxuser diff --git a/PadelClub.xcodeproj/project.pbxproj b/PadelClub.xcodeproj/project.pbxproj index 2f0fc7c..e7bdc3c 100644 --- a/PadelClub.xcodeproj/project.pbxproj +++ b/PadelClub.xcodeproj/project.pbxproj @@ -38,6 +38,8 @@ C4A47DAD2B85FCCD00ADC637 /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A47DAC2B85FCCD00ADC637 /* User.swift */; }; C4A47DB12B86375E00ADC637 /* MainUserView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A47DB02B86375E00ADC637 /* MainUserView.swift */; }; C4A47DB32B86387500ADC637 /* AccountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A47DB22B86387500ADC637 /* AccountView.swift */; }; + C4EC6F572BE92CAC000CEAB4 /* local.plist in Resources */ = {isa = PBXBuildFile; fileRef = C4EC6F562BE92CAC000CEAB4 /* local.plist */; }; + C4EC6F592BE92D88000CEAB4 /* PListReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4EC6F582BE92D88000CEAB4 /* PListReader.swift */; }; FF025AD82BD0C10F00A86CF8 /* TeamHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF025AD72BD0C10F00A86CF8 /* TeamHeaderView.swift */; }; FF025ADB2BD0C2D000A86CF8 /* MatchTeamDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF025ADA2BD0C2D000A86CF8 /* MatchTeamDetailView.swift */; }; FF025ADD2BD0C94300A86CF8 /* FooterButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF025ADC2BD0C94300A86CF8 /* FooterButtonView.swift */; }; @@ -331,6 +333,8 @@ C4A47DAC2B85FCCD00ADC637 /* User.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = ""; }; C4A47DB02B86375E00ADC637 /* MainUserView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainUserView.swift; sourceTree = ""; }; C4A47DB22B86387500ADC637 /* AccountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountView.swift; sourceTree = ""; }; + C4EC6F562BE92CAC000CEAB4 /* local.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = local.plist; sourceTree = ""; }; + C4EC6F582BE92D88000CEAB4 /* PListReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PListReader.swift; sourceTree = ""; }; FF025AD72BD0C10F00A86CF8 /* TeamHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeamHeaderView.swift; sourceTree = ""; }; FF025ADA2BD0C2D000A86CF8 /* MatchTeamDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MatchTeamDetailView.swift; sourceTree = ""; }; FF025ADC2BD0C94300A86CF8 /* FooterButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FooterButtonView.swift; sourceTree = ""; }; @@ -612,6 +616,7 @@ children = ( FF0CA5742BDA4AE10080E843 /* PrivacyInfo.xcprivacy */, FFA6D78A2BB0BEB3003A31F3 /* Info.plist */, + C4EC6F562BE92CAC000CEAB4 /* local.plist */, C425D4002B6D249D002A7B48 /* PadelClubApp.swift */, C45BAE3A2BC6DF10002EEC8A /* SyncedProducts.storekit */, FFD784002B91BF79000F62A6 /* Launch Screen.storyboard */, @@ -1195,6 +1200,7 @@ FF1DC5582BAB767000FD8220 /* Tips.swift */, C49EF01A2BD6A1E80077B5AA /* URLs.swift */, FF6EC9072B947A1E00EA7F5A /* Network */, + C4EC6F582BE92D88000CEAB4 /* PListReader.swift */, ); path = Utils; sourceTree = ""; @@ -1362,6 +1368,7 @@ FF0EC5592BB195E20056B6D1 /* CLASSEMENT-PADEL-DAMES-03-2023.csv in Resources */, C45BAE3B2BC6DF10002EEC8A /* SyncedProducts.storekit in Resources */, FF0EC55A2BB195E20056B6D1 /* CLASSEMENT PADEL MESSIEURS_2-07-2023.csv in Resources */, + C4EC6F572BE92CAC000CEAB4 /* local.plist in Resources */, FF0EC55B2BB195E20056B6D1 /* CLASSEMENT-PADEL-DAMES-01-2023.csv in Resources */, FF0EC55C2BB195E20056B6D1 /* CLASSEMENT PADEL DAMES-08-2023.csv in Resources */, FF0EC55D2BB195E20056B6D1 /* CLASSEMENT-PADEL-DAMES-04-2023.csv in Resources */, @@ -1616,6 +1623,7 @@ FF70916A2B90F95E00AB08DA /* DateBoxView.swift in Sources */, FF5D0D722BB3EFA5005CB568 /* LearnMoreSheetView.swift in Sources */, FFF8ACD42B92392C008466FA /* SourceFileManager.swift in Sources */, + C4EC6F592BE92D88000CEAB4 /* PListReader.swift in Sources */, FF0EC5222BB173E70056B6D1 /* UpdateSourceRankDateView.swift in Sources */, FF025AE72BD1111000A86CF8 /* GlobalSettingsView.swift in Sources */, C4A47D912B7BBBEC00ADC637 /* Guard.swift in Sources */, diff --git a/PadelClub/Data/DataStore.swift b/PadelClub/Data/DataStore.swift index b792c41..2bbf3a6 100644 --- a/PadelClub/Data/DataStore.swift +++ b/PadelClub/Data/DataStore.swift @@ -69,15 +69,21 @@ class DataStore: ObservableObject { init() { let store = Store.main - store.synchronizationApiURL = "http://127.0.0.1:8000/api/" -// store.synchronizationApiURL = "https://xlr.alwaysdata.net/api/" + store.synchronizationApiURL = "https://xlr.alwaysdata.net/api/" + var synchronized : Bool = true -// store.addMigration(Migration(version: 2)) -// store.addMigration(Migration(version: 2)) -// store.addMigration(Migration(version: 3)) + #if DEBUG + if let server = PListReader.readString(plist: "local", key: "server") { + store.synchronizationApiURL = server + } + if let sync = PListReader.readBool(plist: "local", key: "synchronized") { + synchronized = sync + } + #endif + + Logger.log("Sync URL: \(store.synchronizationApiURL ?? "none"), sync: \(synchronized) ") let indexed : Bool = true - let synchronized : Bool = true self.clubs = store.registerCollection(synchronized: synchronized, indexed: indexed) self.courts = store.registerCollection(synchronized: synchronized, indexed: indexed) self.tournaments = store.registerCollection(synchronized: synchronized, indexed: indexed) diff --git a/PadelClub/Utils/PListReader.swift b/PadelClub/Utils/PListReader.swift new file mode 100644 index 0000000..0ada740 --- /dev/null +++ b/PadelClub/Utils/PListReader.swift @@ -0,0 +1,47 @@ +// +// PListReader.swift +// PadelClub +// +// Created by Laurent Morvillier on 06/05/2024. +// + +import Foundation + +class PListReader { + + static func dictionary(plist: String) -> [String: Any]? { + if let plistPath = Bundle.main.path(forResource: plist, ofType: "plist") { + // Read plist file into Data + if let plistData = FileManager.default.contents(atPath: plistPath) { + do { + // Deserialize plist data into a dictionary + if let plistDictionary = try PropertyListSerialization.propertyList(from: plistData, options: [], format: nil) as? [String: Any] { + return plistDictionary + } + } catch { + print("Error reading plist data: \(error)") + } + } else { + print("Failed to read plist file at path: \(plistPath)") + } + } else { + print("Plist file 'Data.plist' not found in bundle") + } + return nil + + } + + static func readString(plist: String, key: String) -> String? { + if let dictionary = self.dictionary(plist: plist) { + return dictionary[key] as? String + } + return nil + } + + static func readBool(plist: String, key: String) -> Bool? { + if let dictionary = self.dictionary(plist: plist) { + return dictionary[key] as? Bool + } + return nil + } +} diff --git a/PadelClub/Views/User/LoginView.swift b/PadelClub/Views/User/LoginView.swift index 3a884b0..554733c 100644 --- a/PadelClub/Views/User/LoginView.swift +++ b/PadelClub/Views/User/LoginView.swift @@ -12,8 +12,8 @@ struct LoginView: View { @EnvironmentObject var dataStore: DataStore - @State var username: String = "laurent" - @State var password: String = "StaxKikoo12" + @State var username: String = "" + @State var password: String = "" @State var isLoading: Bool = false @State var showEmailPopup: Bool = false @@ -78,6 +78,16 @@ struct LoginView: View { } .navigationTitle("Login") + .onAppear { + #if DEBUG + if let username = PListReader.readString(plist: "local", key: "username") { + self.username = username + } + if let password = PListReader.readString(plist: "local", key: "password") { + self.password = password + } + #endif + } } fileprivate func _login() {