public static void Main(string[] args) { Console.Title = "Ombi"; var host = string.Empty; var storagePath = string.Empty; var result = Parser.Default.ParseArguments <Options>(args) .WithParsed(o => { host = o.Host; storagePath = o.StoragePath; }).WithNotParsed(err => { foreach (var e in err) { Console.WriteLine(e); } }); Console.WriteLine(HelpOutput(result)); UrlArgs = host; var urlValue = string.Empty; var instance = StoragePathSingleton.Instance; instance.StoragePath = storagePath ?? string.Empty; using (var ctx = new OmbiContext()) { var config = ctx.ApplicationConfigurations.ToList(); var url = config.FirstOrDefault(x => x.Type == ConfigurationTypes.Url); if (url == null) { url = new ApplicationConfiguration { Type = ConfigurationTypes.Url, Value = "http://*:5000" }; ctx.ApplicationConfigurations.Add(url); ctx.SaveChanges(); urlValue = url.Value; } if (!url.Value.Equals(host)) { url.Value = UrlArgs; ctx.SaveChanges(); urlValue = url.Value; } } Console.WriteLine($"We are running on {urlValue}"); BuildWebHost(args).Run(); }
/// <summary> /// This is to remove the Settings from the Ombi.db to the "new" /// OmbiSettings.db /// /// Ombi is hitting a limitation with SQLite where there is a lot of database activity /// and SQLite does not handle concurrency at all, causing db locks. /// /// Splitting it all out into it's own DB helps with this. /// </summary> private static void CheckAndMigrate() { var doneGlobal = false; var doneConfig = false; var ombi = new OmbiContext(); var settings = new SettingsContext(); try { if (ombi.Settings.Any() && !settings.Settings.Any()) { // OK migrate it! var allSettings = ombi.Settings.ToList(); settings.Settings.AddRange(allSettings); doneGlobal = true; } // Check for any application settings if (ombi.ApplicationConfigurations.Any() && !settings.ApplicationConfigurations.Any()) { // OK migrate it! var allSettings = ombi.ApplicationConfigurations.ToList(); settings.ApplicationConfigurations.AddRange(allSettings); doneConfig = true; } settings.SaveChanges(); } catch (Exception e) { Console.WriteLine(e); throw; } // Now delete the old stuff if (doneGlobal) { ombi.Database.ExecuteSqlCommand("DELETE FROM GlobalSettings"); } if (doneConfig) { ombi.Database.ExecuteSqlCommand("DELETE FROM ApplicationConfiguration"); } // Now migrate all the external stuff var external = new ExternalContext(); try { if (ombi.PlexEpisode.Any()) { external.PlexEpisode.AddRange(ombi.PlexEpisode.ToList()); ombi.Database.ExecuteSqlCommand("DELETE FROM PlexEpisode"); } if (ombi.PlexSeasonsContent.Any()) { external.PlexSeasonsContent.AddRange(ombi.PlexSeasonsContent.ToList()); ombi.Database.ExecuteSqlCommand("DELETE FROM PlexSeasonsContent"); } if (ombi.PlexServerContent.Any()) { external.PlexServerContent.AddRange(ombi.PlexServerContent.ToList()); ombi.Database.ExecuteSqlCommand("DELETE FROM PlexServerContent"); } if (ombi.EmbyEpisode.Any()) { external.EmbyEpisode.AddRange(ombi.EmbyEpisode.ToList()); ombi.Database.ExecuteSqlCommand("DELETE FROM EmbyEpisode"); } if (ombi.EmbyContent.Any()) { external.EmbyContent.AddRange(ombi.EmbyContent.ToList()); ombi.Database.ExecuteSqlCommand("DELETE FROM EmbyContent"); } if (ombi.RadarrCache.Any()) { external.RadarrCache.AddRange(ombi.RadarrCache.ToList()); ombi.Database.ExecuteSqlCommand("DELETE FROM RadarrCache"); } if (ombi.SonarrCache.Any()) { external.SonarrCache.AddRange(ombi.SonarrCache.ToList()); ombi.Database.ExecuteSqlCommand("DELETE FROM SonarrCache"); } if (ombi.LidarrAlbumCache.Any()) { external.LidarrAlbumCache.AddRange(ombi.LidarrAlbumCache.ToList()); ombi.Database.ExecuteSqlCommand("DELETE FROM LidarrAlbumCache"); } if (ombi.LidarrArtistCache.Any()) { external.LidarrArtistCache.AddRange(ombi.LidarrArtistCache.ToList()); ombi.Database.ExecuteSqlCommand("DELETE FROM LidarrArtistCache"); } if (ombi.SickRageEpisodeCache.Any()) { external.SickRageEpisodeCache.AddRange(ombi.SickRageEpisodeCache.ToList()); ombi.Database.ExecuteSqlCommand("DELETE FROM SickRageEpisodeCache"); } if (ombi.SickRageCache.Any()) { external.SickRageCache.AddRange(ombi.SickRageCache.ToList()); ombi.Database.ExecuteSqlCommand("DELETE FROM SickRageCache"); } if (ombi.CouchPotatoCache.Any()) { external.CouchPotatoCache.AddRange(ombi.CouchPotatoCache.ToList()); ombi.Database.ExecuteSqlCommand("DELETE FROM CouchPotatoCache"); } external.SaveChanges(); } catch (Exception e) { Console.WriteLine(e); throw; } }
public AuditRepository(OmbiContext ctx) { Ctx = ctx; }
public Repository(OmbiContext ctx) : base(ctx) { }
private static async Task MigrateOldTvDbIds(OmbiContext ctx, GlobalSettings ombiSettingsContent, SettingsContext settingsContext, Api.TheMovieDb.TheMovieDbApi api) { if (ombiSettingsContent == null) { return; } var ombiSettings = JsonConvert.DeserializeObject <OmbiSettings>(ombiSettingsContent.Content); if (ombiSettings.HasMigratedOldTvDbData) { return; } var tvRequests = ctx.TvRequests; Console.WriteLine($"Total Requests to migrate {await tvRequests.CountAsync()}"); foreach (var request in tvRequests) { var findResuilt = await api.Find(request.TvDbId.ToString(), ExternalSource.tvdb_id); var found = findResuilt.tv_results.FirstOrDefault(); if (found == null) { var seriesFound = findResuilt.tv_season_results.FirstOrDefault(); if (seriesFound == null) { Console.WriteLine($"Cannot find TheMovieDb Record for request {request.Title}"); continue; } request.ExternalProviderId = seriesFound.show_id; Console.WriteLine($"Cannot find TheMovieDb Record for request, found potential match Title: {request.Title}, Match: {seriesFound.show_id}"); } else { request.ExternalProviderId = found.id; } } Console.WriteLine($"Finished Migration"); var strat = ctx.Database.CreateExecutionStrategy(); await strat.ExecuteAsync(async() => { using (var tran = await ctx.Database.BeginTransactionAsync()) { ctx.TvRequests.UpdateRange(tvRequests); await ctx.SaveChangesAsync(); await tran.CommitAsync(); } }); var settingsStrat = settingsContext.Database.CreateExecutionStrategy(); await settingsStrat.ExecuteAsync(async() => { using (var tran = await settingsContext.Database.BeginTransactionAsync()) { ombiSettings.HasMigratedOldTvDbData = true; ombiSettingsContent.Content = JsonConvert.SerializeObject(ombiSettings); settingsContext.Update(ombiSettingsContent); await settingsContext.SaveChangesAsync(); await tran.CommitAsync(); } }); return; }
public MovieRequestRepository(OmbiContext ctx) : base(ctx) { Db = ctx; }
public NotificationTemplatesRepository(OmbiContext ctx) { Db = ctx; }