Don't display remove file icon in some cases

This commit is contained in:
Chocobozzz 2022-09-13 12:00:13 +02:00
parent 9f244885f0
commit 367a9dc699
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
9 changed files with 37 additions and 23 deletions

View File

@ -109,6 +109,7 @@
{{ file.resolution.label }}: {{ file.size | bytes: 1 }}
<my-global-icon
*ngIf="canRemoveOneFile(video)"
i18n-ngbTooltip ngbTooltip="Delete this file" iconName="delete" role="button"
(click)="removeVideoFile(video, file, 'webtorrent')"
></my-global-icon>
@ -124,6 +125,7 @@
{{ file.resolution.label }}: {{ file.size | bytes: 1 }}
<my-global-icon
*ngIf="canRemoveOneFile(video)"
i18n-ngbTooltip ngbTooltip="Delete this file" iconName="delete" role="button"
(click)="removeVideoFile(video, file, 'hls')"
></my-global-icon>

View File

@ -166,6 +166,10 @@ export class VideoListComponent extends RestTable implements OnInit {
return video.files.length !== 0
}
canRemoveOneFile (video: Video) {
return video.canRemoveOneFile(this.authUser)
}
getFilesSize (video: Video) {
let files = video.files

View File

@ -1,8 +1,8 @@
import { AuthUser } from '@app/core'
import { User } from '@app/core/users/user.model'
import { durationToString, prepareIcu, getAbsoluteAPIUrl, getAbsoluteEmbedUrl } from '@app/helpers'
import { durationToString, getAbsoluteAPIUrl, getAbsoluteEmbedUrl, prepareIcu } from '@app/helpers'
import { Actor } from '@app/shared/shared-main/account/actor.model'
import { buildVideoWatchPath } from '@shared/core-utils'
import { buildVideoWatchPath, getAllFiles } from '@shared/core-utils'
import { peertubeTranslate } from '@shared/core-utils/i18n'
import {
ActorImage,
@ -240,6 +240,13 @@ export class Video implements VideoServerModel {
return user && this.isLocal === true && (this.account.name === user.username || user.hasRight(UserRight.SEE_ALL_VIDEOS))
}
canRemoveOneFile (user: AuthUser) {
return this.isLocal &&
user && user.hasRight(UserRight.MANAGE_VIDEO_FILES) &&
this.state.id !== VideoState.TO_TRANSCODE &&
getAllFiles(this).length > 1
}
canRemoveFiles (user: AuthUser) {
return this.isLocal &&
user && user.hasRight(UserRight.MANAGE_VIDEO_FILES) &&

View File

@ -3,8 +3,8 @@
import { expect } from 'chai'
import { basename, join } from 'path'
import { ffprobePromise, getVideoStream } from '@server/helpers/ffmpeg'
import { checkLiveSegmentHash, checkResolutionsInMasterPlaylist, getAllFiles, testImage } from '@server/tests/shared'
import { wait } from '@shared/core-utils'
import { checkLiveSegmentHash, checkResolutionsInMasterPlaylist, testImage } from '@server/tests/shared'
import { getAllFiles, wait } from '@shared/core-utils'
import {
HttpStatusCode,
LiveVideo,

View File

@ -2,8 +2,8 @@
import { expect } from 'chai'
import { canDoQuickTranscode } from '@server/helpers/ffmpeg'
import { generateHighBitrateVideo, generateVideoWithFramerate, getAllFiles } from '@server/tests/shared'
import { buildAbsoluteFixturePath, getMaxBitrate, getMinLimitBitrate, omit } from '@shared/core-utils'
import { generateHighBitrateVideo, generateVideoWithFramerate } from '@server/tests/shared'
import { buildAbsoluteFixturePath, getAllFiles, getMaxBitrate, getMinLimitBitrate, omit } from '@shared/core-utils'
import {
buildFileMetadata,
getAudioStream,

View File

@ -1,6 +1,6 @@
import { expect } from 'chai'
import { expectStartWith, getAllFiles } from '@server/tests/shared'
import { areObjectStorageTestsDisabled } from '@shared/core-utils'
import { expectStartWith } from '@server/tests/shared'
import { areObjectStorageTestsDisabled, getAllFiles } from '@shared/core-utils'
import { VideoStudioTask } from '@shared/models'
import {
cleanupTests,

View File

@ -1,6 +1,7 @@
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
import { expect } from 'chai'
import { getAllFiles } from '@shared/core-utils'
import {
cleanupTests,
createSingleServer,
@ -11,7 +12,6 @@ import {
setAccessTokensToServers,
waitJobs
} from '@shared/server-commands'
import { getAllFiles } from '../shared'
describe('Test update host scripts', function () {
let server: PeerTubeServer

View File

@ -241,16 +241,6 @@ async function uploadRandomVideoOnServers (
return res
}
function getAllFiles (video: VideoDetails) {
const files = video.files
if (video.streamingPlaylists[0]) {
return files.concat(video.streamingPlaylists[0].files)
}
return files
}
// ---------------------------------------------------------------------------
export {
@ -258,6 +248,5 @@ export {
checkUploadVideoParam,
uploadRandomVideoOnServers,
checkVideoFilesWereRemoved,
saveVideoInServers,
getAllFiles
saveVideoInServers
}

View File

@ -1,9 +1,21 @@
import { VideoDetails } from '../../models/videos/video.model'
import { VideoPrivacy } from '../../models/videos/video-privacy.enum'
function getAllPrivacies () {
return [ VideoPrivacy.PUBLIC, VideoPrivacy.INTERNAL, VideoPrivacy.PRIVATE, VideoPrivacy.UNLISTED ]
}
export {
getAllPrivacies
function getAllFiles (video: Partial<Pick<VideoDetails, 'files' | 'streamingPlaylists'>>) {
const files = video.files
if (video.streamingPlaylists[0]) {
return files.concat(video.streamingPlaylists[0].files)
}
return files
}
export {
getAllPrivacies,
getAllFiles
}