private videoExistsCache: { [ id: number ]: VideoExistInPlaylist[] } = {}
private myAccountPlaylistCache: ResultList<CachedPlaylist> = undefined
+ private myAccountPlaylistCacheRunning = false
private myAccountPlaylistCacheSubject = new Subject<ResultList<CachedPlaylist>>()
constructor (
}
listMyPlaylistWithCache (user: AuthUser, search?: string) {
- if (!search && this.myAccountPlaylistCache) return of(this.myAccountPlaylistCache)
+ if (!search) {
+ if (this.myAccountPlaylistCacheRunning) return
+ if (this.myAccountPlaylistCache) return of(this.myAccountPlaylistCache)
+ }
+
+ this.myAccountPlaylistCacheRunning = true
return this.listAccountPlaylists(user.account, undefined, '-updatedAt', search)
.pipe(
tap(result => {
- if (!search) this.myAccountPlaylistCache = result
+ if (!search) {
+ this.myAccountPlaylistCacheRunning = false
+ this.myAccountPlaylistCache = result
+ }
})
)
}
const serverActor = await getServerActor()
// Allow users to see their private/unlisted video playlists
- let privateAndUnlisted = false
+ let listMyPlaylists = false
if (res.locals.oauth && res.locals.oauth.token.User.Account.id === res.locals.account.id) {
- privateAndUnlisted = true
+ listMyPlaylists = true
}
const resultList = await VideoPlaylistModel.listForApi({
count: req.query.count,
sort: req.query.sort,
accountId: res.locals.account.id,
- privateAndUnlisted,
+ listMyPlaylists,
type: req.query.playlistType
})
type?: VideoPlaylistType
accountId?: number
videoChannelId?: number
- privateAndUnlisted?: boolean,
+ listMyPlaylists?: boolean,
search?: string
}
]
},
[ ScopeNames.AVAILABLE_FOR_LIST ]: (options: AvailableForListOptions) => {
- // Only list local playlists OR playlists that are on an instance followed by actorId
- const inQueryInstanceFollow = buildServerIdsFollowedBy(options.followerActorId)
- const whereActor = {
- [ Op.or ]: [
- {
- serverId: null
- },
- {
- serverId: {
- [ Op.in ]: literal(inQueryInstanceFollow)
- }
- }
- ]
- }
+
+ let whereActor: WhereOptions = {}
const whereAnd: WhereOptions[] = []
- if (options.privateAndUnlisted !== true) {
+ if (options.listMyPlaylists !== true) {
whereAnd.push({
privacy: VideoPlaylistPrivacy.PUBLIC
})
+
+ // Only list local playlists OR playlists that are on an instance followed by actorId
+ const inQueryInstanceFollow = buildServerIdsFollowedBy(options.followerActorId)
+
+ whereActor = {
+ [ Op.or ]: [
+ {
+ serverId: null
+ },
+ {
+ serverId: {
+ [ Op.in ]: literal(inQueryInstanceFollow)
+ }
+ }
+ ]
+ }
}
if (options.accountId) {
type?: VideoPlaylistType,
accountId?: number,
videoChannelId?: number,
- privateAndUnlisted?: boolean,
+ listMyPlaylists?: boolean,
search?: string
}) {
const query = {
followerActorId: options.followerActorId,
accountId: options.accountId,
videoChannelId: options.videoChannelId,
- privateAndUnlisted: options.privateAndUnlisted,
+ listMyPlaylists: options.listMyPlaylists,
search: options.search
} as AvailableForListOptions
]