diff --git a/RMuseum/Models/ImportJob/JobType.cs b/RMuseum/Models/ImportJob/JobType.cs index e99fb175..70db5fd5 100644 --- a/RMuseum/Models/ImportJob/JobType.cs +++ b/RMuseum/Models/ImportJob/JobType.cs @@ -16,6 +16,7 @@ BritishLibrary = 8, ServerFolder = 9, Walters = 10, - ChesterBeatty = 11 + ChesterBeatty = 11, + AppendFromServerFolder = 12, } } diff --git a/RMuseum/RMuseum.xml b/RMuseum/RMuseum.xml index 258f3761..779acfb0 100644 --- a/RMuseum/RMuseum.xml +++ b/RMuseum/RMuseum.xml @@ -12963,6 +12963,14 @@ https://t.me/dr_khatibi_abolfazl/888 + + + start appending from server folder + + + + + from http://www.thedigitalwalters.org/01_ACCESS_WALTERS_MANUSCRIPTS.html @@ -13223,9 +13231,9 @@ import from external resources - loc/princeton/harvard/qajarwomen/hathitrust/penn/cam/bl/folder/walters/cbl - 119 - golestan-baysonghori + loc/princeton/harvard/qajarwomen/hathitrust/penn/cam/bl/folder/walters/cbl/append + 119/foldername + golestan-baysonghori/artifact id diff --git a/RMuseum/Services/Implementation/ArtifactService-Partials/ArtifactService-ImportServerFolder.cs b/RMuseum/Services/Implementation/ArtifactService-Partials/ArtifactService-ImportServerFolder.cs index b5abcdac..16bed9e1 100644 --- a/RMuseum/Services/Implementation/ArtifactService-Partials/ArtifactService-ImportServerFolder.cs +++ b/RMuseum/Services/Implementation/ArtifactService-Partials/ArtifactService-ImportServerFolder.cs @@ -173,6 +173,102 @@ namespace RMuseum.Services.Implementation } + /// + /// start appending from server folder + /// + /// + /// + /// + private async Task> StartAppendingFromServerFolder(string folderPath, Guid artifactId) + { + try + { + + var nonTrackingBook = await _context.Artifacts.AsNoTracking().Where(b => b.Id == artifactId).SingleOrDefaultAsync(); + if (nonTrackingBook == null) + return new RServiceResult(false, "artifact not found!"); + + ImportJob job = new ImportJob() + { + JobType = JobType.AppendFromServerFolder, + ResourceNumber = folderPath, + FriendlyUrl = nonTrackingBook.FriendlyUrl, + SrcUrl = "", + QueueTime = DateTime.Now, + ProgressPercent = 0, + Status = ImportJobStatus.NotStarted + }; + + + await _context.ImportJobs.AddAsync + ( + job + ); + + await _context.SaveChangesAsync(); + + _backgroundTaskQueue.QueueBackgroundWorkItem + ( + async token => + { + try + { + using (RMuseumDbContext context = new RMuseumDbContext(new DbContextOptions())) + { + var book = await context.Artifacts.Include(a => a.Items).Where(b => b.Id == artifactId).SingleOrDefaultAsync(); + + using (RMuseumDbContext importJobUpdaterDb = new RMuseumDbContext(new DbContextOptions())) + { + job.StartTime = DateTime.Now; + job.Status = ImportJobStatus.Running; + job.SrcContent = ""; + importJobUpdaterDb.Update(job); + await importJobUpdaterDb.SaveChangesAsync(); + } + + List pages = await _ImportAndReturnServerFolderJobImages(book, job, book.ItemCount); + + pages.InsertRange(0, book.Items); + + book.Items = pages.ToArray();//TODO: check if this is correct + book.ItemCount = pages.Count; + + context.Update(book); + await context.SaveChangesAsync(); + + job.ProgressPercent = 100; + job.Status = ImportJobStatus.Succeeded; + job.ArtifactId = book.Id; + job.EndTime = DateTime.Now; + context.Update(job); + await context.SaveChangesAsync(); + + } + } + catch (Exception exp) + { + using (RMuseumDbContext importJobUpdaterDb = new RMuseumDbContext(new DbContextOptions())) + { + job.EndTime = DateTime.Now; + job.Status = ImportJobStatus.Failed; + job.Exception = exp.ToString(); + importJobUpdaterDb.Update(job); + await importJobUpdaterDb.SaveChangesAsync(); + } + + } + } + ); + + return new RServiceResult(true); + } + catch (Exception exp) + { + return new RServiceResult(false, exp.ToString()); + } + } + + private async Task> _ImportAndReturnServerFolderJobImages(RArtifactMasterRecord book, ImportJob job, int order) { List pages = new List(); diff --git a/RMuseum/Services/Implementation/ArtifactService.cs b/RMuseum/Services/Implementation/ArtifactService.cs index cfff4ac2..a0ceef10 100644 --- a/RMuseum/Services/Implementation/ArtifactService.cs +++ b/RMuseum/Services/Implementation/ArtifactService.cs @@ -1154,9 +1154,9 @@ namespace RMuseum.Services.Implementation /// /// import from external resources /// - /// loc/princeton/harvard/qajarwomen/hathitrust/penn/cam/bl/folder/walters/cbl - /// 119 - /// golestan-baysonghori + /// loc/princeton/harvard/qajarwomen/hathitrust/penn/cam/bl/folder/walters/cbl/append + /// 119/foldername + /// golestan-baysonghori/artifact id /// /// public async Task> Import(string srcType, string resourceNumber, string friendlyUrl, string resourcePrefix) @@ -1186,6 +1186,9 @@ namespace RMuseum.Services.Implementation srcType == "folder" ? await StartImportingFromServerFolder(resourceNumber, friendlyUrl, resourcePrefix) : + srcType == "append" ? + await StartAppendingFromServerFolder(resourceNumber, Guid.Parse(resourceNumber)) + : srcType == "walters" ? await StartImportingFromWalters(resourceNumber, friendlyUrl) :