401ddc4014
Currently, collection cleanup code is only run when an added event is received from the server. Where that fails is in scenarios where a server-side collection turns empty while an affected users is disconnected - and then reconnects. There's no removed (or updated) event so no cleanup code is run and you have stale data. This commit guarantees a stale data check is run whenever a subscription is established again. The `added` check was also maintained, although I'm not too sure anymore it's is still needed. That may need to be revisited.
79 lines
4.4 KiB
JavaScript
79 lines
4.4 KiB
JavaScript
import AbstractCollection from '/imports/ui/services/LocalCollectionSynchronizer/LocalCollectionSynchronizer';
|
|
|
|
// Collections
|
|
import Presentations from '/imports/api/presentations';
|
|
import PresentationPods from '/imports/api/presentation-pods';
|
|
import PresentationUploadToken from '/imports/api/presentation-upload-token';
|
|
import Screenshare from '/imports/api/screenshare';
|
|
import UserInfos from '/imports/api/users-infos';
|
|
import Polls, { CurrentPoll } from '/imports/api/polls';
|
|
import UsersPersistentData from '/imports/api/users-persistent-data';
|
|
import UserSettings from '/imports/api/users-settings';
|
|
import VideoStreams from '/imports/api/video-streams';
|
|
import VoiceUsers from '/imports/api/voice-users';
|
|
import WhiteboardMultiUser from '/imports/api/whiteboard-multi-user';
|
|
import GroupChat from '/imports/api/group-chat';
|
|
import ConnectionStatus from '/imports/api/connection-status';
|
|
import Captions from '/imports/api/captions';
|
|
import Pads, { PadsSessions, PadsUpdates } from '/imports/api/pads';
|
|
import AuthTokenValidation from '/imports/api/auth-token-validation';
|
|
import Annotations from '/imports/api/annotations';
|
|
import Breakouts from '/imports/api/breakouts';
|
|
import BreakoutsHistory from '/imports/api/breakouts-history';
|
|
import guestUsers from '/imports/api/guest-users';
|
|
import Meetings, { RecordMeetings, ExternalVideoMeetings, MeetingTimeRemaining } from '/imports/api/meetings';
|
|
import { UsersTyping } from '/imports/api/group-chat-msg';
|
|
import Users, { CurrentUser } from '/imports/api/users';
|
|
import { Slides, SlidePositions } from '/imports/api/slides';
|
|
|
|
// Custom Publishers
|
|
export const localCollectionRegistry = {
|
|
localCurrentPollSync: new AbstractCollection(CurrentPoll, CurrentPoll),
|
|
localCurrentUserSync: new AbstractCollection(CurrentUser, CurrentUser),
|
|
localSlidesSync: new AbstractCollection(Slides, Slides),
|
|
localSlidePositionsSync: new AbstractCollection(SlidePositions, SlidePositions),
|
|
localPollsSync: new AbstractCollection(Polls, Polls),
|
|
localPresentationsSync: new AbstractCollection(Presentations, Presentations),
|
|
localPresentationPodsSync: new AbstractCollection(PresentationPods, PresentationPods),
|
|
localPresentationUploadTokenSync: new AbstractCollection(
|
|
PresentationUploadToken,
|
|
PresentationUploadToken,
|
|
),
|
|
localScreenshareSync: new AbstractCollection(Screenshare, Screenshare),
|
|
localUserInfosSync: new AbstractCollection(UserInfos, UserInfos),
|
|
localUsersPersistentDataSync: new AbstractCollection(UsersPersistentData, UsersPersistentData),
|
|
localUserSettingsSync: new AbstractCollection(UserSettings, UserSettings),
|
|
localVideoStreamsSync: new AbstractCollection(VideoStreams, VideoStreams),
|
|
localVoiceUsersSync: new AbstractCollection(VoiceUsers, VoiceUsers),
|
|
localWhiteboardMultiUserSync: new AbstractCollection(WhiteboardMultiUser, WhiteboardMultiUser),
|
|
localGroupChatSync: new AbstractCollection(GroupChat, GroupChat),
|
|
localConnectionStatusSync: new AbstractCollection(ConnectionStatus, ConnectionStatus),
|
|
localCaptionsSync: new AbstractCollection(Captions, Captions),
|
|
localPadsSync: new AbstractCollection(Pads, Pads),
|
|
localPadsSessionsSync: new AbstractCollection(PadsSessions, PadsSessions),
|
|
localPadsUpdatesSync: new AbstractCollection(PadsUpdates, PadsUpdates),
|
|
localAuthTokenValidationSync: new AbstractCollection(AuthTokenValidation, AuthTokenValidation),
|
|
localAnnotationsSync: new AbstractCollection(Annotations, Annotations),
|
|
localRecordMeetingsSync: new AbstractCollection(RecordMeetings, RecordMeetings),
|
|
localExternalVideoMeetingsSync: new AbstractCollection(
|
|
ExternalVideoMeetings,
|
|
ExternalVideoMeetings,
|
|
),
|
|
localMeetingTimeRemainingSync: new AbstractCollection(MeetingTimeRemaining, MeetingTimeRemaining),
|
|
localUsersTypingSync: new AbstractCollection(UsersTyping, UsersTyping),
|
|
localBreakoutsSync: new AbstractCollection(Breakouts, Breakouts),
|
|
localBreakoutsHistorySync: new AbstractCollection(BreakoutsHistory, BreakoutsHistory),
|
|
localGuestUsersSync: new AbstractCollection(guestUsers, guestUsers),
|
|
localMeetingsSync: new AbstractCollection(Meetings, Meetings),
|
|
localUsersSync: new AbstractCollection(Users, Users),
|
|
};
|
|
|
|
const collectionMirrorInitializer = () => {
|
|
Object.values(localCollectionRegistry).forEach((localCollection) => {
|
|
localCollection.setupListeners();
|
|
});
|
|
};
|
|
|
|
export default collectionMirrorInitializer;
|
|
// const localUsersSync = new AbstractCollection(CurrentUser, CurrentUser);
|