コード例 #1
0
        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();
        }
コード例 #2
0
        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();
        }
コード例 #3
0
 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)
コード例 #4
0
 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)
コード例 #5
0
 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;
 }