예제 #1
0
        /// <summary>
        /// Inicia o processo de atualização
        /// </summary>
        public Atualizar(MainWindowViewModel mainwindowviewmodel)
        {
            MainWindowViewModel = mainwindowviewmodel;
            AtualizarModel      = MainWindowViewModel.AbaAtualizar.AtualizarModel;
            ConfiguracaoModel   = MainWindowViewModel.AbaConfiguracoes.ConfiguracaoModel;
            Ftp = new Ftp();

            TimerProximaAtualizacao           = new System.Timers.Timer();
            TimerProximaAtualizacao.AutoReset = false;
            TimerProximaAtualizacao.Elapsed  += Execute;
        }
예제 #2
0
        /// <summary>
        /// Busca as versões para atualização de acordo com a versão do cliente
        /// </summary>
        private async Task <bool> BuscaVersoes()
        {
            return(await Task.Run(() =>
            {
                try
                {
                    ListaSql = new List <Atualizacao>();
                    var RetornoFtp = Ftp.GetFileList($"{FtpPath}/rmenu/");

                    //-- Faz a formatação da string e adiciona na lista de SQLs para rodar
                    ListaSql = RetornoFtp.Where(row => row.EndsWith(".sql", StringComparison.OrdinalIgnoreCase))
                               .Select((row) => new Atualizacao
                    {
                        Versao = Convert.ToInt32(Regex.Replace(row.Substring(row.IndexOf("v_"), row.Length - row.IndexOf("v_")), "[^0-9]+", "")),
                        Arquivo = row,
                    })
                               .Where(row => row.Versao > AtualizarModel.Versao)
                               .OrderBy(row => row.Versao)
                               .ToList();

                    //-- Primeira versão Rmenu disponível
                    PrimeiraVersao = ListaSql.OrderBy(x => x.Versao)
                                     .Select(x => x.Versao)
                                     .FirstOrDefault();

                    //-- Última versão Rmnu disponível
                    UltimaVersao = ListaSql.OrderByDescending(x => x.Versao)
                                   .Select(x => x.Versao)
                                   .FirstOrDefault();

                    return true;
                }
                catch (Exception e)
                {
                    log.Error(e.Message);
                    MainWindowViewModel.AbaAtualizar.Status.StatusLabel.LabelContent = "Problemas ao buscar versões.";
                    return false;
                }
            }));
        }
예제 #3
0
        /// <summary>
        /// Roda Rmenu todos de uma vez e retorna a ultima versão
        /// </summary>
        private async Task <bool> AtualizarSql(PostoContext context, bool backup)
        {
            return(await Task.Run(async() =>
            {
                try
                {
                    await BuscaVersoes();

                    Rmenu = "";

                    MainWindowViewModel.AbaAtualizar.Status.StatusLabel.LabelContent = "Baixando o Rmenu...";
                    ListaSql.ForEach(row =>
                    {
                        Rmenu += Encoding.ASCII.GetString(Ftp.Download(($"{FtpPath}/rmenu/{row.Arquivo}"), MainWindowViewModel));
                    });
                    if (Rmenu != "")
                    {
                        if (backup)
                        {
                            MainWindowViewModel.AbaAtualizar.Status.BarraProgresso.ProgressoBarra2 = 17.5;

                            if (MainWindowViewModel.AbaConfiguracoes.ConfiguracaoModel.LocalPostgres == "")
                            {
                                throw new Exception("Não definido o diretório para do postgres para a rotina de backup do banco.");
                            }
                            else
                            {
                                MainWindowViewModel.AbaAtualizar.Status.StatusLabel.LabelContent = "Gerando backup do banco de dados";

                                if (!await ExecutaBackup())
                                {
                                    throw new Exception("Ocorreu um erro ao tentar gerar backup antes de atualizar o sistema.");
                                }
                            }
                        }

                        MainWindowViewModel.AbaAtualizar.Status.BarraProgresso.ProgressoBarra2 = 25;
                        MainWindowViewModel.AbaAtualizar.Status.BarraProgresso.IsIndeterminateBarra1 = true;
                        MainWindowViewModel.AbaAtualizar.Status.StatusLabel.LabelContent = "Executando Rmenu de v." + AtualizarModel.Versao.ToString() + " até v." + UltimaVersao.ToString() + "";

                        context.Query(Rmenu).ExecuteNonQuery();
                    }

                    MainWindowViewModel.Indicadores.AtualizouBanco = true;
                    MainWindowViewModel.AbaAtualizar.Status.BarraProgresso.IsIndeterminateBarra1 = false;
                }
                catch (Exception e)
                {
                    context.RollBack();
                    log.Error(e.Message);
                    MainWindowViewModel.AbaAtualizar.Status.StatusLabel.LabelContent = "Problemas ao rodar o Rmenu.";

                    return false;
                }
                finally
                {
                    context.Commit();

                    if (UltimaVersao <= 0)
                    {
                        UltimaVersao = AtualizarModel.Versao.GetValueOrDefault();
                    }
                }
                return true;
            }));
        }
