]>
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 | |
c95fbe65 | 78 | this.totalRecords = res.total |
2a491182 F |
79 | }, |
80 | error: err => { | |
81 | this.error = err.message | |
82 | } | |
83 | }) | |
84 | } | |
85 | ||
86 | syncEnabled () { | |
87 | return this.serverConfig.import.videoChannelSynchronization.enabled | |
88 | } | |
89 | ||
90 | deleteSync (videoChannelSync: VideoChannelSync) { | |
91 | this.videoChannelsSyncService.deleteSync(videoChannelSync.id) | |
92 | .subscribe({ | |
93 | next: () => { | |
94 | this.notifier.success($localize`Synchronization removed successfully for ${videoChannelSync.channel.displayName}.`) | |
95 | this.reloadData() | |
96 | }, | |
97 | error: err => { | |
98 | this.error = err.message | |
99 | } | |
100 | }) | |
101 | } | |
102 | ||
103 | fullySynchronize (videoChannelSync: VideoChannelSync) { | |
a3b472a1 | 104 | this.videoChannelService.importVideos(videoChannelSync.channel.name, videoChannelSync.externalChannelUrl, videoChannelSync.id) |
2a491182 F |
105 | .subscribe({ |
106 | next: () => { | |
107 | this.notifier.success($localize`Full synchronization requested successfully for ${videoChannelSync.channel.displayName}.`) | |
108 | }, | |
109 | error: err => { | |
110 | this.error = err.message | |
111 | } | |
112 | }) | |
113 | } | |
114 | ||
115 | getSyncCreateLink () { | |
116 | return '/my-library/video-channel-syncs/create' | |
117 | } | |
118 | ||
119 | getSyncStateClass (stateId: number) { | |
120 | return [ 'pt-badge', MyVideoChannelSyncsComponent.STATE_CLASS_BY_ID[stateId] ] | |
121 | } | |
122 | ||
123 | getIdentifier () { | |
124 | return 'MyVideoChannelsSyncComponent' | |
125 | } | |
126 | ||
127 | getChannelUrl (name: string) { | |
128 | return '/c/' + name | |
129 | } | |
130 | } |