- return VideoPlaylistModel
- .scope(scopes)
- .findAndCountAll(query)
- .then(({ rows, count }) => {
- return { total: count, data: rows }
- })
+ return Promise.all([
+ VideoPlaylistModel.scope(scopesCount).count(),
+ VideoPlaylistModel.scope(scopesFind).findAll(query)
+ ]).then(([ count, rows ]) => ({ total: count, data: rows }))
+ }
+
+ static searchForApi (options: Pick<AvailableForListOptions, 'followerActorId' | 'search'| 'host'| 'uuids'> & {
+ start: number
+ count: number
+ sort: string
+ }) {
+ return VideoPlaylistModel.listForApi({
+ ...options,
+
+ type: VideoPlaylistType.REGULAR,
+ listMyPlaylists: false,
+ withVideos: true
+ })
+ }
+
+ static listPublicUrlsOfForAP (options: { account?: MAccountId, channel?: MChannelId }, start: number, count: number) {
+ const where = {
+ privacy: VideoPlaylistPrivacy.PUBLIC
+ }
+
+ if (options.account) {
+ Object.assign(where, { ownerAccountId: options.account.id })
+ }
+
+ if (options.channel) {
+ Object.assign(where, { videoChannelId: options.channel.id })
+ }
+
+ const getQuery = (forCount: boolean) => {
+ return {
+ attributes: forCount === true
+ ? []
+ : [ 'url' ],
+ offset: start,
+ limit: count,
+ where
+ }
+ }
+
+ return Promise.all([
+ VideoPlaylistModel.count(getQuery(true)),
+ VideoPlaylistModel.findAll(getQuery(false))
+ ]).then(([ total, rows ]) => ({
+ total,
+ data: rows.map(p => p.url)
+ }))