diff options
Diffstat (limited to 'server/models')
-rw-r--r-- | server/models/server/plugin.ts | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/server/models/server/plugin.ts b/server/models/server/plugin.ts index 226c08342..340d49f3b 100644 --- a/server/models/server/plugin.ts +++ b/server/models/server/plugin.ts | |||
@@ -1,7 +1,8 @@ | |||
1 | import { AllowNull, Column, CreatedAt, DataType, DefaultScope, Is, Model, Table, UpdatedAt } from 'sequelize-typescript' | 1 | import { AllowNull, Column, CreatedAt, DataType, DefaultScope, Is, Model, Table, UpdatedAt } from 'sequelize-typescript' |
2 | import { getSort, throwIfNotValid } from '../utils' | 2 | import { getSort, throwIfNotValid } from '../utils' |
3 | import { | 3 | import { |
4 | isPluginDescriptionValid, isPluginHomepage, | 4 | isPluginDescriptionValid, |
5 | isPluginHomepage, | ||
5 | isPluginNameValid, | 6 | isPluginNameValid, |
6 | isPluginTypeValid, | 7 | isPluginTypeValid, |
7 | isPluginVersionValid | 8 | isPluginVersionValid |
@@ -42,6 +43,11 @@ export class PluginModel extends Model<PluginModel> { | |||
42 | @Column | 43 | @Column |
43 | version: string | 44 | version: string |
44 | 45 | ||
46 | @AllowNull(true) | ||
47 | @Is('PluginLatestVersion', value => throwIfNotValid(value, isPluginVersionValid, 'version')) | ||
48 | @Column | ||
49 | latestVersion: string | ||
50 | |||
45 | @AllowNull(false) | 51 | @AllowNull(false) |
46 | @Column | 52 | @Column |
47 | enabled: boolean | 53 | enabled: boolean |
@@ -103,27 +109,28 @@ export class PluginModel extends Model<PluginModel> { | |||
103 | return PluginModel.findOne(query) | 109 | return PluginModel.findOne(query) |
104 | } | 110 | } |
105 | 111 | ||
106 | static getSetting (pluginName: string, settingName: string) { | 112 | static getSetting (pluginName: string, pluginType: PluginType, settingName: string) { |
107 | const query = { | 113 | const query = { |
108 | attributes: [ 'settings' ], | 114 | attributes: [ 'settings' ], |
109 | where: { | 115 | where: { |
110 | name: pluginName | 116 | name: pluginName, |
117 | type: pluginType | ||
111 | } | 118 | } |
112 | } | 119 | } |
113 | 120 | ||
114 | return PluginModel.findOne(query) | 121 | return PluginModel.findOne(query) |
115 | .then(p => p.settings) | 122 | .then(p => { |
116 | .then(settings => { | 123 | if (!p || !p.settings) return undefined |
117 | if (!settings) return undefined | ||
118 | 124 | ||
119 | return settings[settingName] | 125 | return p.settings[settingName] |
120 | }) | 126 | }) |
121 | } | 127 | } |
122 | 128 | ||
123 | static setSetting (pluginName: string, settingName: string, settingValue: string) { | 129 | static setSetting (pluginName: string, pluginType: PluginType, settingName: string, settingValue: string) { |
124 | const query = { | 130 | const query = { |
125 | where: { | 131 | where: { |
126 | name: pluginName | 132 | name: pluginName, |
133 | type: pluginType | ||
127 | } | 134 | } |
128 | } | 135 | } |
129 | 136 | ||
@@ -171,11 +178,18 @@ export class PluginModel extends Model<PluginModel> { | |||
171 | : PluginType.THEME | 178 | : PluginType.THEME |
172 | } | 179 | } |
173 | 180 | ||
181 | static buildNpmName (name: string, type: PluginType) { | ||
182 | if (type === PluginType.THEME) return 'peertube-theme-' + name | ||
183 | |||
184 | return 'peertube-plugin-' + name | ||
185 | } | ||
186 | |||
174 | toFormattedJSON (): PeerTubePlugin { | 187 | toFormattedJSON (): PeerTubePlugin { |
175 | return { | 188 | return { |
176 | name: this.name, | 189 | name: this.name, |
177 | type: this.type, | 190 | type: this.type, |
178 | version: this.version, | 191 | version: this.version, |
192 | latestVersion: this.latestVersion, | ||
179 | enabled: this.enabled, | 193 | enabled: this.enabled, |
180 | uninstalled: this.uninstalled, | 194 | uninstalled: this.uninstalled, |
181 | peertubeEngine: this.peertubeEngine, | 195 | peertubeEngine: this.peertubeEngine, |