Merge branch 'develop' of https://github.com/tidusjar/ombi into develop

pull/2922/head
tidusjar 5 years ago
commit 13a73020e5

@ -158,7 +158,7 @@ namespace Ombi.Core.Authentication
if (!email.Equals(result.User?.Email)) if (!email.Equals(result.User?.Email))
{ {
user.Email = result.User?.Email; user.Email = result.User?.Email;
await UpdateAsync(user); await GlobalMutex.Lock(async () => await UpdateAsync(user));
} }
return true; return true;

@ -31,14 +31,13 @@ namespace Ombi.Core.Engine
{ {
public TvRequestEngine(ITvMazeApi tvApi, IMovieDbApi movApi, IRequestServiceMain requestService, IPrincipal user, public TvRequestEngine(ITvMazeApi tvApi, IMovieDbApi movApi, IRequestServiceMain requestService, IPrincipal user,
INotificationHelper helper, IRuleEvaluator rule, OmbiUserManager manager, INotificationHelper helper, IRuleEvaluator rule, OmbiUserManager manager,
ITvSender sender, IAuditRepository audit, IRepository<RequestLog> rl, ISettingsService<OmbiSettings> settings, ICacheService cache, ITvSender sender, IRepository<RequestLog> rl, ISettingsService<OmbiSettings> settings, ICacheService cache,
IRepository<RequestSubscription> sub) : base(user, requestService, rule, manager, cache, settings, sub) IRepository<RequestSubscription> sub) : base(user, requestService, rule, manager, cache, settings, sub)
{ {
TvApi = tvApi; TvApi = tvApi;
MovieDbApi = movApi; MovieDbApi = movApi;
NotificationHelper = helper; NotificationHelper = helper;
TvSender = sender; TvSender = sender;
Audit = audit;
_requestLog = rl; _requestLog = rl;
} }
@ -46,7 +45,6 @@ namespace Ombi.Core.Engine
private ITvMazeApi TvApi { get; } private ITvMazeApi TvApi { get; }
private IMovieDbApi MovieDbApi { get; } private IMovieDbApi MovieDbApi { get; }
private ITvSender TvSender { get; } private ITvSender TvSender { get; }
private IAuditRepository Audit { get; }
private readonly IRepository<RequestLog> _requestLog; private readonly IRepository<RequestLog> _requestLog;
public async Task<RequestEngineResult> RequestTvShow(TvRequestViewModel tv) public async Task<RequestEngineResult> RequestTvShow(TvRequestViewModel tv)
@ -84,8 +82,6 @@ namespace Ombi.Core.Engine
} }
} }
await Audit.Record(AuditType.Added, AuditArea.TvRequest, $"Added Request {tvBuilder.ChildRequest.Title}", Username);
var existingRequest = await TvRepository.Get().FirstOrDefaultAsync(x => x.TvDbId == tv.TvDbId); var existingRequest = await TvRepository.Get().FirstOrDefaultAsync(x => x.TvDbId == tv.TvDbId);
if (existingRequest != null) if (existingRequest != null)
{ {
@ -351,7 +347,6 @@ namespace Ombi.Core.Engine
public async Task<TvRequests> UpdateTvRequest(TvRequests request) public async Task<TvRequests> UpdateTvRequest(TvRequests request)
{ {
await Audit.Record(AuditType.Updated, AuditArea.TvRequest, $"Updated Request {request.Title}", Username);
var allRequests = TvRepository.Get(); var allRequests = TvRepository.Get();
var results = await allRequests.FirstOrDefaultAsync(x => x.Id == request.Id); var results = await allRequests.FirstOrDefaultAsync(x => x.Id == request.Id);
@ -394,7 +389,6 @@ namespace Ombi.Core.Engine
if (request.Approved) if (request.Approved)
{ {
NotificationHelper.Notify(request, NotificationType.RequestApproved); NotificationHelper.Notify(request, NotificationType.RequestApproved);
await Audit.Record(AuditType.Approved, AuditArea.TvRequest, $"Approved Request {request.Title}", Username);
// Autosend // Autosend
await TvSender.Send(request); await TvSender.Send(request);
} }
@ -426,9 +420,7 @@ namespace Ombi.Core.Engine
public async Task<ChildRequests> UpdateChildRequest(ChildRequests request) public async Task<ChildRequests> UpdateChildRequest(ChildRequests request)
{ {
await Audit.Record(AuditType.Updated, AuditArea.TvRequest, $"Updated Request {request.Title}", Username); await TvRepository.UpdateChild(request);
await TvRepository.UpdateChild(request);
return request; return request;
} }
@ -446,16 +438,14 @@ namespace Ombi.Core.Engine
// Delete the parent // Delete the parent
TvRepository.Db.TvRequests.Remove(parent); TvRepository.Db.TvRequests.Remove(parent);
} }
await Audit.Record(AuditType.Deleted, AuditArea.TvRequest, $"Deleting Request {request.Title}", Username);
await TvRepository.Db.SaveChangesAsync(); await TvRepository.Db.SaveChangesAsync();
} }
public async Task RemoveTvRequest(int requestId) public async Task RemoveTvRequest(int requestId)
{ {
var request = await TvRepository.Get().FirstOrDefaultAsync(x => x.Id == requestId); var request = await TvRepository.Get().FirstOrDefaultAsync(x => x.Id == requestId);
await Audit.Record(AuditType.Deleted, AuditArea.TvRequest, $"Deleting Request {request.Title}", Username); await TvRepository.Delete(request);
await TvRepository.Delete(request);
} }
public async Task<bool> UserHasRequest(string userId) public async Task<bool> UserHasRequest(string userId)

@ -134,28 +134,28 @@ namespace Ombi.DependencyInjection
} }
public static void RegisterStore(this IServiceCollection services) { public static void RegisterStore(this IServiceCollection services) {
services.AddEntityFrameworkSqlite().AddDbContext<OmbiContext>(); services.AddDbContext<OmbiContext>();
services.AddEntityFrameworkSqlite().AddDbContext<SettingsContext>(); services.AddDbContext<SettingsContext>();
services.AddEntityFrameworkSqlite().AddDbContext<ExternalContext>(); services.AddDbContext<ExternalContext>();
services.AddScoped<IOmbiContext, OmbiContext>(); // https://docs.microsoft.com/en-us/aspnet/core/data/entity-framework-6 services.AddScoped<IOmbiContext, OmbiContext>(); // https://docs.microsoft.com/en-us/aspnet/core/data/entity-framework-6
services.AddScoped<ISettingsContext, SettingsContext>(); // https://docs.microsoft.com/en-us/aspnet/core/data/entity-framework-6 services.AddScoped<ISettingsContext, SettingsContext>(); // https://docs.microsoft.com/en-us/aspnet/core/data/entity-framework-6
services.AddScoped<IExternalContext, ExternalContext>(); // https://docs.microsoft.com/en-us/aspnet/core/data/entity-framework-6 services.AddScoped<IExternalContext, ExternalContext>(); // https://docs.microsoft.com/en-us/aspnet/core/data/entity-framework-6
services.AddTransient<ISettingsRepository, SettingsJsonRepository>(); services.AddScoped<ISettingsRepository, SettingsJsonRepository>();
services.AddTransient<ISettingsResolver, SettingsResolver>(); services.AddScoped<ISettingsResolver, SettingsResolver>();
services.AddTransient<IPlexContentRepository, PlexServerContentRepository>(); services.AddScoped<IPlexContentRepository, PlexServerContentRepository>();
services.AddTransient<IEmbyContentRepository, EmbyContentRepository>(); services.AddScoped<IEmbyContentRepository, EmbyContentRepository>();
services.AddTransient<INotificationTemplatesRepository, NotificationTemplatesRepository>(); services.AddScoped<INotificationTemplatesRepository, NotificationTemplatesRepository>();
services.AddTransient<ITvRequestRepository, TvRequestRepository>(); services.AddScoped<ITvRequestRepository, TvRequestRepository>();
services.AddTransient<IMovieRequestRepository, MovieRequestRepository>(); services.AddScoped<IMovieRequestRepository, MovieRequestRepository>();
services.AddTransient<IMusicRequestRepository, MusicRequestRepository>(); services.AddScoped<IMusicRequestRepository, MusicRequestRepository>();
services.AddTransient<IAuditRepository, AuditRepository>(); services.AddScoped<IAuditRepository, AuditRepository>();
services.AddTransient<IApplicationConfigRepository, ApplicationConfigRepository>(); services.AddScoped<IApplicationConfigRepository, ApplicationConfigRepository>();
services.AddTransient<ITokenRepository, TokenRepository>(); services.AddScoped<ITokenRepository, TokenRepository>();
services.AddTransient(typeof(ISettingsService<>), typeof(SettingsService<>)); services.AddScoped(typeof(ISettingsService<>), typeof(SettingsService<>));
services.AddTransient(typeof(IRepository<>), typeof(Repository<>)); services.AddScoped(typeof(IRepository<>), typeof(Repository<>));
services.AddTransient(typeof(IExternalRepository<>), typeof(ExternalRepository<>)); services.AddScoped(typeof(IExternalRepository<>), typeof(ExternalRepository<>));
} }
public static void RegisterServices(this IServiceCollection services) public static void RegisterServices(this IServiceCollection services)
{ {
@ -163,7 +163,7 @@ namespace Ombi.DependencyInjection
services.AddTransient<INotificationService, NotificationService>(); services.AddTransient<INotificationService, NotificationService>();
services.AddTransient<IEmailProvider, GenericEmailProvider>(); services.AddTransient<IEmailProvider, GenericEmailProvider>();
services.AddTransient<INotificationHelper, NotificationHelper>(); services.AddTransient<INotificationHelper, NotificationHelper>();
services.AddTransient<ICacheService, CacheService>(); services.AddSingleton<ICacheService, CacheService>();
services.AddTransient<IDiscordNotification, DiscordNotification>(); services.AddTransient<IDiscordNotification, DiscordNotification>();
services.AddTransient<IEmailNotification, EmailNotification>(); services.AddTransient<IEmailNotification, EmailNotification>();

@ -81,7 +81,7 @@ namespace Ombi.Schedule
RecurringJob.AddOrUpdate(() => _embyUserImporter.Start(), JobSettingsHelper.UserImporter(s)); RecurringJob.AddOrUpdate(() => _embyUserImporter.Start(), JobSettingsHelper.UserImporter(s));
RecurringJob.AddOrUpdate(() => _plexUserImporter.Start(), JobSettingsHelper.UserImporter(s)); RecurringJob.AddOrUpdate(() => _plexUserImporter.Start(), JobSettingsHelper.UserImporter(s));
RecurringJob.AddOrUpdate(() => _newsletter.Start(), JobSettingsHelper.Newsletter(s)); RecurringJob.AddOrUpdate(() => _newsletter.Start(), JobSettingsHelper.Newsletter(s));
RecurringJob.AddOrUpdate(() => _resender.Start(), JobSettingsHelper.ResendFailedRequests(s)); // RecurringJob.AddOrUpdate(() => _resender.Start(), JobSettingsHelper.ResendFailedRequests(s));
RecurringJob.AddOrUpdate(() => _mediaDatabaseRefresh.Start(), JobSettingsHelper.MediaDatabaseRefresh(s)); RecurringJob.AddOrUpdate(() => _mediaDatabaseRefresh.Start(), JobSettingsHelper.MediaDatabaseRefresh(s));
} }

@ -17,6 +17,7 @@ namespace Ombi.Store.Context
{ {
if (_created) return; if (_created) return;
_created = true; _created = true;
Database.SetCommandTimeout(60); Database.SetCommandTimeout(60);
Database.Migrate(); Database.Migrate();

@ -81,7 +81,7 @@ namespace Ombi.Store.Repository
await _ctx.Database.ExecuteSqlCommandAsync(sql); await _ctx.Database.ExecuteSqlCommandAsync(sql);
} }
private async Task<int> InternalSaveChanges() protected async Task<int> InternalSaveChanges()
{ {
return await GlobalMutex.Lock(async () => await _ctx.SaveChangesAsync()); return await GlobalMutex.Lock(async () => await _ctx.SaveChangesAsync());
} }

@ -72,7 +72,7 @@ namespace Ombi.Store.Repository
public async Task Update(EmbyContent existingContent) public async Task Update(EmbyContent existingContent)
{ {
Db.EmbyContent.Update(existingContent); Db.EmbyContent.Update(existingContent);
await Db.SaveChangesAsync(); await InternalSaveChanges();
} }
public IQueryable<EmbyEpisode> GetAllEpisodes() public IQueryable<EmbyEpisode> GetAllEpisodes()
@ -83,7 +83,7 @@ namespace Ombi.Store.Repository
public async Task<EmbyEpisode> Add(EmbyEpisode content) public async Task<EmbyEpisode> Add(EmbyEpisode content)
{ {
await Db.EmbyEpisode.AddAsync(content); await Db.EmbyEpisode.AddAsync(content);
await Db.SaveChangesAsync(); await InternalSaveChanges();
return content; return content;
} }
public async Task<EmbyEpisode> GetEpisodeByEmbyId(string key) public async Task<EmbyEpisode> GetEpisodeByEmbyId(string key)
@ -94,12 +94,13 @@ namespace Ombi.Store.Repository
public async Task AddRange(IEnumerable<EmbyEpisode> content) public async Task AddRange(IEnumerable<EmbyEpisode> content)
{ {
Db.EmbyEpisode.AddRange(content); Db.EmbyEpisode.AddRange(content);
await Db.SaveChangesAsync(); await InternalSaveChanges();
} }
public void UpdateWithoutSave(EmbyContent existingContent) public void UpdateWithoutSave(EmbyContent existingContent)
{ {
Db.EmbyContent.Update(existingContent); Db.EmbyContent.Update(existingContent);
} }
} }
} }

