fix(Hide music from navbar and request list when not enabled): 🐛

pull/4855/head
tidusjar 1 year ago
parent 8eda250367
commit 5123a76954

@ -1,5 +1,5 @@
import { APP_BASE_HREF, CommonModule, PlatformLocation } from "@angular/common"; import { APP_BASE_HREF, CommonModule, PlatformLocation } from "@angular/common";
import { CustomPageService, ImageService, RequestService, SettingsService, SonarrService } from "./services"; import { CustomPageService, ImageService, LidarrService, RequestService, SettingsService, SonarrService } from "./services";
import { FormsModule, ReactiveFormsModule } from "@angular/forms"; import { FormsModule, ReactiveFormsModule } from "@angular/forms";
import { HTTP_INTERCEPTORS, HttpClient, HttpClientModule } from "@angular/common/http"; import { HTTP_INTERCEPTORS, HttpClient, HttpClientModule } from "@angular/common/http";
import { IdentityService, IssuesService, JobService, MessageService, PlexTvService, SearchService, StatusService } from "./services"; import { IdentityService, IssuesService, JobService, MessageService, PlexTvService, SearchService, StatusService } from "./services";
@ -209,6 +209,7 @@ export function JwtTokenGetter() {
StorageService, StorageService,
RequestService, RequestService,
SonarrService, SonarrService,
LidarrService,
SignalRNotificationService, SignalRNotificationService,
FEATURES_INITIALIZER, FEATURES_INITIALIZER,
SONARR_INITIALIZER, SONARR_INITIALIZER,

@ -45,7 +45,7 @@ export class CarouselListComponent implements OnInit {
}; };
private amountToLoad = 17; private amountToLoad = 17;
private currentlyLoaded = 0; private currentlyLoaded = 0;
private baseUrl: string; private baseUrl: string = "";
constructor(private searchService: SearchV2Service, constructor(private searchService: SearchV2Service,

@ -84,7 +84,7 @@
<mat-slide-toggle id="filterTv" class="mat-menu-item slide-menu" [checked]="searchFilter.tvShows" <mat-slide-toggle id="filterTv" class="mat-menu-item slide-menu" [checked]="searchFilter.tvShows"
(click)="$event.stopPropagation()" (change)="changeFilter($event,SearchFilterType.TvShow)"> (click)="$event.stopPropagation()" (change)="changeFilter($event,SearchFilterType.TvShow)">
{{ 'NavigationBar.Filter.TvShows' | translate}}</mat-slide-toggle> {{ 'NavigationBar.Filter.TvShows' | translate}}</mat-slide-toggle>
<mat-slide-toggle id="filterMusic" class="mat-menu-item slide-menu" [checked]="searchFilter.music" <mat-slide-toggle *ngIf="musicEnabled$ | async" id="filterMusic" class="mat-menu-item slide-menu" [checked]="searchFilter.music"
(click)="$event.stopPropagation()" (change)="changeFilter($event,SearchFilterType.Music)"> (click)="$event.stopPropagation()" (change)="changeFilter($event,SearchFilterType.Music)">
{{ 'NavigationBar.Filter.Music' | translate}}</mat-slide-toggle> {{ 'NavigationBar.Filter.Music' | translate}}</mat-slide-toggle>
<!-- <mat-slide-toggle class="mat-menu-item slide-menu" [checked]="searchFilter.people" <!-- <mat-slide-toggle class="mat-menu-item slide-menu" [checked]="searchFilter.people"

@ -1,7 +1,7 @@
import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout'; import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges } from '@angular/core'; import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges } from '@angular/core';
import { ICustomizationSettings, IUser, RequestType, UserType } from '../interfaces'; import { ICustomizationSettings, IUser, RequestType, UserType } from '../interfaces';
import { SettingsService, SettingsStateService } from '../services'; import { LidarrService, SettingsService, SettingsStateService } from '../services';
import { AdvancedSearchDialogComponent } from '../shared/advanced-search-dialog/advanced-search-dialog.component'; import { AdvancedSearchDialogComponent } from '../shared/advanced-search-dialog/advanced-search-dialog.component';
import { CustomizationFacade } from '../state/customization'; import { CustomizationFacade } from '../state/customization';
@ -15,7 +15,7 @@ import { Observable } from 'rxjs';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { SearchFilter } from './SearchFilter'; import { SearchFilter } from './SearchFilter';
import { StorageService } from '../shared/storage/storage-service'; import { StorageService } from '../shared/storage/storage-service';
import { map } from 'rxjs/operators'; import { map, take } from 'rxjs/operators';
export enum SearchFilterType { export enum SearchFilterType {
Movie = 1, Movie = 1,
@ -56,9 +56,12 @@ export class MyNavComponent implements OnInit {
private customizationSettings: ICustomizationSettings; private customizationSettings: ICustomizationSettings;
public readonly musicEnabled$ = this.lidarrService.enabled().pipe(take(1));
constructor(private breakpointObserver: BreakpointObserver, constructor(private breakpointObserver: BreakpointObserver,
private settingsService: SettingsService, private settingsService: SettingsService,
private customizationFacade: CustomizationFacade, private customizationFacade: CustomizationFacade,
private lidarrService: LidarrService,
private store: StorageService, private store: StorageService,
private filterService: FilterService, private filterService: FilterService,
private dialogService: MatDialog, private dialogService: MatDialog,

@ -2,7 +2,7 @@
import { MoviesGridComponent } from "./movies-grid/movies-grid.component"; import { MoviesGridComponent } from "./movies-grid/movies-grid.component";
import { RequestServiceV2 } from "../../services/requestV2.service"; import { RequestServiceV2 } from "../../services/requestV2.service";
import { RequestService } from "../../services"; import { LidarrService, RequestService } from "../../services";
import { TvGridComponent } from "./tv-grid/tv-grid.component"; import { TvGridComponent } from "./tv-grid/tv-grid.component";
import { GridSpinnerComponent } from "./grid-spinner/grid-spinner.component"; import { GridSpinnerComponent } from "./grid-spinner/grid-spinner.component";
import { RequestOptionsComponent } from "./options/request-options.component"; import { RequestOptionsComponent } from "./options/request-options.component";
@ -20,4 +20,5 @@ export const components: any[] = [
export const providers: any[] = [ export const providers: any[] = [
RequestService, RequestService,
RequestServiceV2, RequestServiceV2,
LidarrService,
]; ];

@ -11,7 +11,7 @@
<tv-grid (onOpenOptions)="onOpenOptions($event)"></tv-grid> <tv-grid (onOpenOptions)="onOpenOptions($event)"></tv-grid>
</ng-template> </ng-template>
</mat-tab> </mat-tab>
<mat-tab label="{{ 'NavigationBar.Filter.Music' | translate }}"> <mat-tab *ngIf="musicEnabled$ | async" label="{{ 'NavigationBar.Filter.Music' | translate }}">
<ng-template matTabContent> <ng-template matTabContent>
<albums-grid (onOpenOptions)="onOpenOptions($event)"></albums-grid> <albums-grid (onOpenOptions)="onOpenOptions($event)"></albums-grid>
</ng-template> </ng-template>

@ -3,6 +3,8 @@ import { Component, ViewChild } from "@angular/core";
import { MatBottomSheet } from "@angular/material/bottom-sheet"; import { MatBottomSheet } from "@angular/material/bottom-sheet";
import { RequestOptionsComponent } from "./options/request-options.component"; import { RequestOptionsComponent } from "./options/request-options.component";
import { UpdateType } from "../models/UpdateType"; import { UpdateType } from "../models/UpdateType";
import { LidarrService } from "app/services";
import { take } from "rxjs";
@Component({ @Component({
templateUrl: "./requests-list.component.html", templateUrl: "./requests-list.component.html",
@ -10,7 +12,9 @@ import { UpdateType } from "../models/UpdateType";
}) })
export class RequestsListComponent { export class RequestsListComponent {
constructor(private bottomSheet: MatBottomSheet) { } constructor(private bottomSheet: MatBottomSheet, private lidarrService: LidarrService) { }
public readonly musicEnabled$ = this.lidarrService.enabled().pipe(take(1));
public onOpenOptions(event: { request: any, filter: any, onChange: any, manageOwnRequests: boolean, isAdmin: boolean, has4kRequest: boolean, hasRegularRequest: boolean }) { public onOpenOptions(event: { request: any, filter: any, onChange: any, manageOwnRequests: boolean, isAdmin: boolean, has4kRequest: boolean, hasRegularRequest: boolean }) {
const ref = this.bottomSheet.open(RequestOptionsComponent, { data: { id: event.request.id, type: event.request.requestType, canApprove: event.request.canApprove, manageOwnRequests: event.manageOwnRequests, isAdmin: event.isAdmin, has4kRequest: event.has4kRequest, hasRegularRequest: event.hasRegularRequest } }); const ref = this.bottomSheet.open(RequestOptionsComponent, { data: { id: event.request.id, type: event.request.requestType, canApprove: event.request.canApprove, manageOwnRequests: event.manageOwnRequests, isAdmin: event.isAdmin, has4kRequest: event.has4kRequest, hasRegularRequest: event.hasRegularRequest } });

@ -13,9 +13,14 @@ export class LidarrService extends ServiceHelpers {
super(http, "/api/v1/Lidarr", href); super(http, "/api/v1/Lidarr", href);
} }
public enabled(): Observable<boolean> {
return this.http.get<boolean>(`${this.url}/enabled/`, {headers: this.headers});
}
public getRootFolders(settings: ILidarrSettings): Observable<ILidarrRootFolder[]> { public getRootFolders(settings: ILidarrSettings): Observable<ILidarrRootFolder[]> {
return this.http.post<ILidarrRootFolder[]>(`${this.url}/RootFolders/`, JSON.stringify(settings), {headers: this.headers}); return this.http.post<ILidarrRootFolder[]>(`${this.url}/RootFolders/`, JSON.stringify(settings), {headers: this.headers});
} }
public getQualityProfiles(settings: ILidarrSettings): Observable<ILidarrProfile[]> { public getQualityProfiles(settings: ILidarrSettings): Observable<ILidarrProfile[]> {
return this.http.post<ILidarrProfile[]>(`${this.url}/Profiles/`, JSON.stringify(settings), {headers: this.headers}); return this.http.post<ILidarrProfile[]>(`${this.url}/Profiles/`, JSON.stringify(settings), {headers: this.headers});
} }

@ -38,7 +38,7 @@ export class AdvancedSearchDialogDataService {
getOptions(): any { getOptions(): any {
return this._options; return this._options;
} }
getLoaded(): number { getLoaded(): number {
return this._options.loaded; return this._options.loaded;
} }

@ -11,7 +11,6 @@ using Ombi.Settings.Settings.Models.External;
namespace Ombi.Controllers.V1.External namespace Ombi.Controllers.V1.External
{ {
[PowerUser]
[ApiV1] [ApiV1]
[Produces("application/json")] [Produces("application/json")]
public class LidarrController : Controller public class LidarrController : Controller
@ -28,11 +27,19 @@ namespace Ombi.Controllers.V1.External
private readonly ISettingsService<LidarrSettings> _lidarrSettings; private readonly ISettingsService<LidarrSettings> _lidarrSettings;
private ICacheService Cache { get; } private ICacheService Cache { get; }
[HttpGet("enabled")]
public async Task<bool> Enabled()
{
var settings = await _lidarrSettings.GetSettingsAsync();
return settings.Enabled;
}
/// <summary> /// <summary>
/// Gets the Lidarr profiles. /// Gets the Lidarr profiles.
/// </summary> /// </summary>
/// <param name="settings">The settings.</param> /// <param name="settings">The settings.</param>
/// <returns></returns> /// <returns></returns>
[PowerUser]
[HttpPost("Profiles")] [HttpPost("Profiles")]
public async Task<IEnumerable<LidarrProfile>> GetProfiles([FromBody] LidarrSettings settings) public async Task<IEnumerable<LidarrProfile>> GetProfiles([FromBody] LidarrSettings settings)
{ {
@ -44,6 +51,7 @@ namespace Ombi.Controllers.V1.External
/// </summary> /// </summary>
/// <param name="settings">The settings.</param> /// <param name="settings">The settings.</param>
/// <returns></returns> /// <returns></returns>
[PowerUser]
[HttpPost("RootFolders")] [HttpPost("RootFolders")]
public async Task<IEnumerable<LidarrRootFolder>> GetRootFolders([FromBody] LidarrSettings settings) public async Task<IEnumerable<LidarrRootFolder>> GetRootFolders([FromBody] LidarrSettings settings)
{ {
@ -55,6 +63,7 @@ namespace Ombi.Controllers.V1.External
/// </summary> /// </summary>
/// <param name="settings">The settings.</param> /// <param name="settings">The settings.</param>
/// <returns></returns> /// <returns></returns>
[PowerUser]
[HttpPost("Metadata")] [HttpPost("Metadata")]
public async Task<IEnumerable<MetadataProfile>> GetMetadataProfiles([FromBody] LidarrSettings settings) public async Task<IEnumerable<MetadataProfile>> GetMetadataProfiles([FromBody] LidarrSettings settings)
{ {
@ -66,6 +75,7 @@ namespace Ombi.Controllers.V1.External
/// <remarks>The data is cached for an hour</remarks> /// <remarks>The data is cached for an hour</remarks>
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[PowerUser]
[HttpGet("Profiles")] [HttpGet("Profiles")]
public async Task<IEnumerable<LidarrProfile>> GetProfiles() public async Task<IEnumerable<LidarrProfile>> GetProfiles()
{ {
@ -85,6 +95,7 @@ namespace Ombi.Controllers.V1.External
/// <remarks>The data is cached for an hour</remarks> /// <remarks>The data is cached for an hour</remarks>
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[PowerUser]
[HttpGet("RootFolders")] [HttpGet("RootFolders")]
public async Task<IEnumerable<LidarrRootFolder>> GetRootFolders() public async Task<IEnumerable<LidarrRootFolder>> GetRootFolders()
{ {

Loading…
Cancel
Save