예제 #4
0
        /// <summary>
        /// Atualização de arquivos
        /// </summary>
        private async Task <bool> AtualizarExe()
        {
            return(await Task.Run(() =>
            {
                try
                {
                    MainWindowViewModel.AbaAtualizar.Status.BarraProgresso.IsIndeterminateBarra1 = false;

                    var RetornoFtp = Ftp.GetFileList(FtpPath);

                    RetornoFtp.ForEach(arquivo =>
                    {
                        if (arquivo.EndsWith(".rar", StringComparison.OrdinalIgnoreCase) || arquivo.EndsWith(".zip", StringComparison.OrdinalIgnoreCase))
                        {
                            var FileLastModified = Ftp.GetFileLasModified(FtpPath + arquivo);

                            if (!FileLastModified.ToString().Equals(ConfiguracaoModel.VersaoArquivo))
                            {
                                MainWindowViewModel.AbaAtualizar.Status.StatusLabel.LabelContent = "Baixando arquivos da atualizaçãos...";
                                var arquivos = Ftp.Download(FtpPath + arquivo, MainWindowViewModel);

                                using (MemoryStream mem = new MemoryStream(arquivos))
                                    using (var file = ArchiveFactory.Open(mem))
                                    {
                                        var filesCount = 1;
                                        file.Entries.ToList().ForEach(entry =>
                                        {
                                            if (!entry.IsDirectory && !entry.Key.Contains("~$"))
                                            {
                                                string completeFileName = Path.Combine($@"{ConfiguracaoModel.LocalDiretorio}\Update", entry.Key);
                                                string directory = Path.GetDirectoryName(completeFileName);

                                                if (entry.Key != "")
                                                {
                                                    entry.WriteToDirectory($@"{ConfiguracaoModel.LocalDiretorio}\Update", new ExtractionOptions()
                                                    {
                                                        ExtractFullPath = true, Overwrite = true
                                                    });
                                                }

                                                MainWindowViewModel.AbaAtualizar.Status.StatusLabel.LabelContent = "Extraindo arquivo (" + filesCount + "/" + file.Entries.Count().ToString() + ")";
                                                MainWindowViewModel.AbaAtualizar.Status.BarraProgresso.ProgressoBarra1 = ((double)filesCount / file.Entries.Count()) * 100;

                                                filesCount++;
                                            }
                                        });
                                    }
                            }

                            ConfiguracaoModel.VersaoArquivo = FileLastModified.ToString().Trim();
                            ConfiguracaoModel.ToModel().GravarConfiguracao();
                            MainWindowViewModel.Indicadores.AtualizouExe = true;
                        }
                    });

                    return true;
                }
                catch (Exception e)
                {
                    log.Error(e.Message);
                    MainWindowViewModel.AbaAtualizar.Status.StatusLabel.LabelContent = "Problemas ao atualizar programas.";
                    return false;
                }
            }));
        }