public TemporaryLoadOrderProvider( ITempFileProvider tempFileProvider, ILoadOrderWriter loadOrderWriter, IWorkingDirectoryProvider paths, IRandomFileNameProvider randomFileNameProvider) { TempFileProvider = tempFileProvider; LoadOrderWriter = loadOrderWriter; RandomFileNameProvider = randomFileNameProvider; Paths = paths; }
public GroupRunLoadOrderPreparer( IFileSystem fileSystem, ILoadOrderForRunProvider loadOrderForRunProvider, ILoadOrderPrinter printer, IRunLoadOrderPathProvider runLoadOrderPathProvider, ILoadOrderWriter loadOrderWriter) { _fileSystem = fileSystem; LoadOrderForRunProvider = loadOrderForRunProvider; Printer = printer; LoadOrderPathProvider = runLoadOrderPathProvider; LoadOrderWriter = loadOrderWriter; }
public FileSyncedLoadOrderVM( IPluginLiveLoadOrderProvider liveLoadOrderProvider, ILoadOrderWriter writer, IPluginListingsPathProvider pluginPathContext, IDataDirectoryProvider dataDirectoryContext) { var loadOrder = liveLoadOrderProvider.Get(out var state) .Transform(x => new FileSyncedLoadOrderListingVM(dataDirectoryContext, x)) .RefCount(); _State = state .ToGuiProperty(this, nameof(State), ErrorResponse.Fail("Uninitialized")); LoadOrder = loadOrder .ToObservableCollection(this); // When listings change, resave to file Observable.Merge( loadOrder .AutoRefresh(x => x.Enabled) .Transform(x => x.Enabled, transformOnRefresh: true) .BufferInitial(TimeSpan.FromMilliseconds(500), RxApp.MainThreadScheduler) .QueryWhenChanged(x => x) .Unit(), loadOrder .AutoRefresh(x => x.GhostSuffix) .Transform(x => x.GhostSuffix ?? string.Empty, transformOnRefresh: true) .BufferInitial(TimeSpan.FromMilliseconds(500), RxApp.MainThreadScheduler) .QueryWhenChanged(x => x) .Unit()) .Throttle(TimeSpan.FromMilliseconds(500), RxApp.MainThreadScheduler) .Select(x => LoadOrder.Select(x => new ModListing(x.ModKey, x.Enabled, x.GhostSuffix)).ToArray()) .DistinctUntilChanged(new SequenceEqualityComparer()) .Subscribe(x => { writer.Write( pluginPathContext.Path, LoadOrder); }); }