This commit is contained in:
maartenheebink 2022-02-14 09:10:43 -08:00 committed by GitHub
commit a922106ea4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 172 additions and 118 deletions

View file

@ -51,7 +51,7 @@ namespace Ombi.Core.Tests.Engine.V2
[Ignore("Needs to be tested")]
public async Task Get_UnavailableRequests()
{
_movieRequestRepository.Setup(x => x.GetWithUser()).Returns(new List<MovieRequests>
_movieRequestRepository.Setup(x => x.GetWithUser(false)).Returns(new List<MovieRequests>
{
new MovieRequests
{

View file

@ -157,6 +157,7 @@ namespace Ombi.Core.Engine
var result = new HideResult
{
Hide = settings.HideRequestsUsers,
Anonimize = settings.AnonimizeRequests,
UserId = user.Id
};
return result;
@ -245,6 +246,7 @@ namespace Ombi.Core.Engine
public class HideResult
{
public bool Hide { get; set; }
public bool Anonimize { get; set; }
public string UserId { get; set; }
}
}

View file

@ -179,7 +179,7 @@ namespace Ombi.Core.Engine
{
allRequests =
MovieRepository
.GetWithUser(); //.Skip(position).Take(count).OrderByDescending(x => x.ReleaseDate).ToListAsync();
.GetWithUser(shouldHide.Anonimize); //.Skip(position).Take(count).OrderByDescending(x => x.ReleaseDate).ToListAsync();
}
switch (orderFilter.AvailabilityFilter)
@ -240,7 +240,7 @@ namespace Ombi.Core.Engine
{
allRequests =
MovieRepository
.GetWithUser();
.GetWithUser(shouldHide.Anonimize);
}
var prop = TypeDescriptor.GetProperties(typeof(MovieRequests)).Find(sortProperty, true);
@ -284,7 +284,7 @@ namespace Ombi.Core.Engine
{
allRequests =
MovieRepository
.GetWithUser();
.GetWithUser(shouldHide.Anonimize);
}
switch (status)
@ -346,7 +346,7 @@ namespace Ombi.Core.Engine
{
allRequests =
MovieRepository
.GetWithUser().Where(x => !x.Available && x.Approved);
.GetWithUser(shouldHide.Anonimize).Where(x => !x.Available && x.Approved);
}
var prop = TypeDescriptor.GetProperties(typeof(MovieRequests)).Find(sortProperty, true);
@ -428,7 +428,7 @@ namespace Ombi.Core.Engine
}
else
{
return await MovieRepository.GetWithUser().CountAsync();
return await MovieRepository.GetWithUser(shouldHide.Anonimize).CountAsync();
}
}
@ -446,7 +446,7 @@ namespace Ombi.Core.Engine
}
else
{
allRequests = await MovieRepository.GetWithUser().ToListAsync();
allRequests = await MovieRepository.GetWithUser(shouldHide.Anonimize).ToListAsync();
}
await CheckForSubscription(shouldHide, allRequests);
@ -456,7 +456,8 @@ namespace Ombi.Core.Engine
public async Task<MovieRequests> GetRequest(int requestId)
{
var request = await MovieRepository.GetWithUser().Where(x => x.Id == requestId).FirstOrDefaultAsync();
var shouldHide = await HideFromOtherUsers();
var request = await MovieRepository.GetWithUser(shouldHide.Anonimize).Where(x => x.Id == requestId).FirstOrDefaultAsync();
await CheckForSubscription(new HideResult(), new List<MovieRequests> { request });
return request;
@ -499,7 +500,7 @@ namespace Ombi.Core.Engine
}
else
{
allRequests = await MovieRepository.GetWithUser().ToListAsync();
allRequests = await MovieRepository.GetWithUser(shouldHide.Anonimize).ToListAsync();
}
var results = allRequests.Where(x => x.Title.Contains(search, CompareOptions.IgnoreCase)).ToList();
@ -630,7 +631,8 @@ namespace Ombi.Core.Engine
/// <returns></returns>
public async Task<MovieRequests> UpdateMovieRequest(MovieRequests request)
{
var allRequests = await MovieRepository.GetWithUser().ToListAsync();
var shouldHide = await HideFromOtherUsers();
var allRequests = await MovieRepository.GetWithUser(shouldHide.Anonimize).ToListAsync();
var results = allRequests.FirstOrDefault(x => x.Id == request.Id);
results.Approved = request.Approved;

View file

@ -369,7 +369,7 @@ namespace Ombi.Core.Engine
}
else
{
allRequests = await TvRepository.GetChild().ToListAsync();
allRequests = await TvRepository.GetChild(shouldHide.Anonimize).ToListAsync();
}
@ -424,7 +424,7 @@ namespace Ombi.Core.Engine
}
else
{
allRequests = await TvRepository.GetChild().ToListAsync();
allRequests = await TvRepository.GetChild(shouldHide.Anonimize).ToListAsync();
}

