Example #1
0
        public static bool UpdateData()
        {
            /*
             * telecharger le fichier manifest
             * si DataGeneration > manifest.DataGeneration
             *  signaler l'erreur a HubGovernor
             *  sortir
             * si DataGeneration < manifest.DataGeneration
             *  telecharger manifest.data
             *  pour chaque entrées E dans manifest.data et tant que DataGeneration < manifest.DataGeneration
             *      si DataGeneration == E.PreDataGeneration
             *          Appliquer les maj des tables
             *          mettre a jours DataGeneration
             */

            string manifest = Path.GetTempFileName();

            using (new AutoReleaser(() => File.Delete(manifest)))
                try
                {
                    var netEngin = new NetEngin(Program.NetworkSettings);
                    netEngin.Download(manifest, Urls.ManifestURL);
                    IUpdateManifest updateManifest = UpdateEngin.ReadUpdateManifest(manifest);

                    string log = "Recherche de mise à jour des données. Version actulle des données: " +
                                 $"{Program.Settings.DataGeneration}. ";


                    if (updateManifest.DataGeneration == Program.Settings.DataGeneration)
                    {
                        Program.DialogManager.PostLog(log + " Les données sont à jour", false);
                        return(true);
                    }

                    if (Program.Settings.UpdateKey != updateManifest.UpdateKey)
                    {
                        if (Program.Settings.UpdateKey == 0)
                        {
                            Program.Settings.UpdateKey = updateManifest.UpdateKey;
                        }
                        else
                        {
                            Log.LogEngin.PushFlash(AppText.ERR_UPDATEKEY);
                            Dbg.Log("Update key mismatch!");

                            Program.DialogManager.PostLog(log + AppText.ERR_UPDATEKEY, true);

                            return(false);
                        }
                    }

                    //TODO: signaler l'erreur si DataGeneration < manifest.DataGeneration

                    string dataManifest = Path.GetTempFileName();

                    using (Log.LogEngin.PushMessage("Installation des mises à jour..."))
                        using (new AutoReleaser(() => File.Delete(dataManifest)))
                        {
                            netEngin.Download(dataManifest, Urls.DataManifestURL);

                            var uris = new List <UpdateURI>(UpdateEngin.ReadDataManifest(dataManifest, Program.Settings.DataGeneration));

                            foreach (UpdateURI uu in uris.OrderBy(u => u.DataPreGeneration))
                            {
                                if (uu.DataPreGeneration == Program.Settings.DataGeneration)
                                {
                                    string updateFile = Path.GetTempFileName();
                                    using (new AutoReleaser(() => File.Delete(updateFile)))
                                    {
                                        netEngin.Download(updateFile, Urls.DataUpdateDirURL + uu.FileURI);
                                        ApplyUpdate(updateFile);
                                        Program.Settings.DataGeneration = uu.DataPostGeneration;
                                    }
                                }
                            }

                            DataUpdated?.Invoke();
                        }

                    Program.DialogManager.PostLog(log + "Mises à jour installées. " +
                                                  $"Nouvelle version des données: {Program.Settings.DataGeneration}", false);

                    Assert(Program.Settings.DataGeneration == updateManifest.DataGeneration);
                }
                catch (Exception ex)
                {
                    Dbg.Log("Data update: " + ex.Message);
                }

            return(true);
        }