Beispiel #1
0
        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();
        }
Beispiel #2
0
        /// <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();
            }
        }