@ -45,7 +45,7 @@ namespace Ombi.Store.Repository
Db.Attach(template); Db.Attach(template);
Db.Entry(template).State = EntityState.Modified; Db.Entry(template).State = EntityState.Modified;
} }
await Db.SaveChangesAsync(); await InternalSaveChanges();
} }
public async Task UpdateRange(IEnumerable<NotificationTemplates> templates) public async Task UpdateRange(IEnumerable<NotificationTemplates> templates)
@ -56,16 +56,21 @@ namespace Ombi.Store.Repository
Db.Attach(t); Db.Attach(t);
Db.Entry(t).State = EntityState.Modified; Db.Entry(t).State = EntityState.Modified;
} }
await Db.SaveChangesAsync(); await InternalSaveChanges();
} }
public async Task<NotificationTemplates> Insert(NotificationTemplates entity) public async Task<NotificationTemplates> Insert(NotificationTemplates entity)
{ {
var settings = await Db.NotificationTemplates.AddAsync(entity).ConfigureAwait(false); var settings = await Db.NotificationTemplates.AddAsync(entity).ConfigureAwait(false);
await Db.SaveChangesAsync().ConfigureAwait(false); await InternalSaveChanges().ConfigureAwait(false);
return settings.Entity; return settings.Entity;
} }
private async Task<int> InternalSaveChanges()
{
return await GlobalMutex.Lock(async () => await Db.SaveChangesAsync());
}
private bool _disposed; private bool _disposed;
// Protected implementation of Dispose pattern. // Protected implementation of Dispose pattern.
protected virtual void Dispose(bool disposing) protected virtual void Dispose(bool disposing)

