docs: #331 append a folder of images to an existing artifact

This commit is contained in:
Hamid Reza Mohammadi 2022-06-09 10:13:33 +04:30
parent adac5a8c2a
commit 40425e849b
4 changed files with 115 additions and 7 deletions

View File

@ -16,6 +16,7 @@
BritishLibrary = 8,
ServerFolder = 9,
Walters = 10,
ChesterBeatty = 11
ChesterBeatty = 11,
AppendFromServerFolder = 12,
}
}

View File

@ -12963,6 +12963,14 @@
<param name="srcUrl">https://t.me/dr_khatibi_abolfazl/888</param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.ArtifactService.StartAppendingFromServerFolder(System.String,System.Guid)">
<summary>
start appending from server folder
</summary>
<param name="folderPath"></param>
<param name="artifactId"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.ArtifactService.StartImportingFromWalters(System.String,System.String)">
<summary>
from http://www.thedigitalwalters.org/01_ACCESS_WALTERS_MANUSCRIPTS.html
@ -13223,9 +13231,9 @@
<summary>
import from external resources
</summary>
<param name="srcType">loc/princeton/harvard/qajarwomen/hathitrust/penn/cam/bl/folder/walters/cbl</param>
<param name="resourceNumber">119</param>
<param name="friendlyUrl">golestan-baysonghori</param>
<param name="srcType">loc/princeton/harvard/qajarwomen/hathitrust/penn/cam/bl/folder/walters/cbl/append</param>
<param name="resourceNumber">119/foldername</param>
<param name="friendlyUrl">golestan-baysonghori/artifact id</param>
<param name="resourcePrefix"></param>
<returns></returns>
</member>

View File

@ -173,6 +173,102 @@ namespace RMuseum.Services.Implementation
}
/// <summary>
/// start appending from server folder
/// </summary>
/// <param name="folderPath"></param>
/// <param name="artifactId"></param>
/// <returns></returns>
private async Task<RServiceResult<bool>> StartAppendingFromServerFolder(string folderPath, Guid artifactId)
{
try
{
var nonTrackingBook = await _context.Artifacts.AsNoTracking().Where(b => b.Id == artifactId).SingleOrDefaultAsync();
if (nonTrackingBook == null)
return new RServiceResult<bool>(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<RMuseumDbContext>()))
{
var book = await context.Artifacts.Include(a => a.Items).Where(b => b.Id == artifactId).SingleOrDefaultAsync();
using (RMuseumDbContext importJobUpdaterDb = new RMuseumDbContext(new DbContextOptions<RMuseumDbContext>()))
{
job.StartTime = DateTime.Now;
job.Status = ImportJobStatus.Running;
job.SrcContent = "";
importJobUpdaterDb.Update(job);
await importJobUpdaterDb.SaveChangesAsync();
}
List<RArtifactItemRecord> 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<RMuseumDbContext>()))
{
job.EndTime = DateTime.Now;
job.Status = ImportJobStatus.Failed;
job.Exception = exp.ToString();
importJobUpdaterDb.Update(job);
await importJobUpdaterDb.SaveChangesAsync();
}
}
}
);
return new RServiceResult<bool>(true);
}
catch (Exception exp)
{
return new RServiceResult<bool>(false, exp.ToString());
}
}
private async Task<List<RArtifactItemRecord>> _ImportAndReturnServerFolderJobImages(RArtifactMasterRecord book, ImportJob job, int order)
{
List<RArtifactItemRecord> pages = new List<RArtifactItemRecord>();

View File

@ -1154,9 +1154,9 @@ namespace RMuseum.Services.Implementation
/// <summary>
/// import from external resources
/// </summary>
/// <param name="srcType">loc/princeton/harvard/qajarwomen/hathitrust/penn/cam/bl/folder/walters/cbl</param>
/// <param name="resourceNumber">119</param>
/// <param name="friendlyUrl">golestan-baysonghori</param>
/// <param name="srcType">loc/princeton/harvard/qajarwomen/hathitrust/penn/cam/bl/folder/walters/cbl/append</param>
/// <param name="resourceNumber">119/foldername</param>
/// <param name="friendlyUrl">golestan-baysonghori/artifact id</param>
/// <param name="resourcePrefix"></param>
/// <returns></returns>
public async Task<RServiceResult<bool>> 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)
: