예제 #1
0
        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();
            }
        }
예제 #2
0
        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;
            }
        }
예제 #3
0
        /*
         * 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();
        }
예제 #4
0
        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();
            }
        }
예제 #5
0
        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;
            }
        }
예제 #6
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();
        }
예제 #7
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();
            }
        }