diff options
Diffstat (limited to 'server')
-rw-r--r-- | server/lib/video-channel.ts | 16 | ||||
-rw-r--r-- | server/models/account/account-interface.ts | 4 | ||||
-rw-r--r-- | server/models/account/account.ts | 28 | ||||
-rw-r--r-- | server/models/oauth/oauth-token-interface.ts | 5 | ||||
-rw-r--r-- | server/models/oauth/oauth-token.ts | 22 | ||||
-rw-r--r-- | server/models/server/server-interface.ts | 38 | ||||
-rw-r--r-- | server/models/server/server.ts | 181 | ||||
-rw-r--r-- | server/models/video/video-blacklist-interface.ts | 11 | ||||
-rw-r--r-- | server/models/video/video-blacklist.ts | 18 | ||||
-rw-r--r-- | server/models/video/video-channel-interface.ts | 12 | ||||
-rw-r--r-- | server/models/video/video-channel.ts | 13 | ||||
-rw-r--r-- | server/models/video/video-interface.ts | 17 | ||||
-rw-r--r-- | server/models/video/video.ts | 137 |
13 files changed, 51 insertions, 451 deletions
diff --git a/server/lib/video-channel.ts b/server/lib/video-channel.ts index a939a23d5..beb01da9b 100644 --- a/server/lib/video-channel.ts +++ b/server/lib/video-channel.ts | |||
@@ -1,6 +1,5 @@ | |||
1 | import * as Sequelize from 'sequelize' | 1 | import * as Sequelize from 'sequelize' |
2 | import { VideoChannelCreate } from '../../shared/models' | 2 | import { VideoChannelCreate } from '../../shared/models' |
3 | import { logger } from '../helpers' | ||
4 | import { database as db } from '../initializers' | 3 | import { database as db } from '../initializers' |
5 | import { AccountInstance } from '../models' | 4 | import { AccountInstance } from '../models' |
6 | import { getVideoChannelActivityPubUrl } from './activitypub/url' | 5 | import { getVideoChannelActivityPubUrl } from './activitypub/url' |
@@ -27,21 +26,8 @@ async function createVideoChannel (videoChannelInfo: VideoChannelCreate, account | |||
27 | return videoChannelCreated | 26 | return videoChannelCreated |
28 | } | 27 | } |
29 | 28 | ||
30 | async function fetchVideoChannelByHostAndUUID (serverHost: string, uuid: string, t: Sequelize.Transaction) { | ||
31 | try { | ||
32 | const videoChannel = await db.VideoChannel.loadByHostAndUUID(serverHost, uuid, t) | ||
33 | if (!videoChannel) throw new Error('Video channel not found') | ||
34 | |||
35 | return videoChannel | ||
36 | } catch (err) { | ||
37 | logger.error('Cannot load video channel from host and uuid.', { error: err.stack, serverHost, uuid }) | ||
38 | throw err | ||
39 | } | ||
40 | } | ||
41 | |||
42 | // --------------------------------------------------------------------------- | 29 | // --------------------------------------------------------------------------- |
43 | 30 | ||
44 | export { | 31 | export { |
45 | createVideoChannel, | 32 | createVideoChannel |
46 | fetchVideoChannelByHostAndUUID | ||
47 | } | 33 | } |
diff --git a/server/models/account/account-interface.ts b/server/models/account/account-interface.ts index e30260f76..2e4b0382d 100644 --- a/server/models/account/account-interface.ts +++ b/server/models/account/account-interface.ts | |||
@@ -10,10 +10,8 @@ export namespace AccountMethods { | |||
10 | export type Load = (id: number) => Bluebird<AccountInstance> | 10 | export type Load = (id: number) => Bluebird<AccountInstance> |
11 | export type LoadByUUID = (uuid: string) => Bluebird<AccountInstance> | 11 | export type LoadByUUID = (uuid: string) => Bluebird<AccountInstance> |
12 | export type LoadByUrl = (url: string, transaction?: Sequelize.Transaction) => Bluebird<AccountInstance> | 12 | export type LoadByUrl = (url: string, transaction?: Sequelize.Transaction) => Bluebird<AccountInstance> |
13 | export type LoadAccountByServerAndUUID = (uuid: string, serverId: number, transaction: Sequelize.Transaction) => Bluebird<AccountInstance> | ||
14 | export type LoadLocalByName = (name: string) => Bluebird<AccountInstance> | 13 | export type LoadLocalByName = (name: string) => Bluebird<AccountInstance> |
15 | export type LoadByNameAndHost = (name: string, host: string) => Bluebird<AccountInstance> | 14 | export type LoadByNameAndHost = (name: string, host: string) => Bluebird<AccountInstance> |
16 | export type ListOwned = () => Bluebird<AccountInstance[]> | ||
17 | 15 | ||
18 | export type ToActivityPubObject = (this: AccountInstance) => ActivityPubActor | 16 | export type ToActivityPubObject = (this: AccountInstance) => ActivityPubActor |
19 | export type ToFormattedJSON = (this: AccountInstance) => FormattedAccount | 17 | export type ToFormattedJSON = (this: AccountInstance) => FormattedAccount |
@@ -26,13 +24,11 @@ export namespace AccountMethods { | |||
26 | 24 | ||
27 | export interface AccountClass { | 25 | export interface AccountClass { |
28 | loadApplication: AccountMethods.LoadApplication | 26 | loadApplication: AccountMethods.LoadApplication |
29 | loadAccountByServerAndUUID: AccountMethods.LoadAccountByServerAndUUID | ||
30 | load: AccountMethods.Load | 27 | load: AccountMethods.Load |
31 | loadByUUID: AccountMethods.LoadByUUID | 28 | loadByUUID: AccountMethods.LoadByUUID |
32 | loadByUrl: AccountMethods.LoadByUrl | 29 | loadByUrl: AccountMethods.LoadByUrl |
33 | loadLocalByName: AccountMethods.LoadLocalByName | 30 | loadLocalByName: AccountMethods.LoadLocalByName |
34 | loadByNameAndHost: AccountMethods.LoadByNameAndHost | 31 | loadByNameAndHost: AccountMethods.LoadByNameAndHost |
35 | listOwned: AccountMethods.ListOwned | ||
36 | } | 32 | } |
37 | 33 | ||
38 | export interface AccountAttributes { | 34 | export interface AccountAttributes { |
diff --git a/server/models/account/account.ts b/server/models/account/account.ts index 9a2921501..f2bd325f3 100644 --- a/server/models/account/account.ts +++ b/server/models/account/account.ts | |||
@@ -20,14 +20,12 @@ import { addMethodsToModel } from '../utils' | |||
20 | import { AccountAttributes, AccountInstance, AccountMethods } from './account-interface' | 20 | import { AccountAttributes, AccountInstance, AccountMethods } from './account-interface' |
21 | 21 | ||
22 | let Account: Sequelize.Model<AccountInstance, AccountAttributes> | 22 | let Account: Sequelize.Model<AccountInstance, AccountAttributes> |
23 | let loadAccountByServerAndUUID: AccountMethods.LoadAccountByServerAndUUID | ||
24 | let load: AccountMethods.Load | 23 | let load: AccountMethods.Load |
25 | let loadApplication: AccountMethods.LoadApplication | 24 | let loadApplication: AccountMethods.LoadApplication |
26 | let loadByUUID: AccountMethods.LoadByUUID | 25 | let loadByUUID: AccountMethods.LoadByUUID |
27 | let loadByUrl: AccountMethods.LoadByUrl | 26 | let loadByUrl: AccountMethods.LoadByUrl |
28 | let loadLocalByName: AccountMethods.LoadLocalByName | 27 | let loadLocalByName: AccountMethods.LoadLocalByName |
29 | let loadByNameAndHost: AccountMethods.LoadByNameAndHost | 28 | let loadByNameAndHost: AccountMethods.LoadByNameAndHost |
30 | let listOwned: AccountMethods.ListOwned | ||
31 | let isOwned: AccountMethods.IsOwned | 29 | let isOwned: AccountMethods.IsOwned |
32 | let toActivityPubObject: AccountMethods.ToActivityPubObject | 30 | let toActivityPubObject: AccountMethods.ToActivityPubObject |
33 | let toFormattedJSON: AccountMethods.ToFormattedJSON | 31 | let toFormattedJSON: AccountMethods.ToFormattedJSON |
@@ -185,14 +183,12 @@ export default function defineAccount (sequelize: Sequelize.Sequelize, DataTypes | |||
185 | 183 | ||
186 | const classMethods = [ | 184 | const classMethods = [ |
187 | associate, | 185 | associate, |
188 | loadAccountByServerAndUUID, | ||
189 | loadApplication, | 186 | loadApplication, |
190 | load, | 187 | load, |
191 | loadByUUID, | 188 | loadByUUID, |
192 | loadByUrl, | 189 | loadByUrl, |
193 | loadLocalByName, | 190 | loadLocalByName, |
194 | loadByNameAndHost, | 191 | loadByNameAndHost |
195 | listOwned | ||
196 | ] | 192 | ] |
197 | const instanceMethods = [ | 193 | const instanceMethods = [ |
198 | isOwned, | 194 | isOwned, |
@@ -355,16 +351,6 @@ getPublicKeyUrl = function (this: AccountInstance) { | |||
355 | 351 | ||
356 | // ------------------------------ STATICS ------------------------------ | 352 | // ------------------------------ STATICS ------------------------------ |
357 | 353 | ||
358 | listOwned = function () { | ||
359 | const query: Sequelize.FindOptions<AccountAttributes> = { | ||
360 | where: { | ||
361 | serverId: null | ||
362 | } | ||
363 | } | ||
364 | |||
365 | return Account.findAll(query) | ||
366 | } | ||
367 | |||
368 | loadApplication = function () { | 354 | loadApplication = function () { |
369 | return Account.findOne({ | 355 | return Account.findOne({ |
370 | include: [ | 356 | include: [ |
@@ -441,15 +427,3 @@ loadByUrl = function (url: string, transaction?: Sequelize.Transaction) { | |||
441 | 427 | ||
442 | return Account.findOne(query) | 428 | return Account.findOne(query) |
443 | } | 429 | } |
444 | |||
445 | loadAccountByServerAndUUID = function (uuid: string, serverId: number, transaction: Sequelize.Transaction) { | ||
446 | const query: Sequelize.FindOptions<AccountAttributes> = { | ||
447 | where: { | ||
448 | serverId, | ||
449 | uuid | ||
450 | }, | ||
451 | transaction | ||
452 | } | ||
453 | |||
454 | return Account.find(query) | ||
455 | } | ||
diff --git a/server/models/oauth/oauth-token-interface.ts b/server/models/oauth/oauth-token-interface.ts index ef97893c4..47d95d5fc 100644 --- a/server/models/oauth/oauth-token-interface.ts +++ b/server/models/oauth/oauth-token-interface.ts | |||
@@ -1,5 +1,5 @@ | |||
1 | import * as Sequelize from 'sequelize' | ||
2 | import * as Promise from 'bluebird' | 1 | import * as Promise from 'bluebird' |
2 | import * as Sequelize from 'sequelize' | ||
3 | 3 | ||
4 | import { UserModel } from '../account/user-interface' | 4 | import { UserModel } from '../account/user-interface' |
5 | 5 | ||
@@ -18,15 +18,12 @@ export namespace OAuthTokenMethods { | |||
18 | export type GetByRefreshTokenAndPopulateClient = (refreshToken: string) => Promise<OAuthTokenInfo> | 18 | export type GetByRefreshTokenAndPopulateClient = (refreshToken: string) => Promise<OAuthTokenInfo> |
19 | export type GetByTokenAndPopulateUser = (bearerToken: string) => Promise<OAuthTokenInstance> | 19 | export type GetByTokenAndPopulateUser = (bearerToken: string) => Promise<OAuthTokenInstance> |
20 | export type GetByRefreshTokenAndPopulateUser = (refreshToken: string) => Promise<OAuthTokenInstance> | 20 | export type GetByRefreshTokenAndPopulateUser = (refreshToken: string) => Promise<OAuthTokenInstance> |
21 | |||
22 | export type RemoveByUserId = (userId) => Promise<number> | ||
23 | } | 21 | } |
24 | 22 | ||
25 | export interface OAuthTokenClass { | 23 | export interface OAuthTokenClass { |
26 | getByRefreshTokenAndPopulateClient: OAuthTokenMethods.GetByRefreshTokenAndPopulateClient | 24 | getByRefreshTokenAndPopulateClient: OAuthTokenMethods.GetByRefreshTokenAndPopulateClient |
27 | getByTokenAndPopulateUser: OAuthTokenMethods.GetByTokenAndPopulateUser | 25 | getByTokenAndPopulateUser: OAuthTokenMethods.GetByTokenAndPopulateUser |
28 | getByRefreshTokenAndPopulateUser: OAuthTokenMethods.GetByRefreshTokenAndPopulateUser | 26 | getByRefreshTokenAndPopulateUser: OAuthTokenMethods.GetByRefreshTokenAndPopulateUser |
29 | removeByUserId: OAuthTokenMethods.RemoveByUserId | ||
30 | } | 27 | } |
31 | 28 | ||
32 | export interface OAuthTokenAttributes { | 29 | export interface OAuthTokenAttributes { |
diff --git a/server/models/oauth/oauth-token.ts b/server/models/oauth/oauth-token.ts index c7afcc38c..a82bff130 100644 --- a/server/models/oauth/oauth-token.ts +++ b/server/models/oauth/oauth-token.ts | |||
@@ -3,19 +3,12 @@ import * as Sequelize from 'sequelize' | |||
3 | import { logger } from '../../helpers' | 3 | import { logger } from '../../helpers' |
4 | 4 | ||
5 | import { addMethodsToModel } from '../utils' | 5 | import { addMethodsToModel } from '../utils' |
6 | import { | 6 | import { OAuthTokenAttributes, OAuthTokenInfo, OAuthTokenInstance, OAuthTokenMethods } from './oauth-token-interface' |
7 | OAuthTokenInstance, | ||
8 | OAuthTokenAttributes, | ||
9 | |||
10 | OAuthTokenMethods, | ||
11 | OAuthTokenInfo | ||
12 | } from './oauth-token-interface' | ||
13 | 7 | ||
14 | let OAuthToken: Sequelize.Model<OAuthTokenInstance, OAuthTokenAttributes> | 8 | let OAuthToken: Sequelize.Model<OAuthTokenInstance, OAuthTokenAttributes> |
15 | let getByRefreshTokenAndPopulateClient: OAuthTokenMethods.GetByRefreshTokenAndPopulateClient | 9 | let getByRefreshTokenAndPopulateClient: OAuthTokenMethods.GetByRefreshTokenAndPopulateClient |
16 | let getByTokenAndPopulateUser: OAuthTokenMethods.GetByTokenAndPopulateUser | 10 | let getByTokenAndPopulateUser: OAuthTokenMethods.GetByTokenAndPopulateUser |
17 | let getByRefreshTokenAndPopulateUser: OAuthTokenMethods.GetByRefreshTokenAndPopulateUser | 11 | let getByRefreshTokenAndPopulateUser: OAuthTokenMethods.GetByRefreshTokenAndPopulateUser |
18 | let removeByUserId: OAuthTokenMethods.RemoveByUserId | ||
19 | 12 | ||
20 | export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) { | 13 | export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) { |
21 | OAuthToken = sequelize.define<OAuthTokenInstance, OAuthTokenAttributes>('OAuthToken', | 14 | OAuthToken = sequelize.define<OAuthTokenInstance, OAuthTokenAttributes>('OAuthToken', |
@@ -62,8 +55,7 @@ export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.Da | |||
62 | 55 | ||
63 | getByRefreshTokenAndPopulateClient, | 56 | getByRefreshTokenAndPopulateClient, |
64 | getByTokenAndPopulateUser, | 57 | getByTokenAndPopulateUser, |
65 | getByRefreshTokenAndPopulateUser, | 58 | getByRefreshTokenAndPopulateUser |
66 | removeByUserId | ||
67 | ] | 59 | ] |
68 | addMethodsToModel(OAuthToken, classMethods) | 60 | addMethodsToModel(OAuthToken, classMethods) |
69 | 61 | ||
@@ -170,13 +162,3 @@ getByRefreshTokenAndPopulateUser = function (refreshToken: string) { | |||
170 | return token | 162 | return token |
171 | }) | 163 | }) |
172 | } | 164 | } |
173 | |||
174 | removeByUserId = function (userId: number) { | ||
175 | const query = { | ||
176 | where: { | ||
177 | userId: userId | ||
178 | } | ||
179 | } | ||
180 | |||
181 | return OAuthToken.destroy(query) | ||
182 | } | ||
diff --git a/server/models/server/server-interface.ts b/server/models/server/server-interface.ts index 806d052cb..be1a4917e 100644 --- a/server/models/server/server-interface.ts +++ b/server/models/server/server-interface.ts | |||
@@ -1,45 +1,13 @@ | |||
1 | import * as Sequelize from 'sequelize' | ||
2 | import * as Promise from 'bluebird' | 1 | import * as Promise from 'bluebird' |
3 | 2 | import * as Sequelize from 'sequelize' | |
4 | // Don't use barrel, import just what we need | ||
5 | import { ResultList } from '../../../shared/models/result-list.model' | ||
6 | 3 | ||
7 | export namespace ServerMethods { | 4 | export namespace ServerMethods { |
8 | export type CountAll = () => Promise<number> | ||
9 | |||
10 | export type IncrementScores = (ids: number[], value: number) => Promise<[ number, ServerInstance[] ]> | ||
11 | |||
12 | export type List = () => Promise<ServerInstance[]> | ||
13 | |||
14 | export type ListForApi = (start: number, count: number, sort: string) => Promise< ResultList<ServerInstance> > | ||
15 | |||
16 | export type ListAllIds = (transaction: Sequelize.Transaction) => Promise<number[]> | ||
17 | |||
18 | export type ListRandomServerIdsWithRequest = (limit: number, tableWithServers: string, tableWithServersJoins: string) => Promise<number[]> | ||
19 | |||
20 | export type ListBadServers = () => Promise<ServerInstance[]> | 5 | export type ListBadServers = () => Promise<ServerInstance[]> |
21 | 6 | export type UpdateServersScoreAndRemoveBadOnes = (goodServers: number[], badServers: number[]) => void | |
22 | export type Load = (id: number) => Promise<ServerInstance> | ||
23 | |||
24 | export type LoadByHost = (host: string) => Promise<ServerInstance> | ||
25 | |||
26 | export type RemoveAll = () => Promise<number> | ||
27 | |||
28 | export type UpdateServersScore = (goodServers: number[], badServers: number[]) => void | ||
29 | } | 7 | } |
30 | 8 | ||
31 | export interface ServerClass { | 9 | export interface ServerClass { |
32 | countAll: ServerMethods.CountAll | 10 | updateServersScoreAndRemoveBadOnes: ServerMethods.UpdateServersScoreAndRemoveBadOnes |
33 | incrementScores: ServerMethods.IncrementScores | ||
34 | list: ServerMethods.List | ||
35 | listForApi: ServerMethods.ListForApi | ||
36 | listAllIds: ServerMethods.ListAllIds | ||
37 | listRandomServerIdsWithRequest: ServerMethods.ListRandomServerIdsWithRequest | ||
38 | listBadServers: ServerMethods.ListBadServers | ||
39 | load: ServerMethods.Load | ||
40 | loadByHost: ServerMethods.LoadByHost | ||
41 | removeAll: ServerMethods.RemoveAll | ||
42 | updateServersScore: ServerMethods.UpdateServersScore | ||
43 | } | 11 | } |
44 | 12 | ||
45 | export interface ServerAttributes { | 13 | export interface ServerAttributes { |
diff --git a/server/models/server/server.ts b/server/models/server/server.ts index 26fa87550..75cd5f929 100644 --- a/server/models/server/server.ts +++ b/server/models/server/server.ts | |||
@@ -1,29 +1,11 @@ | |||
1 | import { map } from 'lodash' | ||
2 | import * as Sequelize from 'sequelize' | 1 | import * as Sequelize from 'sequelize' |
3 | 2 | import { isHostValid, logger } from '../../helpers' | |
4 | import { FRIEND_SCORE, SERVERS_SCORE } from '../../initializers' | 3 | import { FRIEND_SCORE, SERVERS_SCORE } from '../../initializers' |
5 | import { logger, isHostValid } from '../../helpers' | 4 | import { addMethodsToModel } from '../utils' |
6 | 5 | import { ServerAttributes, ServerInstance, ServerMethods } from './server-interface' | |
7 | import { addMethodsToModel, getSort } from '../utils' | ||
8 | import { | ||
9 | ServerInstance, | ||
10 | ServerAttributes, | ||
11 | |||
12 | ServerMethods | ||
13 | } from './server-interface' | ||
14 | 6 | ||
15 | let Server: Sequelize.Model<ServerInstance, ServerAttributes> | 7 | let Server: Sequelize.Model<ServerInstance, ServerAttributes> |
16 | let countAll: ServerMethods.CountAll | 8 | let updateServersScoreAndRemoveBadOnes: ServerMethods.UpdateServersScoreAndRemoveBadOnes |
17 | let incrementScores: ServerMethods.IncrementScores | ||
18 | let list: ServerMethods.List | ||
19 | let listForApi: ServerMethods.ListForApi | ||
20 | let listAllIds: ServerMethods.ListAllIds | ||
21 | let listRandomServerIdsWithRequest: ServerMethods.ListRandomServerIdsWithRequest | ||
22 | let listBadServers: ServerMethods.ListBadServers | ||
23 | let load: ServerMethods.Load | ||
24 | let loadByHost: ServerMethods.LoadByHost | ||
25 | let removeAll: ServerMethods.RemoveAll | ||
26 | let updateServersScore: ServerMethods.UpdateServersScore | ||
27 | 9 | ||
28 | export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) { | 10 | export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) { |
29 | Server = sequelize.define<ServerInstance, ServerAttributes>('Server', | 11 | Server = sequelize.define<ServerInstance, ServerAttributes>('Server', |
@@ -62,17 +44,7 @@ export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.Da | |||
62 | ) | 44 | ) |
63 | 45 | ||
64 | const classMethods = [ | 46 | const classMethods = [ |
65 | countAll, | 47 | listBadServers |
66 | incrementScores, | ||
67 | list, | ||
68 | listForApi, | ||
69 | listAllIds, | ||
70 | listRandomServerIdsWithRequest, | ||
71 | listBadServers, | ||
72 | load, | ||
73 | loadByHost, | ||
74 | updateServersScore, | ||
75 | removeAll | ||
76 | ] | 48 | ] |
77 | addMethodsToModel(Server, classMethods) | 49 | addMethodsToModel(Server, classMethods) |
78 | 50 | ||
@@ -81,118 +53,7 @@ export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.Da | |||
81 | 53 | ||
82 | // ------------------------------ Statics ------------------------------ | 54 | // ------------------------------ Statics ------------------------------ |
83 | 55 | ||
84 | countAll = function () { | 56 | updateServersScoreAndRemoveBadOnes = function (goodServers: number[], badServers: number[]) { |
85 | return Server.count() | ||
86 | } | ||
87 | |||
88 | incrementScores = function (ids: number[], value: number) { | ||
89 | const update = { | ||
90 | score: Sequelize.literal('score +' + value) | ||
91 | } | ||
92 | |||
93 | const options = { | ||
94 | where: { | ||
95 | id: { | ||
96 | [Sequelize.Op.in]: ids | ||
97 | } | ||
98 | }, | ||
99 | // In this case score is a literal and not an integer so we do not validate it | ||
100 | validate: false | ||
101 | } | ||
102 | |||
103 | return Server.update(update, options) | ||
104 | } | ||
105 | |||
106 | list = function () { | ||
107 | return Server.findAll() | ||
108 | } | ||
109 | |||
110 | listForApi = function (start: number, count: number, sort: string) { | ||
111 | const query = { | ||
112 | offset: start, | ||
113 | limit: count, | ||
114 | order: [ getSort(sort) ] | ||
115 | } | ||
116 | |||
117 | return Server.findAndCountAll(query).then(({ rows, count }) => { | ||
118 | return { | ||
119 | data: rows, | ||
120 | total: count | ||
121 | } | ||
122 | }) | ||
123 | } | ||
124 | |||
125 | listAllIds = function (transaction: Sequelize.Transaction) { | ||
126 | const query = { | ||
127 | attributes: [ 'id' ], | ||
128 | transaction | ||
129 | } | ||
130 | |||
131 | return Server.findAll(query).then(servers => { | ||
132 | return map(servers, 'id') | ||
133 | }) | ||
134 | } | ||
135 | |||
136 | listRandomServerIdsWithRequest = function (limit: number, tableWithServers: string, tableWithServersJoins: string) { | ||
137 | return Server.count().then(count => { | ||
138 | // Optimization... | ||
139 | if (count === 0) return [] | ||
140 | |||
141 | let start = Math.floor(Math.random() * count) - limit | ||
142 | if (start < 0) start = 0 | ||
143 | |||
144 | const subQuery = `(SELECT DISTINCT "${tableWithServers}"."serverId" FROM "${tableWithServers}" ${tableWithServersJoins})` | ||
145 | const query = { | ||
146 | attributes: [ 'id' ], | ||
147 | order: [ | ||
148 | [ 'id', 'ASC' ] | ||
149 | ], | ||
150 | offset: start, | ||
151 | limit: limit, | ||
152 | where: { | ||
153 | id: { | ||
154 | [Sequelize.Op.in]: Sequelize.literal(subQuery) | ||
155 | } | ||
156 | } | ||
157 | } | ||
158 | |||
159 | return Server.findAll(query).then(servers => { | ||
160 | return map(servers, 'id') | ||
161 | }) | ||
162 | }) | ||
163 | } | ||
164 | |||
165 | listBadServers = function () { | ||
166 | const query = { | ||
167 | where: { | ||
168 | score: { | ||
169 | [Sequelize.Op.lte]: 0 | ||
170 | } | ||
171 | } | ||
172 | } | ||
173 | |||
174 | return Server.findAll(query) | ||
175 | } | ||
176 | |||
177 | load = function (id: number) { | ||
178 | return Server.findById(id) | ||
179 | } | ||
180 | |||
181 | loadByHost = function (host: string) { | ||
182 | const query = { | ||
183 | where: { | ||
184 | host: host | ||
185 | } | ||
186 | } | ||
187 | |||
188 | return Server.findOne(query) | ||
189 | } | ||
190 | |||
191 | removeAll = function () { | ||
192 | return Server.destroy() | ||
193 | } | ||
194 | |||
195 | updateServersScore = function (goodServers: number[], badServers: number[]) { | ||
196 | logger.info('Updating %d good servers and %d bad servers scores.', goodServers.length, badServers.length) | 57 | logger.info('Updating %d good servers and %d bad servers scores.', goodServers.length, badServers.length) |
197 | 58 | ||
198 | if (goodServers.length !== 0) { | 59 | if (goodServers.length !== 0) { |
@@ -231,3 +92,33 @@ async function removeBadServers () { | |||
231 | logger.error('Cannot remove bad servers.', err) | 92 | logger.error('Cannot remove bad servers.', err) |
232 | } | 93 | } |
233 | } | 94 | } |
95 | |||
96 | function incrementScores (ids: number[], value: number) { | ||
97 | const update = { | ||
98 | score: Sequelize.literal('score +' + value) | ||
99 | } | ||
100 | |||
101 | const options = { | ||
102 | where: { | ||
103 | id: { | ||
104 | [Sequelize.Op.in]: ids | ||
105 | } | ||
106 | }, | ||
107 | // In this case score is a literal and not an integer so we do not validate it | ||
108 | validate: false | ||
109 | } | ||
110 | |||
111 | return Server.update(update, options) | ||
112 | } | ||
113 | |||
114 | function listBadServers () { | ||
115 | const query = { | ||
116 | where: { | ||
117 | score: { | ||
118 | [Sequelize.Op.lte]: 0 | ||
119 | } | ||
120 | } | ||
121 | } | ||
122 | |||
123 | return Server.findAll(query) | ||
124 | } | ||
diff --git a/server/models/video/video-blacklist-interface.ts b/server/models/video/video-blacklist-interface.ts index 9d167c037..be2483d4c 100644 --- a/server/models/video/video-blacklist-interface.ts +++ b/server/models/video/video-blacklist-interface.ts | |||
@@ -10,24 +10,13 @@ import { BlacklistedVideo as FormattedBlacklistedVideo } from '../../../shared/m | |||
10 | 10 | ||
11 | export namespace BlacklistedVideoMethods { | 11 | export namespace BlacklistedVideoMethods { |
12 | export type ToFormattedJSON = (this: BlacklistedVideoInstance) => FormattedBlacklistedVideo | 12 | export type ToFormattedJSON = (this: BlacklistedVideoInstance) => FormattedBlacklistedVideo |
13 | |||
14 | export type CountTotal = () => Promise<number> | ||
15 | |||
16 | export type List = () => Promise<BlacklistedVideoInstance[]> | ||
17 | |||
18 | export type ListForApi = (start: number, count: number, sort: SortType) => Promise< ResultList<BlacklistedVideoInstance> > | 13 | export type ListForApi = (start: number, count: number, sort: SortType) => Promise< ResultList<BlacklistedVideoInstance> > |
19 | |||
20 | export type LoadById = (id: number) => Promise<BlacklistedVideoInstance> | ||
21 | |||
22 | export type LoadByVideoId = (id: number) => Promise<BlacklistedVideoInstance> | 14 | export type LoadByVideoId = (id: number) => Promise<BlacklistedVideoInstance> |
23 | } | 15 | } |
24 | 16 | ||
25 | export interface BlacklistedVideoClass { | 17 | export interface BlacklistedVideoClass { |
26 | toFormattedJSON: BlacklistedVideoMethods.ToFormattedJSON | 18 | toFormattedJSON: BlacklistedVideoMethods.ToFormattedJSON |
27 | countTotal: BlacklistedVideoMethods.CountTotal | ||
28 | list: BlacklistedVideoMethods.List | ||
29 | listForApi: BlacklistedVideoMethods.ListForApi | 19 | listForApi: BlacklistedVideoMethods.ListForApi |
30 | loadById: BlacklistedVideoMethods.LoadById | ||
31 | loadByVideoId: BlacklistedVideoMethods.LoadByVideoId | 20 | loadByVideoId: BlacklistedVideoMethods.LoadByVideoId |
32 | } | 21 | } |
33 | 22 | ||
diff --git a/server/models/video/video-blacklist.ts b/server/models/video/video-blacklist.ts index 1c279b1ba..ae8286285 100644 --- a/server/models/video/video-blacklist.ts +++ b/server/models/video/video-blacklist.ts | |||
@@ -12,10 +12,7 @@ import { | |||
12 | 12 | ||
13 | let BlacklistedVideo: Sequelize.Model<BlacklistedVideoInstance, BlacklistedVideoAttributes> | 13 | let BlacklistedVideo: Sequelize.Model<BlacklistedVideoInstance, BlacklistedVideoAttributes> |
14 | let toFormattedJSON: BlacklistedVideoMethods.ToFormattedJSON | 14 | let toFormattedJSON: BlacklistedVideoMethods.ToFormattedJSON |
15 | let countTotal: BlacklistedVideoMethods.CountTotal | ||
16 | let list: BlacklistedVideoMethods.List | ||
17 | let listForApi: BlacklistedVideoMethods.ListForApi | 15 | let listForApi: BlacklistedVideoMethods.ListForApi |
18 | let loadById: BlacklistedVideoMethods.LoadById | ||
19 | let loadByVideoId: BlacklistedVideoMethods.LoadByVideoId | 16 | let loadByVideoId: BlacklistedVideoMethods.LoadByVideoId |
20 | 17 | ||
21 | export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) { | 18 | export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) { |
@@ -34,10 +31,7 @@ export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.Da | |||
34 | const classMethods = [ | 31 | const classMethods = [ |
35 | associate, | 32 | associate, |
36 | 33 | ||
37 | countTotal, | ||
38 | list, | ||
39 | listForApi, | 34 | listForApi, |
40 | loadById, | ||
41 | loadByVideoId | 35 | loadByVideoId |
42 | ] | 36 | ] |
43 | const instanceMethods = [ | 37 | const instanceMethods = [ |
@@ -83,14 +77,6 @@ function associate (models) { | |||
83 | }) | 77 | }) |
84 | } | 78 | } |
85 | 79 | ||
86 | countTotal = function () { | ||
87 | return BlacklistedVideo.count() | ||
88 | } | ||
89 | |||
90 | list = function () { | ||
91 | return BlacklistedVideo.findAll() | ||
92 | } | ||
93 | |||
94 | listForApi = function (start: number, count: number, sort: SortType) { | 80 | listForApi = function (start: number, count: number, sort: SortType) { |
95 | const query = { | 81 | const query = { |
96 | offset: start, | 82 | offset: start, |
@@ -107,10 +93,6 @@ listForApi = function (start: number, count: number, sort: SortType) { | |||
107 | }) | 93 | }) |
108 | } | 94 | } |
109 | 95 | ||
110 | loadById = function (id: number) { | ||
111 | return BlacklistedVideo.findById(id) | ||
112 | } | ||
113 | |||
114 | loadByVideoId = function (id: number) { | 96 | loadByVideoId = function (id: number) { |
115 | const query = { | 97 | const query = { |
116 | where: { | 98 | where: { |
diff --git a/server/models/video/video-channel-interface.ts b/server/models/video/video-channel-interface.ts index 8ad3e5cb7..b409d1db3 100644 --- a/server/models/video/video-channel-interface.ts +++ b/server/models/video/video-channel-interface.ts | |||
@@ -1,13 +1,11 @@ | |||
1 | import * as Sequelize from 'sequelize' | ||
2 | import * as Promise from 'bluebird' | 1 | import * as Promise from 'bluebird' |
2 | import * as Sequelize from 'sequelize' | ||
3 | 3 | ||
4 | import { ResultList } from '../../../shared' | 4 | import { ResultList } from '../../../shared' |
5 | 5 | import { VideoChannelObject } from '../../../shared/models/activitypub/objects/video-channel-object' | |
6 | // Don't use barrel, import just what we need | ||
7 | import { VideoChannel as FormattedVideoChannel } from '../../../shared/models/videos/video-channel.model' | 6 | import { VideoChannel as FormattedVideoChannel } from '../../../shared/models/videos/video-channel.model' |
8 | import { VideoInstance } from './video-interface' | ||
9 | import { AccountInstance } from '../account/account-interface' | 7 | import { AccountInstance } from '../account/account-interface' |
10 | import { VideoChannelObject } from '../../../shared/models/activitypub/objects/video-channel-object' | 8 | import { VideoInstance } from './video-interface' |
11 | 9 | ||
12 | export namespace VideoChannelMethods { | 10 | export namespace VideoChannelMethods { |
13 | export type ToFormattedJSON = (this: VideoChannelInstance) => FormattedVideoChannel | 11 | export type ToFormattedJSON = (this: VideoChannelInstance) => FormattedVideoChannel |
@@ -15,7 +13,6 @@ export namespace VideoChannelMethods { | |||
15 | export type IsOwned = (this: VideoChannelInstance) => boolean | 13 | export type IsOwned = (this: VideoChannelInstance) => boolean |
16 | 14 | ||
17 | export type CountByAccount = (accountId: number) => Promise<number> | 15 | export type CountByAccount = (accountId: number) => Promise<number> |
18 | export type ListOwned = () => Promise<VideoChannelInstance[]> | ||
19 | export type ListForApi = (start: number, count: number, sort: string) => Promise< ResultList<VideoChannelInstance> > | 16 | export type ListForApi = (start: number, count: number, sort: string) => Promise< ResultList<VideoChannelInstance> > |
20 | export type LoadByIdAndAccount = (id: number, accountId: number) => Promise<VideoChannelInstance> | 17 | export type LoadByIdAndAccount = (id: number, accountId: number) => Promise<VideoChannelInstance> |
21 | export type ListByAccount = (accountId: number) => Promise< ResultList<VideoChannelInstance> > | 18 | export type ListByAccount = (accountId: number) => Promise< ResultList<VideoChannelInstance> > |
@@ -32,10 +29,7 @@ export interface VideoChannelClass { | |||
32 | countByAccount: VideoChannelMethods.CountByAccount | 29 | countByAccount: VideoChannelMethods.CountByAccount |
33 | listForApi: VideoChannelMethods.ListForApi | 30 | listForApi: VideoChannelMethods.ListForApi |
34 | listByAccount: VideoChannelMethods.ListByAccount | 31 | listByAccount: VideoChannelMethods.ListByAccount |
35 | listOwned: VideoChannelMethods.ListOwned | ||
36 | loadByIdAndAccount: VideoChannelMethods.LoadByIdAndAccount | 32 | loadByIdAndAccount: VideoChannelMethods.LoadByIdAndAccount |
37 | loadByUUID: VideoChannelMethods.LoadByUUID | ||
38 | loadByHostAndUUID: VideoChannelMethods.LoadByHostAndUUID | ||
39 | loadAndPopulateAccount: VideoChannelMethods.LoadAndPopulateAccount | 33 | loadAndPopulateAccount: VideoChannelMethods.LoadAndPopulateAccount |
40 | loadByUUIDAndPopulateAccount: VideoChannelMethods.LoadByUUIDAndPopulateAccount | 34 | loadByUUIDAndPopulateAccount: VideoChannelMethods.LoadByUUIDAndPopulateAccount |
41 | loadAndPopulateAccountAndVideos: VideoChannelMethods.LoadAndPopulateAccountAndVideos | 35 | loadAndPopulateAccountAndVideos: VideoChannelMethods.LoadAndPopulateAccountAndVideos |
diff --git a/server/models/video/video-channel.ts b/server/models/video/video-channel.ts index 93566a5c6..64130310d 100644 --- a/server/models/video/video-channel.ts +++ b/server/models/video/video-channel.ts | |||
@@ -12,7 +12,6 @@ let toFormattedJSON: VideoChannelMethods.ToFormattedJSON | |||
12 | let toActivityPubObject: VideoChannelMethods.ToActivityPubObject | 12 | let toActivityPubObject: VideoChannelMethods.ToActivityPubObject |
13 | let isOwned: VideoChannelMethods.IsOwned | 13 | let isOwned: VideoChannelMethods.IsOwned |
14 | let countByAccount: VideoChannelMethods.CountByAccount | 14 | let countByAccount: VideoChannelMethods.CountByAccount |
15 | let listOwned: VideoChannelMethods.ListOwned | ||
16 | let listForApi: VideoChannelMethods.ListForApi | 15 | let listForApi: VideoChannelMethods.ListForApi |
17 | let listByAccount: VideoChannelMethods.ListByAccount | 16 | let listByAccount: VideoChannelMethods.ListByAccount |
18 | let loadByIdAndAccount: VideoChannelMethods.LoadByIdAndAccount | 17 | let loadByIdAndAccount: VideoChannelMethods.LoadByIdAndAccount |
@@ -88,7 +87,6 @@ export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.Da | |||
88 | 87 | ||
89 | listForApi, | 88 | listForApi, |
90 | listByAccount, | 89 | listByAccount, |
91 | listOwned, | ||
92 | loadByIdAndAccount, | 90 | loadByIdAndAccount, |
93 | loadAndPopulateAccount, | 91 | loadAndPopulateAccount, |
94 | loadByUUIDAndPopulateAccount, | 92 | loadByUUIDAndPopulateAccount, |
@@ -192,17 +190,6 @@ countByAccount = function (accountId: number) { | |||
192 | return VideoChannel.count(query) | 190 | return VideoChannel.count(query) |
193 | } | 191 | } |
194 | 192 | ||
195 | listOwned = function () { | ||
196 | const query = { | ||
197 | where: { | ||
198 | remote: false | ||
199 | }, | ||
200 | include: [ VideoChannel['sequelize'].models.Account ] | ||
201 | } | ||
202 | |||
203 | return VideoChannel.findAll(query) | ||
204 | } | ||
205 | |||
206 | listForApi = function (start: number, count: number, sort: string) { | 193 | listForApi = function (start: number, count: number, sort: string) { |
207 | const query = { | 194 | const query = { |
208 | offset: start, | 195 | offset: start, |
diff --git a/server/models/video/video-interface.ts b/server/models/video/video-interface.ts index 89e528acf..be140de86 100644 --- a/server/models/video/video-interface.ts +++ b/server/models/video/video-interface.ts | |||
@@ -3,13 +3,12 @@ import * as Sequelize from 'sequelize' | |||
3 | import { VideoTorrentObject } from '../../../shared/models/activitypub/objects/video-torrent-object' | 3 | import { VideoTorrentObject } from '../../../shared/models/activitypub/objects/video-torrent-object' |
4 | import { ResultList } from '../../../shared/models/result-list.model' | 4 | import { ResultList } from '../../../shared/models/result-list.model' |
5 | import { Video as FormattedVideo, VideoDetails as FormattedDetailsVideo } from '../../../shared/models/videos/video.model' | 5 | import { Video as FormattedVideo, VideoDetails as FormattedDetailsVideo } from '../../../shared/models/videos/video.model' |
6 | import { AccountVideoRateInstance } from '../account/account-video-rate-interface' | ||
6 | 7 | ||
7 | import { TagAttributes, TagInstance } from './tag-interface' | 8 | import { TagAttributes, TagInstance } from './tag-interface' |
8 | import { VideoChannelInstance } from './video-channel-interface' | 9 | import { VideoChannelInstance } from './video-channel-interface' |
9 | import { VideoFileAttributes, VideoFileInstance } from './video-file-interface' | 10 | import { VideoFileAttributes, VideoFileInstance } from './video-file-interface' |
10 | import { VideoShareInstance } from './video-share-interface' | 11 | import { VideoShareInstance } from './video-share-interface' |
11 | import { UserVideoRate } from '../../../shared/models/videos/user-video-rate.model' | ||
12 | import { AccountVideoRateInstance } from '../account/account-video-rate-interface' | ||
13 | 12 | ||
14 | export namespace VideoMethods { | 13 | export namespace VideoMethods { |
15 | export type GetThumbnailName = (this: VideoInstance) => string | 14 | export type GetThumbnailName = (this: VideoInstance) => string |
@@ -40,12 +39,7 @@ export namespace VideoMethods { | |||
40 | export type GetLicenceLabel = (this: VideoInstance) => string | 39 | export type GetLicenceLabel = (this: VideoInstance) => string |
41 | export type GetLanguageLabel = (this: VideoInstance) => string | 40 | export type GetLanguageLabel = (this: VideoInstance) => string |
42 | 41 | ||
43 | // Return thumbnail name | ||
44 | export type GenerateThumbnailFromData = (video: VideoInstance, thumbnailData: string) => Promise<string> | ||
45 | |||
46 | export type List = () => Bluebird<VideoInstance[]> | 42 | export type List = () => Bluebird<VideoInstance[]> |
47 | export type ListOwnedAndPopulateAccountAndTags = () => Bluebird<VideoInstance[]> | ||
48 | export type ListOwnedByAccount = (account: string) => Bluebird<VideoInstance[]> | ||
49 | 43 | ||
50 | export type ListAllAndSharedByAccountForOutbox = ( | 44 | export type ListAllAndSharedByAccountForOutbox = ( |
51 | accountId: number, | 45 | accountId: number, |
@@ -65,9 +59,6 @@ export namespace VideoMethods { | |||
65 | export type Load = (id: number) => Bluebird<VideoInstance> | 59 | export type Load = (id: number) => Bluebird<VideoInstance> |
66 | export type LoadByUUID = (uuid: string, t?: Sequelize.Transaction) => Bluebird<VideoInstance> | 60 | export type LoadByUUID = (uuid: string, t?: Sequelize.Transaction) => Bluebird<VideoInstance> |
67 | export type LoadByUrlAndPopulateAccount = (url: string, t?: Sequelize.Transaction) => Bluebird<VideoInstance> | 61 | export type LoadByUrlAndPopulateAccount = (url: string, t?: Sequelize.Transaction) => Bluebird<VideoInstance> |
68 | export type LoadLocalVideoByUUID = (uuid: string, t?: Sequelize.Transaction) => Bluebird<VideoInstance> | ||
69 | export type LoadByHostAndUUID = (fromHost: string, uuid: string, t?: Sequelize.Transaction) => Bluebird<VideoInstance> | ||
70 | export type LoadAndPopulateAccount = (id: number) => Bluebird<VideoInstance> | ||
71 | export type LoadAndPopulateAccountAndServerAndTags = (id: number) => Bluebird<VideoInstance> | 62 | export type LoadAndPopulateAccountAndServerAndTags = (id: number) => Bluebird<VideoInstance> |
72 | export type LoadByUUIDAndPopulateAccountAndServerAndTags = (uuid: string) => Bluebird<VideoInstance> | 63 | export type LoadByUUIDAndPopulateAccountAndServerAndTags = (uuid: string) => Bluebird<VideoInstance> |
73 | export type LoadByUUIDOrURL = (uuid: string, url: string, t?: Sequelize.Transaction) => Bluebird<VideoInstance> | 64 | export type LoadByUUIDOrURL = (uuid: string, url: string, t?: Sequelize.Transaction) => Bluebird<VideoInstance> |
@@ -79,21 +70,15 @@ export namespace VideoMethods { | |||
79 | } | 70 | } |
80 | 71 | ||
81 | export interface VideoClass { | 72 | export interface VideoClass { |
82 | generateThumbnailFromData: VideoMethods.GenerateThumbnailFromData | ||
83 | list: VideoMethods.List | 73 | list: VideoMethods.List |
84 | listAllAndSharedByAccountForOutbox: VideoMethods.ListAllAndSharedByAccountForOutbox | 74 | listAllAndSharedByAccountForOutbox: VideoMethods.ListAllAndSharedByAccountForOutbox |
85 | listForApi: VideoMethods.ListForApi | 75 | listForApi: VideoMethods.ListForApi |
86 | listUserVideosForApi: VideoMethods.ListUserVideosForApi | 76 | listUserVideosForApi: VideoMethods.ListUserVideosForApi |
87 | listOwnedAndPopulateAccountAndTags: VideoMethods.ListOwnedAndPopulateAccountAndTags | ||
88 | listOwnedByAccount: VideoMethods.ListOwnedByAccount | ||
89 | load: VideoMethods.Load | 77 | load: VideoMethods.Load |
90 | loadAndPopulateAccount: VideoMethods.LoadAndPopulateAccount | ||
91 | loadAndPopulateAccountAndServerAndTags: VideoMethods.LoadAndPopulateAccountAndServerAndTags | 78 | loadAndPopulateAccountAndServerAndTags: VideoMethods.LoadAndPopulateAccountAndServerAndTags |
92 | loadByHostAndUUID: VideoMethods.LoadByHostAndUUID | ||
93 | loadByUUID: VideoMethods.LoadByUUID | 79 | loadByUUID: VideoMethods.LoadByUUID |
94 | loadByUrlAndPopulateAccount: VideoMethods.LoadByUrlAndPopulateAccount | 80 | loadByUrlAndPopulateAccount: VideoMethods.LoadByUrlAndPopulateAccount |
95 | loadByUUIDOrURL: VideoMethods.LoadByUUIDOrURL | 81 | loadByUUIDOrURL: VideoMethods.LoadByUUIDOrURL |
96 | loadLocalVideoByUUID: VideoMethods.LoadLocalVideoByUUID | ||
97 | loadByUUIDAndPopulateAccountAndServerAndTags: VideoMethods.LoadByUUIDAndPopulateAccountAndServerAndTags | 82 | loadByUUIDAndPopulateAccountAndServerAndTags: VideoMethods.LoadByUUIDAndPopulateAccountAndServerAndTags |
98 | searchAndPopulateAccountAndServerAndTags: VideoMethods.SearchAndPopulateAccountAndServerAndTags | 83 | searchAndPopulateAccountAndServerAndTags: VideoMethods.SearchAndPopulateAccountAndServerAndTags |
99 | } | 84 | } |
diff --git a/server/models/video/video.ts b/server/models/video/video.ts index 592fc2d59..e5fd92549 100644 --- a/server/models/video/video.ts +++ b/server/models/video/video.ts | |||
@@ -1,8 +1,8 @@ | |||
1 | import * as Bluebird from 'bluebird' | ||
1 | import { map, maxBy, truncate } from 'lodash' | 2 | import { map, maxBy, truncate } from 'lodash' |
2 | import * as magnetUtil from 'magnet-uri' | 3 | import * as magnetUtil from 'magnet-uri' |
3 | import * as parseTorrent from 'parse-torrent' | 4 | import * as parseTorrent from 'parse-torrent' |
4 | import { join } from 'path' | 5 | import { join } from 'path' |
5 | import * as safeBuffer from 'safe-buffer' | ||
6 | import * as Sequelize from 'sequelize' | 6 | import * as Sequelize from 'sequelize' |
7 | import { VideoPrivacy, VideoResolution } from '../../../shared' | 7 | import { VideoPrivacy, VideoResolution } from '../../../shared' |
8 | import { VideoTorrentObject } from '../../../shared/models/activitypub/objects/video-torrent-object' | 8 | import { VideoTorrentObject } from '../../../shared/models/activitypub/objects/video-torrent-object' |
@@ -25,6 +25,7 @@ import { | |||
25 | unlinkPromise, | 25 | unlinkPromise, |
26 | writeFilePromise | 26 | writeFilePromise |
27 | } from '../../helpers' | 27 | } from '../../helpers' |
28 | import { activityPubCollection } from '../../helpers/activitypub' | ||
28 | import { isVideoUrlValid } from '../../helpers/custom-validators/videos' | 29 | import { isVideoUrlValid } from '../../helpers/custom-validators/videos' |
29 | import { | 30 | import { |
30 | API_VERSION, | 31 | API_VERSION, |
@@ -39,17 +40,13 @@ import { | |||
39 | VIDEO_LICENCES, | 40 | VIDEO_LICENCES, |
40 | VIDEO_PRIVACIES | 41 | VIDEO_PRIVACIES |
41 | } from '../../initializers' | 42 | } from '../../initializers' |
43 | import { sendDeleteVideo } from '../../lib/index' | ||
42 | 44 | ||
43 | import { addMethodsToModel, getSort } from '../utils' | 45 | import { addMethodsToModel, getSort } from '../utils' |
44 | 46 | ||
45 | import { TagInstance } from './tag-interface' | 47 | import { TagInstance } from './tag-interface' |
46 | import { VideoFileInstance, VideoFileModel } from './video-file-interface' | 48 | import { VideoFileInstance, VideoFileModel } from './video-file-interface' |
47 | import { VideoAttributes, VideoInstance, VideoMethods } from './video-interface' | 49 | import { VideoAttributes, VideoInstance, VideoMethods } from './video-interface' |
48 | import { sendDeleteVideo } from '../../lib/index' | ||
49 | import * as Bluebird from 'bluebird' | ||
50 | import { activityPubCollection } from '../../helpers/activitypub' | ||
51 | |||
52 | const Buffer = safeBuffer.Buffer | ||
53 | 50 | ||
54 | let Video: Sequelize.Model<VideoInstance, VideoAttributes> | 51 | let Video: Sequelize.Model<VideoInstance, VideoAttributes> |
55 | let getOriginalFile: VideoMethods.GetOriginalFile | 52 | let getOriginalFile: VideoMethods.GetOriginalFile |
@@ -77,20 +74,14 @@ let getCategoryLabel: VideoMethods.GetCategoryLabel | |||
77 | let getLicenceLabel: VideoMethods.GetLicenceLabel | 74 | let getLicenceLabel: VideoMethods.GetLicenceLabel |
78 | let getLanguageLabel: VideoMethods.GetLanguageLabel | 75 | let getLanguageLabel: VideoMethods.GetLanguageLabel |
79 | 76 | ||
80 | let generateThumbnailFromData: VideoMethods.GenerateThumbnailFromData | ||
81 | let list: VideoMethods.List | 77 | let list: VideoMethods.List |
82 | let listForApi: VideoMethods.ListForApi | 78 | let listForApi: VideoMethods.ListForApi |
83 | let listAllAndSharedByAccountForOutbox: VideoMethods.ListAllAndSharedByAccountForOutbox | 79 | let listAllAndSharedByAccountForOutbox: VideoMethods.ListAllAndSharedByAccountForOutbox |
84 | let listUserVideosForApi: VideoMethods.ListUserVideosForApi | 80 | let listUserVideosForApi: VideoMethods.ListUserVideosForApi |
85 | let loadByHostAndUUID: VideoMethods.LoadByHostAndUUID | ||
86 | let listOwnedAndPopulateAccountAndTags: VideoMethods.ListOwnedAndPopulateAccountAndTags | ||
87 | let listOwnedByAccount: VideoMethods.ListOwnedByAccount | ||
88 | let load: VideoMethods.Load | 81 | let load: VideoMethods.Load |
89 | let loadByUrlAndPopulateAccount: VideoMethods.LoadByUrlAndPopulateAccount | 82 | let loadByUrlAndPopulateAccount: VideoMethods.LoadByUrlAndPopulateAccount |
90 | let loadByUUID: VideoMethods.LoadByUUID | 83 | let loadByUUID: VideoMethods.LoadByUUID |
91 | let loadByUUIDOrURL: VideoMethods.LoadByUUIDOrURL | 84 | let loadByUUIDOrURL: VideoMethods.LoadByUUIDOrURL |
92 | let loadLocalVideoByUUID: VideoMethods.LoadLocalVideoByUUID | ||
93 | let loadAndPopulateAccount: VideoMethods.LoadAndPopulateAccount | ||
94 | let loadAndPopulateAccountAndServerAndTags: VideoMethods.LoadAndPopulateAccountAndServerAndTags | 85 | let loadAndPopulateAccountAndServerAndTags: VideoMethods.LoadAndPopulateAccountAndServerAndTags |
95 | let loadByUUIDAndPopulateAccountAndServerAndTags: VideoMethods.LoadByUUIDAndPopulateAccountAndServerAndTags | 86 | let loadByUUIDAndPopulateAccountAndServerAndTags: VideoMethods.LoadByUUIDAndPopulateAccountAndServerAndTags |
96 | let searchAndPopulateAccountAndServerAndTags: VideoMethods.SearchAndPopulateAccountAndServerAndTags | 87 | let searchAndPopulateAccountAndServerAndTags: VideoMethods.SearchAndPopulateAccountAndServerAndTags |
@@ -267,21 +258,15 @@ export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.Da | |||
267 | const classMethods = [ | 258 | const classMethods = [ |
268 | associate, | 259 | associate, |
269 | 260 | ||
270 | generateThumbnailFromData, | ||
271 | list, | 261 | list, |
272 | listAllAndSharedByAccountForOutbox, | 262 | listAllAndSharedByAccountForOutbox, |
273 | listForApi, | 263 | listForApi, |
274 | listUserVideosForApi, | 264 | listUserVideosForApi, |
275 | listOwnedAndPopulateAccountAndTags, | ||
276 | listOwnedByAccount, | ||
277 | load, | 265 | load, |
278 | loadByUrlAndPopulateAccount, | 266 | loadByUrlAndPopulateAccount, |
279 | loadAndPopulateAccount, | ||
280 | loadAndPopulateAccountAndServerAndTags, | 267 | loadAndPopulateAccountAndServerAndTags, |
281 | loadByHostAndUUID, | ||
282 | loadByUUIDOrURL, | 268 | loadByUUIDOrURL, |
283 | loadByUUID, | 269 | loadByUUID, |
284 | loadLocalVideoByUUID, | ||
285 | loadByUUIDAndPopulateAccountAndServerAndTags, | 270 | loadByUUIDAndPopulateAccountAndServerAndTags, |
286 | searchAndPopulateAccountAndServerAndTags | 271 | searchAndPopulateAccountAndServerAndTags |
287 | ] | 272 | ] |
@@ -803,16 +788,6 @@ removeTorrent = function (this: VideoInstance, videoFile: VideoFileInstance) { | |||
803 | 788 | ||
804 | // ------------------------------ STATICS ------------------------------ | 789 | // ------------------------------ STATICS ------------------------------ |
805 | 790 | ||
806 | generateThumbnailFromData = function (video: VideoInstance, thumbnailData: string) { | ||
807 | // Creating the thumbnail for a remote video | ||
808 | |||
809 | const thumbnailName = video.getThumbnailName() | ||
810 | const thumbnailPath = join(CONFIG.STORAGE.THUMBNAILS_DIR, thumbnailName) | ||
811 | return writeFilePromise(thumbnailPath, Buffer.from(thumbnailData, 'binary')).then(() => { | ||
812 | return thumbnailName | ||
813 | }) | ||
814 | } | ||
815 | |||
816 | list = function () { | 791 | list = function () { |
817 | const query = { | 792 | const query = { |
818 | include: [ Video['sequelize'].models.VideoFile ] | 793 | include: [ Video['sequelize'].models.VideoFile ] |
@@ -970,84 +945,6 @@ listForApi = function (start: number, count: number, sort: string) { | |||
970 | }) | 945 | }) |
971 | } | 946 | } |
972 | 947 | ||
973 | loadByHostAndUUID = function (fromHost: string, uuid: string, t?: Sequelize.Transaction) { | ||
974 | const query: Sequelize.FindOptions<VideoAttributes> = { | ||
975 | where: { | ||
976 | uuid | ||
977 | }, | ||
978 | include: [ | ||
979 | { | ||
980 | model: Video['sequelize'].models.VideoFile | ||
981 | }, | ||
982 | { | ||
983 | model: Video['sequelize'].models.VideoChannel, | ||
984 | include: [ | ||
985 | { | ||
986 | model: Video['sequelize'].models.Account, | ||
987 | include: [ | ||
988 | { | ||
989 | model: Video['sequelize'].models.Server, | ||
990 | required: true, | ||
991 | where: { | ||
992 | host: fromHost | ||
993 | } | ||
994 | } | ||
995 | ] | ||
996 | } | ||
997 | ] | ||
998 | } | ||
999 | ] | ||
1000 | } | ||
1001 | |||
1002 | if (t !== undefined) query.transaction = t | ||
1003 | |||
1004 | return Video.findOne(query) | ||
1005 | } | ||
1006 | |||
1007 | listOwnedAndPopulateAccountAndTags = function () { | ||
1008 | const query = { | ||
1009 | where: { | ||
1010 | remote: false | ||
1011 | }, | ||
1012 | include: [ | ||
1013 | Video['sequelize'].models.VideoFile, | ||
1014 | { | ||
1015 | model: Video['sequelize'].models.VideoChannel, | ||
1016 | include: [ Video['sequelize'].models.Account ] | ||
1017 | }, | ||
1018 | Video['sequelize'].models.Tag | ||
1019 | ] | ||
1020 | } | ||
1021 | |||
1022 | return Video.findAll(query) | ||
1023 | } | ||
1024 | |||
1025 | listOwnedByAccount = function (account: string) { | ||
1026 | const query = { | ||
1027 | where: { | ||
1028 | remote: false | ||
1029 | }, | ||
1030 | include: [ | ||
1031 | { | ||
1032 | model: Video['sequelize'].models.VideoFile | ||
1033 | }, | ||
1034 | { | ||
1035 | model: Video['sequelize'].models.VideoChannel, | ||
1036 | include: [ | ||
1037 | { | ||
1038 | model: Video['sequelize'].models.Account, | ||
1039 | where: { | ||
1040 | name: account | ||
1041 | } | ||
1042 | } | ||
1043 | ] | ||
1044 | } | ||
1045 | ] | ||
1046 | } | ||
1047 | |||
1048 | return Video.findAll(query) | ||
1049 | } | ||
1050 | |||
1051 | load = function (id: number) { | 948 | load = function (id: number) { |
1052 | return Video.findById(id) | 949 | return Video.findById(id) |
1053 | } | 950 | } |
@@ -1100,34 +997,6 @@ loadByUUIDOrURL = function (uuid: string, url: string, t?: Sequelize.Transaction | |||
1100 | return Video.findOne(query) | 997 | return Video.findOne(query) |
1101 | } | 998 | } |
1102 | 999 | ||
1103 | loadLocalVideoByUUID = function (uuid: string, t?: Sequelize.Transaction) { | ||
1104 | const query: Sequelize.FindOptions<VideoAttributes> = { | ||
1105 | where: { | ||
1106 | uuid, | ||
1107 | remote: false | ||
1108 | }, | ||
1109 | include: [ Video['sequelize'].models.VideoFile ] | ||
1110 | } | ||
1111 | |||
1112 | if (t !== undefined) query.transaction = t | ||
1113 | |||
1114 | return Video.findOne(query) | ||
1115 | } | ||
1116 | |||
1117 | loadAndPopulateAccount = function (id: number) { | ||
1118 | const options = { | ||
1119 | include: [ | ||
1120 | Video['sequelize'].models.VideoFile, | ||
1121 | { | ||
1122 | model: Video['sequelize'].models.VideoChannel, | ||
1123 | include: [ Video['sequelize'].models.Account ] | ||
1124 | } | ||
1125 | ] | ||
1126 | } | ||
1127 | |||
1128 | return Video.findById(id, options) | ||
1129 | } | ||
1130 | |||
1131 | loadAndPopulateAccountAndServerAndTags = function (id: number) { | 1000 | loadAndPopulateAccountAndServerAndTags = function (id: number) { |
1132 | const options = { | 1001 | const options = { |
1133 | include: [ | 1002 | include: [ |