Skip to content

Commit 8541ba7

Browse files
Merge EventManager PR
2 parents 70f1311 + 35c8350 commit 8541ba7

11 files changed

+531
-351
lines changed

packages/firestore/exp/dependencies.json

+173-33
Large diffs are not rendered by default.

packages/firestore/exp/src/api/components.ts

+18-6
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,18 @@ import {
2323
OfflineComponentProvider,
2424
OnlineComponentProvider
2525
} from '../../../src/core/component_provider';
26-
import {handleUserChange, LocalStore} from '../../../src/local/local_store';
26+
import { handleUserChange, LocalStore } from '../../../src/local/local_store';
2727
import { Deferred } from '../../../src/util/promise';
2828
import { logDebug } from '../../../src/util/log';
29-
import { SyncEngine } from '../../../src/core/sync_engine';
3029
import {
3130
RemoteStore,
3231
remoteStoreHandleCredentialChange
3332
} from '../../../src/remote/remote_store';
33+
import {
34+
SyncEngine,
35+
syncEngineListen,
36+
syncEngineUnlisten
37+
} from '../../../src/core/sync_engine';
3438
import { Persistence } from '../../../src/local/persistence';
3539
import { EventManager } from '../../../src/core/event_manager';
3640
export const LOG_TAG = 'ComponentProvider';
@@ -98,7 +102,10 @@ export async function setOnlineComponentProvider(
98102
// precedence over the offline component provider.
99103
firestore._setCredentialChangeListener(user =>
100104
firestore._queue.enqueueAndForget(() =>
101-
remoteStoreHandleCredentialChange(onlineComponentProvider.remoteStore, user)
105+
remoteStoreHandleCredentialChange(
106+
onlineComponentProvider.remoteStore,
107+
user
108+
)
102109
)
103110
);
104111
onlineDeferred.resolve(onlineComponentProvider);
@@ -156,9 +163,14 @@ export function getRemoteStore(firestore: Firestore): Promise<RemoteStore> {
156163
}
157164

158165
export function getEventManager(firestore: Firestore): Promise<EventManager> {
159-
return getOnlineComponentProvider(firestore).then(
160-
components => components.eventManager
161-
);
166+
return getOnlineComponentProvider(firestore).then(components => {
167+
const eventManager = components.eventManager;
168+
eventManager.subscribe(
169+
syncEngineListen.bind(null, components.syncEngine),
170+
syncEngineUnlisten.bind(null, components.syncEngine)
171+
);
172+
return eventManager;
173+
});
162174
}
163175

164176
export function getPersistence(firestore: Firestore): Promise<Persistence> {

packages/firestore/exp/src/api/database.ts

+34-30
Original file line numberDiff line numberDiff line change
@@ -201,22 +201,24 @@ export function enableIndexedDbPersistence(
201201
const onlineComponentProvider = new OnlineComponentProvider();
202202

203203
// TODO(firestoreexp): Add forceOwningTab
204-
return setOfflineComponentProvider(
205-
firestoreImpl,
206-
{
207-
durable: true,
208-
synchronizeTabs: false,
209-
cacheSizeBytes:
210-
settings.cacheSizeBytes || LruParams.DEFAULT_CACHE_SIZE_BYTES,
211-
forceOwningTab: false
212-
},
213-
new IndexedDbOfflineComponentProvider()
214-
)
215-
.then(() =>
216-
setOnlineComponentProvider(firestoreImpl, new OnlineComponentProvider())
204+
return (
205+
setOfflineComponentProvider(
206+
firestoreImpl,
207+
{
208+
durable: true,
209+
synchronizeTabs: false,
210+
cacheSizeBytes:
211+
settings.cacheSizeBytes || LruParams.DEFAULT_CACHE_SIZE_BYTES,
212+
forceOwningTab: false
213+
},
214+
new IndexedDbOfflineComponentProvider()
217215
)
218-
// Enqueue writes from a previous session
219-
.then(() => fillWritePipeline(onlineComponentProvider.remoteStore));
216+
.then(() =>
217+
setOnlineComponentProvider(firestoreImpl, new OnlineComponentProvider())
218+
)
219+
// Enqueue writes from a previous session
220+
.then(() => fillWritePipeline(onlineComponentProvider.remoteStore))
221+
);
220222
}
221223

222224
export function enableMultiTabIndexedDbPersistence(
@@ -235,22 +237,24 @@ export function enableMultiTabIndexedDbPersistence(
235237
const offlineComponentProvider = new MultiTabOfflineComponentProvider(
236238
onlineComponentProvider
237239
);
238-
return setOfflineComponentProvider(
239-
firestoreImpl,
240-
{
241-
durable: true,
242-
synchronizeTabs: true,
243-
cacheSizeBytes:
244-
settings.cacheSizeBytes || LruParams.DEFAULT_CACHE_SIZE_BYTES,
245-
forceOwningTab: false
246-
},
247-
offlineComponentProvider
248-
)
249-
.then(() =>
250-
setOnlineComponentProvider(firestoreImpl, onlineComponentProvider)
240+
return (
241+
setOfflineComponentProvider(
242+
firestoreImpl,
243+
{
244+
durable: true,
245+
synchronizeTabs: true,
246+
cacheSizeBytes:
247+
settings.cacheSizeBytes || LruParams.DEFAULT_CACHE_SIZE_BYTES,
248+
forceOwningTab: false
249+
},
250+
offlineComponentProvider
251251
)
252-
// Enqueue writes from a previous session
253-
.then(() => fillWritePipeline(onlineComponentProvider.remoteStore));
252+
.then(() =>
253+
setOnlineComponentProvider(firestoreImpl, onlineComponentProvider)
254+
)
255+
// Enqueue writes from a previous session
256+
.then(() => fillWritePipeline(onlineComponentProvider.remoteStore))
257+
);
254258
}
255259

256260
export function clearIndexedDbPersistence(

packages/firestore/src/core/component_provider.ts

+10-5
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,10 @@ import {
4040
import {
4141
newRemoteStore,
4242
RemoteStore,
43-
remoteStoreApplyPrimaryState, remoteStoreShutdown
43+
remoteStoreApplyPrimaryState,
44+
remoteStoreShutdown
4445
} from '../remote/remote_store';
45-
import { EventManager } from './event_manager';
46+
import { EventManager, newEventManager } from './event_manager';
4647
import { AsyncQueue } from '../util/async_queue';
4748
import { DatabaseId, DatabaseInfo } from './database_info';
4849
import { Datastore, newDatastore } from '../remote/datastore';
@@ -335,8 +336,8 @@ export class OnlineComponentProvider {
335336
this.sharedClientState = offlineComponentProvider.sharedClientState;
336337
this.datastore = this.createDatastore(cfg);
337338
this.remoteStore = this.createRemoteStore(cfg);
338-
this.syncEngine = this.createSyncEngine(cfg);
339339
this.eventManager = this.createEventManager(cfg);
340+
this.syncEngine = this.createSyncEngine(cfg);
340341

341342
this.sharedClientState.onlineStateHandler = onlineState =>
342343
applyOnlineStateChange(
@@ -350,11 +351,14 @@ export class OnlineComponentProvider {
350351
this.syncEngine
351352
);
352353

353-
await remoteStoreApplyPrimaryState(this.remoteStore, this.syncEngine.isPrimaryClient);
354+
await remoteStoreApplyPrimaryState(
355+
this.remoteStore,
356+
this.syncEngine.isPrimaryClient
357+
);
354358
}
355359

356360
createEventManager(cfg: ComponentConfiguration): EventManager {
357-
return new EventManager(this.syncEngine);
361+
return newEventManager();
358362
}
359363

360364
createDatastore(cfg: ComponentConfiguration): Datastore {
@@ -382,6 +386,7 @@ export class OnlineComponentProvider {
382386
return newSyncEngine(
383387
this.localStore,
384388
this.remoteStore,
389+
this.eventManager,
385390
this.sharedClientState,
386391
cfg.initialUser,
387392
cfg.maxConcurrentLimboResolutions,

0 commit comments

Comments
 (0)