public async Task InstallAddon(int addonId, Action <AddonInstallState, decimal> updateAction) { var addon = GetAddon(addonId); if (addon == null || string.IsNullOrEmpty(addon.DownloadUrl)) { throw new Exception("Addon not found or invalid"); } updateAction?.Invoke(AddonInstallState.Downloading, 0.25m); var downloadedFilePath = await _downloadService.DownloadFile(addon.DownloadUrl, DownloadPath); if (!string.IsNullOrEmpty(addon.InstalledVersion)) { updateAction?.Invoke(AddonInstallState.BackingUp, 0.50m); var backupZipFilePath = Path.Combine(BackupPath, $"{addon.Name}-{addon.InstalledVersion}.zip"); await _downloadService.ZipFile(downloadedFilePath, backupZipFilePath); } updateAction?.Invoke(AddonInstallState.Installing, 0.75m); var addonFolderPath = await _warcraftService.GetAddonDirectory(addon.ClientType); await _downloadService.UnzipFile(downloadedFilePath, addonFolderPath); addon.InstalledVersion = addon.LatestVersion; addon.InstalledAt = DateTime.UtcNow; _addonDataStore.UpdateItem(addon); File.Delete(downloadedFilePath); updateAction?.Invoke(AddonInstallState.Complete, 1.0m); }
public async Task InstallAddon(int addonId, Action <AddonInstallState, decimal> updateAction) { var addon = GetAddon(addonId); if (addon == null || string.IsNullOrEmpty(addon.DownloadUrl)) { throw new Exception("Addon not found or invalid"); } updateAction?.Invoke(AddonInstallState.Downloading, 25m); string downloadedFilePath = string.Empty; string unzippedDirectory = string.Empty; try { downloadedFilePath = await _downloadService.DownloadFile(addon.DownloadUrl, DownloadPath); if (!string.IsNullOrEmpty(addon.InstalledVersion)) { updateAction?.Invoke(AddonInstallState.BackingUp, 0.50m); var backupZipFilePath = Path.Combine(BackupPath, $"{addon.Name}-{addon.InstalledVersion}.zip"); //await _downloadService.ZipFile(downloadedFilePath, backupZipFilePath); } updateAction?.Invoke(AddonInstallState.Installing, 75m); unzippedDirectory = await _downloadService.UnzipFile(downloadedFilePath); await InstallUnzippedDirectory(unzippedDirectory, addon.ClientType); addon.InstalledVersion = addon.LatestVersion; addon.InstalledAt = DateTime.UtcNow; _addonRepository.UpdateItem(addon); } catch (Exception ex) { Log.Error(ex, "InstallAddon"); Console.WriteLine(ex); } finally { if (!string.IsNullOrEmpty(unzippedDirectory)) { await FileUtilities.DeleteDirectory(unzippedDirectory); } if (!string.IsNullOrEmpty(downloadedFilePath)) { File.Delete(downloadedFilePath); } } updateAction?.Invoke(AddonInstallState.Complete, 100m); }