diff --git a/RMuseum/Controllers/GanjoorController.cs b/RMuseum/Controllers/GanjoorController.cs
index f23a79e1..864f1d61 100644
--- a/RMuseum/Controllers/GanjoorController.cs
+++ b/RMuseum/Controllers/GanjoorController.cs
@@ -626,18 +626,18 @@ namespace RMuseum.Controllers
}
///
- /// convert old alphabetic TOCs to new ones
+ /// regenerate TOCs
///
///
- [HttpPut("cat/toc/migrate")]
+ [HttpPut("cat/toc/regen")]
[Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + SecurableItem.ModifyOperationShortName)]
[ProducesResponseType((int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
- public IActionResult StartRegeneratingOldAlphabeticTOCs()
+ public IActionResult StartRegeneratingTOCs()
{
Guid userId =
new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
- var res = _ganjoorService.StartRegeneratingOldAlphabeticTOCs(userId);
+ var res = _ganjoorService.StartRegeneratingTOCs(userId);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
diff --git a/RMuseum/RMuseum.xml b/RMuseum/RMuseum.xml
index 7445ffd6..76d2b5d7 100644
--- a/RMuseum/RMuseum.xml
+++ b/RMuseum/RMuseum.xml
@@ -1028,9 +1028,9 @@
-
+
- convert old alphabetic TOCs to new ones
+ regenerate TOCs
@@ -11289,9 +11289,9 @@
-
+
- convert old alphabetic TOCs to new ones
+ regenerate TOCs
@@ -13048,9 +13048,9 @@
-
+
- convert old alphabetic TOCs to new ones
+ regenerate TOCs
diff --git a/RMuseum/Services/IGanjoorService.cs b/RMuseum/Services/IGanjoorService.cs
index 5d3e7d53..ae5f59cd 100644
--- a/RMuseum/Services/IGanjoorService.cs
+++ b/RMuseum/Services/IGanjoorService.cs
@@ -849,10 +849,10 @@ namespace RMuseum.Services
Task> SetCategoryLanguageTag(int catId, string language);
///
- /// convert old alphabetic TOCs to new ones
+ /// regenerate TOCs
///
///
///
- RServiceResult StartRegeneratingOldAlphabeticTOCs(Guid userId);
+ RServiceResult StartRegeneratingTOCs(Guid userId);
}
}
diff --git a/RMuseum/Services/Implementation/GanjoorService-Partials/GanjoorService-TOC.cs b/RMuseum/Services/Implementation/GanjoorService-Partials/GanjoorService-TOC.cs
index 2d2113f2..c741ca28 100644
--- a/RMuseum/Services/Implementation/GanjoorService-Partials/GanjoorService-TOC.cs
+++ b/RMuseum/Services/Implementation/GanjoorService-Partials/GanjoorService-TOC.cs
@@ -21,11 +21,11 @@ namespace RMuseum.Services.Implementation
public partial class GanjoorService : IGanjoorService
{
///
- /// convert old alphabetic TOCs to new ones
+ /// regenerate TOCs
///
///
///
- public RServiceResult StartRegeneratingOldAlphabeticTOCs(Guid userId)
+ public RServiceResult StartRegeneratingTOCs(Guid userId)
{
try
{
@@ -37,32 +37,32 @@ namespace RMuseum.Services.Implementation
using (RMuseumDbContext context = new RMuseumDbContext(new DbContextOptions())) //this is long running job, so _context might be already been freed/collected by GC
{
LongRunningJobProgressServiceEF jobProgressServiceEF = new LongRunningJobProgressServiceEF(context);
- var job = (await jobProgressServiceEF.NewJob("RegeneratingOldAlphabeticTOCs", "Query data")).Result;
+ var job = (await jobProgressServiceEF.NewJob("StartRegeneratingTOCs", "Query data")).Result;
try
{
+ var cats = await context.GanjoorCategories.AsNoTracking().ToListAsync();
- var pages = await context.GanjoorPages.AsNoTracking().Where(p => p.CatId != null && p.GanjoorPageType == GanjoorPageType.CatPage && p.HtmlText.Contains("دسترسی سریع به حروف")).ToArrayAsync();
-
- foreach (var page in pages)
+ foreach (var cat in cats)
{
- await jobProgressServiceEF.UpdateJob(job.Id, 0, page.FullTitle);
- await _FindCategoryPoemsRhymesInternal((int)page.CatId, false);
- GanjoorTOC options = GanjoorTOC.AlphabeticWithFirstCouplet;
- if (
- new string[]
- {
- "غزلیات", "غزل", "غزل ها", "قصاید", "قصائد", "قصیده", "رباعیات", "رباعی", "رباعی ها"
- }.Contains(page.Title)
- )
- {
- options = GanjoorTOC.AlphabeticWithFirstVerse;
- }
- await _DirectInsertGeneratedTableOfContents(context, (int)page.CatId, userId, options);
+ var page =
+ await context.GanjoorPages.AsNoTracking()
+ .Where(p => (p.GanjoorPageType == GanjoorPageType.PoetPage && p.PoetId == cat.PoetId) || (p.GanjoorPageType == GanjoorPageType.CatPage && p.CatId == cat.Id)).SingleAsync();
+
+ await jobProgressServiceEF.UpdateJob(job.Id, 0, page.FullTitle);
+ if(cat.TableOfContentsStyle == GanjoorTOC.Analyse)
+ {
+ var hasChild = await context.GanjoorCategories.AsNoTracking().Where(c => c.ParentId == cat.Id).AnyAsync();
+ if (cat.ParentId == null || hasChild)
+ cat.TableOfContentsStyle = GanjoorTOC.OnlyTitles;
+ else
+ cat.TableOfContentsStyle = GanjoorTOC.TitlesAndFirstVerse;
+ var catToUpdate = await context.GanjoorCategories.Where(c => c.Id == cat.Id).SingleAsync();
+ catToUpdate.TableOfContentsStyle = cat.TableOfContentsStyle;
+ context.Update(catToUpdate);
+ await context.SaveChangesAsync();
+ }
+ await _DirectInsertGeneratedTableOfContents(context,cat.Id, userId, cat.TableOfContentsStyle);
- var cat = await context.GanjoorCategories.Where(c => c.Id == (int)page.CatId).SingleAsync();
- cat.TableOfContentsStyle = options;
- cat.CatType = GanjoorCatType.BookPart;
- context.Update(cat);
await context.SaveChangesAsync();
}