Пример #1
0
        public async Task <Album> AddItemsToAlbumAsync(
            AddItemToAlbumRequest request,
            CancellationToken cancellationToken)
        {
            Album?album;

            if (!request.AlbumId.HasValue)
            {
                album = await AddAsync(request.NewAlbumTitle !, cancellationToken);
            }
            else
            {
                album = await GetByIdAsync(request.AlbumId.Value, cancellationToken);
            }

            AddMediaIds(request, album);
            AddFolders(request, album);
            AddFilters(request, album);

            await _mediaStore.Albums.UpdateAsync(album, cancellationToken);

            await _bus.Publish(new ItemsAddedToAlbumMessage(album.Id));

            return(album);
        }
Пример #2
0
        private static void AddMediaIds(AddItemToAlbumRequest request, Album album)
        {
            if (request.MediaIds is { } ids&& ids.Any())
            {
                AlbumInclude?idInclude = album.Includes
                                         .FirstOrDefault(x => x.Type == AlbumIncludeType.Ids);

                if (idInclude == null)
                {
                    idInclude = new AlbumInclude()
                    {
                        Type = AlbumIncludeType.Ids
                    };
                    album.Includes.Add(idInclude);
                }
                var toAdd = new HashSet <Guid>(idInclude.MediaIds);

                foreach (Guid newId in ids)
                {
                    toAdd.Add(newId);
                }

                idInclude.MediaIds = toAdd;
            }
        }
Пример #3
0
        private void AddFilters(AddItemToAlbumRequest request, Album album)
        {
            if (request.Filters is { } filters&& filters.Any())
            {
                AlbumInclude?include = album.Includes
                                       .FirstOrDefault(x => x.Type == AlbumIncludeType.Query);

                if (include == null)
                {
                    include = new AlbumInclude()
                    {
                        Type = AlbumIncludeType.Query
                    };
                    album.Includes.Add(include);
                }

                include.Filters = filters;
            }
        }
Пример #4
0
        private static void AddFolders(AddItemToAlbumRequest request, Album album)
        {
            if (request.Folders is { } folders&& folders.Any())
            {
                AlbumInclude?folderInclude = album.Includes
                                             .FirstOrDefault(x => x.Type == AlbumIncludeType.Folder);

                if (folderInclude == null)
                {
                    folderInclude = new AlbumInclude()
                    {
                        Type = AlbumIncludeType.Folder
                    };
                    album.Includes.Add(folderInclude);
                }

                var toAdd = new HashSet <string>(folderInclude.Folders);
                toAdd.AddRange(folders);

                folderInclude.Folders = toAdd;
            }
        }