diff options
author | Chocobozzz <me@florianbigard.com> | 2019-01-14 15:32:09 +0100 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2019-01-14 15:32:09 +0100 |
commit | 9a39392a7e6b3f180104856a4ea893e5baf86a02 (patch) | |
tree | 11c5f568d6e5a8e67fb925337c83efd57adf9111 /client/src/app/core | |
parent | f57ad0d22c527328b1412aa1c8c3f0d4819219ca (diff) | |
download | PeerTube-9a39392a7e6b3f180104856a4ea893e5baf86a02.tar.gz PeerTube-9a39392a7e6b3f180104856a4ea893e5baf86a02.tar.zst PeerTube-9a39392a7e6b3f180104856a4ea893e5baf86a02.zip |
Fix notification socket
Should be in core module to share the same subject to all the app
Diffstat (limited to 'client/src/app/core')
-rw-r--r-- | client/src/app/core/auth/auth.service.ts | 4 | ||||
-rw-r--r-- | client/src/app/core/core.module.ts | 4 | ||||
-rw-r--r-- | client/src/app/core/notification/index.ts | 1 | ||||
-rw-r--r-- | client/src/app/core/notification/user-notification-socket.service.ts | 41 |
4 files changed, 47 insertions, 3 deletions
diff --git a/client/src/app/core/auth/auth.service.ts b/client/src/app/core/auth/auth.service.ts index 79ea32ced..eaa822e0f 100644 --- a/client/src/app/core/auth/auth.service.ts +++ b/client/src/app/core/auth/auth.service.ts | |||
@@ -3,12 +3,12 @@ import { catchError, map, mergeMap, share, tap } from 'rxjs/operators' | |||
3 | import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http' | 3 | import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http' |
4 | import { Injectable } from '@angular/core' | 4 | import { Injectable } from '@angular/core' |
5 | import { Router } from '@angular/router' | 5 | import { Router } from '@angular/router' |
6 | import { Notifier } from '@app/core/notification' | 6 | import { Notifier } from '@app/core/notification/notifier.service' |
7 | import { OAuthClientLocal, User as UserServerModel, UserRefreshToken } from '../../../../../shared' | 7 | import { OAuthClientLocal, User as UserServerModel, UserRefreshToken } from '../../../../../shared' |
8 | import { User } from '../../../../../shared/models/users' | 8 | import { User } from '../../../../../shared/models/users' |
9 | import { UserLogin } from '../../../../../shared/models/users/user-login.model' | 9 | import { UserLogin } from '../../../../../shared/models/users/user-login.model' |
10 | import { environment } from '../../../environments/environment' | 10 | import { environment } from '../../../environments/environment' |
11 | import { RestExtractor } from '../../shared/rest' | 11 | import { RestExtractor } from '../../shared/rest/rest-extractor.service' |
12 | import { AuthStatus } from './auth-status.model' | 12 | import { AuthStatus } from './auth-status.model' |
13 | import { AuthUser } from './auth-user.model' | 13 | import { AuthUser } from './auth-user.model' |
14 | import { objectToUrlEncoded } from '@app/shared/misc/utils' | 14 | import { objectToUrlEncoded } from '@app/shared/misc/utils' |
diff --git a/client/src/app/core/core.module.ts b/client/src/app/core/core.module.ts index 7c0d4ac8f..3bc0e2885 100644 --- a/client/src/app/core/core.module.ts +++ b/client/src/app/core/core.module.ts | |||
@@ -18,6 +18,7 @@ import { CheatSheetComponent } from './hotkeys' | |||
18 | import { ToastModule } from 'primeng/toast' | 18 | import { ToastModule } from 'primeng/toast' |
19 | import { Notifier } from './notification' | 19 | import { Notifier } from './notification' |
20 | import { MessageService } from 'primeng/api' | 20 | import { MessageService } from 'primeng/api' |
21 | import { UserNotificationSocket } from '@app/core/notification/user-notification-socket.service' | ||
21 | 22 | ||
22 | @NgModule({ | 23 | @NgModule({ |
23 | imports: [ | 24 | imports: [ |
@@ -60,7 +61,8 @@ import { MessageService } from 'primeng/api' | |||
60 | UserRightGuard, | 61 | UserRightGuard, |
61 | RedirectService, | 62 | RedirectService, |
62 | Notifier, | 63 | Notifier, |
63 | MessageService | 64 | MessageService, |
65 | UserNotificationSocket | ||
64 | ] | 66 | ] |
65 | }) | 67 | }) |
66 | export class CoreModule { | 68 | export class CoreModule { |
diff --git a/client/src/app/core/notification/index.ts b/client/src/app/core/notification/index.ts index 8b0cfde5f..3e8d9ea65 100644 --- a/client/src/app/core/notification/index.ts +++ b/client/src/app/core/notification/index.ts | |||
@@ -1 +1,2 @@ | |||
1 | export * from './notifier.service' | 1 | export * from './notifier.service' |
2 | export * from './user-notification-socket.service' | ||
diff --git a/client/src/app/core/notification/user-notification-socket.service.ts b/client/src/app/core/notification/user-notification-socket.service.ts new file mode 100644 index 000000000..f367d9ae4 --- /dev/null +++ b/client/src/app/core/notification/user-notification-socket.service.ts | |||
@@ -0,0 +1,41 @@ | |||
1 | import { Injectable } from '@angular/core' | ||
2 | import { environment } from '../../../environments/environment' | ||
3 | import { UserNotification as UserNotificationServer } from '../../../../../shared' | ||
4 | import { Subject } from 'rxjs' | ||
5 | import * as io from 'socket.io-client' | ||
6 | import { AuthService } from '../auth' | ||
7 | |||
8 | export type NotificationEvent = 'new' | 'read' | 'read-all' | ||
9 | |||
10 | @Injectable() | ||
11 | export class UserNotificationSocket { | ||
12 | private notificationSubject = new Subject<{ type: NotificationEvent, notification?: UserNotificationServer }>() | ||
13 | |||
14 | private socket: SocketIOClient.Socket | ||
15 | |||
16 | constructor ( | ||
17 | private auth: AuthService | ||
18 | ) {} | ||
19 | |||
20 | dispatch (type: NotificationEvent, notification?: UserNotificationServer) { | ||
21 | this.notificationSubject.next({ type, notification }) | ||
22 | } | ||
23 | |||
24 | getMyNotificationsSocket () { | ||
25 | const socket = this.getSocket() | ||
26 | |||
27 | socket.on('new-notification', (n: UserNotificationServer) => this.dispatch('new', n)) | ||
28 | |||
29 | return this.notificationSubject.asObservable() | ||
30 | } | ||
31 | |||
32 | private getSocket () { | ||
33 | if (this.socket) return this.socket | ||
34 | |||
35 | this.socket = io(environment.apiUrl + '/user-notifications', { | ||
36 | query: { accessToken: this.auth.getAccessToken() } | ||
37 | }) | ||
38 | |||
39 | return this.socket | ||
40 | } | ||
41 | } | ||