Skip to content
This repository has been archived by the owner on Jul 28, 2020. It is now read-only.

Commit

Permalink
Cache sprites to temporary folder
Browse files Browse the repository at this point in the history
  • Loading branch information
MathewSachin committed Nov 26, 2017
1 parent d40a053 commit 3f0928e
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 44 deletions.
52 changes: 24 additions & 28 deletions Core/SpriteManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,15 @@ namespace Poke
{
public static class SpriteManager
{
public static Stream GetStream(string Link)
static SpriteManager()
{
const int bytesToRead = 100;
LocalPrefix = Path.Combine(Path.GetTempPath(), "pkimg");

var request = WebRequest.Create(Link);
request.Timeout = -1;

var reader = new BinaryReader(request.GetResponse().GetResponseStream());
var memoryStream = new MemoryStream();

var bytebuffer = new byte[bytesToRead];
var bytesRead = reader.Read(bytebuffer, 0, bytesToRead);

while (bytesRead > 0)
{
memoryStream.Write(bytebuffer, 0, bytesRead);
bytesRead = reader.Read(bytebuffer, 0, bytesToRead);
}

memoryStream.Seek(0, SeekOrigin.Begin);

return memoryStream;
if (!Directory.Exists(LocalPrefix))
Directory.CreateDirectory(LocalPrefix);
}

static string MakeSpriteLink(int Number, bool Back, bool Mega, bool Alolan, Gender Gender, bool Shiny)
static string GetSpriteFileName(int Number, bool Back, bool Mega, bool Alolan, Gender Gender, bool Shiny)
{
var b = Back ? "b_" : "";

Expand All @@ -56,9 +40,12 @@ static string MakeSpriteLink(int Number, bool Back, bool Mega, bool Alolan, Gend

var s = Shiny ? "_s" : "";

return $"https://bulbapedia.bulbagarden.net/wiki/File:Spr_{b}7s_{Number:D3}{m}{a}{gender}{s}.png";
return $"Spr_{b}7s_{Number:D3}{m}{a}{gender}{s}.png";
}

const string BulbapediaPrefix = "https://bulbapedia.bulbagarden.net/wiki/File:";
static readonly string LocalPrefix;

public static string GetSpriteLink(Pokemon Pokemon, bool Back = false)
{
var name = Pokemon.Species.Name;
Expand All @@ -79,14 +66,23 @@ public static string GetSpriteLink(Pokemon Pokemon, bool Back = false)

string GetLink(Gender Gender = Gender.Genderless)
{
var link = MakeSpriteLink(Pokemon.Species.Number, Back, mega, alolan, Gender, Pokemon.Shiny);
var fileName = GetSpriteFileName(Pokemon.Species.Number, Back, mega, alolan, Gender, Pokemon.Shiny);

var localPath = Path.Combine(LocalPrefix, fileName);

var request = WebRequest.Create(link);
request.Timeout = -1;
if (File.Exists(localPath))
return localPath;

using (var w = new WebClient())
{
var content = w.DownloadString(BulbapediaPrefix + fileName);

var imgLink = "https:" + CQ.Create(content)[".fullImageLink a"].Attr("href");

var stream = request.GetResponse().GetResponseStream();
w.DownloadFile(imgLink, localPath);
}

return "https:" + CQ.Create(stream)[".fullImageLink a"].Attr("href");
return localPath;
}

// Mega Charizard
Expand Down
17 changes: 1 addition & 16 deletions Poke/ValueConverters/PokemonSpriteConverter.cs
Original file line number Diff line number Diff line change
@@ -1,31 +1,16 @@
using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace Poke
{
public class PokemonSpriteConverter : IMultiValueConverter
{
static ImageSource GetImageSource(string Link)
{
var image = new BitmapImage();

image.BeginInit();

image.StreamSource = SpriteManager.GetStream(Link);

image.EndInit();

return image;
}

public object Convert(object[] value, Type targetType, object parameter, CultureInfo culture)
{
if (value[0] is Pokemon pokemon && parameter is string s)
{
return GetImageSource(SpriteManager.GetSpriteLink(pokemon, s == "Back"));
return SpriteManager.GetSpriteLink(pokemon, s == "Back");
}

return null;
Expand Down

0 comments on commit 3f0928e

Please sign in to comment.