Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }