123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- import { catchError } from 'rxjs/operators'
- import { HttpClient, HttpParams } from '@angular/common/http'
- import { Injectable } from '@angular/core'
- import { environment } from '../../../../environments/environment'
- import { RestExtractor, RestService } from '../../../shared'
- import { I18n } from '@ngx-translate/i18n-polyfill'
- import { PluginType } from '@shared/models/plugins/plugin.type'
- import { ComponentPagination } from '@app/shared/rest/component-pagination.model'
- import { ResultList } from '@shared/models'
- import { PeerTubePlugin } from '@shared/models/plugins/peertube-plugin.model'
- import { ManagePlugin } from '@shared/models/plugins/manage-plugin.model'
- import { InstallOrUpdatePlugin } from '@shared/models/plugins/install-plugin.model'
- import { RegisterSettingOptions } from '@shared/models/plugins/register-setting.model'
- import { PeerTubePluginIndex } from '@shared/models/plugins/peertube-plugin-index.model'
- @Injectable()
- export class PluginApiService {
- private static BASE_APPLICATION_URL = environment.apiUrl + '/api/v1/plugins'
- constructor (
- private authHttp: HttpClient,
- private restExtractor: RestExtractor,
- private restService: RestService,
- private i18n: I18n
- ) { }
- getPluginTypeOptions () {
- return [
- {
- label: this.i18n('Plugins'),
- value: PluginType.PLUGIN
- },
- {
- label: this.i18n('Themes'),
- value: PluginType.THEME
- }
- ]
- }
- getPluginTypeLabel (type: PluginType) {
- if (type === PluginType.PLUGIN) {
- return this.i18n('plugin')
- }
- return this.i18n('theme')
- }
- getPlugins (
- pluginType: PluginType,
- componentPagination: ComponentPagination,
- sort: string
- ) {
- const pagination = this.restService.componentPaginationToRestPagination(componentPagination)
- let params = new HttpParams()
- params = this.restService.addRestGetParams(params, pagination, sort)
- params = params.append('pluginType', pluginType.toString())
- return this.authHttp.get<ResultList<PeerTubePlugin>>(PluginApiService.BASE_APPLICATION_URL, { params })
- .pipe(catchError(res => this.restExtractor.handleError(res)))
- }
- searchAvailablePlugins (
- pluginType: PluginType,
- componentPagination: ComponentPagination,
- sort: string,
- search?: string
- ) {
- const pagination = this.restService.componentPaginationToRestPagination(componentPagination)
- let params = new HttpParams()
- params = this.restService.addRestGetParams(params, pagination, sort)
- params = params.append('pluginType', pluginType.toString())
- if (search) params = params.append('search', search)
- return this.authHttp.get<ResultList<PeerTubePluginIndex>>(PluginApiService.BASE_APPLICATION_URL + '/available', { params })
- .pipe(catchError(res => this.restExtractor.handleError(res)))
- }
- getPlugin (npmName: string) {
- const path = PluginApiService.BASE_APPLICATION_URL + '/' + npmName
- return this.authHttp.get<PeerTubePlugin>(path)
- .pipe(catchError(res => this.restExtractor.handleError(res)))
- }
- getPluginRegisteredSettings (pluginName: string, pluginType: PluginType) {
- const path = PluginApiService.BASE_APPLICATION_URL + '/' + this.nameToNpmName(pluginName, pluginType) + '/registered-settings'
- return this.authHttp.get<{ settings: RegisterSettingOptions[] }>(path)
- .pipe(catchError(res => this.restExtractor.handleError(res)))
- }
- updatePluginSettings (pluginName: string, pluginType: PluginType, settings: any) {
- const path = PluginApiService.BASE_APPLICATION_URL + '/' + this.nameToNpmName(pluginName, pluginType) + '/settings'
- return this.authHttp.put(path, { settings })
- .pipe(catchError(res => this.restExtractor.handleError(res)))
- }
- uninstall (pluginName: string, pluginType: PluginType) {
- const body: ManagePlugin = {
- npmName: this.nameToNpmName(pluginName, pluginType)
- }
- return this.authHttp.post(PluginApiService.BASE_APPLICATION_URL + '/uninstall', body)
- .pipe(catchError(res => this.restExtractor.handleError(res)))
- }
- update (pluginName: string, pluginType: PluginType) {
- const body: ManagePlugin = {
- npmName: this.nameToNpmName(pluginName, pluginType)
- }
- return this.authHttp.post(PluginApiService.BASE_APPLICATION_URL + '/update', body)
- .pipe(catchError(res => this.restExtractor.handleError(res)))
- }
- install (npmName: string) {
- const body: InstallOrUpdatePlugin = {
- npmName
- }
- return this.authHttp.post(PluginApiService.BASE_APPLICATION_URL + '/install', body)
- .pipe(catchError(res => this.restExtractor.handleError(res)))
- }
- nameToNpmName (name: string, type: PluginType) {
- const prefix = type === PluginType.PLUGIN
- ? 'peertube-plugin-'
- : 'peertube-theme-'
- return prefix + name
- }
- pluginTypeFromNpmName (npmName: string) {
- return npmName.startsWith('peertube-plugin-')
- ? PluginType.PLUGIN
- : PluginType.THEME
- }
- }
|