aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/lib/activitypub/playlists/get.ts
blob: 2c19c503a2cab73da77fc7ceb234a12dd1f786d9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import { getAPId } from '@server/helpers/activitypub'
import { VideoPlaylistModel } from '@server/models/video/video-playlist'
import { MVideoPlaylistFullSummary } from '@server/types/models'
import { APObject } from '@shared/models'
import { createOrUpdateVideoPlaylist } from './create-update'
import { scheduleRefreshIfNeeded } from './refresh'
import { fetchRemoteVideoPlaylist } from './shared'

async function getOrCreateAPVideoPlaylist (playlistObjectArg: APObject): Promise<MVideoPlaylistFullSummary> {
  const playlistUrl = getAPId(playlistObjectArg)

  const playlistFromDatabase = await VideoPlaylistModel.loadByUrlWithAccountAndChannelSummary(playlistUrl)

  if (playlistFromDatabase) {
    scheduleRefreshIfNeeded(playlistFromDatabase)

    return playlistFromDatabase
  }

  const { playlistObject } = await fetchRemoteVideoPlaylist(playlistUrl)
  if (!playlistObject) throw new Error('Cannot fetch remote playlist with url: ' + playlistUrl)

  // playlistUrl is just an alias/rediraction, so process object id instead
  if (playlistObject.id !== playlistUrl) return getOrCreateAPVideoPlaylist(playlistObject)

  const playlistCreated = await createOrUpdateVideoPlaylist(playlistObject)

  return playlistCreated
}

// ---------------------------------------------------------------------------

export {
  getOrCreateAPVideoPlaylist
}