tajik backend fixes
This commit is contained in:
parent
a6e7d4f4e6
commit
cefc6a767f
@ -4524,6 +4524,27 @@ namespace RMuseum.Controllers
|
|||||||
return BadRequest(res.ExceptionString);
|
return BadRequest(res.ExceptionString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// re-runs the Tajik poet/category HTML generators for every already-imported poet and
|
||||||
|
/// category page, overwriting their stored TajikHtmlText. Needed one-time after changing
|
||||||
|
/// either generator function (e.g. adding poem excerpts to the table of contents), since
|
||||||
|
/// the normal SQLite import skips pages that already exist and never refreshes them.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPut]
|
||||||
|
[Route("tajik/regenerate-html")]
|
||||||
|
[Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + RMuseumSecurableItem.ImportOperationShortName)]
|
||||||
|
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(bool))]
|
||||||
|
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||||
|
public async Task<IActionResult> RegenerateTajikCatAndPoetHtmlTextAsync()
|
||||||
|
{
|
||||||
|
RServiceResult<bool> res =
|
||||||
|
await _ganjoorService.RegenerateTajikCatAndPoetHtmlTextAsync();
|
||||||
|
if (res.Result)
|
||||||
|
return Ok();
|
||||||
|
return BadRequest(res.ExceptionString);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// tajik poets
|
/// tajik poets
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -1582,6 +1582,14 @@ namespace RMuseum.Services
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<RServiceResult<(PaginationMetadata PagingMeta, GanjoorPoemCompleteViewModel[] Items)>> SearchTajikAsync(PagingParameterModel paging, string term, int? poetId, int? catId);
|
Task<RServiceResult<(PaginationMetadata PagingMeta, GanjoorPoemCompleteViewModel[] Items)>> SearchTajikAsync(PagingParameterModel paging, string term, int? poetId, int? catId);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// re-runs the Tajik poet/category HTML generators for every already-imported poet and
|
||||||
|
/// category page, overwriting their stored TajikHtmlText - needed one-time after changing
|
||||||
|
/// either generator function, since the normal SQLite import skips pages that already exist
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<RServiceResult<bool>> RegenerateTajikCatAndPoetHtmlTextAsync();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@ -144,6 +144,17 @@ namespace RMuseum.Services.Implementation
|
|||||||
verse.Text = tajikVerses.Where(v => v.VOrder == verse.VOrder).Single().TajikText;
|
verse.Text = tajikVerses.Where(v => v.VOrder == verse.VOrder).Single().TajikText;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (page.Poem.Recitations != null)
|
||||||
|
{
|
||||||
|
// no TajikRecitations table exists - this audio metadata has no real Tajik
|
||||||
|
// translation source anywhere, so transliteration is the only option
|
||||||
|
foreach (var recitation in page.Poem.Recitations)
|
||||||
|
{
|
||||||
|
recitation.AudioTitle = LanguageUtils.TransliteratePersianToTajik(recitation.AudioTitle);
|
||||||
|
recitation.AudioArtist = LanguageUtils.TransliteratePersianToTajik(recitation.AudioArtist);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(page.Poem.Next != null)
|
if(page.Poem.Next != null)
|
||||||
{
|
{
|
||||||
var nextPoem = await _context.TajikPoems.AsNoTracking().Where(p => p.Id == page.Poem.Next.Id).SingleOrDefaultAsync();
|
var nextPoem = await _context.TajikPoems.AsNoTracking().Where(p => p.Id == page.Poem.Next.Id).SingleOrDefaultAsync();
|
||||||
@ -195,6 +206,46 @@ namespace RMuseum.Services.Implementation
|
|||||||
return firstLine.Length > 80 ? firstLine.Substring(0, 80) + "…" : firstLine;
|
return firstLine.Length > 80 ? firstLine.Substring(0, 80) + "…" : firstLine;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// re-runs PrepareTajikPoetHtmlTextAsync / PrepareTajikCatHtmlTextAsync for every poet and
|
||||||
|
/// category page that already has a stored TajikPages row, overwriting TajikHtmlText with
|
||||||
|
/// freshly generated output. Needed one-time after changing either generator function
|
||||||
|
/// (e.g. adding poem excerpts to the table of contents), because the normal SQLite import
|
||||||
|
/// (GanjoorService-TajikSQLiteImport.cs) explicitly skips pages that already exist and so
|
||||||
|
/// never refreshes previously generated HTML on its own.
|
||||||
|
/// </summary>
|
||||||
|
public async Task<RServiceResult<bool>> RegenerateTajikCatAndPoetHtmlTextAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var tajikPoets = await _context.TajikPoets.AsNoTracking().ToListAsync();
|
||||||
|
foreach (var tajikPoet in tajikPoets)
|
||||||
|
{
|
||||||
|
var poetPage = await _context.GanjoorPages.AsNoTracking().Where(p => p.GanjoorPageType == GanjoorPageType.PoetPage && p.PoetId == tajikPoet.Id).SingleOrDefaultAsync();
|
||||||
|
if (poetPage == null) continue;
|
||||||
|
var tajikPage = await _context.TajikPages.Where(p => p.Id == poetPage.Id).SingleOrDefaultAsync();
|
||||||
|
if (tajikPage == null) continue;
|
||||||
|
tajikPage.TajikHtmlText = await PrepareTajikPoetHtmlTextAsync(_context, tajikPoet);
|
||||||
|
}
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
|
||||||
|
var tajikCats = await _context.TajikCats.AsNoTracking().ToListAsync();
|
||||||
|
foreach (var tajikCat in tajikCats)
|
||||||
|
{
|
||||||
|
var tajikPage = await _context.TajikPages.Where(p => p.Id == tajikCat.Id).SingleOrDefaultAsync();
|
||||||
|
if (tajikPage == null) continue;
|
||||||
|
tajikPage.TajikHtmlText = await PrepareTajikCatHtmlTextAsync(_context, tajikCat);
|
||||||
|
}
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
|
||||||
|
return new RServiceResult<bool>(true);
|
||||||
|
}
|
||||||
|
catch (Exception exp)
|
||||||
|
{
|
||||||
|
return new RServiceResult<bool>(false, exp.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@ -43,7 +43,11 @@ namespace RMuseum.Services.Implementation
|
|||||||
var tajikPoem = tajikPoems.Where(p => p.Id == catPoem.Id).SingleOrDefault();
|
var tajikPoem = tajikPoems.Where(p => p.Id == catPoem.Id).SingleOrDefault();
|
||||||
if(tajikPoem != null)
|
if(tajikPoem != null)
|
||||||
{
|
{
|
||||||
html += $"<p><a href=\"{catPoem.FullUrl}\">{LanguageUtils.CleanTextForTransileration(tajikPoem.TajikTitle)}</a></p>";
|
string excerpt = ExtractExcerpt(tajikPoem.TajikPlainText);
|
||||||
|
string title = LanguageUtils.CleanTextForTransileration(tajikPoem.TajikTitle);
|
||||||
|
html += string.IsNullOrEmpty(excerpt)
|
||||||
|
? $"<p><a href=\"{catPoem.FullUrl}\">{title}</a></p>"
|
||||||
|
: $"<p><a href=\"{catPoem.FullUrl}\">{title}</a>: {excerpt}</p>";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -76,7 +80,11 @@ namespace RMuseum.Services.Implementation
|
|||||||
var tajikPoem = tajikPoems.Where(p => p.Id == catPoem.Id).SingleOrDefault();
|
var tajikPoem = tajikPoems.Where(p => p.Id == catPoem.Id).SingleOrDefault();
|
||||||
if(tajikPoem != null)
|
if(tajikPoem != null)
|
||||||
{
|
{
|
||||||
html += $"<p><a href=\"{catPoem.FullUrl}\">{LanguageUtils.CleanTextForTransileration(tajikPoem.TajikTitle)}</a></p>";
|
string excerpt = ExtractExcerpt(tajikPoem.TajikPlainText);
|
||||||
|
string title = LanguageUtils.CleanTextForTransileration(tajikPoem.TajikTitle);
|
||||||
|
html += string.IsNullOrEmpty(excerpt)
|
||||||
|
? $"<p><a href=\"{catPoem.FullUrl}\">{title}</a></p>"
|
||||||
|
: $"<p><a href=\"{catPoem.FullUrl}\">{title}</a>: {excerpt}</p>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return html;
|
return html;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user