public override bool Execute() { if (!NeedsUpdate()) { return(true); } try { var ms = new MemoryStream(); var downloadStream = new System.Net.WebClient().OpenRead(Url); downloadStream.CopyTo(ms); ms.Seek(0, SeekOrigin.Begin); var hash = new SHA256Managed().ComputeHash(ms); if (BitConverter.ToString(hash).Replace("-", "").ToLower() != this.Hash) { Log.LogError("Got wrong hash for {0}", Url); return(false); } try { Directory.Delete(Root, true); } catch (DirectoryNotFoundException) { // Obviously not an issue } ms.Seek(0, SeekOrigin.Begin); var bzStream = new ICSharpCode.SharpZipLib.BZip2.BZip2InputStream(ms); var tarStream = new ICSharpCode.SharpZipLib.Tar.TarInputStream(bzStream); while (true) { TarEntry entry = tarStream.GetNextEntry(); if (entry == null) { break; } ExtractEntry(Root, entry, tarStream); } File.WriteAllText(Path.Combine(Root, "aegisub.hash"), Hash); return(true); } catch (Exception e) { Log.LogErrorFromException(e); return(false); } }
public override bool Execute() { if (!NeedsUpdate()) return true; try { var ms = new MemoryStream(); var downloadStream = new System.Net.WebClient().OpenRead(Url); downloadStream.CopyTo(ms); ms.Seek(0, SeekOrigin.Begin); var hash = new SHA256Managed().ComputeHash(ms); if (BitConverter.ToString(hash).Replace("-", "").ToLower() != this.Hash) { Log.LogError("Got wrong hash for {0}", Url); return false; } try { Directory.Delete(Root, true); } catch (DirectoryNotFoundException) { // Obviously not an issue } ms.Seek(0, SeekOrigin.Begin); var bzStream = new ICSharpCode.SharpZipLib.BZip2.BZip2InputStream(ms); var tarStream = new ICSharpCode.SharpZipLib.Tar.TarInputStream(bzStream); while (true) { TarEntry entry = tarStream.GetNextEntry(); if (entry == null) break; ExtractEntry(Root, entry, tarStream); } File.WriteAllText(Path.Combine(Root, "aegisub.hash"), Hash); return true; } catch (Exception e) { Log.LogErrorFromException(e); return false; } }