private RepoTreeItem FilterByLanguage(ILoadedRepository repo) { return(FilterByTagPrefix(repo, "lang:", tag => { var langTag = tag.Substring(5); var r = Iso639.GetTag(langTag); return $"{Util.Util.GetCultureDisplayName(langTag)} [{langTag}]"; })); }
private RepoTreeItem FilterByTagPrefix(ILoadedRepository repo, string prefix, Func <string, string> convertor) { // var nodes = new ObservableCollection<PackageCategoryTreeItem>(); var map = new Dictionary <string, List <PackageMenuItem> >(); foreach (var package in repo.Packages.Packages) { if (package.Value == null) { continue; } IDescriptor descriptor = package.Value !; var pkgKey = PackageKey.Create(repo.Index.Url, descriptor.Id); var release = repo.Release(pkgKey); var payload = release?.WindowsExecutable(); if (release == null || payload == null) { continue; } var tags = Iter.ToArray(descriptor.Tags.Where(x => x.StartsWith(prefix))); if (tags.IsNullOrEmpty()) { tags = new[] { prefix }; } foreach (var tag in tags) { if (!map.ContainsKey(tag)) { map[tag] = new List <PackageMenuItem>(); } map[tag].Add(new PackageMenuItem(_store, pkgKey, payload, descriptor.NativeName() ?? "<>", release.Version)); } } var categoriesSet = new SortedSet <PackageCategoryTreeItem>(map.OrderBy(x => x.Key).Map(x => { x.Value.Sort(); var items = new ObservableCollection <PackageMenuItem>(x.Value); return(new PackageCategoryTreeItem(_store, convertor(x.Key), items)); })); var categories = new ObservableCollection <PackageCategoryTreeItem>(categoriesSet); return(new RepoTreeItem(repo.Index.NativeName(), categories)); }
private async Task <RepoTreeItem> FilterByCategory(ILoadedRepository repo) { var app = (PahkatApp)Application.Current; Dictionary <Uri, LocalizationStrings> strings = await app.PackageStore.Strings(app.Settings.GetLanguage() ?? "en"); return(FilterByTagPrefix(repo, "cat:", tag => { if (tag == "cat:") { return "Uncategorized"; } if (strings.TryGetValue(repo.Index.Url, out var s)) { if (s.Tags.TryGetValue(tag, out var t)) { return t; } } return tag; })); }
public static IRelease?Release(this ILoadedRepository repo, PackageKey packageKey) { if (packageKey.RepositoryUrl != repo.Index.Url) { return(null); } if (!repo.Packages.Packages.TryGetValue(packageKey.Id, out var descriptor) || descriptor == null) { return(null); } var releases = descriptor.Release; var release = descriptor.Release.First(r => { // Check if version even has a Windows target var target = r?.WindowsTarget(); if (target == null) { return(false); } // Check the channel is valid var channel = r?.Channel == "" ? null : r?.Channel; if (repo.Meta.Channel != null) { // If a defined repo channel, find a package with no channel or this channel return(channel == null || repo.Meta.Channel == r?.Channel); } // Free pass, no channels on either side :D return(repo.Meta.Channel == null); }); return(release); }
public static IWindowsExecutable?Payload(this ILoadedRepository repo, PackageKey packageKey) { return(repo.Release(packageKey)?.WindowsExecutable()); }
public Functions(ILoadedRepository repo, ChromiumWebBrowser webView) { Repo = repo; WebView = webView; }
internal void SetRepository(ILoadedRepository repo) { _functions = new WebBridgeService.Functions(repo, webView); }