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>(); });
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 } }
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); } } } }