]>
Commit | Line | Data |
---|---|---|
2a491182 F |
1 | import { Component, OnInit } from '@angular/core' |
2 | import { AuthService, Notifier, RestPagination, RestTable, ServerService } from '@app/core' | |
3 | import { DropdownAction, VideoChannelService, VideoChannelSyncService } from '@app/shared/shared-main' | |
4 | import { HTMLServerConfig } from '@shared/models/server' | |
5 | import { VideoChannelSync, VideoChannelSyncState } from '@shared/models/videos' | |
6 | import { SortMeta } from 'primeng/api' | |
7 | import { mergeMap } from 'rxjs' | |
8 | ||
9 | @Component({ | |
10 | templateUrl: './my-video-channel-syncs.component.html', | |
11 | styleUrls: [ './my-video-channel-syncs.component.scss' ] | |
12 | }) | |
13 | export class MyVideoChannelSyncsComponent extends RestTable implements OnInit { | |
14 | error: string | |
15 | ||
16 | channelSyncs: VideoChannelSync[] = [] | |
17 | totalRecords = 0 | |
18 | ||
19 | videoChannelSyncActions: DropdownAction<VideoChannelSync>[][] = [] | |
20 | sort: SortMeta = { field: 'createdAt', order: 1 } | |
21 | pagination: RestPagination = { count: this.rowsPerPage, start: 0 } | |
22 | ||
23 | private static STATE_CLASS_BY_ID = { | |
24 | [VideoChannelSyncState.FAILED]: 'badge-red', | |
25 | [VideoChannelSyncState.PROCESSING]: 'badge-blue', | |
26 | [VideoChannelSyncState.SYNCED]: 'badge-green', | |
27 | [VideoChannelSyncState.WAITING_FIRST_RUN]: 'badge-yellow' | |
28 | } | |
29 | ||
30 | private serverConfig: HTMLServerConfig | |
31 | ||
32 | constructor ( | |
33 | private videoChannelsSyncService: VideoChannelSyncService, | |
34 | private serverService: ServerService, | |
35 | private notifier: Notifier, | |
36 | private authService: AuthService, | |
37 | private videoChannelService: VideoChannelService | |
38 | ) { | |
39 | super() | |
40 | } | |
41 | ||
42 | ngOnInit () { | |
43 | this.serverConfig = this.serverService.getHTMLConfig() | |
44 | this.initialize() | |
45 | ||
46 | this.videoChannelSyncActions = [ | |
3d5d2dee F |
47 | [ |
48 | { | |
49 | label: $localize`List imports`, | |
50 | linkBuilder: (videoChannelSync) => [ `/my-library/video-imports?search=videoChannelSyncId:${videoChannelSync.id}` ], | |
51 | iconName: 'cloud-download' | |
52 | } | |
53 | ], | |
2a491182 F |
54 | [ |
55 | { | |
56 | label: $localize`Delete`, | |
57 | iconName: 'delete', | |
58 | handler: videoChannelSync => this.deleteSync(videoChannelSync) | |
59 | }, | |
60 | { | |
61 | label: $localize`Fully synchronize the channel`, | |
62 | description: $localize`This fetches any missing videos on the local channel`, | |
63 | iconName: 'refresh', | |
64 | handler: videoChannelSync => this.fullySynchronize(videoChannelSync) | |
65 | } | |
66 | ] | |
67 | ] | |
68 | } | |
69 | ||
70 | protected reloadData () { | |
71 | this.error = undefined | |
72 | ||
73 | this.authService.userInformationLoaded | |
74 | .pipe(mergeMap(() => { | |
75 | const user = this.authService.getUser() | |
76 | return this.videoChannelsSyncService.listAccountVideoChannelsSyncs({ | |
77 | sort: this.sort, | |
78 | account: user.account, | |
79 | pagination: this.pagination | |
80 | }) | |
81 | })) | |
82 | .subscribe({ | |
83 | next: res => { | |
84 | this.channelSyncs = res.data | |
c95fbe65 | 85 | this.totalRecords = res.total |
2a491182 F |
86 | }, |
87 | error: err => { | |
88 | this.error = err.message | |
89 | } | |
90 | }) | |
91 | } | |
92 | ||
93 | syncEnabled () { | |
94 | return this.serverConfig.import.videoChannelSynchronization.enabled | |
95 | } | |
96 | ||
97 | deleteSync (videoChannelSync: VideoChannelSync) { | |
98 | this.videoChannelsSyncService.deleteSync(videoChannelSync.id) | |
99 | .subscribe({ | |
100 | next: () => { | |
101 | this.notifier.success($localize`Synchronization removed successfully for ${videoChannelSync.channel.displayName}.`) | |
102 | this.reloadData() | |
103 | }, | |
104 | error: err => { | |
105 | this.error = err.message | |
106 | } | |
107 | }) | |
108 | } | |
109 | ||
110 | fullySynchronize (videoChannelSync: VideoChannelSync) { | |
a3b472a1 | 111 | this.videoChannelService.importVideos(videoChannelSync.channel.name, videoChannelSync.externalChannelUrl, videoChannelSync.id) |
2a491182 F |
112 | .subscribe({ |
113 | next: () => { | |
114 | this.notifier.success($localize`Full synchronization requested successfully for ${videoChannelSync.channel.displayName}.`) | |
115 | }, | |
116 | error: err => { | |
117 | this.error = err.message | |
118 | } | |
119 | }) | |
120 | } | |
121 | ||
122 | getSyncCreateLink () { | |
123 | return '/my-library/video-channel-syncs/create' | |
124 | } | |
125 | ||
126 | getSyncStateClass (stateId: number) { | |
127 | return [ 'pt-badge', MyVideoChannelSyncsComponent.STATE_CLASS_BY_ID[stateId] ] | |
128 | } | |
129 | ||
130 | getIdentifier () { | |
131 | return 'MyVideoChannelsSyncComponent' | |
132 | } | |
133 | ||
134 | getChannelUrl (name: string) { | |
135 | return '/c/' + name | |
136 | } | |
137 | } |