Skip to content

Commit 2445ffe

Browse files
committed
Changed cell metadata to user arrays
1 parent 0a862e0 commit 2445ffe

File tree

4 files changed

+25
-15
lines changed

4 files changed

+25
-15
lines changed

packages/collaboration-extension/src/collaboration.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -240,11 +240,13 @@ export const cellTracker: JupyterFrontEndPlugin<void> = {
240240
tracker: INotebookTracker
241241
): void => {
242242

243+
const { user } = app.serviceManager;
244+
243245
let previousPanel: NotebookPanel | null = null;
244246

245247
tracker.currentChanged.connect(() => {
246248
if (tracker.currentWidget) {
247-
tracker.currentWidget.revealed.then(() => trackActivity(tracker.currentWidget!));
249+
tracker.currentWidget.revealed.then(() => trackActivity(tracker.currentWidget!, user));
248250

249251
stopTracking(previousPanel);
250252

packages/collaboration/src/activitydisplay.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ const ActivityDisplayComponent: React.FC<ActivityDisplayComponentProps> = ({trac
5151
const updateCounts = (notebook: Notebook) => {
5252

5353
const counts = notebook.widgets.map(cell => {
54-
return cell.model.getMetadata('active_users') || 0;
54+
let activeUsers = cell.model.getMetadata('active_users');
55+
if (!activeUsers || !Array.isArray(activeUsers)) return 0;
56+
return activeUsers.length;
5557
});
5658

5759
setState(counts);

packages/collaboration/src/cellTracker.ts

+19-11
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,25 @@
11
import { NotebookPanel, Notebook } from '@jupyterlab/notebook';
22
import { Cell } from '@jupyterlab/cells';
3+
import { User } from '@jupyterlab/services';
4+
35

46
let prevCell: Cell | null = null;
57
let disconnected = false;
68
let notebook: Notebook;
79
let undefinedStuff = 0;
10+
let currentUser: SimpleUser;
11+
12+
interface SimpleUser {
13+
14+
id: string,
15+
name: string
16+
17+
}
18+
819

20+
export function trackActivity(nb: NotebookPanel, user: User.IManager) {
921

10-
export function trackActivity(nb: NotebookPanel) {
22+
currentUser = { id: user.identity!.username, name: user.identity!.name }
1123

1224
notebook = nb.content;
1325

@@ -71,21 +83,17 @@ function addActivity(cell: Cell) {
7183
return;
7284
}
7385

74-
let activeUsers = cell.model.getMetadata('active_users');
75-
if (Number.isNaN(activeUsers)) activeUsers = 0;
76-
activeUsers++;
77-
cell.model.setMetadata('active_users', activeUsers);
78-
86+
let activeUsersArray = cell.model.getMetadata('active_users') || [];
87+
activeUsersArray.push(currentUser);
88+
cell.model.setMetadata('active_users', activeUsersArray);
7989
}
8090

8191
// Decrement a cell's active users count
8292
function removeActivity(cell: Cell) {
8393

8494
if (cell.model === null) return;
8595

86-
let activeUsers = cell.model.getMetadata('active_users');
87-
activeUsers--;
88-
if (activeUsers < 0) activeUsers = 0;
89-
cell.model.setMetadata('active_users', activeUsers);
90-
96+
let activeUsersArray = cell.model.getMetadata('active_users') || [];
97+
activeUsersArray = activeUsersArray.filter((user: SimpleUser) => user.id !== currentUser.id)
98+
cell.model.setMetadata('active_users', activeUsersArray);
9199
}

packages/collaboration/src/roles.ts

-2
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,6 @@ export class Roles {
4343

4444
this._aProvider.messageStream.connect(this._onMessageReceived, this);
4545

46-
console.log(`Connected at ${this._connectedAt}`);
47-
4846
this._map.set(currentUser.identity!.username, Role.Owner);
4947

5048
// Once connection is set, receive everyone's roles to populate the user's role map

0 commit comments

Comments
 (0)