diff --git a/RMuseum/Controllers/RecitationController.cs b/RMuseum/Controllers/RecitationController.cs index 449df1bc..cb67a628 100644 --- a/RMuseum/Controllers/RecitationController.cs +++ b/RMuseum/Controllers/RecitationController.cs @@ -27,7 +27,7 @@ namespace RMuseum.Controllers /// /// returns paginated published recitations, ordered by publish date descending /// - /// + /// if PageSize is -1 or is more than 100 it resets to 100 /// /// [HttpGet("published")] @@ -36,7 +36,9 @@ namespace RMuseum.Controllers [ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))] public async Task GetPublished([FromQuery] PagingParameterModel paging, string searchTerm = "") { - + + if (paging.PageSize == -1 || paging.PageSize > 100) + paging.PageSize = 100; var res = await _audioService.GetPublishedRecitations(paging, searchTerm); if (!string.IsNullOrEmpty(res.ExceptionString)) return BadRequest(res.ExceptionString); @@ -56,13 +58,13 @@ namespace RMuseum.Controllers [AllowAnonymous] [ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(FileStreamResult))] [ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))] - public async Task GetRssFeed(int count = 200) + public async Task GetRssFeed(int count = 100) { var res = await _audioService.GetPublishedRecitations(new PagingParameterModel() { PageNumber = 1, PageSize = count}, ""); if (!string.IsNullOrEmpty(res.ExceptionString)) return BadRequest(res.ExceptionString); - string rss = await RecitationsRssBuilder.Build(res.Result.Items); + string rss = RecitationsRssBuilder.Build(res.Result.Items); var stream = new MemoryStream(); var writer = new StreamWriter(stream); writer.Write(rss); diff --git a/RMuseum/Models/GanjoorAudio/AudioSyncStatus.cs b/RMuseum/Models/GanjoorAudio/AudioSyncStatus.cs index da478c6b..7d5f0ca8 100644 --- a/RMuseum/Models/GanjoorAudio/AudioSyncStatus.cs +++ b/RMuseum/Models/GanjoorAudio/AudioSyncStatus.cs @@ -25,11 +25,6 @@ /// SoundOrXMLFilesChanged = 4, - /// - /// Xml file should be reuploaded - /// - //XmlFileChanged = 8, - /// /// Item should be deleted /// diff --git a/RMuseum/Models/GanjoorAudio/ViewModels/PublicRecitationViewModel.cs b/RMuseum/Models/GanjoorAudio/ViewModels/PublicRecitationViewModel.cs index bf2500d9..df1693c5 100644 --- a/RMuseum/Models/GanjoorAudio/ViewModels/PublicRecitationViewModel.cs +++ b/RMuseum/Models/GanjoorAudio/ViewModels/PublicRecitationViewModel.cs @@ -27,7 +27,7 @@ namespace RMuseum.Models.GanjoorAudio.ViewModels /// public string PoemFullUrl { get; set; } - // + /// /// Audio Title /// public string AudioTitle { get; set; } diff --git a/RMuseum/Models/GanjoorAudio/ViewModels/RecitationPublishingTrackerViewModel.cs b/RMuseum/Models/GanjoorAudio/ViewModels/RecitationPublishingTrackerViewModel.cs index afb31b9b..37f784c2 100644 --- a/RMuseum/Models/GanjoorAudio/ViewModels/RecitationPublishingTrackerViewModel.cs +++ b/RMuseum/Models/GanjoorAudio/ViewModels/RecitationPublishingTrackerViewModel.cs @@ -15,6 +15,7 @@ namespace RMuseum.Models.GanjoorAudio.ViewModels /// /// /// + /// public RecitationPublishingTrackerViewModel(RecitationPublishingTracker tracker, GanjoorPoem poem, RAppUser user, Recitation recitation) { UserEmail = user.Email; diff --git a/RMuseum/RMuseum.csproj b/RMuseum/RMuseum.csproj index ea229d3e..e3d3c0d6 100644 --- a/RMuseum/RMuseum.csproj +++ b/RMuseum/RMuseum.csproj @@ -19,7 +19,6 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - diff --git a/RMuseum/RMuseum.xml b/RMuseum/RMuseum.xml index 500f2095..93db1206 100644 --- a/RMuseum/RMuseum.xml +++ b/RMuseum/RMuseum.xml @@ -729,7 +729,7 @@ returns paginated published recitations, ordered by publish date descending - + if PageSize is -1 or is more than 100 it resets to 100 @@ -2196,7 +2196,11 @@ Poem Full Url (without domain name) - + + + Audio Title + + Audio Artist @@ -2309,6 +2313,7 @@ + diff --git a/RMuseum/Services/Implementation/RecitationsRssBuilder.cs b/RMuseum/Services/Implementation/RecitationsRssBuilder.cs index dba670f5..c2673517 100644 --- a/RMuseum/Services/Implementation/RecitationsRssBuilder.cs +++ b/RMuseum/Services/Implementation/RecitationsRssBuilder.cs @@ -1,5 +1,4 @@ -using Microsoft.SyndicationFeed; -using Microsoft.SyndicationFeed.Rss; + using RMuseum.Models.GanjoorAudio.ViewModels; using System; using System.IO; @@ -19,64 +18,76 @@ namespace RMuseum.Services.Implementation /// /// /// - public static async Task Build(PublicRecitationViewModel[] recitations) + public static string Build(PublicRecitationViewModel[] recitations) { - var sw = new StringWriterWithEncoding(Encoding.UTF8); - using (XmlWriter xmlWriter = XmlWriter.Create(sw, new XmlWriterSettings() { Async = true, Indent = true })) + StringBuilder builder = new StringBuilder(); + + builder.AppendLine(""); + + builder.AppendLine(""); + + builder.AppendLine(""); + + builder.AppendLine(" خوانش‌های گنجور"); + builder.AppendLine(" "); + builder.AppendLine(" https://ganjoor.net"); + builder.AppendLine(" دکلمه‌های صوتی اشعار گنجور"); + + DateTime dtLastUpdate = recitations.Length > 0 ? recitations[0].PublishDate : DateTime.Now; + + builder.AppendLine($" {dtLastUpdate:r}"); + builder.AppendLine(" fa-IR"); + builder.AppendLine(" hourly"); + builder.AppendLine(" 1"); + builder.AppendLine(" "); + builder.AppendLine(" https://i.ganjoor.net/gm.gif"); + builder.AppendLine(" خوانش‌های گنجور"); + builder.AppendLine(" https://ganjoor.net"); + builder.AppendLine(" "); + builder.AppendLine(" "); + builder.AppendLine(" "); + builder.AppendLine(" "); + builder.AppendLine(" clean"); + builder.AppendLine(" گنجورganjoor+alog@ganjoor.net"); + + foreach (PublicRecitationViewModel recitation in recitations) { - var writer = new RssFeedWriter(xmlWriter); - - await writer.WriteTitle("خوانش‌های گنجور"); - await writer.WriteDescription("روایتهای صوتی اشعار سایت گنجور"); - await writer.Write(new SyndicationLink(new Uri("http://ava.ganjoor.net"))); - await writer.WriteLastBuildDate(recitations.Length > 0 ? recitations[0].PublishDate.ToUniversalTime() : DateTimeOffset.UtcNow); - await writer.WriteLanguage(new System.Globalization.CultureInfo("fa-IR")); - await writer.WriteGenerator("https://ganjgah.ir"); - - foreach(PublicRecitationViewModel recitation in recitations) - { - var item = new SyndicationItem() - { - Id = recitation.LegacyAudioGuid.ToString(), - Title = $"{recitation.PoemFullTitle} با خوانش {recitation.AudioArtist}", - Description = recitation.HtmlText == null ? "" : recitation.HtmlText - .Replace("", "") - .Replace("
", "") - .Replace("
", "") - .Replace("
", "") - .Replace("
", "") - .Replace("
", ""), - Published = recitation.PublishDate.ToUniversalTime(), - }; - - item.AddLink(new SyndicationLink(new Uri($"https://ava.ganjoor.net/#/{recitation.Id}"))); - item.AddCategory(new SyndicationCategory("شعرخوانی")); - item.AddCategory(new SyndicationCategory("ادبیات")); - - await writer.Write(item); - } - - xmlWriter.Flush(); + builder.AppendLine(" "); + builder.AppendLine($" {recitation.PoemFullTitle} با خوانش {recitation.AudioArtist}"); + builder.AppendLine($" https://ganjoor.net{recitation.PoemFullUrl}"); + builder.AppendLine($" {recitation.PublishDate:r}"); + builder.AppendLine($" {recitation.LegacyAudioGuid}"); + builder.AppendLine($" {recitation.AudioArtist}"); + builder.AppendLine($" "); + string htmlText = recitation.HtmlText == null ? "" : recitation.HtmlText + .Replace("
", "") + .Replace("
", "") + .Replace("
", "") + .Replace("
", "") + .Replace("
", "") + .Replace("
", ""); + builder.AppendLine($" "); + builder.AppendLine($" "); + builder.AppendLine(" "); } + builder.AppendLine(""); + builder.AppendLine(""); - return sw.ToString(); + return builder.ToString(); + + } } - class StringWriterWithEncoding : StringWriter - { - private readonly Encoding _encoding; - - public StringWriterWithEncoding(Encoding encoding) - { - this._encoding = encoding; - } - - public override Encoding Encoding - { - get { return _encoding; } - } - } + }