public TimeEntriesDataSource( IRepository <IDatabaseTimeEntry> repository, ITimeService timeService) : base(repository) { Ensure.Argument.IsNotNull(timeService, nameof(timeService)); this.timeService = timeService; CurrentlyRunningTimeEntry = GetAll(te => te.IsDeleted == false && te.Duration == null) .Select(tes => tes.SingleOrDefault()) .StartWith() .Merge(Created.Where(te => te.IsRunning())) .Merge(Updated.Where(update => update.Id == currentlyRunningTimeEntryId).Select(update => update.Entity)) .Merge(Deleted.Where(id => id == currentlyRunningTimeEntryId).Select(_ => null as IThreadSafeTimeEntry)) .Select(runningTimeEntry) .ConnectedReplay(); IsEmpty = Observable.Return(default(IDatabaseTimeEntry)) .StartWith() .Merge(Updated.Select(tuple => tuple.Entity)) .Merge(Created) .SelectMany(_ => GetAll(te => te.IsDeleted == false)) .Select(timeEntries => timeEntries.None()); RivalsResolver = new TimeEntryRivalsResolver(timeService); TimeEntryStarted = timeEntryStartedSubject.AsObservable(); TimeEntryStopped = timeEntryStoppedSubject.AsObservable(); SuggestionStarted = suggestionStartedSubject.AsObservable(); TimeEntryContinued = timeEntryContinuedSubject.AsObservable(); }
public TimeEntriesDataSource( IRepository <IDatabaseTimeEntry> repository, ITimeService timeService, IAnalyticsService analyticsService) : base(repository) { Ensure.Argument.IsNotNull(timeService, nameof(timeService)); Ensure.Argument.IsNotNull(repository, nameof(repository)); Ensure.Argument.IsNotNull(analyticsService, nameof(analyticsService)); this.repository = repository; this.analyticsService = analyticsService; RivalsResolver = new TimeEntryRivalsResolver(timeService); CurrentlyRunningTimeEntry = ItemsChanged .StartWith(Unit.Default) .SelectMany(_ => getCurrentlyRunningTimeEntry()) .ConnectedReplay(); IsEmpty = ItemsChanged .StartWith(Unit.Default) .SelectMany(_ => GetAll(te => te.IsDeleted == false)) .Select(timeEntries => timeEntries.None()); RivalsResolver = new TimeEntryRivalsResolver(timeService); TimeEntryStarted = timeEntryStartedSubject.AsObservable(); TimeEntryStopped = timeEntryStoppedSubject.AsObservable(); SuggestionStarted = suggestionStartedSubject.AsObservable(); TimeEntryContinued = timeEntryContinuedSubject.AsObservable(); }
public static IObservable <IEnumerable <IConflictResolutionResult <TModel> > > UpdateWithConflictResolution <TModel>( this IBaseStorage <TModel> repository, long id, TModel entity, Func <TModel, TModel, ConflictResolutionMode> conflictResolution, IRivalsResolver <TModel> rivalsResolver = null) => repository .BatchUpdate(new[] { (id, entity) }, conflictResolution, rivalsResolver)
public static IObservable <IConflictResolutionResult <TModel> > UpdateWithConflictResolution <TModel>( this IRepository <TModel> repository, long id, TModel entity, Func <TModel, TModel, ConflictResolutionMode> conflictResolution, IRivalsResolver <TModel> rivalsResolver = null) where TModel : IBaseModel, IDatabaseSyncable => repository .BatchUpdate(new[] { (id, entity) }, conflictResolution, rivalsResolver)
protected BasePersistState( IRepository <TDatabaseInterface> repository, ISinceParameterRepository sinceParameterRepository, IConflictResolver <TDatabaseInterface> conflictResolver, IRivalsResolver <TDatabaseInterface> rivalsResolver = null) { this.repository = repository; this.sinceParameterRepository = sinceParameterRepository; this.conflictResolver = conflictResolver; this.rivalsResolver = rivalsResolver; }