@ -96,7 +96,7 @@ namespace Ombi.Store.Repository
public async Task Update(PlexServerContent existingContent) public async Task Update(PlexServerContent existingContent)
{ {
Db.PlexServerContent.Update(existingContent); Db.PlexServerContent.Update(existingContent);
await Db.SaveChangesAsync(); await InternalSaveChanges();
} }
public void UpdateWithoutSave(PlexServerContent existingContent) public void UpdateWithoutSave(PlexServerContent existingContent)
{ {
@ -106,7 +106,7 @@ namespace Ombi.Store.Repository
public async Task UpdateRange(IEnumerable<PlexServerContent> existingContent) public async Task UpdateRange(IEnumerable<PlexServerContent> existingContent)
{ {
Db.PlexServerContent.UpdateRange(existingContent); Db.PlexServerContent.UpdateRange(existingContent);
await Db.SaveChangesAsync(); await InternalSaveChanges();
} }
public IQueryable<PlexEpisode> GetAllEpisodes() public IQueryable<PlexEpisode> GetAllEpisodes()
@ -127,14 +127,14 @@ namespace Ombi.Store.Repository
public async Task<PlexEpisode> Add(PlexEpisode content) public async Task<PlexEpisode> Add(PlexEpisode content)
{ {
await Db.PlexEpisode.AddAsync(content); await Db.PlexEpisode.AddAsync(content);
await Db.SaveChangesAsync(); await InternalSaveChanges();
return content; return content;
} }
public async Task DeleteEpisode(PlexEpisode content) public async Task DeleteEpisode(PlexEpisode content)
{ {
Db.PlexEpisode.Remove(content); Db.PlexEpisode.Remove(content);
await Db.SaveChangesAsync(); await InternalSaveChanges();
} }
public async Task<PlexEpisode> GetEpisodeByKey(int key) public async Task<PlexEpisode> GetEpisodeByKey(int key)
@ -144,7 +144,7 @@ namespace Ombi.Store.Repository
public async Task AddRange(IEnumerable<PlexEpisode> content) public async Task AddRange(IEnumerable<PlexEpisode> content)
{ {
Db.PlexEpisode.AddRange(content); Db.PlexEpisode.AddRange(content);
await Db.SaveChangesAsync(); await InternalSaveChanges();
} }
} }
} }

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Ombi.Helpers;
using Ombi.Store.Context; using Ombi.Store.Context;
using Ombi.Store.Entities.Requests; using Ombi.Store.Entities.Requests;
@ -70,12 +71,17 @@ namespace Ombi.Store.Repository.Requests
Db.MovieRequests.Attach(request); Db.MovieRequests.Attach(request);
Db.Update(request); Db.Update(request);
} }
await Db.SaveChangesAsync(); await InternalSaveChanges();
} }
public async Task Save() public async Task Save()
{ {
await Db.SaveChangesAsync(); await InternalSaveChanges();
}
private async Task<int> InternalSaveChanges()
{
return await GlobalMutex.Lock(async () => await Db.SaveChangesAsync());
} }
} }
} }

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Ombi.Helpers;
using Ombi.Store.Context; using Ombi.Store.Context;
using Ombi.Store.Entities.Requests; using Ombi.Store.Entities.Requests;
@ -61,12 +62,16 @@ namespace Ombi.Store.Repository.Requests
Db.AlbumRequests.Attach(request); Db.AlbumRequests.Attach(request);
Db.Update(request); Db.Update(request);
} }
await Db.SaveChangesAsync(); await InternalSaveChanges();
} }
public async Task Save() public async Task Save()
{ {
await Db.SaveChangesAsync(); await InternalSaveChanges();
}
private async Task<int> InternalSaveChanges()
{
return await GlobalMutex.Lock(async () => await Db.SaveChangesAsync());
} }
} }
} }

@ -2,6 +2,7 @@
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Ombi.Helpers;
using Ombi.Store.Context; using Ombi.Store.Context;
using Ombi.Store.Entities.Requests; using Ombi.Store.Entities.Requests;
@ -101,20 +102,20 @@ namespace Ombi.Store.Repository.Requests
public async Task Save() public async Task Save()
{ {
await Db.SaveChangesAsync(); await InternalSaveChanges();
} }
public async Task<TvRequests> Add(TvRequests request) public async Task<TvRequests> Add(TvRequests request)
{ {
await Db.TvRequests.AddAsync(request); await Db.TvRequests.AddAsync(request);
await Db.SaveChangesAsync(); await InternalSaveChanges();
return request; return request;
} }
public async Task<ChildRequests> AddChild(ChildRequests request) public async Task<ChildRequests> AddChild(ChildRequests request)
{ {
await Db.ChildRequests.AddAsync(request); await Db.ChildRequests.AddAsync(request);
await Db.SaveChangesAsync(); await InternalSaveChanges();
return request; return request;
} }
@ -122,33 +123,38 @@ namespace Ombi.Store.Repository.Requests
public async Task Delete(TvRequests request) public async Task Delete(TvRequests request)
{ {
Db.TvRequests.Remove(request); Db.TvRequests.Remove(request);
await Db.SaveChangesAsync(); await InternalSaveChanges();
} }
public async Task DeleteChild(ChildRequests request) public async Task DeleteChild(ChildRequests request)
{ {
Db.ChildRequests.Remove(request); Db.ChildRequests.Remove(request);
await Db.SaveChangesAsync(); await InternalSaveChanges();
} }
public async Task DeleteChildRange(IEnumerable<ChildRequests> request) public async Task DeleteChildRange(IEnumerable<ChildRequests> request)
{ {
Db.ChildRequests.RemoveRange(request); Db.ChildRequests.RemoveRange(request);
await Db.SaveChangesAsync(); await InternalSaveChanges();
} }
public async Task Update(TvRequests request) public async Task Update(TvRequests request)
{ {
Db.Update(request); Db.Update(request);
await Db.SaveChangesAsync(); await InternalSaveChanges();
} }
public async Task UpdateChild(ChildRequests request) public async Task UpdateChild(ChildRequests request)
{ {
Db.Update(request); Db.Update(request);
await Db.SaveChangesAsync(); await InternalSaveChanges();
}
private async Task<int> InternalSaveChanges()
{
return await GlobalMutex.Lock(async () => await Db.SaveChangesAsync());
} }
} }
} }

