Browse Source

Don't display remove file icon in some cases

tags/v4.3.0
Chocobozzz 1 week ago
parent
commit
367a9dc699
No known key found for this signature in database GPG Key ID: 583A612D890159BE
9 changed files with 36 additions and 22 deletions
  1. +2
    -0
      client/src/app/+admin/overview/videos/video-list.component.html
  2. +4
    -0
      client/src/app/+admin/overview/videos/video-list.component.ts
  3. +9
    -2
      client/src/app/shared/shared-main/video/video.model.ts
  4. +2
    -2
      server/tests/api/live/live.ts
  5. +2
    -2
      server/tests/api/transcoding/transcoder.ts
  6. +2
    -2
      server/tests/api/transcoding/video-studio.ts
  7. +1
    -1
      server/tests/cli/update-host.ts
  8. +1
    -12
      server/tests/shared/videos.ts
  9. +13
    -1
      shared/core-utils/videos/privacy.ts

+ 2
- 0
client/src/app/+admin/overview/videos/video-list.component.html 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>


+ 4
- 0
client/src/app/+admin/overview/videos/video-list.component.ts 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



+ 9
- 2
client/src/app/shared/shared-main/video/video.model.ts 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) &&


+ 2
- 2
server/tests/api/live/live.ts 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,


+ 2
- 2
server/tests/api/transcoding/transcoder.ts 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,


+ 2
- 2
server/tests/api/transcoding/video-studio.ts 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,


+ 1
- 1
server/tests/cli/update-host.ts 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


+ 1
- 12
server/tests/shared/videos.ts 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
}

+ 13
- 1
shared/core-utils/videos/privacy.ts 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 ]
}

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
getAllPrivacies,
getAllFiles
}

Loading…
Cancel
Save