Merge branch 'release/6.1.0' into develop

This commit is contained in:
Chocobozzz 2024-05-17 11:36:43 +02:00
commit 9b5c7a8dc6
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
8 changed files with 43 additions and 40 deletions

View File

@ -1,6 +1,7 @@
import { CommonModule } from '@angular/common'
import { Component, ElementRef, ViewChild } from '@angular/core'
import { FormsModule } from '@angular/forms'
import { RouterLink } from '@angular/router'
import { Notifier, ServerService, User, UserService } from '@app/core'
import { PeertubeCheckboxComponent } from '@app/shared/shared-forms/peertube-checkbox.component'
import { GlobalIconComponent } from '@app/shared/shared-icons/global-icon.component'
@ -13,7 +14,7 @@ import { peertubeLocalStorage } from '@root-helpers/peertube-web-storage'
templateUrl: './account-setup-warning-modal.component.html',
styleUrls: [ './account-setup-warning-modal.component.scss' ],
standalone: true,
imports: [ CommonModule, GlobalIconComponent, PeertubeCheckboxComponent, FormsModule ]
imports: [ CommonModule, GlobalIconComponent, PeertubeCheckboxComponent, FormsModule, RouterLink ]
})
export class AccountSetupWarningModalComponent {
@ViewChild('modal', { static: true }) modal: ElementRef

View File

@ -390,7 +390,7 @@ body {
// RTL compatibility
// ---------------------------------------------------------------------------
.modal .modal-header .modal-title {
:root[dir=rtl] .modal .modal-header .modal-title {
margin-inline-end: auto;
margin-right: unset;
}

View File

@ -34,11 +34,14 @@ describe('Test stats (excluding redundancy)', function () {
const { account } = await servers[0].users.create({ username: user.username, password: user.password })
userAccountId = account.id
const { uuid } = await servers[0].videos.upload({ attributes: { fixture: 'video_short.webm' } })
{
const { uuid } = await servers[0].videos.quickUpload({ name: 'video', fixture: 'video_short.webm' })
await servers[0].views.simulateView({ id: uuid })
await servers[0].comments.createThread({ videoId: uuid, text: 'comment' })
await servers[0].views.simulateView({ id: uuid })
await servers[0].comments.createThread({ videoId: uuid, text: 'comment' })
const toDelete = await servers[0].comments.createThread({ videoId: uuid, text: 'deleted' })
await servers[0].comments.delete({ videoId: uuid, commentId: toDelete.id })
}
// Wait the video views repeatable job
await wait(8000)

View File

@ -10,15 +10,13 @@ import {
Column,
CreatedAt,
Default,
ForeignKey,
Is, Table,
ForeignKey, Table,
UpdatedAt
} from 'sequelize-typescript'
import { isActivityPubUrlValid } from '../../helpers/custom-validators/activitypub/misc.js'
import { logger } from '../../helpers/logger.js'
import { CONFIG } from '../../initializers/config.js'
import { LAZY_STATIC_PATHS, MIMETYPES, WEBSERVER } from '../../initializers/constants.js'
import { SequelizeModel, buildSQLAttributes, throwIfNotValid } from '../shared/index.js'
import { SequelizeModel, buildSQLAttributes } from '../shared/index.js'
import { ActorModel } from './actor.js'
@Table({
@ -51,7 +49,6 @@ export class ActorImageModel extends SequelizeModel<ActorImageModel> {
width: number
@AllowNull(true)
@Is('ActorImageFileUrl', value => throwIfNotValid(value, isActivityPubUrlValid, 'fileUrl', true))
@Column
fileUrl: string

View File

@ -1,3 +1,18 @@
import {
ActivityVideoUrlObject,
CacheFileObject,
FileRedundancyInformation,
StreamingPlaylistRedundancyInformation,
VideoPrivacy,
VideoRedundanciesTarget,
VideoRedundancy,
VideoRedundancyStrategy,
VideoRedundancyStrategyWithManual
} from '@peertube/peertube-models'
import { isTestInstance } from '@peertube/peertube-node-utils'
import { getVideoFileMimeType } from '@server/lib/video-file.js'
import { getServerActor } from '@server/models/application/application.js'
import { MActor, MVideoForRedundancyAPI, MVideoRedundancy, MVideoRedundancyAP, MVideoRedundancyVideo } from '@server/types/models/index.js'
import sample from 'lodash-es/sample.js'
import { literal, Op, QueryTypes, Transaction, WhereOptions } from 'sequelize'
import {
@ -12,21 +27,7 @@ import {
Table,
UpdatedAt
} from 'sequelize-typescript'
import {
ActivityVideoUrlObject,
CacheFileObject,
FileRedundancyInformation,
StreamingPlaylistRedundancyInformation,
VideoPrivacy,
VideoRedundanciesTarget,
VideoRedundancy,
VideoRedundancyStrategy,
VideoRedundancyStrategyWithManual
} from '@peertube/peertube-models'
import { isTestInstance } from '@peertube/peertube-node-utils'
import { getServerActor } from '@server/models/application/application.js'
import { MActor, MVideoForRedundancyAPI, MVideoRedundancy, MVideoRedundancyAP, MVideoRedundancyVideo } from '@server/types/models/index.js'
import { isActivityPubUrlValid, isUrlValid } from '../../helpers/custom-validators/activitypub/misc.js'
import { isActivityPubUrlValid } from '../../helpers/custom-validators/activitypub/misc.js'
import { logger } from '../../helpers/logger.js'
import { CONFIG } from '../../initializers/config.js'
import { CONSTRAINTS_FIELDS } from '../../initializers/constants.js'
@ -38,7 +39,6 @@ import { VideoChannelModel } from '../video/video-channel.js'
import { VideoFileModel } from '../video/video-file.js'
import { VideoStreamingPlaylistModel } from '../video/video-streaming-playlist.js'
import { VideoModel } from '../video/video.js'
import { getVideoFileMimeType } from '@server/lib/video-file.js'
export enum ScopeNames {
WITH_VIDEO = 'WITH_VIDEO'
@ -102,7 +102,6 @@ export class VideoRedundancyModel extends SequelizeModel<VideoRedundancyModel> {
expiresOn: Date
@AllowNull(false)
@Is('VideoRedundancyFileUrl', value => throwIfNotValid(value, isUrlValid, 'fileUrl'))
@Column(DataType.STRING(CONSTRAINTS_FIELDS.VIDEOS_REDUNDANCY.URL.max))
fileUrl: string

View File

@ -290,7 +290,8 @@ export class UserNotificationModel extends SequelizeModel<UserNotificationModel>
userId,
id: {
[Op.in]: notificationIds
}
},
read: false
}
}
@ -298,7 +299,7 @@ export class UserNotificationModel extends SequelizeModel<UserNotificationModel>
}
static markAllAsRead (userId: number) {
const query = { where: { userId } }
const query = { where: { userId, read: false } }
return UserNotificationModel.update({ read: true }, query)
}

View File

@ -1,3 +1,8 @@
import { pick } from '@peertube/peertube-core-utils'
import { ActivityTagObject, ActivityTombstoneObject, VideoComment, VideoCommentAdmin, VideoCommentObject } from '@peertube/peertube-models'
import { extractMentions } from '@server/helpers/mentions.js'
import { getServerActor } from '@server/models/application/application.js'
import { MAccount, MAccountId, MUserAccountId } from '@server/types/models/index.js'
import { Op, Order, QueryTypes, Sequelize, Transaction } from 'sequelize'
import {
AllowNull,
@ -11,17 +16,12 @@ import {
Table,
UpdatedAt
} from 'sequelize-typescript'
import { pick } from '@peertube/peertube-core-utils'
import { ActivityTagObject, ActivityTombstoneObject, VideoComment, VideoCommentAdmin, VideoCommentObject } from '@peertube/peertube-models'
import { extractMentions } from '@server/helpers/mentions.js'
import { getServerActor } from '@server/models/application/application.js'
import { MAccount, MAccountId, MUserAccountId } from '@server/types/models/index.js'
import { isActivityPubUrlValid } from '../../helpers/custom-validators/activitypub/misc.js'
import { CONSTRAINTS_FIELDS, USER_EXPORT_MAX_ITEMS } from '../../initializers/constants.js'
import {
MComment,
MCommentAdminFormattable,
MCommentAP,
MCommentAdminFormattable,
MCommentExport,
MCommentFormattable,
MCommentId,
@ -480,7 +480,12 @@ export class VideoCommentModel extends SequelizeModel<VideoCommentModel> {
}
static async getStats () {
const where = {
deletedAt: null
}
const totalLocalVideoComments = await VideoCommentModel.count({
where,
include: [
{
model: AccountModel.unscoped(),
@ -497,7 +502,7 @@ export class VideoCommentModel extends SequelizeModel<VideoCommentModel> {
}
]
})
const totalVideoComments = await VideoCommentModel.count()
const totalVideoComments = await VideoCommentModel.count({ where })
return {
totalLocalVideoComments,

View File

@ -26,7 +26,6 @@ import {
Is, Table,
UpdatedAt
} from 'sequelize-typescript'
import { isActivityPubUrlValid } from '../../helpers/custom-validators/activitypub/misc.js'
import { isArrayOf } from '../../helpers/custom-validators/misc.js'
import { isVideoFileInfoHashValid } from '../../helpers/custom-validators/videos.js'
import {
@ -73,7 +72,6 @@ export class VideoStreamingPlaylistModel extends SequelizeModel<VideoStreamingPl
playlistFilename: string
@AllowNull(true)
@Is('PlaylistUrl', value => throwIfNotValid(value, isActivityPubUrlValid, 'playlist url', true))
@Column(DataType.STRING(CONSTRAINTS_FIELDS.VIDEOS.URL.max))
playlistUrl: string
@ -91,7 +89,6 @@ export class VideoStreamingPlaylistModel extends SequelizeModel<VideoStreamingPl
segmentsSha256Filename: string
@AllowNull(true)
@Is('VideoStreamingSegmentsSha256Url', value => throwIfNotValid(value, isActivityPubUrlValid, 'segments sha256 url', true))
@Column
segmentsSha256Url: string