Skip to content

Commit

Permalink
splited the streamers bind in files
Browse files Browse the repository at this point in the history
  • Loading branch information
ggazzo committed Jul 2, 2019
1 parent 3ce57f4 commit 8120cc8
Show file tree
Hide file tree
Showing 15 changed files with 314 additions and 272 deletions.
24 changes: 24 additions & 0 deletions app/authorization/server/publications/permissions/emitter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { Notifications } from '../../../../notifications';
import Permissions from '../../../../models/server/models/Permissions';

Permissions.on('change', ({ clientAction, id, data, diff }) => {
if (diff && Object.keys(diff).length === 1 && diff._updatedAt) { // avoid useless changes
return;
}
switch (clientAction) {
case 'updated':
case 'inserted':
data = data || Permissions.findOneById(id);
break;

case 'removed':
data = { _id: id };
break;
}

Notifications.notifyLoggedInThisInstance(
'permissions-changed',
clientAction,
data
);
});
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Meteor } from 'meteor/meteor';

import Permissions from '../../../models/server/models/Permissions';
import { Notifications } from '../../../notifications';
import Permissions from '../../../../models/server/models/Permissions';
import './emitter';

Meteor.methods({
'permissions/get'(updatedAt) {
Expand All @@ -20,18 +20,3 @@ Meteor.methods({
return records;
},
});

Permissions.on('change', ({ clientAction, id, data }) => {
switch (clientAction) {
case 'updated':
case 'inserted':
data = data || Permissions.findOneById(id);
break;

case 'removed':
data = { _id: id };
break;
}

Notifications.notifyLoggedInThisInstance('permissions-changed', clientAction, data);
});
1 change: 0 additions & 1 deletion app/lib/server/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ import './methods/setUsername';
import './methods/unarchiveRoom';
import './methods/unblockUser';
import './methods/updateMessage';
import './publications/settings';

export * from './lib';
export * from './functions';
99 changes: 0 additions & 99 deletions app/lib/server/publications/settings.js

This file was deleted.

40 changes: 22 additions & 18 deletions app/models/server/models/_BaseDb.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@ try {
console.log(e);
}

const isOplogEnabled = MongoInternals.defaultRemoteCollectionDriver().mongo._oplogHandle && !!MongoInternals.defaultRemoteCollectionDriver().mongo._oplogHandle.onOplogEntry;

export class BaseDb extends EventEmitter {
constructor(model, baseModel) {
super();
Expand All @@ -34,24 +32,30 @@ export class BaseDb extends EventEmitter {

this.wrapModel();

let alreadyListeningToOplog = false;
// When someone start listening for changes we start oplog if available
this.on('newListener', (event/* , listener*/) => {
if (event === 'change' && alreadyListeningToOplog === false) {
alreadyListeningToOplog = true;
if (isOplogEnabled) {
const query = {
collection: this.collectionName,
};

MongoInternals.defaultRemoteCollectionDriver().mongo._oplogHandle.onOplogEntry(query, this.processOplogRecord.bind(this));
// Meteor will handle if we have a value https://github.com/meteor/meteor/blob/5dcd0b2eb9c8bf881ffbee98bc4cb7631772c4da/packages/mongo/oplog_tailing.js#L5
if (process.env.METEOR_OPLOG_TOO_FAR_BEHIND == null) {
MongoInternals.defaultRemoteCollectionDriver().mongo._oplogHandle._defineTooFarBehind(Number.MAX_SAFE_INTEGER);
}
}
const handleListener = (event /* , listener*/) => {
if (event !== 'change') {
return;
}
});

this.removeListener('newListener', handleListener);

const query = {
collection: this.collectionName,
};

MongoInternals.defaultRemoteCollectionDriver().mongo._oplogHandle.onOplogEntry(
query,
this.processOplogRecord.bind(this)
);
// Meteor will handle if we have a value https://github.com/meteor/meteor/blob/5dcd0b2eb9c8bf881ffbee98bc4cb7631772c4da/packages/mongo/oplog_tailing.js#L5
if (process.env.METEOR_OPLOG_TOO_FAR_BEHIND == null) {
MongoInternals.defaultRemoteCollectionDriver().mongo._oplogHandle._defineTooFarBehind(
Number.MAX_SAFE_INTEGER
);
}
};
this.on('newListener', handleListener);

this.tryEnsureIndex({ _updatedAt: 1 });
}
Expand Down
1 change: 1 addition & 0 deletions server/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ import './publications/room';
import './publications/roomFiles';
import './publications/roomFilesWithSearchText';
import './publications/roomSubscriptionsByRole';
import './publications/settings';
import './publications/spotlight';
import './publications/subscription';
import './publications/userAutocomplete';
Expand Down
37 changes: 37 additions & 0 deletions server/publications/room/emitter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { Rooms, Subscriptions } from '../../../app/models';
import { Notifications } from '../../../app/notifications';

import { fields } from '.';

const getSubscriptions = (id) => {
const fields = { 'u._id': 1 };
return Subscriptions.trashFind({ rid: id }, { fields });
};

Rooms.on('change', ({ clientAction, id, data }) => {
switch (clientAction) {
case 'updated':
case 'inserted':
// Override data cuz we do not publish all fields
data = Rooms.findOneById(id, { fields });
break;

case 'removed':
data = { _id: id };
break;
}

if (data) {
if (clientAction === 'removed') {
getSubscriptions(clientAction, id).forEach(({ u }) => {
Notifications.notifyUserInThisInstance(
u._id,
'rooms-changed',
clientAction,
data
);
});
}
Notifications.streamUser.__emit(id, clientAction, data);
}
});
39 changes: 5 additions & 34 deletions server/publications/room.js → server/publications/room/index.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
import { Meteor } from 'meteor/meteor';
import _ from 'underscore';

import { roomTypes } from '../../app/utils';
import { hasPermission } from '../../app/authorization';
import { Rooms, Subscriptions } from '../../app/models';
import { settings } from '../../app/settings';
import { Notifications } from '../../app/notifications';
import { roomTypes } from '../../../app/utils';
import { hasPermission } from '../../../app/authorization';
import { Rooms } from '../../../app/models';
import { settings } from '../../../app/settings';

const fields = {
export const fields = {
_id: 1,
name: 1,
fname: 1,
Expand Down Expand Up @@ -107,31 +106,3 @@ Meteor.methods({
return roomMap(room);
},
});

const getSubscriptions = (id) => {
const fields = { 'u._id': 1 };
return Subscriptions.trashFind({ rid: id }, { fields });
};

Rooms.on('change', ({ clientAction, id, data }) => {
switch (clientAction) {
case 'updated':
case 'inserted':
// Override data cuz we do not publish all fields
data = Rooms.findOneById(id, { fields });
break;

case 'removed':
data = { _id: id };
break;
}

if (data) {
if (clientAction === 'removed') {
getSubscriptions(clientAction, id).forEach(({ u }) => {
Notifications.notifyUserInThisInstance(u._id, 'rooms-changed', clientAction, data);
});
}
Notifications.streamUser.__emit(id, clientAction, data);
}
});
45 changes: 45 additions & 0 deletions server/publications/settings/emitter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import { Settings } from '../../../app/models';
import { Notifications } from '../../../app/notifications';
import { hasPermission } from '../../../app/authorization';

Settings.on('change', ({ clientAction, id, data, diff }) => {
if (diff && Object.keys(diff).length === 1 && diff._updatedAt) { // avoid useless changes
return;
}
switch (clientAction) {
case 'updated':
case 'inserted': {
const setting = data || Settings.findOneById(id);
const value = {
_id: setting._id,
value: setting.value,
editor: setting.editor,
properties: setting.properties,
};

if (setting.public === true) {
Notifications.notifyAllInThisInstance('public-settings-changed', clientAction, value);
}
Notifications.notifyLoggedInThisInstance('private-settings-changed', clientAction, setting);
break;
}

case 'removed': {
const setting = data || Settings.findOneById(id, { fields: { public: 1 } });

if (setting && setting.public === true) {
Notifications.notifyAllInThisInstance('public-settings-changed', clientAction, { _id: id });
}
Notifications.notifyLoggedInThisInstance('private-settings-changed', clientAction, { _id: id });
break;
}
}
});


Notifications.streamAll.allowRead('private-settings-changed', function() {
if (this.userId == null) {
return false;
}
return hasPermission(this.userId, 'view-privileged-setting');
});
Loading

0 comments on commit 8120cc8

Please sign in to comment.