#26 api to return narration verse sync
This commit is contained in:
parent
c99f8d464a
commit
b00c5c16c6
@ -142,6 +142,24 @@ namespace RMuseum.Controllers
|
||||
return Ok(System.IO.File.ReadAllText(narration.Result.LocalXmlFilePath));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets Verse Sync Information
|
||||
/// </summary>
|
||||
/// <param name="id">narration id</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("verses/{id}")]
|
||||
[AllowAnonymous]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(string))]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
public async Task<IActionResult> GetPoemNarrationVerseSyncArray(int id)
|
||||
{
|
||||
RServiceResult<NarrationVerseSync[]> verses =
|
||||
await _audioService.GetPoemNarrationVerseSyncArray(id);
|
||||
if (!string.IsNullOrEmpty(verses.ExceptionString))
|
||||
return BadRequest(verses.ExceptionString);
|
||||
return Ok(verses.Result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// updates narration metadata
|
||||
/// </summary>
|
||||
|
||||
23
RMuseum/Models/GanjoorAudio/ViewModels/NarrationVerseSync.cs
Normal file
23
RMuseum/Models/GanjoorAudio/ViewModels/NarrationVerseSync.cs
Normal file
@ -0,0 +1,23 @@
|
||||
namespace RMuseum.Models.GanjoorAudio.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// Verse Sync Range
|
||||
/// </summary>
|
||||
public class NarrationVerseSync
|
||||
{
|
||||
/// <summary>
|
||||
/// Verse Order
|
||||
/// </summary>
|
||||
public int VerseOrder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Verse Text
|
||||
/// </summary>
|
||||
public string VerseText { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Audio Start in Milliseconds
|
||||
/// </summary>
|
||||
public int AudioStartMilliseconds { get; set; }
|
||||
}
|
||||
}
|
||||
@ -657,6 +657,13 @@
|
||||
<param name="id"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.AudioNarrationController.GetPoemNarrationVerseSyncArray(System.Int32)">
|
||||
<summary>
|
||||
Gets Verse Sync Information
|
||||
</summary>
|
||||
<param name="id">narration id</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.AudioNarrationController.UpdatePoemNarration(System.Int32,RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationUpdateViewModel)">
|
||||
<summary>
|
||||
updates narration metadata
|
||||
@ -1989,6 +1996,26 @@
|
||||
is default
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.GanjoorAudio.ViewModels.NarrationVerseSync">
|
||||
<summary>
|
||||
Verse Sync Range
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.NarrationVerseSync.VerseOrder">
|
||||
<summary>
|
||||
Verse Order
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.NarrationVerseSync.VerseText">
|
||||
<summary>
|
||||
Verse Text
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.NarrationVerseSync.AudioStartMilliseconds">
|
||||
<summary>
|
||||
Audio Start in Milliseconds
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationModerationResult">
|
||||
<summary>
|
||||
Moderation Result
|
||||
@ -3959,6 +3986,13 @@
|
||||
<param name="id"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IAudioNarrationService.GetPoemNarrationVerseSyncArray(System.Int32)">
|
||||
<summary>
|
||||
Gets Verse Sync Range Information
|
||||
</summary>
|
||||
<param name="id">narration id</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IAudioNarrationService.UpdatePoemNarration(System.Int32,RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationUpdateViewModel)">
|
||||
<summary>
|
||||
updates metadata for narration
|
||||
@ -4763,6 +4797,13 @@
|
||||
<param name="id"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.AudioNarrationService.GetPoemNarrationVerseSyncArray(System.Int32)">
|
||||
<summary>
|
||||
Gets Verse Sync Range Information
|
||||
</summary>
|
||||
<param name="id">narration id</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.AudioNarrationService.UpdatePoemNarration(System.Int32,RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationUpdateViewModel)">
|
||||
<summary>
|
||||
updates metadata for narration
|
||||
|
||||
@ -30,6 +30,13 @@ namespace RMuseum.Services
|
||||
/// <returns></returns>
|
||||
Task<RServiceResult<PoemNarrationViewModel>> Get(int id);
|
||||
|
||||
/// <summary>
|
||||
/// Gets Verse Sync Range Information
|
||||
/// </summary>
|
||||
/// <param name="id">narration id</param>
|
||||
/// <returns></returns>
|
||||
Task<RServiceResult<NarrationVerseSync[]>> GetPoemNarrationVerseSyncArray(int id);
|
||||
|
||||
/// <summary>
|
||||
/// updates metadata for narration
|
||||
/// </summary>
|
||||
|
||||
@ -19,6 +19,7 @@ using System.Data;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace RMuseum.Services.Implementation
|
||||
{
|
||||
@ -91,6 +92,48 @@ namespace RMuseum.Services.Implementation
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets Verse Sync Range Information
|
||||
/// </summary>
|
||||
/// <param name="id">narration id</param>
|
||||
/// <returns></returns>
|
||||
public async Task<RServiceResult<NarrationVerseSync[]>> GetPoemNarrationVerseSyncArray(int id)
|
||||
{
|
||||
try
|
||||
{
|
||||
var narration = await _context.AudioFiles.Where(a => a.Id == id).SingleOrDefaultAsync();
|
||||
var verses = await _context.GanjoorVerses.Where(v => v.PoemId == narration.GanjoorPostId).ToListAsync();
|
||||
|
||||
string xml = File.ReadAllText(narration.LocalXmlFilePath);
|
||||
|
||||
List<NarrationVerseSync> verseSyncs = new List<NarrationVerseSync>();
|
||||
|
||||
XElement elObject = XDocument.Parse(xml).Root;
|
||||
foreach (var syncInfo in elObject.Element("PoemAudio").Element("SyncArray").Elements("SyncInfo"))
|
||||
{
|
||||
int verseOrder = int.Parse(syncInfo.Element("VerseOrder").Value);
|
||||
if (verseOrder < 0) //this happens, seems to be a bug, I did not trace it yet
|
||||
verseOrder = 0;
|
||||
var verse = verses.Where(v => v.VOrder == verseOrder).Single();
|
||||
if(verse != null)
|
||||
{
|
||||
verseSyncs.Add(new NarrationVerseSync()
|
||||
{
|
||||
VerseOrder = verseOrder,
|
||||
VerseText = verse.Text,
|
||||
AudioStartMilliseconds = int.Parse(syncInfo.Element("AudioMiliseconds").Value)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return new RServiceResult<NarrationVerseSync[]>(verseSyncs.ToArray());
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<NarrationVerseSync[]>(null, exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// updates metadata for narration
|
||||
/// </summary>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user