private async void getSalles(object sender, RoutedEventArgs e) { string campusXML; //On récupère d'abord la liste des campus dispo, fraîche de l'API Boolean isOnline = await API.IsOnlineAsync(); if (isOnline) { salleGrid.Visibility = Visibility.Visible; ComboBoxes.Visibility = Visibility.Visible; NoInternetSplash.Visibility = Visibility.Collapsed; campusXML = await API.GetInfoAsync("/api/campus/sites"); ArelAPI.DataStorage.saveData("campuses", campusXML); System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); //creation d'une instance xml doc.LoadXml(campusXML); //chargement de la variable //Structure de l'xml renvoyé par l'API: Liste de sites ayant chacun un attribut "id" et un innerText correspondand au nom du campus foreach (System.Xml.XmlNode site in doc.FirstChild.ChildNodes) { campusList.Add(new Campus(site.Attributes[0].Value, site.InnerText)); } //On met le premier campus de la liste en valeur par défaut, sauf si l'utilisateur a une préférence SelectedComboBoxOption = null; if (ArelAPI.DataStorage.isset("favCampus")) { string idFav = ArelAPI.DataStorage.getData("favCampus"); foreach (Campus c in campusList) { if (c.getId() == idFav) { SelectedComboBoxOption = c; } } } if (SelectedComboBoxOption == null) { SelectedComboBoxOption = campusList[0]; } this.Bindings.Update(); UpdateLayout(); } else //Aucun intérêt à voir les salles dispos si on a pas internet pour avoir des datas à jour, on affiche le splash d'erreur { //API.renewAccessToken(); salleGrid.Visibility = Visibility.Collapsed; NoInternetSplash.Visibility = Visibility.Visible; ComboBoxes.Visibility = Visibility.Collapsed; UpdateLayout(); } }
private async void initPage() { Boolean isOnline = await API.IsOnlineAsync(); string absencesXml = ""; if (isOnline) { absencesXml = await API.GetInfoAsync("/api/me/absences"); ArelAPI.DataStorage.saveData("absences", absencesXml); LoadingIndicator.IsActive = true; buildAbsences(absencesXml); } else { AbsenceStack.Visibility = Visibility.Collapsed; NoInternetSplash.Visibility = Visibility.Visible; } }
/* * Les fonctions ci-dessous concernent le dessin de l'EDT sur des élements XAML Grid. */ private async void UpdatePlanningAsync() { Boolean isOnline = await API.IsOnlineAsync(); if (isOnline) { //now = now.AddDays(daysExtra); string xmlToday = await API.GetInfoAsync("/api/planning/slots?start=" + now.ToString("yyyy-MM-dd") + "&end=" + now.AddDays(1).ToString("yyyy-MM-dd")); string xmlTomorrow = await API.GetInfoAsync("/api/planning/slots?start=" + now.AddDays(1).ToString("yyyy-MM-dd") + "&end=" + now.AddDays(2).ToString("yyyy-MM-dd")); string xmlAfterTomorrow = await API.GetInfoAsync("/api/planning/slots?start=" + now.AddDays(2).ToString("yyyy-MM-dd") + "&end=" + now.AddDays(3).ToString("yyyy-MM-dd")); ArelAPI.DataStorage.saveData("planningToday", xmlToday); ArelAPI.DataStorage.saveData("planningTomorrow", xmlTomorrow); ArelAPI.DataStorage.saveData("planningAfterTomorrow", xmlAfterTomorrow); } DrawPlanning(grid); DrawPlanning(grid2); DrawPlanning(grid3); await WritePlanningAsync(ArelAPI.DataStorage.getData("planningToday"), grid); await WritePlanningAsync(ArelAPI.DataStorage.getData("planningTomorrow"), grid2); await WritePlanningAsync(ArelAPI.DataStorage.getData("planningAfterTomorrow"), grid3); FirstGrid.Visibility = Visibility.Visible; SecondGrid.Visibility = Visibility.Visible; ThirdGrid.Padding = new Thickness(0); //Trick: comme la visibilité est overridée par le visualstatemanager du XAML, on joue sur le padding à la place pour cacher la grille pendant le loading. ThirdDay.Text = "Planning du " + now.AddDays(2).ToString("dd/MM/yy"); LoadingIndicator.Visibility = Visibility.Collapsed; UpdateLayout(); }
private async void InitializeUserInfo() { Boolean isOnline = await API.IsOnlineAsync(); if (isOnline) { //màj des données de l'utilisateur string infoUser = await API.GetInfoAsync("/api/me"); ArelAPI.DataStorage.saveData("user", infoUser); //Récup du nom de l'utilisateur pour affichage string userName = API.GetUserFullName(ArelAPI.DataStorage.getData("user"), "Utilisateur d'AREL"); HamburgerButton.Content = userName; UpdateLayout(); } }
private async void initPage() { Boolean isOnline = await API.IsOnlineAsync(); if (isOnline) { string notesXml = await API.GetInfoAsync("/api/me/marks"); ArelAPI.DataStorage.saveData("notes", notesXml); buildNotes(notesXml); } else if (ArelAPI.DataStorage.isset("notes")) { string notesXml = ArelAPI.DataStorage.getData("notes"); buildNotes(notesXml); } else { NoInternetSplash.Visibility = Visibility.Visible; } }
public async void Run(IBackgroundTaskInstance taskInstance) { Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings; BackgroundTaskDeferral _deferral = taskInstance.GetDeferral(); ArelAPI.Connector API = new ArelAPI.Connector(); Boolean canUpdate = true; Boolean isOnline = await API.IsOnlineAsync(); if (!isOnline) //Si le token n'est plus valide, on le rafraîchit avec le refreshToken { bool isReLogged = await API.RenewAccessTokenAsync(); if (!isReLogged) //Si on peut rafraîchir le jeton, on continue, sinon on notifie l'utilisateur qu'il doit ré-entrer ses logins { Show(new ToastContent() { Scenario = ToastScenario.Default, Visual = new ToastVisual() { TitleText = new ToastText() { Text = "AREL - Synchronisation Planning" }, BodyTextLine1 = new ToastText() { Text = "Vos identifiants ont expirés." }, BodyTextLine2 = new ToastText() { Text = "Reconnectez-vous pour maintenir la synchronisation." } }, }); canUpdate = false; } } //On appelle la fonction de màj du calendrier windows qui est dans Planning.xaml.cs if (canUpdate) { API.UpdateWindowsCalendar(DateTime.Now.ToString("yyyy-MM-dd"), DateTime.Now.AddDays(14).ToString("yyyy-MM-dd"), API.GetUserFullName(ArelAPI.DataStorage.getData("user"), "Mon Planning AREL")); } //On re-enregistre la tâche si le paramètre est présent if (bool.Parse(ArelAPI.DataStorage.getData("backgroundTask"))) { var builder = new BackgroundTaskBuilder(); TimeTrigger hourlyTrigger = new TimeTrigger(120, false); //On rafraîchit le planning toutes les 2 heures. builder.Name = "ARELSyncPlanningTask"; builder.TaskEntryPoint = "SyncTask.ARELPlanningBackgroundTask"; builder.SetTrigger(hourlyTrigger); builder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable)); builder.Register(); } _deferral.Complete(); }
/// <summary> /// Invoqué lorsque l'application est lancée normalement par l'utilisateur final. D'autres points d'entrée /// seront utilisés par exemple au moment du lancement de l'application pour l'ouverture d'un fichier spécifique. /// </summary> /// <param name="e">Détails concernant la requête et le processus de lancement.</param> protected override async void OnLaunched(LaunchActivatedEventArgs e) { #if DEBUG if (System.Diagnostics.Debugger.IsAttached) { this.DebugSettings.EnableFrameRateCounter = false; } #endif Frame rootFrame = Window.Current.Content as Frame; // Ne répétez pas l'initialisation de l'application lorsque la fenêtre comporte déjà du contenu, // assurez-vous juste que la fenêtre est active if (rootFrame == null) { // Créez un Frame utilisable comme contexte de navigation et naviguez jusqu'à la première page rootFrame = new Frame(); rootFrame.NavigationFailed += OnNavigationFailed; // Placez le frame dans la fenêtre active Window.Current.Content = rootFrame; } if (e.PrelaunchActivated == false) { if (rootFrame.Content == null) { // Quand la pile de navigation n'est pas restaurée, accédez à la première page, // puis configurez la nouvelle page en transmettant les informations requises en tant que // paramètre if (localSettings.Values["token"] != null && localSettings.Values["stayConnect"] != null) { Boolean isOnline = await API.IsOnlineAsync(); if (!isOnline) //On récupère un nouveau jeton d'accès pour cette session si l'ancien est mort { //Si on est juste sans internet, on peut assumer que l'utilisateur est toujours login, et passer sur l'acceuil en mode offline. if (!NetworkInterface.GetIsNetworkAvailable()) { rootFrame.Navigate(typeof(acceuil), e.Arguments); } else { bool isReLogged = await API.RenewAccessTokenAsync(); if (isReLogged) //Si ça marche, on va à l'accueil { rootFrame.Navigate(typeof(acceuil), e.Arguments); } else //Sinon, on renvoie à la mainpage { rootFrame.Navigate(typeof(MainPage), e.Arguments); } } } else { rootFrame.Navigate(typeof(acceuil), e.Arguments); } } else { rootFrame.Navigate(typeof(MainPage), e.Arguments); } } // Vérifiez que la fenêtre actuelle est active Window.Current.Activate(); } }