Beispiel #1
0
        private static async Task <bool> ImportCategoryAsync
        (
            PluginsDatabaseContext db,
            IdeaPluginCategory category
        )
        {
            var dbCategory = await db.Categories.FirstOrDefaultAsync(c => c.Name == category.Name);

            if (dbCategory is null)
            {
                dbCategory = category.ToEntity();
                db.Categories.Add(dbCategory);
            }
            else
            {
                var newValues = category.ToEntity();
                newValues.ID = dbCategory.ID;

                var existingEntry = db.Entry(dbCategory);
                existingEntry.CurrentValues.SetValues(newValues);

                if (existingEntry.State == EntityState.Unchanged)
                {
                    return(false);
                }
            }

            return(true);
        }
Beispiel #2
0
        private static async Task <bool> ImportPluginReleaseAsync
        (
            PluginsDatabaseContext db,
            IdeaPlugin pluginRelease
        )
        {
            var dbPlugin = await db.Plugins.FirstOrDefaultAsync(p => p.PluginID == pluginRelease.ID);

            var dbRelease = dbPlugin.Releases.FirstOrDefault(r => r.Version == pluginRelease.Version);

            if (dbRelease is null)
            {
                dbRelease = pluginRelease.ToReleaseEntity(dbPlugin);
                dbPlugin.Releases.Add(dbRelease);
            }
            else
            {
                var newValues = pluginRelease.ToReleaseEntity(dbPlugin);
                newValues.ID = dbRelease.ID;

                var existingEntry = db.Entry(dbRelease);
                existingEntry.CurrentValues.SetValues(newValues);

                if (existingEntry.State == EntityState.Unchanged)
                {
                    return(false);
                }
            }

            return(true);
        }
Beispiel #3
0
        /// <summary>
        /// Configures the services of the application.
        /// </summary>
        /// <param name="services">The service container.</param>
        public void ConfigureServices(IServiceCollection services)
        {
            var content = new ApplicationContentService();

            services
            .AddMvc(o => o.EnableEndpointRouting = false)
            .SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
            .AddXmlSerializerFormatters();

            services.AddSingleton(content);

            services.AddDbContextPool <PluginsDatabaseContext>
            (
                options => PluginsDatabaseContext.ConfigureDefaultOptions(options).UseNpgsql(content.ConnectionString)
            );
        }
Beispiel #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Icon"/> class.
 /// </summary>
 /// <param name="database">The database.</param>
 public Icon(PluginsDatabaseContext database)
 {
     _database = database;
 }
Beispiel #5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Search"/> class.
 /// </summary>
 /// <param name="database">The database context.</param>
 public Search(PluginsDatabaseContext database)
 {
     _database = database;
 }
Beispiel #6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="List"/> class.
 /// </summary>
 /// <param name="database">The database context.</param>
 public List(PluginsDatabaseContext database)
 {
     _database = database;
 }
Beispiel #7
0
        private static async Task <int> Main(string[] args)
        {
            var parsingResult = Parser.Default.ParseArguments <ProgramOptions>(args);

            if (parsingResult is Parsed <ProgramOptions> success)
            {
                Options = success.Value;
            }
            else
            {
                return(1);
            }

            if (!Directory.Exists(Options.InputFolder))
            {
                Console.ForegroundColor = ConsoleColor.Red;
                await Console.Error.WriteLineAsync("Input directory not found.");

                return(1);
            }

            var repoFilePath = Path.Combine(Options.InputFolder, "plugins", "repository.xml");

            if (!File.Exists(repoFilePath))
            {
                Console.ForegroundColor = ConsoleColor.Red;
                await Console.Error.WriteLineAsync("No repository information found in the input folder.");

                return(1);
            }

            if (!File.Exists(Options.AuthenticationFile))
            {
                Console.ForegroundColor = ConsoleColor.Red;
                await Console.Error.WriteLineAsync("Authentication file not found.");

                return(1);
            }

            if (!Passfile.TryParse(File.ReadAllText(Options.AuthenticationFile), out var passfile))
            {
                Console.ForegroundColor = ConsoleColor.Red;
                await Console.Error.WriteLineAsync("Could not parse authentication file.");

                return(1);
            }

            var deserializer = new XmlSerializer(typeof(IdeaPluginRepository));

            IdeaPluginRepository repository;

            await using (var repoFile = File.OpenRead(repoFilePath))
            {
                repository = (IdeaPluginRepository)deserializer.Deserialize(repoFile);
            }

            await using (var services = new ServiceCollection()
                                        .AddDbContextPool <PluginsDatabaseContext>
                                        (
                             options => PluginsDatabaseContext
                             .ConfigureDefaultOptions(options)
                             .UseNpgsql(passfile.ConnectionString)
                                        )
                                        .BuildServiceProvider())
            {
                await ImportRepositoryAsync(services, repository);
            }

            return(0);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="PluginManager"/> class.
 /// </summary>
 /// <param name="database">The database context.</param>
 public PluginManager(PluginsDatabaseContext database)
 {
     _database = database;
 }