diff --git a/TrueCraft.Client/Content/pack.txt b/TrueCraft.Client/Content/pack.txt
new file mode 100644
index 0000000..0a2714a
--- /dev/null
+++ b/TrueCraft.Client/Content/pack.txt
@@ -0,0 +1 @@
+Vanilla TrueCraft!
\ No newline at end of file
diff --git a/TrueCraft.Client/TrueCraft.Client.csproj b/TrueCraft.Client/TrueCraft.Client.csproj
index a01f728..d2b28e5 100644
--- a/TrueCraft.Client/TrueCraft.Client.csproj
+++ b/TrueCraft.Client/TrueCraft.Client.csproj
@@ -183,6 +183,12 @@
PreserveNewest
+
+ PreserveNewest
+
+
+ PreserveNewest
+
PreserveNewest
diff --git a/TrueCraft.Core/TexturePack.cs b/TrueCraft.Core/TexturePack.cs
index b0da3f7..614fbf3 100644
--- a/TrueCraft.Core/TexturePack.cs
+++ b/TrueCraft.Core/TexturePack.cs
@@ -51,14 +51,19 @@ namespace TrueCraft.Core
///
public MemoryStream Image { get; private set; }
+ ///
+ ///
+ ///
+ public bool IsCorrupt { get; private set; }
+
///
///
///
public TexturePack()
{
Path = TexturePack.DefaultID;
- Name = "Default";
Archive = new ZipFile();
+ Name = "Default";
}
///
@@ -68,47 +73,64 @@ namespace TrueCraft.Core
public TexturePack(string path)
{
if (string.IsNullOrEmpty(path) || !File.Exists(path))
- throw new ArgumentException();
+ MakeDefault();
Path = path;
var fileInfo = new FileInfo(path); // A bit weird, but it works.
Name = fileInfo.Name;
- Archive = new ZipFile(Path);
+ try { Archive = new ZipFile(path); }
+ catch { IsCorrupt = true; }
GetPackInfo();
}
+ ///
+ ///
+ ///
+ private void MakeDefault()
+ {
+ Path = TexturePack.DefaultID;
+ Archive = new ZipFile();
+ Name = "Default";
+ Image = null;
+ Description = null;
+ }
+
///
///
///
///
private void GetPackInfo()
{
- foreach (var entry in Archive.Entries)
+ try
{
- if (entry.FileName == "pack.txt")
+ foreach (var entry in Archive.Entries)
{
- using (var stream = entry.OpenReader())
+ if (entry.FileName == "pack.txt")
{
- using (var reader = new StreamReader(stream))
- Description = reader.ReadToEnd();
+ using (var stream = entry.OpenReader())
+ {
+ using (var reader = new StreamReader(stream))
+ Description = reader.ReadToEnd();
+ }
}
- }
- else if (entry.FileName == "pack.png")
- {
- using (var stream = entry.OpenReader())
+ else if (entry.FileName == "pack.png")
{
- // Better way to do this?
- var buffer = new byte[entry.UncompressedSize];
- stream.Read(buffer, 0, buffer.Length);
- Image = new MemoryStream((int)entry.UncompressedSize);
- Image.Write(buffer, 0, buffer.Length);
+ using (var stream = entry.OpenReader())
+ {
+ // Better way to do this?
+ var buffer = new byte[entry.UncompressedSize];
+ stream.Read(buffer, 0, buffer.Length);
+ Image = new MemoryStream((int)entry.UncompressedSize);
+ Image.Write(buffer, 0, buffer.Length);
- // Fixes 'GLib.GException: Unrecognized image file format' on Linux.
- Image.Seek(0, SeekOrigin.Begin);
+ // Fixes 'GLib.GException: Unrecognized image file format' on Linux.
+ Image.Seek(0, SeekOrigin.Begin);
+ }
}
}
}
+ catch { IsCorrupt = true; }
}
}
}
diff --git a/TrueCraft.Launcher/Views/OptionView.cs b/TrueCraft.Launcher/Views/OptionView.cs
index cf2e9b9..5442775 100644
--- a/TrueCraft.Launcher/Views/OptionView.cs
+++ b/TrueCraft.Launcher/Views/OptionView.cs
@@ -13,6 +13,8 @@ namespace TrueCraft.Launcher.Views
public LauncherWindow Window { get; set; }
public Image DefaultImage { get; set; }
public string DefaultDescription { get; set; }
+ public Image UnknownImage { get; set; }
+ public string UnknownDescription { get; set; }
public Label OptionLabel { get; set; }
public Label TexturePackLabel { get; set; }
@@ -29,8 +31,14 @@ namespace TrueCraft.Launcher.Views
public OptionView(LauncherWindow window)
{
- DefaultImage = Image.FromFile("Content/default-pack.png");
- DefaultDescription = File.ReadAllText("Content/default-pack.txt");
+ DefaultImage = Image.FromFile(
+ Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Content/pack.png"));
+ DefaultDescription = File.ReadAllText(
+ Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Content/pack.txt"));
+ UnknownImage = Image.FromFile(
+ Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Content/default-pack.png"));
+ UnknownDescription = File.ReadAllText(
+ Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Content/default-pack.txt"));
_texturePacks = new List();
_lastTexturePack = null;
@@ -110,17 +118,30 @@ namespace TrueCraft.Launcher.Views
continue;
var texturePack = new TexturePack(zip);
- _texturePacks.Add(texturePack);
- AddTexturePackRow(texturePack);
+ if (!texturePack.IsCorrupt)
+ {
+ _texturePacks.Add(texturePack);
+ AddTexturePackRow(texturePack);
+ }
}
}
private void AddTexturePackRow(TexturePack pack)
{
var row = TexturePackStore.AddRow();
- TexturePackStore.SetValue(row, TexturePackImageField, (pack.Image == null) ? DefaultImage.WithSize(IconSize.Medium) : Image.FromStream(pack.Image).WithSize(IconSize.Medium));
- TexturePackStore.SetValue(row, TexturePackNameField, pack.Name);
- TexturePackStore.SetValue(row, TexturePackDescField, pack.Description ?? DefaultDescription);
+ var isDefault = (pack.Path == TexturePack.DefaultID);
+ if (isDefault)
+ {
+ TexturePackStore.SetValue(row, TexturePackImageField, DefaultImage.WithSize(IconSize.Medium));
+ TexturePackStore.SetValue(row, TexturePackNameField, pack.Name);
+ TexturePackStore.SetValue(row, TexturePackDescField, DefaultDescription);
+ }
+ else
+ {
+ TexturePackStore.SetValue(row, TexturePackImageField, (pack.Image == null) ? UnknownImage.WithSize(IconSize.Medium) : Image.FromStream(pack.Image).WithSize(IconSize.Medium));
+ TexturePackStore.SetValue(row, TexturePackNameField, pack.Name);
+ TexturePackStore.SetValue(row, TexturePackDescField, pack.Description ?? UnknownDescription);
+ }
}
}
}