示例#1
0
        private async Task AddDiscCoverImage(DiscImageModel coverImage, Stream imageContent, CancellationToken cancellationToken)
        {
            await storageRepository.AddDiscImage(coverImage, imageContent, cancellationToken);

            await discsRepository.AddDiscImage(coverImage, cancellationToken);

            DiscLibrary.AddDiscImage(coverImage);
        }
示例#2
0
        public async Task DeleteDiscImage(DiscImageModel image, CancellationToken cancellationToken)
        {
            await using var context = contextFactory.CreateDbContext();

            var imageEntity = await context.DiscImages.FindAsync(new object[] { image.Id.ToInt32() }, cancellationToken);

            context.DiscImages.Remove(imageEntity);

            await context.SaveChangesAsync(cancellationToken);
        }
示例#3
0
        public async Task SetDiscCoverImage(DiscModel disc, DiscImageModel coverImage, Stream imageContent, CancellationToken cancellationToken)
        {
            if (disc.CoverImage != null)
            {
                await DeleteDiscCoverImage(disc.CoverImage, cancellationToken);
            }

            disc.AddImage(coverImage);
            await AddDiscCoverImage(coverImage, imageContent, cancellationToken);
        }
        public async Task SetDiscCoverImage_ForDiscWithExistingCoverImageOfAnotherType_SetsCoverImageCorrectly()
        {
            // Arrange

            var target = CreateTestTarget();

            var oldImageFilePath = Path.Combine(LibraryStorageRoot, "Belarusian", "Neuro Dubel", "2010 - Афтары правды (CD 1)", "cover.jpg");

            File.Exists(oldImageFilePath).Should().BeTrue();

            var disc = await GetDisc(ReferenceData.NormalDiscId);

            var discCoverImage = new DiscImageModel
            {
                TreeTitle = "cover.png",
                ImageType = DiscImageType.Cover,
            };

            // Act

            await using var imageContent = File.OpenRead("ContentForAdding/NewCover.png");
            await target.SetDiscCoverImage(disc, discCoverImage, imageContent, CancellationToken.None);

            // Assert

            var referenceData          = GetReferenceData();
            var expectedDiscCoverImage = new DiscImageModel
            {
                Id         = ReferenceData.DiscCoverImageId,
                TreeTitle  = "cover.png",
                ImageType  = DiscImageType.Cover,
                Size       = 184257,
                Checksum   = 1738836760,
                ContentUri = "Belarusian/Neuro Dubel/2010 - Афтары правды (CD 1)/cover.png".ToContentUri(LibraryStorageRoot),
            };

            referenceData.NormalDisc.DeleteImage(referenceData.NormalDisc.CoverImage);
            referenceData.NormalDisc.AddImage(expectedDiscCoverImage);

            discCoverImage.Should().BeEquivalentTo(expectedDiscCoverImage, x => x.WithStrictOrdering().IgnoringCyclicReferences());

            var discFromRepository = await GetDisc(ReferenceData.NormalDiscId);

            discFromRepository.CoverImage.Should().BeEquivalentTo(expectedDiscCoverImage, x => x.WithStrictOrdering().IgnoringCyclicReferences());

            var imageFilePath = Path.Combine(LibraryStorageRoot, "Belarusian", "Neuro Dubel", "2010 - Афтары правды (CD 1)", "cover.png");
            var fileInfo      = new FileInfo(imageFilePath);

            fileInfo.Exists.Should().BeTrue();
            fileInfo.Length.Should().Be(184257);

            File.Exists(oldImageFilePath).Should().BeFalse();

            await CheckLibraryConsistency();
        }
 public static DiscImageEntity ToEntity(this DiscImageModel image)
 {
     return(new DiscImageEntity
     {
         Id = image.Id?.ToInt32() ?? default,
         DiscId = image.Disc.Id.ToInt32(),
         TreeTitle = image.TreeTitle,
         ImageType = ConvertImageType(image.ImageType),
         FileSize = image.Size,
         Checksum = (int)image.Checksum,
     });
示例#6
0
        public Task DeleteDiscImage(DiscImageModel image, CancellationToken cancellationToken)
        {
            var imagePath = storageOrganizer.GetDiscImagePath(image);

            fileStorage.DeleteFile(imagePath);

            var folderPath = GetFolderPath(imagePath);

            DeleteFolderIfEmpty(folderPath);

            return(Task.CompletedTask);
        }
示例#7
0
        private async Task DeleteDiscCoverImage(DiscImageModel coverImage, CancellationToken cancellationToken)
        {
            await storageRepository.DeleteDiscImage(coverImage, cancellationToken);

            await discsRepository.DeleteDiscImage(coverImage, cancellationToken);

            DiscLibrary.DeleteDiscImage(coverImage);

            var disc = coverImage.Disc;

            disc.DeleteImage(coverImage);
        }
示例#8
0
        public Task AddDiscImage(DiscImageModel image, Stream imageContent, CancellationToken cancellationToken)
        {
            var imagePath = storageOrganizer.GetDiscImagePath(image);

            fileStorage.SaveFile(imagePath, imageContent);

            var fullPath = fileStorage.GetFullPath(imagePath);

            image.Size     = CalculateFileSize(fullPath);
            image.Checksum = CalculateFileChecksum(fullPath);

            SetDiscImageUri(image);

            return(Task.CompletedTask);
        }
示例#9
0
        public async Task AddDiscImage(DiscImageModel image, CancellationToken cancellationToken)
        {
            await using var context = contextFactory.CreateDbContext();

            var discEntity = await context.Discs
                             .Include(x => x.Images)
                             .SingleAsync(d => d.Id == image.Disc.Id.ToInt32(), cancellationToken);

            var imageEntity = image.ToEntity();

            discEntity.Images.Add(imageEntity);

            await context.SaveChangesAsync(cancellationToken);

            image.Id = imageEntity.Id.ToItemId();
        }
示例#10
0
 public FilePath GetDiscImagePath(DiscImageModel image)
 {
     return(GetDiscPath(image.Disc)
            .Add(image.TreeTitle));
 }
示例#11
0
 public void DeleteDiscImage(DiscImageModel discImage)
 {
     // Doing nothing here since collection of disc images is not maintained.
 }
示例#12
0
        public void SetDiscImageUri(DiscImageModel discImage)
        {
            var imagePath = storageOrganizer.GetDiscImagePath(discImage);

            discImage.ContentUri = GetUriForPath(imagePath);
        }