DaviMedrade / ETS2Sync-Helper-2

Euro Truck Simulator 2 job synchronizer for Multiplayer.
Other
2 stars 0 forks source link

sugestão para ferramenta de atualização #2

Open JhowDroid opened 8 years ago

JhowDroid commented 8 years ago

Considere futuramente criar uma maneira do aplicativo sozinho buscar novos updates e informar o usuário que existe nova atualização. Se o sistema informou que existe nova atualização, dentro do mesmo app pode existir a opção de baixar a atualização sem que o usuário precise abrir o navegador.

JhowDroid commented 8 years ago

acabei de ver que nesta versão esta funcionalidade já existe. Muito bom, David. já se antecipou! hehe

JhowDroid commented 8 years ago

David, estou reabrindo este ticket para um detalhe que ainda não está no app.

Se o sistema informou que existe nova atualização, dentro do mesmo app pode existir a opção de baixar a atualização sem que o usuário precise abrir o navegador.

Se você achar válido esta funcionalidade para aumentar a comodidade e melhorar a experiência do usuário com a facilidade geral que o programa propõe, veja se futuramente consegue implementá-la. Eu não tenho problemas com isso e até gosto de ver os "changelogs" no site para saber o que há de novo. Mas conhecemos os jogadores e que esta funcionalidade já seria um diferencial em relação a alguns programas que todos nós costumamos usar e que não tem e ainda é necessário acessar o site para baixar.

DaviMedrade commented 8 years ago

Ref. sugestão em #5, baixar o arquivo é a parte fácil, afinal o programa já baixa a lista de cargas e faz a verificação de versões, e isso é tudo por HTTP.

O problema é que não dá pra um executável substituir a si mesmo enquanto está em execução (no Linux isso seria trivial, mas o Windows dá um erro quando se tenta substituir um arquivo que está em uso).

Duas soluções possíveis:

  1. Salvar num local temporário e colocar na lista do Windows de arquivos a serem substituídos na próxima inicialização (e logo em seguida dizer ao usuário que ele precisa reiniciar o computador para terminar a atualização).
  2. Criar um segundo executável cujo único objetivo é fazer essa atualização.

Opção 1 nem rola. Opção 2 pode ser possível, mas não é alta prioridade porque adicionaria complexidade já que eu teria que “reinventar a roda” (afinal o navegador já é bem eficaz no que tange a baixar arquivos) e lidar com eventuais bugs nessa parte.

No momento o tempo que eu tenho é limitado, e antes de qualquer coisa minha prioridade é que o processo de sincronização em si funcione corretamente, e adicionar suporte para o ATS.

Em suma, isso não vai ser implementado imediatamente, mas um dia é possível que seja, por isso vou deixar essa issue aberta.

j1m1l0k0 commented 8 years ago

@davidsantos-br acredito que seja simples corrigir isto. basta dar um rename no arquivo atual e fazer uma chamada para outro script carrega-lo

j1m1l0k0 commented 8 years ago

Ou então criar um atualizador separado que mate o processo e copie o novo por cima.

DaviMedrade commented 8 years ago

Sim, mas fazer esse atualizador separado levaria tempo e se eu fizer em Ruby iria dobrar o tamanho do executável (já que ele teria que ser empacotado separadamente com sua própria cópia do Ruby). Fazer em C geraria um executável bem pequeno, mas demoraria ainda mais tempo.

Em todo caso, aparentemente há uma solução ainda mais simples:

http://stackoverflow.com/questions/9162969/how-can-a-c-binary-replace-itself

Eu imaginei que como o Windows não deixa o executável ser substituído, ele também não deixaria o executável ser renomeado, mas aparentemente ele deixa.

DaviMedrade commented 8 years ago

Ou seja, é possível que essa funcionalidade acabe sendo implementada bem antes do que eu imaginava (i.e. nos próximos dias, provavelmente).

JhowDroid commented 8 years ago

David, por isso o ticket foi aberto como sugestão. Quem sabe em um momento em que estiver com mais tempo e já tiver terminado tais prioridades.

Existe também uma 3ª solução. O aplicativo deve ter um pacote de instalação e uma pasta em "program files" para se alocar. Com um pacote de instalação e um app instalado ao invés de algo portable você tem mais opções. O programa sendo instalável não é algo que vá fazer ele deixar de ser prático. Na primeira instalação passará por um wizard, mas você ganha na atualização sem precisar de muitos passos para chegar ao objetivo. Quando se tem o pacote instalado em "program files" por exemplo, você baixa o novo pacote e ao finalizar o download pode ser executado o comando de atualizar que fará o close do programa atual e a instalação do pacote novo no mesmo local. Um processo automatizado pode ser usado com o comando hide na instalação para não precisar abrir nenhum wizard ou apenas uma barra de progresso. No final da instalação ele pode abrir automaticamente o aplicativo atualizado.

j1m1l0k0 commented 8 years ago

Maninho vou escrever o atualizador pra você em C ou C++ tanto faz... ai a gente testa beleza ? Existe um arquivo referência que compara as versôes ? tipo um version.txt que o atualizar vai lá e chega o velho com o programa atual ?

j1m1l0k0 commented 8 years ago

Faz o seguinte, essa solução do link acima parece o mais rápido. Se ele não der certo eu escrevo o atualizador ok ? @davidsantos-br

DaviMedrade commented 8 years ago

OK. Obrigado de qualquer forma, @trev0rbr.

j1m1l0k0 commented 8 years ago

@davidsantos-br tamo junto man !