From e2b1a15fad93fa788c8f5623950a6b38a46aa0a1 Mon Sep 17 00:00:00 2001 From: Hamid Reza Mohammadi Date: Mon, 24 Jul 2023 15:32:32 +0330 Subject: [PATCH] #400 pdf book change cover image --- RMuseum/Controllers/PDFLibraryController.cs | 20 ++- RMuseum/RMuseum.csproj | 2 +- RMuseum/RMuseum.xml | 24 +++ RMuseum/Services/IPDFLibraryService.cs | 8 + .../PDFLibraryService-LocalPDF.cs | 4 +- .../Implementation/PDFLibraryService.cs | 150 +++++++++++------- 6 files changed, 151 insertions(+), 57 deletions(-) diff --git a/RMuseum/Controllers/PDFLibraryController.cs b/RMuseum/Controllers/PDFLibraryController.cs index 3950ec26..20d395cc 100644 --- a/RMuseum/Controllers/PDFLibraryController.cs +++ b/RMuseum/Controllers/PDFLibraryController.cs @@ -214,7 +214,25 @@ namespace RMuseum.Controllers return NotFound(); } - return Ok(); ; + return Ok(); + } + + /// + /// Copy PDF Book Cover Image From Page Thumbnail image + /// + /// + /// + /// + [HttpPut("{id}/cover/{pageId}")] + [Authorize(Policy = RMuseumSecurableItem.PDFLibraryEntityShortName + ":" + SecurableItem.ModifyOperationShortName)] + [ProducesResponseType((int)HttpStatusCode.OK)] + [ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))] + public async Task SetPDFBookCoverImageFromPage(int id, int pageId) + { + RServiceResult res = await _pdfService.SetPDFBookCoverImageFromPage(id, pageId); + if (!string.IsNullOrEmpty(res.ExceptionString)) + return BadRequest(); + return Ok(); } /// diff --git a/RMuseum/RMuseum.csproj b/RMuseum/RMuseum.csproj index 1e84473a..2a12bc23 100644 --- a/RMuseum/RMuseum.csproj +++ b/RMuseum/RMuseum.csproj @@ -27,7 +27,7 @@ - + diff --git a/RMuseum/RMuseum.xml b/RMuseum/RMuseum.xml index 58071eba..b578c7db 100644 --- a/RMuseum/RMuseum.xml +++ b/RMuseum/RMuseum.xml @@ -2374,6 +2374,14 @@ + + + Copy PDF Book Cover Image From Page Thumbnail image + + + + + add a new book @@ -17522,6 +17530,14 @@ + + + Copy PDF Book Cover Image From Page Thumbnail image + + + + + add author @@ -18421,6 +18437,14 @@ + + + Copy PDF Book Cover Image From Page Thumbnail image + + + + + manipulating picture files diff --git a/RMuseum/Services/IPDFLibraryService.cs b/RMuseum/Services/IPDFLibraryService.cs index 476af829..71217df3 100644 --- a/RMuseum/Services/IPDFLibraryService.cs +++ b/RMuseum/Services/IPDFLibraryService.cs @@ -70,5 +70,13 @@ namespace RMuseum.Services /// /// Task> EditPDFBookMasterRecord(PDFBook model, bool canChangeStatusToAwaiting, bool canPublish); + + /// + /// Copy PDF Book Cover Image From Page Thumbnail image + /// + /// + /// + /// + Task> SetPDFBookCoverImageFromPage(int pdfBookId, int pdfpageId); } } diff --git a/RMuseum/Services/Implementation/PDFLibraryService-Partials/PDFLibraryService-LocalPDF.cs b/RMuseum/Services/Implementation/PDFLibraryService-Partials/PDFLibraryService-LocalPDF.cs index a93415f2..3f11a2e2 100644 --- a/RMuseum/Services/Implementation/PDFLibraryService-Partials/PDFLibraryService-LocalPDF.cs +++ b/RMuseum/Services/Implementation/PDFLibraryService-Partials/PDFLibraryService-LocalPDF.cs @@ -136,7 +136,7 @@ namespace RMuseum.Services.Implementation var book = await context.Books.Where(b => b.Id == bookId).SingleAsync(); if (book.CoverImageId == null) { - book.CoverImage = pdfBook.CoverImage.DuplicateExcludingId(pdfBook.CoverImage); + book.CoverImage = RImage.DuplicateExcludingId(pdfBook.CoverImage); context.Update(book); await context.SaveChangesAsync(); } @@ -248,7 +248,7 @@ namespace RMuseum.Services.Implementation page.ThumbnailImage = picture.Result; if (page.PageNumber == 1) { - pdfBook.CoverImage = picture.Result.DuplicateExcludingId(picture.Result); + pdfBook.CoverImage = RImage.DuplicateExcludingId(picture.Result); } } } diff --git a/RMuseum/Services/Implementation/PDFLibraryService.cs b/RMuseum/Services/Implementation/PDFLibraryService.cs index 1c1c3c89..9c7ae294 100644 --- a/RMuseum/Services/Implementation/PDFLibraryService.cs +++ b/RMuseum/Services/Implementation/PDFLibraryService.cs @@ -7,6 +7,7 @@ using RMuseum.Models.ImportJob; using RMuseum.Models.PDFLibrary; using RMuseum.Models.PDFLibrary.ViewModels; using RSecurityBackend.Models.Generic; +using RSecurityBackend.Models.Image; using RSecurityBackend.Services; using RSecurityBackend.Services.Implementation; using System; @@ -39,10 +40,10 @@ namespace RMuseum.Services.Implementation .Include(b => b.Contributers) .Include(b => b.Tags) .Include(b => b.Pages) - .Where(b => statusArray.Contains(b.Status) &&b.Id == id) + .Where(b => statusArray.Contains(b.Status) && b.Id == id) .SingleOrDefaultAsync(); return new RServiceResult(pdfBook); - + } catch (Exception exp) { @@ -202,7 +203,7 @@ namespace RMuseum.Services.Implementation { return new RServiceResult(false, exp.ToString()); } - + } /// @@ -214,64 +215,107 @@ namespace RMuseum.Services.Implementation /// public async Task> EditPDFBookMasterRecord(PDFBook model, bool canChangeStatusToAwaiting, bool canPublish) { - if (string.IsNullOrEmpty(model.Title)) + try { - return new RServiceResult(null, "Name could not be empty."); - } - - PDFBook pdfBook = - await _context.PDFBooks - .Where(a => a.Id == model.Id) - .SingleOrDefaultAsync(); - - - if (pdfBook != null) - { - if (pdfBook.Status != model.Status) + if (string.IsNullOrEmpty(model.Title)) { - if (!canChangeStatusToAwaiting) - { - return new RServiceResult(null, "User should be able to change status to Awaiting to complete this operation."); - } - - if ( - ! - ( - (pdfBook.Status == PublishStatus.Draft && model.Status == PublishStatus.Awaiting) - || - (pdfBook.Status == PublishStatus.Awaiting && model.Status == PublishStatus.Draft) - ) - ) - { - if (!canPublish) - { - return new RServiceResult(null, "User should have Publish permission to complete this operation."); - } - } + return new RServiceResult(null, "Name could not be empty."); } - pdfBook.Status = model.Status; - pdfBook.Title = model.Title; - pdfBook.SubTitle = model.SubTitle; - pdfBook.AuthorsLine = model.AuthorsLine; - pdfBook.ISBN = model.ISBN; - pdfBook.Description = model.Description; - pdfBook.IsTranslation = model.IsTranslation; - pdfBook.TranslatorsLine = model.TranslatorsLine; - pdfBook.TitleInOriginalLanguage = model.TitleInOriginalLanguage; - pdfBook.PublisherLine = model.PublisherLine; - pdfBook.PublishingDate = model.PublishingDate; - pdfBook.PublishingLocation = model.PublishingLocation; - pdfBook.PublishingNumber = model.PublishingNumber == 0 ? null : model.PublishingNumber; - pdfBook.ClaimedPageCount = model.ClaimedPageCount == 0 ? null : model.ClaimedPageCount; - pdfBook.OriginalSourceName = model.OriginalSourceName; - pdfBook.OriginalFileUrl = model.OriginalFileUrl; + PDFBook pdfBook = + await _context.PDFBooks + .Where(a => a.Id == model.Id) + .SingleOrDefaultAsync(); + + + if (pdfBook != null) + { + if (pdfBook.Status != model.Status) + { + if (!canChangeStatusToAwaiting) + { + return new RServiceResult(null, "User should be able to change status to Awaiting to complete this operation."); + } + + if ( + ! + ( + (pdfBook.Status == PublishStatus.Draft && model.Status == PublishStatus.Awaiting) + || + (pdfBook.Status == PublishStatus.Awaiting && model.Status == PublishStatus.Draft) + ) + ) + { + if (!canPublish) + { + return new RServiceResult(null, "User should have Publish permission to complete this operation."); + } + } + } + + pdfBook.Status = model.Status; + pdfBook.Title = model.Title; + pdfBook.SubTitle = model.SubTitle; + pdfBook.AuthorsLine = model.AuthorsLine; + pdfBook.ISBN = model.ISBN; + pdfBook.Description = model.Description; + pdfBook.IsTranslation = model.IsTranslation; + pdfBook.TranslatorsLine = model.TranslatorsLine; + pdfBook.TitleInOriginalLanguage = model.TitleInOriginalLanguage; + pdfBook.PublisherLine = model.PublisherLine; + pdfBook.PublishingDate = model.PublishingDate; + pdfBook.PublishingLocation = model.PublishingLocation; + pdfBook.PublishingNumber = model.PublishingNumber == 0 ? null : model.PublishingNumber; + pdfBook.ClaimedPageCount = model.ClaimedPageCount == 0 ? null : model.ClaimedPageCount; + pdfBook.OriginalSourceName = model.OriginalSourceName; + pdfBook.OriginalFileUrl = model.OriginalFileUrl; + pdfBook.LastModified = DateTime.Now; + + _context.Update(pdfBook); + await _context.SaveChangesAsync(); + } + return new RServiceResult(pdfBook); + } + catch (Exception exp) + { + return new RServiceResult(null, exp.ToString()); + } + } + + /// + /// Copy PDF Book Cover Image From Page Thumbnail image + /// + /// + /// + /// + public async Task> SetPDFBookCoverImageFromPage(int pdfBookId, int pdfpageId) + { + try + { + PDFBook pdfBook = await _context + .PDFBooks.Where(a => a.Id == pdfBookId) + .SingleOrDefaultAsync(); + if (pdfBook == null) + return new RServiceResult(false, "pdf book not found."); + + PDFPage pdfPage = await _context.PDFPages.AsNoTracking().Include(p => p.ThumbnailImage).Where(p => p.Id == pdfpageId).SingleOrDefaultAsync(); + + if (pdfPage == null) + return new RServiceResult(false, "Page not found."); + + pdfBook.CoverImage = RImage.DuplicateExcludingId(pdfPage.ThumbnailImage); + pdfBook.LastModified = DateTime.Now; _context.Update(pdfBook); await _context.SaveChangesAsync(); + + return new RServiceResult(true); + } + catch (Exception exp) + { + return new RServiceResult(false, exp.ToString()); } - return new RServiceResult(pdfBook); } /// @@ -320,7 +364,7 @@ namespace RMuseum.Services.Implementation { var source = _context.Authors - .Where(a => string.IsNullOrEmpty(authorName) || (authorName.Contains(a.Name) || (!string.IsNullOrEmpty(a.NameInOriginalLanguage) && authorName.Contains(a.NameInOriginalLanguage)) )) + .Where(a => string.IsNullOrEmpty(authorName) || (authorName.Contains(a.Name) || (!string.IsNullOrEmpty(a.NameInOriginalLanguage) && authorName.Contains(a.NameInOriginalLanguage)))) .AsQueryable(); (PaginationMetadata PagingMeta, Author[] Items) paginatedResult = await QueryablePaginator.Paginate(source, paging);