View file

@ -23,8 +23,9 @@ namespace Ombi.Core.Engine
public async Task<UserStatsSummary> GetSummary(SummaryRequest request)
{
// get all movie requests
var movies = _movieRequest.GetWithUser();
var movies = _movieRequest.GetWithUser(false);
var filteredMovies = movies.Where(x => x.RequestedDate >= request.From && x.RequestedDate <= request.To);
var tv = _tvRequest.GetLite();
var children = tv.SelectMany(x =>

View file

@ -145,7 +145,7 @@ namespace Ombi.Notifications
{
if (type == RequestType.Movie)
{
MovieRequest = await MovieRepository.GetWithUser().FirstOrDefaultAsync(x => x.Id == requestId);
MovieRequest = await MovieRepository.GetWithUser(false).FirstOrDefaultAsync(x => x.Id == requestId);
}
else if (type == RequestType.TvShow)
{

View file

@ -25,7 +25,7 @@ namespace Ombi.Schedule.Jobs.Ombi
_ombiSettings = ombiSettings;
_movieRequests = movieRequest;
_tvRequestRepository = tvRequestRepository;
_musicRequestRepository = _musicRequestRepository;
_musicRequestRepository = musicRequestRepository;
_logger = logger;
}

View file

@ -11,6 +11,7 @@ namespace Ombi.Settings.Settings.Models
public string ApiKey { get; set; }
public bool DoNotSendNotificationsForAutoApprove { get; set; }
public bool HideRequestsUsers { get; set; }
public bool AnonimizeRequests { get; set; }
public bool DisableHealthChecks { get; set; }
public string DefaultLanguageCode
{

View file

@ -11,7 +11,7 @@ namespace Ombi.Store.Repository.Requests
Task Update(MovieRequests request);
Task Save();
Task MarkAsAvailable(int id);
IQueryable<MovieRequests> GetWithUser();
IQueryable<MovieRequests> GetWithUser(bool anonimize = false);
IQueryable<MovieRequests> GetWithUser(string userId);
IQueryable<MovieRequests> GetAll(string userId);
}

View file

@ -19,7 +19,7 @@ namespace Ombi.Store.Repository.Requests
TvRequests GetRequest(int theMovieDbId);
Task Update(TvRequests request);
Task UpdateChild(ChildRequests request);
IQueryable<ChildRequests> GetChild();
IQueryable<ChildRequests> GetChild(bool anonimize = false);
IQueryable<ChildRequests> GetChild(string userId);
Task MarkEpisodeAsAvailable(int id);
Task MarkChildAsAvailable(int id);

View file

@ -36,7 +36,7 @@ namespace Ombi.Store.Repository.Requests
public IQueryable<MovieRequests> GetAll(string userId)
{
return GetWithUser().Where(x => x.RequestedUserId == userId);
return GetWithUser(false).Where(x => x.RequestedUserId == userId);
}
public MovieRequests GetRequest(int theMovieDbId)
@ -46,12 +46,18 @@ namespace Ombi.Store.Repository.Requests
.FirstOrDefault();
}
public IQueryable<MovieRequests> GetWithUser()
public IQueryable<MovieRequests> GetWithUser(bool anonimize = false)
{
if (!anonimize)
{
return Db.MovieRequests
.Include(x => x.RequestedUser)
.ThenInclude(x => x.NotificationUserIds)
.AsQueryable();
} else
{
return Db.MovieRequests.AsNoTracking().AsQueryable();
}
}
public async Task MarkAsAvailable(int id)

View file

@ -80,8 +80,9 @@ namespace Ombi.Store.Repository.Requests
.AsQueryable();
}
public IQueryable<ChildRequests> GetChild()
public IQueryable<ChildRequests> GetChild(bool anonimize = false)
{
if (!anonimize) {
return Db.ChildRequests
.Include(x => x.RequestedUser)
.Include(x => x.ParentRequest)
@ -89,6 +90,16 @@ namespace Ombi.Store.Repository.Requests
.ThenInclude(x => x.Episodes)
.AsQueryable();
}
else
{
return Db.ChildRequests
.AsNoTracking()
.Include(x => x.ParentRequest)
.Include(x => x.SeasonRequests)
.ThenInclude(x => x.Episodes)
.AsQueryable();
}
}
public IQueryable<ChildRequests> GetChild(string userId)
{

View file

@ -15,6 +15,7 @@ export interface IOmbiSettings extends ISettings {
apiKey: string;
doNotSendNotificationsForAutoApprove: boolean;
hideRequestsUsers: boolean;
anonimizeRequests: boolean;
defaultLanguageCode: string;
disableHealthChecks: boolean;
autoDeleteAvailableRequests: boolean;

View file

@ -32,6 +32,7 @@ export class MoviesGridComponent implements OnInit, AfterViewInit {
public currentFilter: RequestFilterType = RequestFilterType.All;
public selection = new SelectionModel<IMovieRequests>(true, []);
public userName: string;
public anonimized: boolean = true;
public RequestFilter = RequestFilterType;
@ -102,7 +103,18 @@ export class MoviesGridComponent implements OnInit, AfterViewInit {
// Flip flag to show that loading has finished.
this.isLoadingResults = false;
this.resultsLength = data.total;
if (data.collection.filter(x => x.requestedUserId != null).length > 0 &&
data.collection.filter(x => x.requestedUser != null).length > 0) {
this.anonimized = false;
}
if (this.anonimized) {
this.displayedColumns.forEach((element, index) => {
if (element === 'requestedUser.requestedBy')
{
this.displayedColumns.splice(index, 1);
}
});
}
return data.collection;
}),
catchError((err) => {

View file

@ -25,6 +25,7 @@ export class TvGridComponent implements OnInit, AfterViewInit {
public defaultSort: string = "requestedDate";
public defaultOrder: string = "desc";
public currentFilter: RequestFilterType = RequestFilterType.All;
public anonimized: boolean = true;
public RequestFilter = RequestFilterType;
public manageOwnRequests: boolean;
@ -90,6 +91,16 @@ export class TvGridComponent implements OnInit, AfterViewInit {
this.isLoadingResults = false;
this.resultsLength = data.total;
if (data.collection.filter(x => x.requestedUser != null).length > 0) {
this.anonimized = false;
}
if (this.anonimized) {
this.displayedColumns.forEach((element, index) => {
if (element == 'requestedBy') this.displayedColumns.splice(index, 1);
});
}
return data.collection;
}),
catchError((err) => {

View file

@ -1,12 +1,12 @@
<settings-menu></settings-menu>
<settings-menu></settings-menu>
<div class="small-middle-container">
<wiki></wiki>
<fieldset *ngIf="form">
<wiki></wiki>
<fieldset *ngIf="form">
<legend>Ombi Configuration</legend>
<form novalidate [formGroup]="form" (ngSubmit)="onSubmit(form)">
<div class="col-md-12 col-12 col-sm-12">
<div class="md-form-field">
<mat-form-field appearance="outline" >
<mat-form-field appearance="outline">
<mat-label>Base URL</mat-label>
<input matInput formControlName="baseUrl">
</mat-form-field>
@ -35,20 +35,26 @@
</div>
<div>
<mat-slide-toggle formControlName="doNotSendNotificationsForAutoApprove">
Do not send Notifications if a User has the Auto Approve permission</mat-slide-toggle>
Do not send Notifications if a User has the Auto Approve permission
</mat-slide-toggle>
</div>
<div>
<mat-slide-toggle formControlName="hideRequestsUsers">
Hide requests from other users
</mat-slide-toggle>
</div>
<div>
<mat-slide-toggle formControlName="anonimizeRequests">
Anonimize requests for other users
</mat-slide-toggle>
</div>
<div>
<mat-slide-toggle formControlName="autoDeleteAvailableRequests">
Auto Delete Available Requests
</mat-slide-toggle>
</div>
<div *ngIf="form.get('autoDeleteAvailableRequests').value">
<mat-form-field appearance="outline" >
<mat-form-field appearance="outline">
<mat-label>Delete After Days of Availbility</mat-label>
<input matInput formControlName="autoDeleteAfterDays">
</mat-form-field>
@ -81,5 +87,5 @@
</div>
</div>
</form>
</fieldset>
</fieldset>
</div>

View file

@ -1,4 +1,4 @@
import { Component, OnInit } from "@angular/core";
import { Component, OnInit } from "@angular/core";
import { FormBuilder, FormGroup } from "@angular/forms";
import { Branch, ILanguageRefine, IOmbiSettings } from "../../interfaces";
@ -29,6 +29,7 @@ export class OmbiComponent implements OnInit {
baseUrl: [x.baseUrl],
doNotSendNotificationsForAutoApprove: [x.doNotSendNotificationsForAutoApprove],
hideRequestsUsers: [x.hideRequestsUsers],
anonimizeRequests: [x.anonimizeRequests],
defaultLanguageCode: [x.defaultLanguageCode],
disableHealthChecks: [x.disableHealthChecks],
autoDeleteAvailableRequests: [x.autoDeleteAvailableRequests],