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)
: