Ejemplo n.º 1
0
        public async Task <GenerateDataResult> ExecuteAsync(GenerateDataContext context, CancellationToken token = default)
        {
            Console.WriteLine("Uploading movie images");
            var uploadTasks = new List <Task <TaskResult <string> > >();

            using var realm = await _realmFactory.GetDefaultSyncedRealmAsync();

            foreach (MovieImport movieImport in context.MovieImports)
            {
                var movie = realm.Find <Movie>(context.Movies[movieImport]);
                uploadTasks.AddRange(UploadMovieImage(movieImport, movie, context));
            }

            var taskResults = await Task.WhenAll(uploadTasks);

            var failedTasks = taskResults.Where(t => !t.IsSuccessful).ToArray();

            if (failedTasks.Any())
            {
                var exception = new AggregateException(failedTasks
                                                       .Select(taskResult => new Exception($"Upload movie image task {taskResult.TaskName} failed", taskResult.Error)));
                return(new GenerateDataResult("Something went wrong while uploading movie images", exception));
            }

            Console.WriteLine("Movie images were successfully uploaded");
            return(await Next.ExecuteAsync(context, token));
        }
Ejemplo n.º 2
0
        public async Task <GenerateDataResult> ExecuteAsync(GenerateDataContext context, CancellationToken token = default)
        {
            try
            {
                Console.WriteLine("Generating people");
                var people = context.MovieImports.Select(m => context.GetNonEmptyListFromCommaSeparatedValues(m.Cast))
                             .SelectMany(p => p)
                             .ToHashSet();
                using var realm = await _realmFactory.GetDefaultSyncedRealmAsync();

                await realm.WriteAsync(r =>
                {
                    foreach (string personName in people)
                    {
                        var person = r.All <Person>().FirstOrDefault(p => p.Name == personName)
                                     ?? r.Add(new Person
                        {
                            Id           = ObjectId.GenerateNewId(),
                            Name         = personName,
                            PartitionKey = context.PartitionKey
                        });

                        context.People[personName] = person.Id;
                    }
                });

                Console.WriteLine("People generated successfully");
            }
            catch (Exception ex)
            {
                return(new GenerateDataResult($"Something went wrong while generating people.", ex));
            }

            return(await Next.ExecuteAsync(context, token));
        }
Ejemplo n.º 3
0
        private async Task <TaskResult <bool> > UploadMovieTrailerAsync(GenerateDataContext context, ObjectId movieId, MovieImport movieImport)
        {
            Console.WriteLine($"Uploading movie trailer {movieId}");

            var mediaName = $"trailer-{movieId}";
            TaskResult <bool> taskResult = new()
            {
                TaskName = mediaName
            };

            if (await CheckIfTrailerAlreadyExistsAsync(movieId))
            {
                Console.WriteLine($"Movie trailer for {movieId} has already been uploaded");
                taskResult.IsSuccessful = true;
                return(taskResult);
            }

            try
            {
                var trailFilePath = Path.Combine(context.ImportRootDir, "Trailers", movieImport.TrailerFileName);
                var streamingUrls = await _mediaService.EncodeVideoForStreaming(trailFilePath, mediaName);

                using var realm = await _realmFactory.GetDefaultSyncedRealmAsync();

                await realm.WriteAsync(r =>
                {
                    var movie          = r.Find <Movie>(movieId);
                    movie.StreamingUrl = streamingUrls.First(url => url.Contains("m3u8-aapl"));
                });

                taskResult.IsSuccessful = true;
                taskResult.Result       = true;
                Console.WriteLine($"Successfully uploaded movie trailer for {movieId}");
            }
            catch (Exception ex)
            {
                taskResult.IsSuccessful = false;
                taskResult.Error        = ex;
            }

            return(taskResult);
        }
Ejemplo n.º 4
0
        public async Task <GenerateDataResult> ExecuteAsync(GenerateDataContext context, CancellationToken token = default)
        {
            try
            {
                Console.WriteLine("Refreshing realm");

                using var realm = await _realmFactory.GetDefaultSyncedRealmAsync();

                await realm.RefreshAsync();

                Console.WriteLine("Realm successfully refreshed");
            }
            catch (Exception ex)
            {
                return(new GenerateDataResult($"Something went wrong while refreshing realm.", ex));
            }

            return(IsTerminal ? new GenerateDataResult(true) : await Next.ExecuteAsync(context, token));
        }
