]>
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 = [ | |
47 | [ | |
48 | { | |
49 | label: $localize`Delete`, | |
50 | iconName: 'delete', | |
51 | handler: videoChannelSync => this.deleteSync(videoChannelSync) | |
52 | }, | |
53 | { | |
54 | label: $localize`Fully synchronize the channel`, | |
55 | description: $localize`This fetches any missing videos on the local channel`, | |
56 | iconName: 'refresh', | |
57 | handler: videoChannelSync => this.fullySynchronize(videoChannelSync) | |
58 | } | |
59 | ] | |
60 | ] | |
61 | } | |
62 | ||
63 | protected reloadData () { | |
64 | this.error = undefined | |
65 | ||
66 | this.authService.userInformationLoaded | |
67 | .pipe(mergeMap(() => { | |
68 | const user = this.authService.getUser() | |
69 | return this.videoChannelsSyncService.listAccountVideoChannelsSyncs({ | |
70 | sort: this.sort, | |
71 | account: user.account, | |
72 | pagination: this.pagination | |
73 | }) | |
74 | })) | |
75 | .subscribe({ | |
76 | next: res => { | |
77 | this.channelSyncs = res.data | |
78 | }, | |
79 | error: err => { | |
80 | this.error = err.message | |
81 | } | |
82 | }) | |
83 | } | |
84 | ||
85 | syncEnabled () { | |
86 | return this.serverConfig.import.videoChannelSynchronization.enabled | |
87 | } | |
88 | ||
89 | deleteSync (videoChannelSync: VideoChannelSync) { | |
90 | this.videoChannelsSyncService.deleteSync(videoChannelSync.id) | |
91 | .subscribe({ | |
92 | next: () => { | |
93 | this.notifier.success($localize`Synchronization removed successfully for ${videoChannelSync.channel.displayName}.`) | |
94 | this.reloadData() | |
95 | }, | |
96 | error: err => { | |
97 | this.error = err.message | |
98 | } | |
99 | }) | |
100 | } | |
101 | ||
102 | fullySynchronize (videoChannelSync: VideoChannelSync) { | |
a3b472a1 | 103 | this.videoChannelService.importVideos(videoChannelSync.channel.name, videoChannelSync.externalChannelUrl, videoChannelSync.id) |
2a491182 F |
104 | .subscribe({ |
105 | next: () => { | |
106 | this.notifier.success($localize`Full synchronization requested successfully for ${videoChannelSync.channel.displayName}.`) | |
107 | }, | |
108 | error: err => { | |
109 | this.error = err.message | |
110 | } | |
111 | }) | |
112 | } | |
113 | ||
114 | getSyncCreateLink () { | |
115 | return '/my-library/video-channel-syncs/create' | |
116 | } | |
117 | ||
118 | getSyncStateClass (stateId: number) { | |
119 | return [ 'pt-badge', MyVideoChannelSyncsComponent.STATE_CLASS_BY_ID[stateId] ] | |
120 | } | |
121 | ||
122 | getIdentifier () { | |
123 | return 'MyVideoChannelsSyncComponent' | |
124 | } | |
125 | ||
126 | getChannelUrl (name: string) { | |
127 | return '/c/' + name | |
128 | } | |
129 | } |