|
|
|
|
using System;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
|
|
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
|
using Ombi.Helpers;
|
|
|
|
|
using Ombi.Store.Entities;
|
|
|
|
|
using Ombi.Store.Entities.Requests;
|
|
|
|
|
|
|
|
|
|
namespace Ombi.Store.Context
|
|
|
|
|
{
|
|
|
|
|
public sealed class OmbiContext : IdentityDbContext<OmbiUser>, IOmbiContext
|
|
|
|
|
{
|
|
|
|
|
private static bool _created;
|
|
|
|
|
public OmbiContext()
|
|
|
|
|
{
|
|
|
|
|
if (_created) return;
|
|
|
|
|
|
|
|
|
|
_created = true;
|
|
|
|
|
Database.Migrate();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public DbSet<NotificationTemplates> NotificationTemplates { get; set; }
|
|
|
|
|
public DbSet<GlobalSettings> Settings { get; set; }
|
|
|
|
|
public DbSet<PlexServerContent> PlexServerContent { get; set; }
|
|
|
|
|
public DbSet<PlexEpisode> PlexEpisode { get; set; }
|
|
|
|
|
public DbSet<RadarrCache> RadarrCache { get; set; }
|
|
|
|
|
public DbSet<CouchPotatoCache> CouchPotatoCache { get; set; }
|
|
|
|
|
public DbSet<EmbyContent> EmbyContent { get; set; }
|
|
|
|
|
public DbSet<EmbyEpisode> EmbyEpisode { get; set; }
|
|
|
|
|
|
|
|
|
|
public DbSet<MovieRequests> MovieRequests { get; set; }
|
|
|
|
|
public DbSet<TvRequests> TvRequests { get; set; }
|
|
|
|
|
public DbSet<ChildRequests> ChildRequests { get; set; }
|
|
|
|
|
|
|
|
|
|
public DbSet<Issues> Issues { get; set; }
|
|
|
|
|
public DbSet<IssueCategory> IssueCategories { get; set; }
|
|
|
|
|
public DbSet<IssueComments> IssueComments { get; set; }
|
|
|
|
|
public DbSet<RequestLog> RequestLogs { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public DbSet<Audit> Audit { get; set; }
|
|
|
|
|
public DbSet<Tokens> Tokens { get; set; }
|
|
|
|
|
public DbSet<SonarrCache> SonarrCache { get; set; }
|
|
|
|
|
public DbSet<SonarrEpisodeCache> SonarrEpisodeCache { get; set; }
|
|
|
|
|
public DbSet<SickRageCache> SickRageCache { get; set; }
|
|
|
|
|
public DbSet<SickRageEpisodeCache> SickRageEpisodeCache { get; set; }
|
|
|
|
|
|
|
|
|
|
public DbSet<ApplicationConfiguration> ApplicationConfigurations { get; set; }
|
|
|
|
|
|
|
|
|
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
|
|
|
|
{
|
|
|
|
|
var i = StoragePathSingleton.Instance;
|
|
|
|
|
if (string.IsNullOrEmpty(i.StoragePath))
|
|
|
|
|
{
|
|
|
|
|
i.StoragePath = string.Empty;
|
|
|
|
|
}
|
|
|
|
|
optionsBuilder.UseSqlite($"Data Source={Path.Combine(i.StoragePath,"Ombi.db")}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override void OnModelCreating(ModelBuilder builder)
|
|
|
|
|
{
|
|
|
|
|
builder.Entity<PlexServerContent>().HasMany(x => x.Episodes)
|
|
|
|
|
.WithOne(x => x.Series)
|
|
|
|
|
.HasPrincipalKey(x => x.Key)
|
|
|
|
|
.HasForeignKey(x => x.GrandparentKey);
|
|
|
|
|
|
|
|
|
|
builder.Entity<EmbyEpisode>()
|
|
|
|
|
.HasOne(p => p.Series)
|
|
|
|
|
.WithMany(b => b.Episodes)
|
|
|
|
|
.HasPrincipalKey(x => x.EmbyId)
|
|
|
|
|
.HasForeignKey(p => p.ParentId);
|
|
|
|
|
|
|
|
|
|
base.OnModelCreating(builder);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void Seed()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
// Add the tokens
|
|
|
|
|
var fanArt = ApplicationConfigurations.FirstOrDefault(x => x.Type == ConfigurationTypes.FanartTv);
|
|
|
|
|
if (fanArt == null)
|
|
|
|
|
{
|
|
|
|
|
ApplicationConfigurations.Add(new ApplicationConfiguration
|
|
|
|
|
{
|
|
|
|
|
Type = ConfigurationTypes.FanartTv,
|
|
|
|
|
Value = "4b6d983efa54d8f45c68432521335f15"
|
|
|
|
|
});
|
|
|
|
|
SaveChanges();
|
|
|
|
|
}
|
|
|
|
|
var movieDb = ApplicationConfigurations.FirstOrDefault(x => x.Type == ConfigurationTypes.FanartTv);
|
|
|
|
|
if (movieDb == null)
|
|
|
|
|
{
|
|
|
|
|
ApplicationConfigurations.Add(new ApplicationConfiguration
|
|
|
|
|
{
|
|
|
|
|
Type = ConfigurationTypes.TheMovieDb,
|
|
|
|
|
Value = "b8eabaf5608b88d0298aa189dd90bf00"
|
|
|
|
|
});
|
|
|
|
|
SaveChanges();
|
|
|
|
|
}
|
|
|
|
|
var notification = ApplicationConfigurations.FirstOrDefault(x => x.Type == ConfigurationTypes.Notification);
|
|
|
|
|
if (notification == null)
|
|
|
|
|
{
|
|
|
|
|
ApplicationConfigurations.Add(new ApplicationConfiguration
|
|
|
|
|
{
|
|
|
|
|
Type = ConfigurationTypes.Notification,
|
|
|
|
|
Value = "4f0260c4-9c3d-41ab-8d68-27cb5a593f0e"
|
|
|
|
|
});
|
|
|
|
|
SaveChanges();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// VACUUM;
|
|
|
|
|
Database.ExecuteSqlCommand("VACUUM;");
|
|
|
|
|
|
|
|
|
|
//Check if templates exist
|
|
|
|
|
var templates = NotificationTemplates.ToList();
|
|
|
|
|
|
|
|
|
|
var allAgents = Enum.GetValues(typeof(NotificationAgent)).Cast<NotificationAgent>().ToList();
|
|
|
|
|
var allTypes = Enum.GetValues(typeof(NotificationType)).Cast<NotificationType>().ToList();
|
|
|
|
|
|
|
|
|
|
foreach (var agent in allAgents)
|
|
|
|
|
{
|
|
|
|
|
foreach (var notificationType in allTypes)
|
|
|
|
|
{
|
|
|
|
|
if (templates.Any(x => x.Agent == agent && x.NotificationType == notificationType))
|
|
|
|
|
{
|
|
|
|
|
// We already have this
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
NotificationTemplates notificationToAdd;
|
|
|
|
|
switch (notificationType)
|
|
|
|
|
{
|
|
|
|
|
case NotificationType.NewRequest:
|
|
|
|
|
notificationToAdd = new NotificationTemplates
|
|
|
|
|
{
|
|
|
|
|
NotificationType = notificationType,
|
|
|
|
|
Message = "Hello! The user '{RequestedUser}' has requested the {Type} '{Title}'! Please log in to approve this request. Request Date: {RequestedDate}",
|
|
|
|
|
Subject = "{ApplicationName}: New {Type} request for {Title}!",
|
|
|
|
|
Agent = agent,
|
|
|
|
|
Enabled = true,
|
|
|
|
|
};
|
|
|
|
|
break;
|
|
|
|
|
case NotificationType.Issue:
|
|
|
|
|
notificationToAdd = new NotificationTemplates
|
|
|
|
|
{
|
|
|
|
|
NotificationType = notificationType,
|
|
|
|
|
Message = "Hello! The user '{IssueUser}' has reported a new issue for the title {Title}! </br> {IssueCategory} - {IssueSubject} : {IssueDescription}",
|
|
|
|
|
Subject = "{ApplicationName}: New issue for {Title}!",
|
|
|
|
|
Agent = agent,
|
|
|
|
|
Enabled = true,
|
|
|
|
|
};
|
|
|
|
|
break;
|
|
|
|
|
case NotificationType.RequestAvailable:
|
|
|
|
|
notificationToAdd = new NotificationTemplates
|
|
|
|
|
{
|
|
|
|
|
NotificationType = notificationType,
|
|
|
|
|
Message = "Hello! You requested {Title} on {ApplicationName}! This is now available! :)",
|
|
|
|
|
Subject = "{ApplicationName}: {Title} is now available!",
|
|
|
|
|
Agent = agent,
|
|
|
|
|
Enabled = true,
|
|
|
|
|
};
|
|
|
|
|
break;
|
|
|
|
|
case NotificationType.RequestApproved:
|
|
|
|
|
notificationToAdd = new NotificationTemplates
|
|
|
|
|
{
|
|
|
|
|
NotificationType = notificationType,
|
|
|
|
|
Message = "Hello! Your request for {Title} has been approved!",
|
|
|
|
|
Subject = "{ApplicationName}: your request has been approved",
|
|
|
|
|
Agent = agent,
|
|
|
|
|
Enabled = true,
|
|
|
|
|
};
|
|
|
|
|
break;
|
|
|
|
|
case NotificationType.Test:
|
|
|
|
|
continue;
|
|
|
|
|
case NotificationType.RequestDeclined:
|
|
|
|
|
notificationToAdd = new NotificationTemplates
|
|
|
|
|
{
|
|
|
|
|
NotificationType = notificationType,
|
|
|
|
|
Message = "Hello! Your request for {Title} has been declined, Sorry!",
|
|
|
|
|
Subject = "{ApplicationName}: your request has been declined",
|
|
|
|
|
Agent = agent,
|
|
|
|
|
Enabled = true,
|
|
|
|
|
};
|
|
|
|
|
break;
|
|
|
|
|
case NotificationType.ItemAddedToFaultQueue:
|
|
|
|
|
continue;
|
|
|
|
|
case NotificationType.WelcomeEmail:
|
|
|
|
|
notificationToAdd = new NotificationTemplates
|
|
|
|
|
{
|
|
|
|
|
NotificationType = notificationType,
|
|
|
|
|
Message = "Hello! You have been invited to use {ApplicationName}! You can login here: {ApplicationUrl}",
|
|
|
|
|
Subject = "Invite to {ApplicationName}",
|
|
|
|
|
Agent = agent,
|
|
|
|
|
Enabled = true,
|
|
|
|
|
};
|
|
|
|
|
break;
|
|
|
|
|
case NotificationType.IssueResolved:
|
|
|
|
|
notificationToAdd = new NotificationTemplates
|
|
|
|
|
{
|
|
|
|
|
NotificationType = notificationType,
|
|
|
|
|
Message = "Hello {IssueUser} Your issue for {Title} has now been resolved.",
|
|
|
|
|
Subject = "{ApplicationName}: Issue has been resolved for {Title}!",
|
|
|
|
|
Agent = agent,
|
|
|
|
|
Enabled = true,
|
|
|
|
|
};
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case NotificationType.IssueComment:
|
|
|
|
|
notificationToAdd = new NotificationTemplates
|
|
|
|
|
{
|
|
|
|
|
NotificationType = notificationType,
|
|
|
|
|
Message = "Hello, There is a new comment on your issue {IssueSubject}, The comment is: {NewIssueComment}",
|
|
|
|
|
Subject = "{ApplicationName}: New comment on issue {IssueSubject}!",
|
|
|
|
|
Agent = agent,
|
|
|
|
|
Enabled = true,
|
|
|
|
|
};
|
|
|
|
|
break;
|
|
|
|
|
case NotificationType.AdminNote:
|
|
|
|
|
continue;
|
|
|
|
|
default:
|
|
|
|
|
throw new ArgumentOutOfRangeException();
|
|
|
|
|
}
|
|
|
|
|
NotificationTemplates.Add(notificationToAdd);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
SaveChanges();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|