public bool ExtractCabFiles() { if (!FdiIterate()) { throw new Exception("Failed to iterate cab files"); } foreach (var file in _fileNames) { Retry.Block(5, 1, () => { ExtractFile(file); }); } return(true); }
public async Task <List <UpdateChannel> > DownloadReleaseHistoryCabAsync() { var guid = Guid.NewGuid().ToString(); var cabPath = Environment.ExpandEnvironmentVariables(@"%temp%\" + guid); Directory.CreateDirectory(cabPath); var savePath = Environment.ExpandEnvironmentVariables(@"%temp%\ReleaseHistory.xml"); var releaseHistoryPath = ""; var localCabPath = Environment.ExpandEnvironmentVariables(@"%temp%\" + guid + @"\" + guid + ".cab"); try { var now = DateTime.Now; var tmpReleaseHistory = Environment.ExpandEnvironmentVariables(@"%temp%\" + now.Year + now.Month + now.Day + now.Hour + "_ReleaseHistory.xml"); using (var releaser = await myLock.LockAsync()) { if (File.Exists(localCabPath)) { File.Delete(localCabPath); } if (!File.Exists(tmpReleaseHistory)) { if (!File.Exists(localCabPath)) { var fd = new FileDownloader(); await fd.DownloadAsync(OfficeVersionHistoryUrl, localCabPath); } var cabExtractor = new CabExtractor(localCabPath); cabExtractor.ExtractCabFiles(); } var dirInfo = new DirectoryInfo(Environment.ExpandEnvironmentVariables(@"%temp%")); foreach (var file in dirInfo.GetFiles("*_ReleaseHistory.xml")) { try { if (!file.FullName.Equals(tmpReleaseHistory, StringComparison.InvariantCultureIgnoreCase)) { File.Delete(file.FullName); } } catch (Exception ex) { } } releaseHistoryPath = Environment.ExpandEnvironmentVariables(@"%temp%\" + guid + @"\ExtractedFiles\ReleaseHistory.xml"); if (File.Exists(tmpReleaseHistory)) { releaseHistoryPath = tmpReleaseHistory; } else { Retry.Block(10, 1, () => File.Copy(releaseHistoryPath, tmpReleaseHistory, true)); } } } catch (Exception ex) { releaseHistoryPath = savePath; } var releaseHistory = GenerateReleaseHistory(releaseHistoryPath); try { using (var releaser = await myLock.LockAsync()) { if (!string.IsNullOrEmpty(releaseHistoryPath)) { if (File.Exists(releaseHistoryPath)) { if (releaseHistoryPath != savePath) { File.Copy(releaseHistoryPath, savePath, true); } } } if (File.Exists(localCabPath)) { File.Delete(localCabPath); } if (Directory.Exists(cabPath)) { Directory.Delete(cabPath, true); } } } catch { } return(releaseHistory); }
public async Task <List <UpdateFiles> > DownloadCabAsync() { var guid = Guid.NewGuid().ToString(); var cabPath = Environment.ExpandEnvironmentVariables(@"%temp%\" + guid); Directory.CreateDirectory(cabPath); var localCabPath = Environment.ExpandEnvironmentVariables(@"%temp%\" + guid + @"\" + guid + ".cab"); if (File.Exists(localCabPath)) { File.Delete(localCabPath); } var now = DateTime.Now; var tmpFile32 = Environment.ExpandEnvironmentVariables(@"%temp%\" + now.Year + now.Month + now.Day + now.Hour + "_32.xml"); var tmpFile64 = Environment.ExpandEnvironmentVariables(@"%temp%\" + now.Year + now.Month + now.Day + now.Hour + "_64.xml"); if (!File.Exists(tmpFile32) || !File.Exists(tmpFile64)) { using (var releaser = await myLock.LockAsync()) { var tmpFile = Environment.ExpandEnvironmentVariables(@"%temp%\" + now.Year + now.Month + now.Day + now.Hour + ".cab"); if (File.Exists(tmpFile)) { Retry.Block(10, 1, () => File.Copy(tmpFile, localCabPath, true)); } if (!File.Exists(localCabPath)) { var fd = new FileDownloader(); await fd.DownloadAsync(OfficeVersionUrl, localCabPath); try { File.Copy(localCabPath, tmpFile); } catch { } } var cabExtractor = new CabExtractor(localCabPath); cabExtractor.ExtractCabFiles(); } } var xml32Path = Environment.ExpandEnvironmentVariables(@"%temp%\" + guid + @"\ExtractedFiles\o365client_32bit.xml"); var xml64Path = Environment.ExpandEnvironmentVariables(@"%temp%\" + guid + @"\ExtractedFiles\o365client_64bit.xml"); if (File.Exists(tmpFile32)) { xml32Path = tmpFile32; } else { Retry.Block(10, 1, () => File.Copy(xml32Path, tmpFile32, true)); } if (File.Exists(tmpFile64)) { xml64Path = tmpFile64; } else { Retry.Block(10, 1, () => File.Copy(xml64Path, tmpFile64, true)); } var updateFiles32 = GenerateUpdateFiles(xml32Path); var updateFiles64 = GenerateUpdateFiles(xml64Path); try { if (File.Exists(localCabPath)) { File.Delete(localCabPath); } if (Directory.Exists(cabPath)) { Directory.Delete(cabPath, true); } } catch { } return(new List <UpdateFiles>() { updateFiles32, updateFiles64 }); }