Ejemplo n.º 5
0
        public async Task <GenerateDataResult> ExecuteAsync(GenerateDataContext context, CancellationToken token = default)
        {
            try
            {
                Console.WriteLine("Generating genres");
                using var realm = await _realmFactory.GetDefaultSyncedRealmAsync();

                var genres = context.MovieImports.Select(m => context.GetNonEmptyListFromCommaSeparatedValues(m.Genres))
                             .SelectMany(g => g)
                             .ToHashSet();
                await realm.WriteAsync(r =>
                {
                    foreach (string genreName in genres)
                    {
                        var genre = r.All <Genre>().FirstOrDefault(g => g.Name == genreName);
                        if (genre == null)
                        {
                            genre = r.Add(new Genre
                            {
                                Id           = ObjectId.GenerateNewId(),
                                Name         = genreName,
                                PartitionKey = context.PartitionKey
                            });
                        }

                        context.Genres[genreName] = genre.Id;
                    }
                });

                Console.WriteLine("Genres generated successfully");
            }
            catch (Exception ex)
            {
                return(new GenerateDataResult($"Something went wrong while generating genres.", ex));
            }

            return(await Next.ExecuteAsync(context, token));
        }
Ejemplo n.º 6
0
        public async Task <GenerateDataResult> ExecuteAsync(GenerateDataContext context, CancellationToken token = default)
        {
            using var realm = await _realmFactory.GetDefaultSyncedRealmAsync();

            var dashboard = await GetDashboardAsync(realm, context);

            var billboardMovie = realm.All <Movie>().First(m => m.Name == "The Midnight Sky");

            await realm.WriteAsync(r =>
            {
                dashboard.BillboardMovie = billboardMovie;
                foreach (var category in r.All <Category>())
                {
                    if (!dashboard.Categories.Contains(category))
                    {
                        dashboard.Categories.Add(category);
                    }
                }
            });


            return(await Next.ExecuteAsync(context, token));
        }
Ejemplo n.º 7
0
        public async Task <GenerateDataResult> ExecuteAsync(GenerateDataContext context, CancellationToken token = default)
        {
            try
            {
                Console.WriteLine("Generating movies");
                using var realm = await _realmFactory.GetDefaultSyncedRealmAsync();

                foreach (MovieImport movieImport in context.MovieImports)
                {
                    Movie?createdMovie = null;
                    await realm.WriteAsync(r =>
                    {
                        var movie = r.All <Movie>().FirstOrDefault(m => m.Name == movieImport.Name &&
                                                                   m.Year == movieImport.Year &&
                                                                   m.DurationInSeconds == movieImport.DurationInMinutes * 60);
                        if (movie == null)
                        {
                            movie = r.Add(new Movie
                            {
                                Id                = ObjectId.GenerateNewId(),
                                Name              = movieImport.Name,
                                Synopsis          = movieImport.Synopsis,
                                Year              = movieImport.Year,
                                DurationInSeconds = movieImport.DurationInMinutes * 60,
                                MaturityRating    = movieImport.MaturityRating,
                                PartitionKey      = context.PartitionKey
                            });
                        }

                        foreach (var categoryName in context.GetNonEmptyListFromCommaSeparatedValues(movieImport.Categories))
                        {
                            Category category = realm.Find <Category>(context.Categories[categoryName]);
                            if (!category.Movies.Contains(movie))
                            {
                                category.Movies.Add(movie);
                            }
                        }

                        foreach (var actorName in context.GetNonEmptyListFromCommaSeparatedValues(movieImport.Cast))
                        {
                            var actor = realm.Find <Person>(context.People[actorName]);
                            if (!movie.Cast.Contains(actor))
                            {
                                movie.Cast.Add(actor);
                            }
                        }

                        foreach (var genreName in context.GetNonEmptyListFromCommaSeparatedValues(movieImport.Genres))
                        {
                            Genre genre = realm.Find <Genre>(context.Genres[genreName]);
                            if (!movie.Genres.Contains(genre))
                            {
                                movie.Genres.Add(genre);
                            }
                        }

                        createdMovie = movie;
                    });

                    context.Movies[movieImport] = createdMovie !.Id;
                }

                Console.WriteLine("Movies generated successfully");
            }
            catch (Exception ex)
            {
                return(new GenerateDataResult("Something went wrong while generating movies.", ex));
            }

            return(await Next.ExecuteAsync(context, token));
        }