private static void configurePullTransitions( TransitionHandlerProvider transitions, ITogglDatabase database, ITogglApi api, ITogglDataSource dataSource, ITimeService timeService, StateResult entryPoint) { var fetchAllSince = new FetchAllSinceState(database, api, timeService); var persistWorkspaces = new PersistWorkspacesState(database.Workspaces, database.SinceParameters); var persistWorkspaceFeatures = new PersistWorkspacesFeaturesState(database.WorkspaceFeatures, database.SinceParameters); var persistTags = new PersistTagsState(database.Tags, database.SinceParameters); var persistClients = new PersistClientsState(database.Clients, database.SinceParameters); var persistProjects = new PersistProjectsState(database.Projects, database.SinceParameters); var persistTimeEntries = new PersistTimeEntriesState(dataSource.TimeEntries, database.SinceParameters, timeService); var persistTasks = new PersistTasksState(database.Tasks, database.SinceParameters); transitions.ConfigureTransition(entryPoint, fetchAllSince.Start); transitions.ConfigureTransition(fetchAllSince.FetchStarted, persistWorkspaces.Start); transitions.ConfigureTransition(persistWorkspaces.FinishedPersisting, persistWorkspaceFeatures.Start); transitions.ConfigureTransition(persistWorkspaceFeatures.FinishedPersisting, persistTags.Start); transitions.ConfigureTransition(persistTags.FinishedPersisting, persistClients.Start); transitions.ConfigureTransition(persistClients.FinishedPersisting, persistProjects.Start); transitions.ConfigureTransition(persistProjects.FinishedPersisting, persistTasks.Start); transitions.ConfigureTransition(persistTasks.FinishedPersisting, persistTimeEntries.Start); }
private static void configurePullTransitions( TransitionHandlerProvider transitions, ITogglDatabase database, ITogglApi api, ITogglDataSource dataSource, ITimeService timeService, IScheduler scheduler, StateResult entryPoint, IObservable <Unit> delayCancellation) { var rnd = new Random(); var apiDelay = new RetryDelayService(rnd); var statusDelay = new RetryDelayService(rnd); var fetchAllSince = new FetchAllSinceState(database, api, timeService); var persistWorkspaces = new PersistWorkspacesState(database.Workspaces, database.SinceParameters); var persistWorkspaceFeatures = new PersistWorkspacesFeaturesState(database.WorkspaceFeatures, database.SinceParameters); var persistUser = new PersistUserState(database.User, database.SinceParameters); var persistTags = new PersistTagsState(database.Tags, database.SinceParameters); var persistClients = new PersistClientsState(database.Clients, database.SinceParameters); var persistPreferences = new PersistPreferencesState(dataSource.Preferences, database.SinceParameters); var persistProjects = new PersistProjectsState(database.Projects, database.SinceParameters); var persistTimeEntries = new PersistTimeEntriesState(dataSource.TimeEntries, database.SinceParameters, timeService); var persistTasks = new PersistTasksState(database.Tasks, database.SinceParameters); var checkServerStatus = new CheckServerStatusState(api, scheduler, apiDelay, statusDelay, delayCancellation); var finished = new ResetAPIDelayState(apiDelay); transitions.ConfigureTransition(entryPoint, fetchAllSince.Start); transitions.ConfigureTransition(fetchAllSince.FetchStarted, persistWorkspaces.Start); transitions.ConfigureTransition(persistWorkspaces.FinishedPersisting, persistUser.Start); transitions.ConfigureTransition(persistUser.FinishedPersisting, persistWorkspaceFeatures.Start); transitions.ConfigureTransition(persistWorkspaceFeatures.FinishedPersisting, persistPreferences.Start); transitions.ConfigureTransition(persistPreferences.FinishedPersisting, persistTags.Start); transitions.ConfigureTransition(persistTags.FinishedPersisting, persistClients.Start); transitions.ConfigureTransition(persistClients.FinishedPersisting, persistProjects.Start); transitions.ConfigureTransition(persistProjects.FinishedPersisting, persistTasks.Start); transitions.ConfigureTransition(persistTasks.FinishedPersisting, persistTimeEntries.Start); transitions.ConfigureTransition(persistWorkspaces.Failed, checkServerStatus.Start); transitions.ConfigureTransition(persistWorkspaceFeatures.Failed, checkServerStatus.Start); transitions.ConfigureTransition(persistPreferences.Failed, checkServerStatus.Start); transitions.ConfigureTransition(persistTags.Failed, checkServerStatus.Start); transitions.ConfigureTransition(persistClients.Failed, checkServerStatus.Start); transitions.ConfigureTransition(persistProjects.Failed, checkServerStatus.Start); transitions.ConfigureTransition(persistTasks.Failed, checkServerStatus.Start); transitions.ConfigureTransition(persistTimeEntries.Failed, checkServerStatus.Start); transitions.ConfigureTransition(checkServerStatus.Retry, checkServerStatus.Start); transitions.ConfigureTransition(checkServerStatus.ServerIsAvailable, finished.Start); transitions.ConfigureTransition(finished.Continue, fetchAllSince.Start); }