#166 generating main mundex page
This commit is contained in:
parent
dc58904e6c
commit
f635f2bee4
@ -163,12 +163,15 @@ else
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@if(ViewData.ContainsKey("ganjoor-songrevu"))
|
||||
{
|
||||
@if (ViewData.ContainsKey("ganjoor-songrevu"))
|
||||
{
|
||||
<a class="nav-link text-dark" asp-area="User" asp-page="/AddSong">اضافه کردن آهنگ از منبع دلخواه</a>
|
||||
}
|
||||
|
||||
<p><a role="button" onclick="rebuildMundex()" class="actionlink" title="بازسازی صفحات نمایهٔ موسیقی">بازسازی صفحات نمایهٔ موسیقی</a></p>
|
||||
|
||||
|
||||
|
||||
|
||||
@ -152,5 +152,19 @@ namespace GanjooRazor.Areas.User.Pages
|
||||
return Redirect($"/User/ReviewSongs/?skip={Skip}");
|
||||
|
||||
}
|
||||
|
||||
public async Task<IActionResult> OnPostRebuildMundexAsync()
|
||||
{
|
||||
using (HttpClient secureClient = new HttpClient())
|
||||
{
|
||||
if (await GanjoorSessionChecker.PrepareClient(secureClient, Request, Response))
|
||||
{
|
||||
HttpResponseMessage response = await secureClient.PutAsync($"{APIRoot.Url}/api/ganjoor/rebuild/mundex", null);
|
||||
response.EnsureSuccessStatusCode();
|
||||
return new OkObjectResult(true);
|
||||
}
|
||||
}
|
||||
return new OkObjectResult(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -126,6 +126,25 @@
|
||||
|
||||
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
function rebuildMundex() {
|
||||
if (!confirm('آیا از بازسازی صفحات نمایهٔ موسیقی اطمینان دارید؟'))
|
||||
return;
|
||||
|
||||
var url = '?handler=RebuildMundex';
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
error: function () {
|
||||
alert('خطا رخ داد.')
|
||||
},
|
||||
success: function () {
|
||||
alert('فرایند بازسازی صفحات نمایهٔ موسیقی شروع شد.')
|
||||
},
|
||||
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
@ -1490,6 +1490,32 @@ namespace RMuseum.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// start updating mundex page
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPut("rebuild/mundex")]
|
||||
[Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + RMuseumSecurableItem.ReviewSongs)]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK)]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
[ProducesResponseType((int)HttpStatusCode.Unauthorized)]
|
||||
public IActionResult StartUpdatingMundexPage()
|
||||
{
|
||||
try
|
||||
{
|
||||
Guid userId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
|
||||
|
||||
var res = _ganjoorService.StartUpdatingMundexPage(userId);
|
||||
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
return Ok();
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return BadRequest(exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ganjoor Service
|
||||
/// </summary>
|
||||
|
||||
@ -1101,6 +1101,12 @@
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.GanjoorController.StartUpdatingMundexPage">
|
||||
<summary>
|
||||
start updating mundex page
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="F:RMuseum.Controllers.GanjoorController._ganjoorService">
|
||||
<summary>
|
||||
Ganjoor Service
|
||||
@ -7612,6 +7618,12 @@
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IGanjoorService.StartUpdatingMundexPage(System.Guid)">
|
||||
<summary>
|
||||
start updating mundex page
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:RMuseum.Services.Implementation.ArtifactService">
|
||||
<summary>
|
||||
IArtifactService implementation
|
||||
@ -8565,6 +8577,15 @@
|
||||
<summary>
|
||||
IGanjoorService implementation
|
||||
</summary>
|
||||
<summary>
|
||||
IGanjoorService implementation
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.GanjoorService.StartUpdatingMundexPage(System.Guid)">
|
||||
<summary>
|
||||
start updating stats page
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.GanjoorService.ImportFromMySql">
|
||||
<summary>
|
||||
|
||||
@ -452,5 +452,11 @@ namespace RMuseum.Services
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
RServiceResult<bool> StartUpdatingStatsPage(Guid editingUserId);
|
||||
|
||||
/// <summary>
|
||||
/// start updating mundex page
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
RServiceResult<bool> StartUpdatingMundexPage(Guid editingUserId);
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,107 @@
|
||||
using DNTPersianUtils.Core;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using RMuseum.DbContext;
|
||||
using RMuseum.Models.Ganjoor;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using RSecurityBackend.Services.Implementation;
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
|
||||
namespace RMuseum.Services.Implementation
|
||||
{
|
||||
/// <summary>
|
||||
/// IGanjoorService implementation
|
||||
/// </summary>
|
||||
public partial class GanjoorService : IGanjoorService
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// start updating stats page
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public RServiceResult<bool> StartUpdatingMundexPage(Guid editingUserId)
|
||||
{
|
||||
try
|
||||
{
|
||||
_backgroundTaskQueue.QueueBackgroundWorkItem
|
||||
(
|
||||
async token =>
|
||||
{
|
||||
using (RMuseumDbContext context = new RMuseumDbContext(new DbContextOptions<RMuseumDbContext>())) //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("UpdateMundexPage", "Query data")).Result;
|
||||
|
||||
try
|
||||
{
|
||||
var poemMusicTracks =
|
||||
await context.GanjoorPoemMusicTracks
|
||||
.Where(m =>
|
||||
m.TrackType == PoemMusicTrackType.BeepTunesOrKhosousi
|
||||
&&
|
||||
m.AlbumUrl != "http://khosousi.com"
|
||||
&&
|
||||
m.Approved)
|
||||
.ToListAsync();
|
||||
|
||||
var dbPage = await context.GanjoorPages.Where(p => p.FullUrl == "/mundex").SingleAsync();
|
||||
|
||||
|
||||
string htmlText = $"<p>در این صفحه فهرست اشعار استفاده شده در آلبومهای موسیقی را با استفاده از اطلاعات جمعآوری شده در <a href=\"http://blog.ganjoor.net/1395/06/28/bptags/\">این پروژه</a> به تفکیک خواننده و به ترتیب نزولی تعداد قطعات مرتبط گرد آوردهایم." +
|
||||
$" تا تاریخ {LanguageUtils.FormatDate(DateTime.Now)} ارتباط {poemMusicTracks.Count.ToPersianNumbers()} قطعهٔ موسیقی از {poemMusicTracks.GroupBy(m => m.ArtistName).Count().ToPersianNumbers()} هنرمند با {poemMusicTracks.GroupBy(m => m.PoemId).Count().ToPersianNumbers()} شعر در پایگاه گنجور ثبت و تأیید شده است. </p>{Environment.NewLine}";
|
||||
htmlText += $"<p>جهت مشاهدهٔ این اطلاعات به تفکیک شاعران <small>(به همراه اطلاعات مجموعهٔ گلها، سایت اسپاتیفای و اجراهای خصوصی)</small> <a href=\"/mundex/bypoet/\" > این صفحه</a> را ببینید.</p>{Environment.NewLine}";
|
||||
htmlText += $"<p>جهت کمک به تکمیل این مجموعه <a href=\"http://blog.ganjoor.net/1395/06/28/bptags/\">این مطلب</a> را مطالعه بفرمایید و <a href=\"http://www.aparat.com/v/kxGre\">این فیلم</a> را مشاهده کنید.</p>{Environment.NewLine}";
|
||||
|
||||
var singers = poemMusicTracks.GroupBy(m => new { m.ArtistName, m.ArtistUrl })
|
||||
.Select(g => new { ArtistName = g.Key.ArtistName, ArtistUrl = g.Key.ArtistUrl, TrackCount = g.Count() })
|
||||
.OrderByDescending(g => g.TrackCount)
|
||||
.ToList();
|
||||
|
||||
for (int nSinger = 0; nSinger < singers.Count; nSinger++)
|
||||
{
|
||||
var singer = singers[nSinger];
|
||||
htmlText += $"<p><br style=\"clear: both;\" /></p>{Environment.NewLine}";
|
||||
htmlText += $"<h2>{nSinger.ToPersianNumbers()}. <a href=\"{singer.ArtistUrl}\">";
|
||||
htmlText += $"{singer.ArtistName} ({singer.TrackCount.ToPersianNumbers()} قطعه)</a></h2>{Environment.NewLine}";
|
||||
htmlText += "<div class=\"spacer\"> </div>";
|
||||
|
||||
htmlText += $"<ol>{Environment.NewLine}";
|
||||
|
||||
foreach (var song in poemMusicTracks.Where(m => m.ArtistUrl == singer.ArtistUrl).OrderBy(m => m.PoemId).ToList())
|
||||
{
|
||||
htmlText += $"<li><p>{Environment.NewLine}";
|
||||
var poem = await context.GanjoorPoems.Where(p => p.Id == song.PoemId).SingleAsync();
|
||||
htmlText += $"<a href=\"{poem.FullUrl}\">{poem.FullTitle}</a> در ";
|
||||
htmlText += $"<a href=\"{song.AlbumUrl}\">{song.AlbumName.ToPersianNumbers()}</a> » <a href=\"{song.TrackUrl}\">{song.TrackName.ToPersianNumbers()}</a></p></li>{Environment.NewLine}";
|
||||
}
|
||||
|
||||
htmlText += $"</ol>{Environment.NewLine}";
|
||||
}
|
||||
|
||||
|
||||
await _UpdatePageHtmlText(context, editingUserId, dbPage, "به روزرسانی خودکار صفحهٔ نمایهٔ موسیقی", htmlText);
|
||||
|
||||
|
||||
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, 100, "", true);
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, 100, "", false, exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
return new RServiceResult<bool>(true);
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<bool>(false, exp.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user