private async Task ProcessInputUrls() { if (!App.StartupOptions?.InputURLs.Any() ?? false) { return; } await App.StartupOptions.InputURLs.ForEachAsync(2, async x => { PotentialAddon potentialAddon = null; try { potentialAddon = await _addonService.GetAddonByUri(new Uri(x), SelectedClientType); } catch { MessageBox.Show($"Failed to import addon by URI: {x}"); return; } if (potentialAddon != null) { try { await _addonService.InstallAddon(potentialAddon, SelectedClientType); } catch { MessageBox.Show($"Failed to install addon {potentialAddon.Name}"); } } }); }
public async Task InstallAddon( PotentialAddon potentialAddon, WowClientType clientType, Action <AddonInstallState, decimal> onUpdate = null) { var existingAddon = _addonRepository.GetByExternalId(potentialAddon.ExternalId, clientType); if (existingAddon != null) { throw new AddonAlreadyInstalledException(); } var addon = await GetAddon(potentialAddon.ExternalId, potentialAddon.ProviderName, clientType); _addonRepository.SaveItem(addon); await InstallAddon(addon.Id, onUpdate); }
public async Task InstallAddon( PotentialAddon potentialAddon, WowClientType clientType, Action <AddonInstallState, decimal> onUpdate = null) { var provider = _providers.First(p => p.Name == potentialAddon.ProviderName); var searchResult = await provider.GetById(potentialAddon.ExternalId, clientType); var existingAddon = _addonRepository.GetByExternalId(searchResult.ExternalId, clientType); if (existingAddon != null) { throw new AddonAlreadyInstalledException(); } var addon = GetAddon(searchResult.Folders.FirstOrDefault(), searchResult, clientType); _addonRepository.SaveItem(addon); await InstallAddon(addon.Id, onUpdate); }
public async Task <PotentialAddon> Search(Uri addonUri, WowClientType clientType) { var repoPath = addonUri.LocalPath; var repoExtension = Path.GetExtension(repoPath); if (string.IsNullOrEmpty(repoPath) || !string.IsNullOrEmpty(repoExtension)) { throw new InvalidUrlException($"Invlaid URL: {addonUri}"); } var results = await GetReleases(repoPath); var latestRelease = GetLatestRelease(results); var asset = GetValidAsset(latestRelease, clientType); if (asset == null) { throw new NoReleaseFoundException(); } var repository = await GetRepository(repoPath); var author = repository.Owner.Login; var authorImageUrl = repository.Owner.AvatarUrl; var potentialAddon = new PotentialAddon { Author = author, DownloadCount = asset.DownloadCount, ExternalId = repoPath, ExternalUrl = latestRelease.Url, Name = asset.Name, ProviderName = Name, ThumbnailUrl = authorImageUrl }; return(potentialAddon); }
public static string GetThumbnailUrl(this PotentialAddon addon) { return(string.IsNullOrEmpty(addon.ThumbnailUrl) ? "pack://application:,,,/WowUp;component/Assets/wowup_logo_1.png" : addon.ThumbnailUrl); }