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(); } }