Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        /// <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;
            }
        }
Esempio n. 3
0
 public AuditRepository(OmbiContext ctx)
 {
     Ctx = ctx;
 }
Esempio n. 4
0
 public Repository(OmbiContext ctx) : base(ctx)
 {
 }
Esempio n. 5
0
        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;
        }
Esempio n. 6
0
 public MovieRequestRepository(OmbiContext ctx) : base(ctx)
 {
     Db = ctx;
 }
 public NotificationTemplatesRepository(OmbiContext ctx)
 {
     Db = ctx;
 }