/download-mtg-deck

Baixa as imagens de um deck do jogo Magic: The Gathering ao ler um arquivo de texto

Primary LanguageTypeScript

Download MTG Deck

O que o código faz?

O funcionamento se resume em 3 funções:

  • getCardNames: Recebe de parâmetro o caminho absoluto de um arquivo .txt. Ele lerá este arquivo de texto e extrairá os nomes das cartas escritos nele (é necessário ter apenas um nome por linha). Obs: eles podem conter uma numeração antes de cada nome indicando quantas cartas daquela há no deck, o código irá lidar com isso (há um deck_test.txt no repositório que serve de modelo). Por fim, a função retorna um array de strings, que correspondem ao nome de cada carta extraída do arquivo.

  • getCardsObject: Recebe de parâmetro o retorno da função citada acima, ou seja, um array de strings. A função irá percorrer este array e para cada string (cada nome de carta) irá fazer uma requisição GET à API (citada no começo deste README), que irá responder com um objeto, contendo informações sobre esta carta, como por exemplo, seu nome, sua URL para download de imagens, seu custo de mana, entre muitos outros. A função irá retornar um array de objetos ICard (/src/commons/interfaces/ICard.ts).

  • getCardsImage: Recebe de parâmetro o retorno da função citada acima, ou seja, um array de ICard. A função irá percorrer este array e para cada objeto ICard, ela irá acessar a URL para download contida no objeto da carta e irá baixar a imagem usando a função "downloadImage" (/src/downloadImage.ts). Para cada imagem do deck baixada, o client é notificado, gerando assim, o progresso de download em porcentagem. As imagens serão baixadas na pasta especificada no arquivo "config.ts" (/src/config.ts). Obs: não será baixado novamente as cartas que já estiverem presentes na pasta de imagens.

Por fim, o arquivo client.ts presente na pasta /src simula o uso prático do código. É usado as 3 funções que citei acima, em uma cadeira de promises, onde a próxima função só é chamada quando a anterior for bem sucedida:

API usada: Scryfall

Scryfall provides a REST-like API for ingesting our card data programatically. The API exposes information available on the regular site in easy-to-consume formats.