/// <summary> /// Unzip all files. /// </summary> /// <returns>True on succes, false otherwise</returns> internal static bool Unzip(string sampleFolder, string zipFilePath, Action <string> log, Func <bool> updateSampleProjects) { var messages = new List <string>(); var entries = new List <UnzipEntry>(); var fileHashes = new FileHashesSet(); var backupFolders = new BackupFolders(); var result = true; using (var zipFile = new ZipFile(zipFilePath)) { // Collect entries foreach (ZipEntry zipEntry in zipFile) { entries.Add(new UnzipEntry(zipEntry, sampleFolder)); } // Unzip all foreach (var entry in entries) { log(string.Format("Unpacking {0}", entry.Name)); entry.UnzipToTempPath(zipFile); } // Backup if needed foreach (var entry in entries) { entry.BackupIfNeeded(fileHashes, backupFolders); } // Move all to final target foreach (var entry in entries) { entry.MoveToTarget(messages); } // Update all sample projects if (!updateSampleProjects()) { result = false; } // Update hashes foreach (var entry in entries) { entry.UpdateHash(fileHashes); } // Save hashes fileHashes.SaveAll(); } return(result); }
/// <summary> /// Unzip all files. /// </summary> /// <returns>True on succes, false otherwise</returns> internal static bool Unzip(string sampleFolder, string zipFilePath, Action<string> log, Func<bool> updateSampleProjects) { var messages = new List<string>(); var entries = new List<UnzipEntry>(); var fileHashes = new FileHashesSet(); var backupFolders = new BackupFolders(); var result = true; using (var zipFile = new ZipFile(zipFilePath)) { // Collect entries foreach (ZipEntry zipEntry in zipFile) { entries.Add(new UnzipEntry(zipEntry, sampleFolder)); } // Unzip all foreach (var entry in entries) { log(string.Format("Unpacking {0}", entry.Name)); entry.UnzipToTempPath(zipFile); } // Backup if needed foreach (var entry in entries) { entry.BackupIfNeeded(fileHashes, backupFolders); } // Move all to final target foreach (var entry in entries) { entry.MoveToTarget(messages); } // Update all sample projects if (!updateSampleProjects()) result = false; // Update hashes foreach (var entry in entries) { entry.UpdateHash(fileHashes); } // Save hashes fileHashes.SaveAll(); } return result; }