示例#1
0
        public async Task AddEntryAsync(LapTimeEntry entry)
        {
            await EnsureActualAsync();

            try {
                if (!_storage.IsBetter(entry))
                {
                    Logging.Debug($"Better entry available ({Id})");
                    return;
                }

                Logging.Debug($"New entry ({Id}): {entry.LapTime}");

                SetDirty();
                _storage.Set(entry);

                if (_readerFunc != null)
                {
                    using (var reader = _readerFunc()) {
                        reader.Export(new[] { entry });
                        _storage.SyncLastModified(reader);
                    }
                }

                OnPropertyChanged(nameof(LastModified));
                OnPropertyChanged(nameof(EntriesCount));
            } catch (Exception e) {
                Logging.Error(e);
            }
        }
示例#2
0
 public void Set([NotNull] LapTimeEntry entry)
 {
     if (entry == null)
     {
         throw new ArgumentNullException(nameof(entry));
     }
     Set(GetKey(entry.CarId, entry.TrackAcId), Pack(entry));
 }
示例#3
0
 private void AddEntry(LapTimeEntry entry)
 {
     InitializeCm();
     if (_cmStorage.IsBetter(entry))
     {
         _cmStorage.Set(entry);
         UpdateAsync().Forget();
     }
 }
示例#4
0
        public bool IsBetter([NotNull] LapTimeEntry entry)
        {
            if (entry == null)
            {
                throw new ArgumentNullException(nameof(entry));
            }
            var existing = GetLapTime(entry.CarId, entry.TrackAcId);

            return(existing == null || existing.LapTime > entry.LapTime);
        }
示例#5
0
        public async Task RemoveEntryAsync(LapTimeEntry entry)
        {
            if (EnabledSources.Any(x => x.ReadOnly))
            {
                NonfatalError.Notify("Can’t remove entry from read-only sources",
                                     $"Please, disable {EnabledSources.Where(x => x.ReadOnly).Select(x => x.DisplayName).JoinToReadableString()}.", solutions: new[] {
                    new NonfatalErrorSolution("Disable read-only sources", null, token => {
                        foreach (var source in EnabledSources)
                        {
                            source.IsEnabled = false;
                        }

                        RaiseEntriesChanged();
                        return(Task.Delay(0));
                    }),
                });
                return;
            }

            var car   = CarsManager.Instance.GetById(entry.CarId)?.DisplayName ?? entry.CarId;
            var track = TracksManager.Instance.GetLayoutByKunosId(entry.TrackId)?.LayoutName ?? entry.TrackId;

            if (ModernDialog.ShowMessage($"Are you sure you want to remove {car} on {track} lap time?", "Remove Lap Time",
                                         MessageBoxButton.YesNo) != MessageBoxResult.Yes)
            {
                return;
            }

            try {
                using (WaitingDialog.Create("Deleting…")) {
                    var changed = false;

                    foreach (var source in EnabledSources)
                    {
                        changed |= await source.RemoveAsync(entry.CarId, entry.TrackId);
                    }

                    if (changed)
                    {
                        Logging.Debug("Removed");
                        RaiseEntriesChanged();
                    }
                }
            } catch (Exception e) {
                NonfatalError.Notify("Can’t remove entry", e);
            }
        }
示例#6
0
 public LapTimeWrapped(LapTimeEntry entry)
 {
     Entry = entry;
 }
示例#7
0
 private string Pack(LapTimeEntry entry)
 {
     return(entry.EntryDate.ToUnixTimestamp().ToInvariantString() + ";" +
            ((long)entry.LapTime.TotalMilliseconds).ToInvariantString());
 }