</a>
</span>
- <span class="video-miniature-created-at-views">{{ video.createdAt | myFromNow }} - {{ video.views | myNumberFormatter }} views</span>
+ <span class="video-miniature-created-at-views">{{ video.publishedAt | myFromNow }} - {{ video.views | myNumberFormatter }} views</span>
<span class="video-miniature-account">{{ video.by }}</span>
</div>
</div>
by: string
createdAt: Date
updatedAt: Date
+ publishedAt: Date
category: VideoConstant<number>
licence: VideoConstant<number>
language: VideoConstant<number>
const absoluteAPIUrl = getAbsoluteAPIUrl()
this.createdAt = new Date(hash.createdAt.toString())
+ this.publishedAt = new Date(hash.publishedAt.toString())
this.category = hash.category
this.licence = hash.licence
this.language = hash.language
<div class="video-info-name">{{ video.name }}</div>
<div class="video-info-date-views">
- {{ video.createdAt | myFromNow }} - {{ video.views | myNumberFormatter }} views
+ {{ video.publishedAt | myFromNow }} - {{ video.views | myNumberFormatter }} views
</div>
<div class="video-info-channel">
if (videoInfoToUpdate.licence !== undefined) videoInstance.set('licence', videoInfoToUpdate.licence)
if (videoInfoToUpdate.language !== undefined) videoInstance.set('language', videoInfoToUpdate.language)
if (videoInfoToUpdate.nsfw !== undefined) videoInstance.set('nsfw', videoInfoToUpdate.nsfw)
- if (videoInfoToUpdate.privacy !== undefined) videoInstance.set('privacy', parseInt(videoInfoToUpdate.privacy.toString(), 10))
if (videoInfoToUpdate.support !== undefined) videoInstance.set('support', videoInfoToUpdate.support)
if (videoInfoToUpdate.description !== undefined) videoInstance.set('description', videoInfoToUpdate.description)
if (videoInfoToUpdate.commentsEnabled !== undefined) videoInstance.set('commentsEnabled', videoInfoToUpdate.commentsEnabled)
+ if (videoInfoToUpdate.privacy !== undefined) {
+ const newPrivacy = parseInt(videoInfoToUpdate.privacy.toString(), 10)
+ videoInstance.set('privacy', newPrivacy)
+
+ if (wasPrivateVideo === true && newPrivacy !== VideoPrivacy.PRIVATE) {
+ videoInstance.set('publishedAt', new Date())
+ }
+ }
const videoInstanceUpdated = await videoInstance.save(sequelizeOptions)
// ---------------------------------------------------------------------------
-const LAST_MIGRATION_VERSION = 195
+const LAST_MIGRATION_VERSION = 200
// ---------------------------------------------------------------------------
--- /dev/null
+import * as Sequelize from 'sequelize'
+
+async function up (utils: {
+ transaction: Sequelize.Transaction,
+ queryInterface: Sequelize.QueryInterface,
+ sequelize: Sequelize.Sequelize
+}): Promise<void> {
+
+ {
+ const data = {
+ type: Sequelize.DATE,
+ allowNull: false,
+ defaultValue: Sequelize.NOW
+ }
+ await utils.queryInterface.addColumn('video', 'publishedAt', data)
+ }
+
+ {
+ const query = 'UPDATE video SET "publishedAt" = video."createdAt"'
+ await utils.sequelize.query(query)
+ }
+
+}
+
+function down (options) {
+ throw new Error('Not implemented.')
+}
+
+export {
+ up,
+ down
+}
@UpdatedAt
updatedAt: Date
+ @AllowNull(false)
+ @Default(Sequelize.NOW)
+ @Column
+ publishedAt: Date
+
@ForeignKey(() => VideoChannelModel)
@Column
channelId: number
embedPath: this.getEmbedPath(),
createdAt: this.createdAt,
updatedAt: this.updatedAt,
+ publishedAt: this.publishedAt,
account: {
name: formattedAccount.name,
displayName: formattedAccount.displayName,
views: this.views,
sensitive: this.nsfw,
commentsEnabled: this.commentsEnabled,
- published: this.createdAt.toISOString(),
+ published: this.publishedAt.toISOString(),
updated: this.updatedAt.toISOString(),
mediaType: 'text/markdown',
content: this.getTruncatedDescription(),
uuid: string
createdAt: Date | string
updatedAt: Date | string
+ publishedAt: Date | string
category: VideoConstant<number>
licence: VideoConstant<number>
language: VideoConstant<number>