@ -62,14 +62,14 @@ namespace Ombi.Store.Repository
{ {
//_cache.Remove(GetName(entity.SettingsName)); //_cache.Remove(GetName(entity.SettingsName));
Db.Settings.Remove(entity); Db.Settings.Remove(entity);
await Db.SaveChangesAsync(); await InternalSaveChanges();
} }
public async Task UpdateAsync(GlobalSettings entity) public async Task UpdateAsync(GlobalSettings entity)
{ {
//_cache.Remove(GetName(entity.SettingsName)); //_cache.Remove(GetName(entity.SettingsName));
Db.Update(entity); Db.Update(entity);
await Db.SaveChangesAsync(); await InternalSaveChanges();
} }
public void Delete(GlobalSettings entity) public void Delete(GlobalSettings entity)
@ -91,6 +91,11 @@ namespace Ombi.Store.Repository
return $"{entity}Json"; return $"{entity}Json";
} }
private async Task<int> InternalSaveChanges()
{
return await GlobalMutex.Lock(async () => await Db.SaveChangesAsync());
}
private bool _disposed; private bool _disposed;
protected virtual void Dispose(bool disposing) protected virtual void Dispose(bool disposing)
{ {

@ -4,6 +4,7 @@ using Ombi.Store.Entities;
using System; using System;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Ombi.Helpers;
namespace Ombi.Store.Repository namespace Ombi.Store.Repository
{ {
@ -19,12 +20,16 @@ namespace Ombi.Store.Repository
public async Task CreateToken(Tokens token) public async Task CreateToken(Tokens token)
{ {
await Db.Tokens.AddAsync(token); await Db.Tokens.AddAsync(token);
await Db.SaveChangesAsync(); await InternalSaveChanges();
} }
public IQueryable<Tokens> GetToken(string tokenId) public IQueryable<Tokens> GetToken(string tokenId)
{ {
return Db.Tokens.Where(x => x.Token == tokenId); return Db.Tokens.Where(x => x.Token == tokenId);
} }
private async Task<int> InternalSaveChanges()
{
return await GlobalMutex.Lock(async () => await Db.SaveChangesAsync());
}
} }
} }

@ -80,7 +80,7 @@
<i class="fa fa-check"></i> {{ 'Common.Available' | translate }}</button> <i class="fa fa-check"></i> {{ 'Common.Available' | translate }}</button>
</div> </div>
<div *ngIf="!result.fullyAvailable"> <div *ngIf="!result.fullyAvailable">
<div *ngIf="result.requested || result.approved; then requestedBtn else notRequestedBtn"></div> <div *ngIf="result.requested || result.approved || result.monitored; then requestedBtn else notRequestedBtn"></div>
<ng-template #requestedBtn> <ng-template #requestedBtn>
<button style="text-align: right" class="btn btn-primary-outline disabled" [disabled]> <button style="text-align: right" class="btn btn-primary-outline disabled" [disabled]>
<i class="fa fa-check"></i> {{ 'Common.Requested' | translate }}</button> <i class="fa fa-check"></i> {{ 'Common.Requested' | translate }}</button>

