diff --git a/src/Ombi/ClientApp/src/app/requests-list/components/movies-grid/movies-grid.component.ts b/src/Ombi/ClientApp/src/app/requests-list/components/movies-grid/movies-grid.component.ts
index c73084c2b..69fd0da77 100644
--- a/src/Ombi/ClientApp/src/app/requests-list/components/movies-grid/movies-grid.component.ts
+++ b/src/Ombi/ClientApp/src/app/requests-list/components/movies-grid/movies-grid.component.ts
@@ -1,18 +1,18 @@
-import { Component, AfterViewInit, ViewChild, EventEmitter, Output, ChangeDetectorRef, OnInit } from "@angular/core";
+import { AfterViewInit, ChangeDetectorRef, Component, EventEmitter, OnInit, Output, ViewChild } from "@angular/core";
import { IMovieRequests, IRequestEngineResult, IRequestsViewModel } from "../../../interfaces";
-import { MatPaginator } from "@angular/material/paginator";
-import { MatSort } from "@angular/material/sort";
-import { merge, Observable, of as observableOf, forkJoin } from 'rxjs';
+import { NotificationService, RequestService } from "../../../services";
+import { Observable, forkJoin, merge, of as observableOf } from 'rxjs';
import { catchError, map, startWith, switchMap } from 'rxjs/operators';
-import { RequestServiceV2 } from "../../../services/requestV2.service";
import { AuthService } from "../../../auth/auth.service";
-import { StorageService } from "../../../shared/storage/storage-service";
+import { MatPaginator } from "@angular/material/paginator";
+import { MatSort } from "@angular/material/sort";
+import { MatTableDataSource } from "@angular/material/table";
import { RequestFilterType } from "../../models/RequestFilterType";
+import { RequestServiceV2 } from "../../../services/requestV2.service";
import { SelectionModel } from "@angular/cdk/collections";
-import { NotificationService, RequestService } from "../../../services";
+import { StorageService } from "../../../shared/storage/storage-service";
import { TranslateService } from "@ngx-translate/core";
-import { MatTableDataSource } from "@angular/material/table";
@Component({
templateUrl: "./movies-grid.component.html",
@@ -26,6 +26,7 @@ export class MoviesGridComponent implements OnInit, AfterViewInit {
public displayedColumns: string[] = ['title', 'requestedUser.requestedBy', 'status', 'requestStatus','requestedDate', 'actions'];
public gridCount: string = "15";
public isAdmin: boolean;
+ public manageOwnRequests: boolean;
public defaultSort: string = "requestedDate";
public defaultOrder: string = "desc";
public currentFilter: RequestFilterType = RequestFilterType.All;
@@ -39,7 +40,7 @@ export class MoviesGridComponent implements OnInit, AfterViewInit {
private storageKeyGridCount = "Movie_DefaultGridCount";
private storageKeyCurrentFilter = "Movie_DefaultFilter";
- @Output() public onOpenOptions = new EventEmitter<{ request: any, filter: any, onChange: any }>();
+ @Output() public onOpenOptions = new EventEmitter<{ request: any, filter: any, onChange: any, manageOwnRequests: boolean, isAdmin: boolean }>();
@ViewChild(MatPaginator) paginator: MatPaginator;
@ViewChild(MatSort) sort: MatSort;
@@ -53,6 +54,7 @@ export class MoviesGridComponent implements OnInit, AfterViewInit {
public ngOnInit() {
this.isAdmin = this.auth.hasRole("admin") || this.auth.hasRole("poweruser");
+ this.manageOwnRequests = this.auth.hasRole("ManageOwnRequests")
if (this.isAdmin) {
this.displayedColumns.unshift('select');
}
@@ -135,7 +137,7 @@ export class MoviesGridComponent implements OnInit, AfterViewInit {
this.ref.detectChanges();
};
- this.onOpenOptions.emit({ request: request, filter: filter, onChange: onChange });
+ this.onOpenOptions.emit({ request: request, filter: filter, onChange: onChange, manageOwnRequests: this.manageOwnRequests, isAdmin: this.isAdmin });
}
public switchFilter(type: RequestFilterType) {
diff --git a/src/Ombi/ClientApp/src/app/requests-list/components/options/request-options.component.html b/src/Ombi/ClientApp/src/app/requests-list/components/options/request-options.component.html
index 399b35e16..ac974ece8 100644
--- a/src/Ombi/ClientApp/src/app/requests-list/components/options/request-options.component.html
+++ b/src/Ombi/ClientApp/src/app/requests-list/components/options/request-options.component.html
@@ -1,11 +1,11 @@
-
+ {{'Requests.RequestPanel.Delete' | translate}}
-
+ {{'Requests.RequestPanel.Approve' | translate}}
-
+ {{'Requests.RequestPanel.ChangeAvailability' | translate}}
\ No newline at end of file
diff --git a/src/Ombi/ClientApp/src/app/requests-list/components/requests-list.component.ts b/src/Ombi/ClientApp/src/app/requests-list/components/requests-list.component.ts
index 6cdd84af3..5487a08a1 100644
--- a/src/Ombi/ClientApp/src/app/requests-list/components/requests-list.component.ts
+++ b/src/Ombi/ClientApp/src/app/requests-list/components/requests-list.component.ts
@@ -1,8 +1,9 @@
import { Component, ViewChild } from "@angular/core";
+
import { MatBottomSheet } from "@angular/material/bottom-sheet";
+import { MoviesGridComponent } from "./movies-grid/movies-grid.component";
import { RequestOptionsComponent } from "./options/request-options.component";
import { UpdateType } from "../models/UpdateType";
-import { MoviesGridComponent } from "./movies-grid/movies-grid.component";
@Component({
templateUrl: "./requests-list.component.html",
@@ -12,7 +13,7 @@ export class RequestsListComponent {
constructor(private bottomSheet: MatBottomSheet) { }
- public onOpenOptions(event: { request: any, filter: any, onChange: any }) {
+ public onOpenOptions(event: { request: any, filter: any, onChange: any, manageOwnRequests: boolean, isAdmin: boolean }) {
const ref = this.bottomSheet.open(RequestOptionsComponent, { data: { id: event.request.id, type: event.request.requestType, canApprove: event.request.canApprove } });
ref.afterDismissed().subscribe((result) => {
diff --git a/src/Ombi/ClientApp/src/app/services/applications/themoviedb.service.ts b/src/Ombi/ClientApp/src/app/services/applications/themoviedb.service.ts
index 677034143..ff76d591b 100644
--- a/src/Ombi/ClientApp/src/app/services/applications/themoviedb.service.ts
+++ b/src/Ombi/ClientApp/src/app/services/applications/themoviedb.service.ts
@@ -22,4 +22,8 @@ export class TheMovieDbService extends ServiceHelpers {
return this.http.get(`${this.url}/Keywords/${keywordId}`, { headers: this.headers })
.pipe(catchError((error: HttpErrorResponse) => error.status === 404 ? empty() : throwError(error)));
}
+
+ public getGenres(media: string): Observable {
+ return this.http.get(`${this.url}/Genres/${media}`, { headers: this.headers })
+ }
}
diff --git a/src/Ombi/ClientApp/src/app/settings/customization/customization.component.html b/src/Ombi/ClientApp/src/app/settings/customization/customization.component.html
index 3b3044780..1625c1b77 100644
--- a/src/Ombi/ClientApp/src/app/settings/customization/customization.component.html
+++ b/src/Ombi/ClientApp/src/app/settings/customization/customization.component.html
@@ -1,4 +1,4 @@
-
+
- The application url should be your Externally Accessible URL for example, your internal URL is http://192.168.1.50/ but your Externally
- Accessible URL is 'https://mydomain.com/requests' Please ensure this field is correct as it drives a lot of functionality include the QR code for the
- mobile app and it affects the way email notifications are sent.
+ The application url should be your Externally Accessible URL (the address you use to reach Ombi from outside your system). For example, 'https://example.com/requests'. Please ensure this field is correct as it drives a lot of functionality, including the QR code for the
+ mobile app, and the way email notifications are sent.
Application URL
@@ -81,4 +80,4 @@
-
\ No newline at end of file
+
diff --git a/src/Ombi/ClientApp/src/app/settings/themoviedb/themoviedb.component.html b/src/Ombi/ClientApp/src/app/settings/themoviedb/themoviedb.component.html
index 4d47aa8a9..fb10cc142 100644
--- a/src/Ombi/ClientApp/src/app/settings/themoviedb/themoviedb.component.html
+++ b/src/Ombi/ClientApp/src/app/settings/themoviedb/themoviedb.component.html
@@ -15,7 +15,7 @@