+import { first, map } from 'rxjs/operators'
import { SelectChannelItem } from 'src/types/select-options-item.model'
import { DatePipe } from '@angular/common'
import { HttpErrorResponse } from '@angular/common/http'
return decodeURIComponent(results[2].replace(/\+/g, ' '))
}
-function populateAsyncUserVideoChannels (
- authService: AuthService,
- channel: SelectChannelItem[]
-) {
- return new Promise<void>(res => {
- authService.userInformationLoaded
- .subscribe(
- () => {
- const user = authService.getUser()
- if (!user) return
-
- const videoChannels = user.videoChannels
- if (Array.isArray(videoChannels) === false) return
-
- videoChannels.forEach(c => channel.push({
+function listUserChannels (authService: AuthService) {
+ return authService.userInformationLoaded
+ .pipe(
+ first(),
+ map(() => {
+ const user = authService.getUser()
+ if (!user) return undefined
+
+ const videoChannels = user.videoChannels
+ if (Array.isArray(videoChannels) === false) return undefined
+
+ return videoChannels
+ .sort((a, b) => {
+ if (a.updatedAt < b.updatedAt) return 1
+ if (a.updatedAt > b.updatedAt) return -1
+ return 0
+ })
+ .map(c => ({
id: c.id,
label: c.displayName,
support: c.support,
avatarPath: c.avatar?.path
- }))
-
- return res()
- }
- )
- })
+ }) as SelectChannelItem)
+ })
+ )
}
function getAbsoluteAPIUrl () {
)
}
-function uploadErrorHandler (parameters: {
- err: HttpErrorResponse
+function genericUploadErrorHandler (parameters: {
+ err: Pick<HttpErrorResponse, 'message' | 'status' | 'headers'>
name: string
notifier: Notifier
sticky?: boolean
if (err instanceof ErrorEvent) { // network error
message = $localize`The connection was interrupted`
notifier.error(message, title, null, sticky)
+ } else if (err.status === HttpStatusCode.INTERNAL_SERVER_ERROR_500) {
+ message = $localize`The server encountered an error`
+ notifier.error(message, title, null, sticky)
} else if (err.status === HttpStatusCode.REQUEST_TIMEOUT_408) {
message = $localize`Your ${name} file couldn't be transferred before the set timeout (usually 10min)`
notifier.error(message, title, null, sticky)
durationToString,
lineFeedToHtml,
getParameterByName,
- populateAsyncUserVideoChannels,
getAbsoluteAPIUrl,
dateToHuman,
immutableAssign,
scrollToTop,
isInViewport,
isXPercentInViewport,
- uploadErrorHandler
+ listUserChannels,
+ genericUploadErrorHandler
}