@ -56,9 +56,6 @@ namespace Ombi
// This method gets called by the runtime. Use this method to add services to the container. // This method gets called by the runtime. Use this method to add services to the container.
public IServiceProvider ConfigureServices(IServiceCollection services) public IServiceProvider ConfigureServices(IServiceCollection services)
{ {
// Add framework services.
services.AddDbContext<OmbiContext>();
services.AddIdentity<OmbiUser, IdentityRole>() services.AddIdentity<OmbiUser, IdentityRole>()
.AddEntityFrameworkStores<OmbiContext>() .AddEntityFrameworkStores<OmbiContext>()
.AddDefaultTokenProviders() .AddDefaultTokenProviders()

@ -1766,9 +1766,9 @@
} }
}, },
"bootstrap": { "bootstrap": {
"version": "3.4.0", "version": "3.4.1",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.4.0.tgz", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.4.1.tgz",
"integrity": "sha512-F1yTDO9OHKH0xjl03DsOe8Nu1OWBIeAugGMhy3UTIYDdbbIPesQIhCEbj+HEr6wqlwweGAlP8F3OBC6kEuhFuw==" "integrity": "sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA=="
}, },
"bootswatch": { "bootswatch": {
"version": "3.4.0", "version": "3.4.0",
@ -4190,8 +4190,7 @@
}, },
"ansi-regex": { "ansi-regex": {
"version": "2.1.1", "version": "2.1.1",
"bundled": true, "bundled": true
"optional": true
}, },
"aproba": { "aproba": {
"version": "1.2.0", "version": "1.2.0",
@ -4209,13 +4208,11 @@
}, },
"balanced-match": { "balanced-match": {
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true
"optional": true
}, },
"brace-expansion": { "brace-expansion": {
"version": "1.1.11", "version": "1.1.11",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"balanced-match": "^1.0.0", "balanced-match": "^1.0.0",
"concat-map": "0.0.1" "concat-map": "0.0.1"
@ -4228,18 +4225,15 @@
}, },
"code-point-at": { "code-point-at": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true
"optional": true
}, },
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
"bundled": true, "bundled": true
"optional": true
}, },
"console-control-strings": { "console-control-strings": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true
"optional": true
}, },
"core-util-is": { "core-util-is": {
"version": "1.0.2", "version": "1.0.2",
@ -4342,8 +4336,7 @@
}, },
"inherits": { "inherits": {
"version": "2.0.3", "version": "2.0.3",
"bundled": true, "bundled": true
"optional": true
}, },
"ini": { "ini": {
"version": "1.3.5", "version": "1.3.5",
@ -4353,7 +4346,6 @@
"is-fullwidth-code-point": { "is-fullwidth-code-point": {
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"number-is-nan": "^1.0.0" "number-is-nan": "^1.0.0"
} }
@ -4366,20 +4358,17 @@
"minimatch": { "minimatch": {
"version": "3.0.4", "version": "3.0.4",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"brace-expansion": "^1.1.7" "brace-expansion": "^1.1.7"
} }
}, },
"minimist": { "minimist": {
"version": "0.0.8", "version": "0.0.8",
"bundled": true, "bundled": true
"optional": true
}, },
"minipass": { "minipass": {
"version": "2.3.5", "version": "2.3.5",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"safe-buffer": "^5.1.2", "safe-buffer": "^5.1.2",
"yallist": "^3.0.0" "yallist": "^3.0.0"
@ -4396,7 +4385,6 @@
"mkdirp": { "mkdirp": {
"version": "0.5.1", "version": "0.5.1",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"minimist": "0.0.8" "minimist": "0.0.8"
} }
@ -4469,8 +4457,7 @@
}, },
"number-is-nan": { "number-is-nan": {
"version": "1.0.1", "version": "1.0.1",
"bundled": true, "bundled": true
"optional": true
}, },
"object-assign": { "object-assign": {
"version": "4.1.1", "version": "4.1.1",
@ -4480,7 +4467,6 @@
"once": { "once": {
"version": "1.4.0", "version": "1.4.0",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"wrappy": "1" "wrappy": "1"
} }
@ -4556,8 +4542,7 @@
}, },
"safe-buffer": { "safe-buffer": {
"version": "5.1.2", "version": "5.1.2",
"bundled": true, "bundled": true
"optional": true
}, },
"safer-buffer": { "safer-buffer": {
"version": "2.1.2", "version": "2.1.2",
@ -4587,7 +4572,6 @@
"string-width": { "string-width": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"code-point-at": "^1.0.0", "code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0", "is-fullwidth-code-point": "^1.0.0",
@ -4605,7 +4589,6 @@
"strip-ansi": { "strip-ansi": {
"version": "3.0.1", "version": "3.0.1",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"ansi-regex": "^2.0.0" "ansi-regex": "^2.0.0"
} }
@ -4644,13 +4627,11 @@
}, },
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true
"optional": true
}, },
"yallist": { "yallist": {
"version": "3.0.3", "version": "3.0.3",
"bundled": true, "bundled": true
"optional": true
} }
} }
}, },

Loading…
Cancel
Save