Esempio n. 1
0
        public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
        .UseSerilog()
        .ConfigureAppConfiguration(builder =>
        {
            builder.AddJsonFile("appsettings.json");
            builder.AddUserSecrets <Program>(optional: true);
            builder.AddJsonFile("appsettings.local.json", optional: true);
            builder.AddEnvironmentVariables();
        })
        .ConfigureServices((hostContext, services) =>
        {
            FileSystemDiscoveryOptions discoveryOptions = hostContext.Configuration
                                                          .GetSection("MagicMedia:Discovery")
                                                          .Get <FileSystemDiscoveryOptions>();

            services.AddSingleton(discoveryOptions);

            services
            .AddMagicMediaServer(hostContext.Configuration)
            .AddProcessingMediaServices()
            .AddBingMaps()
            .AddMongoDbStore()
            .AddFileSystemStore()
            .AddFileSystemDiscovery()
            .AddWorkerMessaging()
            .AddScheduler()
            .AddJobs();

            services.AddMassTransitHostedService();
            services.AddHostedService <JobWorker>();
        });
Esempio n. 2
0
        public async Task DiscoverAsync(
            FileSystemDiscoveryOptions options,
            CancellationToken cancellationToken)
        {
            var todo = new List <MediaDiscoveryIdentifier>();

            foreach (IMediaSourceDiscovery source in _discoveryFactory.GetSources())
            {
                IEnumerable <MediaDiscoveryIdentifier> identifiers = await source
                                                                     .DiscoverMediaAsync(options, cancellationToken);

                todo.AddRange(identifiers);
            }

            IMediaProcessorFlow flow = _flowFactory.CreateFlow("ImportImage");

            foreach (MediaDiscoveryIdentifier file in todo)
            {
                IMediaSourceDiscovery src = _discoveryFactory.GetSource(file.Source);

                byte[] data = await src.GetMediaDataAsync(file.Id, default);

                var context = new MediaProcessorContext
                {
                    OriginalData = data,
                    File         = file
                };
                try
                {
                    Console.WriteLine($"Importing: {file.Id}");
                    await flow.ExecuteAsync(context, default);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }


                //TODO: Move to Imported or delete
            }
        }
Esempio n. 3
0
        public async Task ScanExistingAsync(
            FileSystemDiscoveryOptions options,
            CancellationToken cancellationToken)
        {
            var todo = new List <MediaDiscoveryIdentifier>();

            foreach (IMediaSourceDiscovery source in _discoveryFactory.GetSources())
            {
                IEnumerable <MediaDiscoveryIdentifier> identifiers = await source
                                                                     .DiscoverMediaAsync(options, cancellationToken);

                todo.AddRange(identifiers);
            }

            IMediaProcessorFlow imageFlow = _flowFactory.CreateFlow("ImportImageNoFace");
            IMediaProcessorFlow videoFlow = _flowFactory.CreateFlow("ImportVideo");

            var processionOptions = new MediaProcessingOptions
            {
                SaveMedia = new SaveMediaFileOptions
                {
                    SaveMode     = SaveMediaMode.KeepInSource,
                    SourceAction = SaveMediaSourceAction.Keep
                }
            };


            foreach (MediaDiscoveryIdentifier file in todo)
            {
                IMediaSourceDiscovery src = _discoveryFactory.GetSource(file.Source);

                var extension = Path.GetExtension(file.Id);

                if (extension == ".mp4")
                {
                    var context = new MediaProcessorContext
                    {
                        File      = file,
                        Options   = processionOptions,
                        MediaType = MediaType.Video
                    };
                    try
                    {
                        Console.WriteLine($"Importing vide: {file.Id}");
                        await videoFlow.ExecuteAsync(context, default);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
                else
                {
                    byte[] data = await src.GetMediaDataAsync(file.Id, default);

                    var context = new MediaProcessorContext
                    {
                        OriginalData = data,
                        File         = file,
                        Options      = processionOptions,
                        MediaType    = MediaType.Image
                    };
                    try
                    {
                        Console.WriteLine($"Importing: {file.Id}");
                        await imageFlow.ExecuteAsync(context, default);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            }
        }