Giter Site home page Giter Site logo

download-manager's Introduction

👋 Olá, eu sou o Oséias

Escrevi meu primeiro “Hello World” em 2004. Desde então venho trabalhando no desenvolvimento de sistemas de gestão. Atuei como programador Delphi até 2012, depois me tornei analista e líder do meu time de desenvolvimento. Também atuei como Product Owner e agora sou analista de sistemas C#. Durante a minha trajetória eu desenvolvi, na maior parte do tempo, usando Delphi e C#.

Mas também usei um pouco de javascript no meu projeto de conclusão do curso Harvard CS50. Além disso, gosto de usar Python pra agilizar tarefas do cotidiano.

Meus dados, ao longo dos anos, foram persistidos, principalmente, em Firebird e Oracle. Mas ocasionalmente eles foram parar dentro de um MS SQL, SQLite e MongoDB. Livros como “Padrões de projeto” (da gangue do quatro) e “Código Limpo” (do Robert C. Martin) ajudaram muito a melhorar a qualidade do código que eu escrevo. Tem sido sendo uma experiência interessante e desafiadora.

Conecte-se comigo:

oseias-da-silva-martins oseias#5749

Linguagens e ferramentas:

c csharp dotnet flask flutter git heroku mongodb mssql oracle postman python sqlite unity

ozmartins

 ozmartins

ozmartins

download-manager's People

Contributors

ozmartins avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

download-manager's Issues

Refatorar MainForm

Essa foi a última parte desenvolvida na ferramenta. Além de não estar coberta por testes, seu código precisa ser limpado.

Implementar CLI (command line interface)

Atualmente a ferramenta possui apenas interação através de uma GUI, mas uma CLI pode ser mais prático de usar e pode permitir o uso da ferramenta através de scripts.

Criar configuração pra escolher o banco de dados

Atualmente, o banco de dados precisa estar na mesma pasta do arquivo executável e precisa ter o mesmo nome que o arquivo executável (mas com a extensão .db). Criar configuração que permite escolher o local do banco.

Refatorar LogDownloadRepository

A classe LogDownloadRepository foi uma das últimas as serem implementadas e seu código está ruim. Refatorar essa classe, deixando seu código limpo.

Usar ORM na tela de histórico

Atualmente a grade que mostra os logs, faz um SELECT FULL na tabela LogDownloads. No início isso não será um problema, mas com o tempo, a tela de histórico pode ficar lenta.

Implementar suporte à downloads simultaneos

Atualmente a ferramenta suporta apenas um download por vez. Como eu posso criar várias threads, posso implementar o suporte à downloads simultânos. Isso exigirá a criação de diferentes instâncias da classe downloader. Além disso, usar os datasets da tela, não será uma boa ideia, pois posso ter problemas de concorrêncas nas threads.

Renomear o arquivo caso ele já exista

Atualmente, se o arquivo baixado tem o mesmo nome de um arquivo que já existe na pasta de downloads, a ferramenta simplesmente sobrescreve o arquivo. Mudar esse comportamente, perguntando do usuário, qual a ação desejada: Sobreescrever o arquivo ou mudar o nome? Uma opção interessante, é a criação de uma dialog box, que permita ao usuário escolher o local e o nome do novo arquivo.

Nem sempre a mensagem de download abortado é exibida

A mensagem de download abortado é exibida quando o observador é notificado e o downloader está no estado Aborted.

Isso pode falha, eventualmente. Uma abordagem melhor seria a criação de uma fila de mensagens.

Opção para pausar/retomar download

Para implementar essa feature, será necessário fazer o seguinte:

  • Salvar o arquivo a medida que o baixa usando o evento OnReceiveData.
  • Usar algo do tipo Stream.Skip(tamanho-do-conteudo-ja-baixado).

Out of memory

A aplicação recebe o erro Out of memory quando o arquivo baixado é muito grande. Uma solução possível é salvar o conteúdo a medida que ele é baixado.

Rever constantes

Algumas constantes são declaradas no arquivo onde são usadas. Outras estão em arquivos seperados. Escolher uma abordagem e uniformizar o uso deste abordagem.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.