]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/+admin/plugins/shared/plugin-api.service.ts
Merge branch 'release/3.1.0' into develop
[github/Chocobozzz/PeerTube.git] / client / src / app / +admin / plugins / shared / plugin-api.service.ts
index c360fc1b31951dba87b23ccd1e0252841f13345d..fad30576b3e552572dbea46abeb9f940c83dc62b 100644 (file)
@@ -1,18 +1,20 @@
-import { catchError } from 'rxjs/operators'
+import { Observable } from 'rxjs'
+import { catchError, map, switchMap } 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 { PeerTubePluginIndex } from '@shared/models/plugins/peertube-plugin-index.model'
-import { RegisteredServerSettings, RegisterServerSettingOptions } from '@shared/models/plugins/register-server-setting.model'
+import { ComponentPagination, RestExtractor, RestService } from '@app/core'
 import { PluginService } from '@app/core/plugins/plugin.service'
+import { peertubeTranslate } from '@shared/core-utils/i18n'
+import {
+  InstallOrUpdatePlugin,
+  ManagePlugin,
+  PeerTubePlugin,
+  PeerTubePluginIndex,
+  PluginType,
+  RegisteredServerSettings,
+  ResultList
+} from '@shared/models'
+import { environment } from '../../../../environments/environment'
 
 @Injectable()
 export class PluginApiService {
@@ -22,18 +24,17 @@ export class PluginApiService {
     private authHttp: HttpClient,
     private restExtractor: RestExtractor,
     private restService: RestService,
-    private i18n: I18n,
     private pluginService: PluginService
   ) { }
 
   getPluginTypeOptions () {
     return [
       {
-        label: this.i18n('Plugins'),
+        label: $localize`Plugins`,
         value: PluginType.PLUGIN
       },
       {
-        label: this.i18n('Themes'),
+        label: $localize`Themes`,
         value: PluginType.THEME
       }
     ]
@@ -41,10 +42,10 @@ export class PluginApiService {
 
   getPluginTypeLabel (type: PluginType) {
     if (type === PluginType.PLUGIN) {
-      return this.i18n('plugin')
+      return $localize`plugin`
     }
 
-    return this.i18n('theme')
+    return $localize`theme`
   }
 
   getPlugins (
@@ -92,7 +93,10 @@ export class PluginApiService {
     const path = PluginApiService.BASE_PLUGIN_URL + '/' + npmName + '/registered-settings'
 
     return this.authHttp.get<RegisteredServerSettings>(path)
-               .pipe(catchError(res => this.restExtractor.handleError(res)))
+               .pipe(
+                 switchMap(res => this.translateSettingsLabel(npmName, res)),
+                 catchError(res => this.restExtractor.handleError(res))
+               )
   }
 
   updatePluginSettings (pluginName: string, pluginType: PluginType, settings: any) {
@@ -129,4 +133,27 @@ export class PluginApiService {
     return this.authHttp.post(PluginApiService.BASE_PLUGIN_URL + '/install', body)
                .pipe(catchError(res => this.restExtractor.handleError(res)))
   }
+
+  getPluginOrThemeHref (type: PluginType, name: string) {
+    const typeString = type === PluginType.PLUGIN
+      ? 'plugin'
+      : 'theme'
+
+    return `https://www.npmjs.com/package/peertube-${typeString}-${name}`
+  }
+
+  private translateSettingsLabel (npmName: string, res: RegisteredServerSettings): Observable<RegisteredServerSettings> {
+    return this.pluginService.translationsObservable
+      .pipe(
+        map(allTranslations => allTranslations[npmName]),
+        map(translations => {
+          const registeredSettings = res.registeredSettings
+                                        .map(r => {
+                                          return Object.assign({}, r, { label: peertubeTranslate(r.label, translations) })
+                                        })
+
+          return { registeredSettings }
+        })
+      )
+  }
 }