]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/shared/shared-moderation/abuse.service.ts
Migrate to $localize
[github/Chocobozzz/PeerTube.git] / client / src / app / shared / shared-moderation / abuse.service.ts
index 652d8370fa2aff9552bf435a6d12c6df34f2b05a..bf98d4b36d6b294ba0aa7de041372f6595e844ab 100644 (file)
@@ -5,16 +5,25 @@ import { catchError, map } from 'rxjs/operators'
 import { HttpClient, HttpParams } from '@angular/common/http'
 import { Injectable } from '@angular/core'
 import { RestExtractor, RestPagination, RestService } from '@app/core'
-import { AdminAbuse, AbuseCreate, AbuseFilter, AbusePredefinedReasonsString, AbuseState, AbuseUpdate, ResultList, UserAbuse, AbuseMessage } from '@shared/models'
+import {
+  AbuseCreate,
+  AbuseFilter,
+  AbuseMessage,
+  AbusePredefinedReasonsString,
+  AbuseState,
+  AbuseUpdate,
+  AdminAbuse,
+  ResultList,
+  UserAbuse
+} from '@shared/models'
 import { environment } from '../../../environments/environment'
-import { I18n } from '@ngx-translate/i18n-polyfill'
 
 @Injectable()
 export class AbuseService {
   private static BASE_ABUSE_URL = environment.apiUrl + '/api/v1/abuses'
+  private static BASE_MY_ABUSE_URL = environment.apiUrl + '/api/v1/users/me/abuses'
 
   constructor (
-    private i18n: I18n,
     private authHttp: HttpClient,
     private restService: RestService,
     private restExtractor: RestExtractor
@@ -32,33 +41,7 @@ export class AbuseService {
     params = this.restService.addRestGetParams(params, pagination, sort)
 
     if (search) {
-      const filters = this.restService.parseQueryStringFilter(search, {
-        id: { prefix: '#' },
-        state: {
-          prefix: 'state:',
-          handler: v => {
-            if (v === 'accepted') return AbuseState.ACCEPTED
-            if (v === 'pending') return AbuseState.PENDING
-            if (v === 'rejected') return AbuseState.REJECTED
-
-            return undefined
-          }
-        },
-        videoIs: {
-          prefix: 'videoIs:',
-          handler: v => {
-            if (v === 'deleted') return v
-            if (v === 'blacklisted') return v
-
-            return undefined
-          }
-        },
-        searchReporter: { prefix: 'reporter:' },
-        searchReportee: { prefix: 'reportee:' },
-        predefinedReason: { prefix: 'tag:' }
-      })
-
-      params = this.restService.addObjectParams(params, filters)
+      params = this.buildParamsFromSearch(search, params)
     }
 
     return this.authHttp.get<ResultList<AdminAbuse>>(url, { params })
@@ -67,6 +50,27 @@ export class AbuseService {
       )
   }
 
+  getUserAbuses (options: {
+    pagination: RestPagination,
+    sort: SortMeta,
+    search?: string
+  }): Observable<ResultList<UserAbuse>> {
+    const { pagination, sort, search } = options
+    const url = AbuseService.BASE_MY_ABUSE_URL
+
+    let params = new HttpParams()
+    params = this.restService.addRestGetParams(params, pagination, sort)
+
+    if (search) {
+      params = this.buildParamsFromSearch(search, params)
+    }
+
+    return this.authHttp.get<ResultList<UserAbuse>>(url, { params })
+      .pipe(
+        catchError(res => this.restExtractor.handleError(res))
+      )
+  }
+
   reportVideo (parameters: AbuseCreate) {
     const url = AbuseService.BASE_ABUSE_URL
 
@@ -132,33 +136,33 @@ export class AbuseService {
     let reasons: { id: AbusePredefinedReasonsString, label: string, description?: string, help?: string }[] = [
       {
         id: 'violentOrRepulsive',
-        label: this.i18n('Violent or repulsive'),
-        help: this.i18n('Contains offensive, violent, or coarse language or iconography.')
+        label: $localize`Violent or repulsive`,
+        help: $localize`Contains offensive, violent, or coarse language or iconography.`
       },
       {
         id: 'hatefulOrAbusive',
-        label: this.i18n('Hateful or abusive'),
-        help: this.i18n('Contains abusive, racist or sexist language or iconography.')
+        label: $localize`Hateful or abusive`,
+        help: $localize`Contains abusive, racist or sexist language or iconography.`
       },
       {
         id: 'spamOrMisleading',
-        label: this.i18n('Spam, ad or false news'),
-        help: this.i18n('Contains marketing, spam, purposefully deceitful news, or otherwise misleading thumbnail/text/tags. Please provide reputable sources to report hoaxes.')
+        label: $localize`Spam, ad or false news`,
+        help: $localize`Contains marketing, spam, purposefully deceitful news, or otherwise misleading thumbnail/text/tags. Please provide reputable sources to report hoaxes.`
       },
       {
         id: 'privacy',
-        label: this.i18n('Privacy breach or doxxing'),
-        help: this.i18n('Contains personal information that could be used to track, identify, contact or impersonate someone (e.g. name, address, phone number, email, or credit card details).')
+        label: $localize`Privacy breach or doxxing`,
+        help: $localize`Contains personal information that could be used to track, identify, contact or impersonate someone (e.g. name, address, phone number, email, or credit card details).`
       },
       {
         id: 'rights',
-        label: this.i18n('Intellectual property violation'),
-        help: this.i18n('Infringes my intellectual property or copyright, wrt. the regional rules with which the server must comply.')
+        label: $localize`Copyright`,
+        help: $localize`Infringes your copyright wrt. the regional laws with which the server must comply.`
       },
       {
         id: 'serverRules',
-        label: this.i18n('Breaks server rules'),
-        description: this.i18n('Anything not included in the above that breaks the terms of service, code of conduct, or general rules in place on the server.')
+        label: $localize`Breaks server rules`,
+        description: $localize`Anything not included in the above that breaks the terms of service, code of conduct, or general rules in place on the server.`
       }
     ]
 
@@ -166,13 +170,13 @@ export class AbuseService {
       reasons = reasons.concat([
         {
           id: 'thumbnails',
-          label: this.i18n('Thumbnails'),
-          help: this.i18n('The above can only be seen in thumbnails.')
+          label: $localize`Thumbnails`,
+          help: $localize`The above can only be seen in thumbnails.`
         },
         {
           id: 'captions',
-          label: this.i18n('Captions'),
-          help: this.i18n('The above can only be seen in captions (please describe which).')
+          label: $localize`Captions`,
+          help: $localize`The above can only be seen in captions (please describe which).`
         }
       ])
     }
@@ -180,4 +184,33 @@ export class AbuseService {
     return reasons
   }
 
+  private buildParamsFromSearch (search: string, params: HttpParams) {
+    const filters = this.restService.parseQueryStringFilter(search, {
+      id: { prefix: '#' },
+      state: {
+        prefix: 'state:',
+        handler: v => {
+          if (v === 'accepted') return AbuseState.ACCEPTED
+          if (v === 'pending') return AbuseState.PENDING
+          if (v === 'rejected') return AbuseState.REJECTED
+
+          return undefined
+        }
+      },
+      videoIs: {
+        prefix: 'videoIs:',
+        handler: v => {
+          if (v === 'deleted') return v
+          if (v === 'blacklisted') return v
+
+          return undefined
+        }
+      },
+      searchReporter: { prefix: 'reporter:' },
+      searchReportee: { prefix: 'reportee:' },
+      predefinedReason: { prefix: 'tag:' }
+    })
+
+    return this.restService.addObjectParams(params, filters)
+  }
 }