private void ScanMods(bool force, params string[] filenames) { void Scan() { var directories = Directory.GetDirectories(ModsDirectory).Where(x => Path.GetFileName(x)?.StartsWith("!") == false).ToList(); var replaceMods = force || !directories.SequenceEqual(Mods.Select(x => x.ModDirectory)); if (replaceMods) { Mods.ReplaceEverythingBy_Direct(Directory.GetDirectories(ModsDirectory).Where(x => Path.GetFileName(x)?.StartsWith("!") == false).Select(x => new GenericMod(this, x))); } else { foreach (var changed in filenames.Where(x => x?.EndsWith(GenericMod.DescriptionExtension, StringComparison.OrdinalIgnoreCase) == true)) { Mods.FirstOrDefault(x => FileUtils.IsAffectedBy(changed, x.ModDirectory))?.Description.Reset(); } } if (replaceMods || filenames.Any(x => x == null || FileUtils.ArePathsEqual(x, ConfigFilename))) { var state = new FileInfo(ConfigFileName); if (!_lastSaved.HasValue || !state.Exists || state.LastWriteTime > _lastSaved) { LoadState(); } } } _operationBusy.Do(Scan); }
private void ScanMods() { _operationBusy.Do(() => { Mods.ReplaceEverythingBy_Direct(Directory.GetDirectories(ModsDirectory) .Where(x => Path.GetFileName(x)?.StartsWith("!") == false) .Select(x => new GenericMod(this, x))); LoadState(); }); }
private void AllowedTyres_OnSelectionChanged(object sender, SelectionChangedEventArgs e) { _legalTyresBusy.Do(() => { var server = Model?.SelectedObject; if (server == null) { return; } server.LegalTyres = AllowedTyres.SelectedItems.OfType <ServerPresetObject.TyresItem>().ToList(); }); }
private void FixedSetups_OnSelectionChanged(object sender, SelectionChangedEventArgs e) { _defaultSetupItemBusy.Do(() => { var server = Model?.SelectedObject; if (server == null) { return; } var item = e.AddedItems.OfType <ServerPresetObject.SetupItem>().FirstOrDefault(); server.DefaultSetupItem = item; if (SetupItems.SelectedItems.Count > 1) { SetupItems.SelectedItems.Clear(); SetupItems.SelectedItems.Add(item); } }); }
private void OnCarNodePropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs) { if (propertyChangedEventArgs.PropertyName == nameof(CarNode.CurrentSkin)) { _busy.Do(() => { Skin = Car != null ? (Car.GetSkinById(CarNode?.CurrentSkin ?? "") ?? Car.SelectedSkin) : null; }); } }
private void UpdateSlots() { var newList = Renderer.CarSlots.Select(x => Slots.FirstOrDefault(y => ReferenceEquals(y.Slot, x)) ?? new CarSlotWrapped(x)); _listBusy.Do(() => Slots.ReplaceIfDifferBy(newList)); foreach (var slot in Slots) { slot.MainCar = ReferenceEquals(Renderer.MainSlot, slot.Slot); } }
public async Task Test() { var busy = new Busy(); var value = 0; busy.DoDelay(() => value++, 10).Ignore(); busy.Do(() => value++); Assert.AreEqual(0, value); await Task.Delay(100); Assert.AreEqual(1, value); }