public ModsViewModel(IScreen screen, DowModLoader?dowModService = null) : base(screen, "mods") { this.logger = this.Log(); this.dowModService = dowModService ?? Locator.Current.GetService <DowModLoader>(); var whenNotLoading = this.WhenAnyValue(x => x.Loading).Select(loading => !loading).DistinctUntilChanged(); var whenItemSelected = this.WhenAnyValue(x => x.SelectedBaseItem, x => x.SelectedModItem, (baseItem, modItem) => baseItem != null || modItem != null).DistinctUntilChanged(); var canLoadSpecific = whenNotLoading.CombineLatest(whenItemSelected, (notLoading, itemSelected) => notLoading && itemSelected).DistinctUntilChanged(); ReloadMods = ReactiveCommand.CreateFromTask(LoadAllMods, whenNotLoading); RefreshMods = ReactiveCommand.CreateFromTask(GetModsAsync); RefreshMods.ThrownExceptions.Subscribe(exception => logger.Error(exception)); RefreshMods.Execute().Subscribe(); RefreshMods.Select(mods => mods.Where(x => !x.Module.File.IsVanilla)) .Subscribe(mods => { ModItems.Clear(); ModItems.AddRange(mods); }); RefreshMods.Select(mods => mods.Where(x => x.Module.File.IsVanilla)) .Subscribe(mods => { BaseGameItems.Clear(); BaseGameItems.AddRange(mods); }); }
public MatchupViewModel(IScreen screen, GenerationSettings settings, DowModLoader?modLoader = null, GenerationService?generationService = null) : base(screen, "matchup") { this.generationService = generationService ?? Locator.Current.GetService <GenerationService>(); this.modLoader = modLoader ?? Locator.Current.GetService <DowModLoader>(); this.settings = settings; GenerateMatchup = ReactiveCommand.Create(() => { Matchup = this.generationService.GenerateMatchup(this.settings); MapImagePath = this.modLoader.GetMapImagePath(Matchup.Map); }); GenerateMatchup.Execute().Subscribe(); GoBack = HostScreen.Router.NavigateBack; }