public ClientService(IDownloader downloader, IFormatter serializationFormatter, DirectoryInfo localStorage) { fileAccessService = new FileAccessService(localStorage); this.downloader = downloader; this.serializationFormatter = serializationFormatter; filesAvailable.Edit(l => { l.AddOrUpdate(fileAccessService.FilesAvailable()); }); LogTo.Warning("Creating pipeline"); Repos = GroupUrls.Connect() .Transform(g => new Uri(g)) .TransformAsync(Load <Group>) .TransformMany(g => g.RepoInfos.Select(r => g.CombineBaseUri(r.Uri)), repoUri => repoUri) .TransformAsync(Load <Repo>) .OnItemUpdated((repo, _) => LogTo.Information("Repo from {url} has been loaded", repo.BaseUri)) .AsObservableCache(); d.Add(Repos); OnlineFiles = Repos.Connect() .TransformMany( repo => repo.Files.Select(kvp => new OnlineFile(kvp.Key, repo.CombineBaseUri(kvp.Value))), of => of.FileSignature).AsObservableCache(); d.Add(OnlineFiles); Modpacks = Repos.Connect() .TransformMany(r => r.Modpacks.Select(m => new Modpack(m)), m => m.Id).AsObservableCache(); d.Add(Modpacks); }
public FileStorageService(IFileAccessService fileAccessService) { this.fileAccessService = fileAccessService; availableFiles.AddOrUpdate(fileAccessService.FilesAvailable()); }