From 4ffa95fa52d1f8d89ac0ee2040053dfc77319b34 Mon Sep 17 00:00:00 2001 From: Hamid Reza Mohammadi Date: Sun, 22 Nov 2020 16:58:16 +0330 Subject: [PATCH] #37 not tested successfully because of slowness of my laptop --- .../Implementation/RecitationService.cs | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/RMuseum/Services/Implementation/RecitationService.cs b/RMuseum/Services/Implementation/RecitationService.cs index 93cb3fbf..f1a8147f 100644 --- a/RMuseum/Services/Implementation/RecitationService.cs +++ b/RMuseum/Services/Implementation/RecitationService.cs @@ -187,22 +187,39 @@ namespace RMuseum.Services.Implementation List verseSyncs = new List(); XElement elObject = XDocument.Parse(xml).Root; + float oneSecond = 1; + if(elObject.Element("PoemAudio").Elements("OneSecondBugFix").Count() == 0) + { + oneSecond = 0.5f; + } 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; - verseOrder++; - var verse = verses.Where(v => v.VOrder == verseOrder).SingleOrDefault(); - if(verse != null) + if(verseOrder == 0) { verseSyncs.Add(new RecitationVerseSync() { - VerseOrder = verseOrder, - VerseText = verse.Text, - AudioStartMilliseconds = int.Parse(syncInfo.Element("AudioMiliseconds").Value) + VerseOrder = 0, + VerseText = (await _context.GanjoorPoems.Where(p => p.Id == narration.GanjoorPostId).FirstOrDefaultAsync()).Title, + AudioStartMilliseconds = (int)(oneSecond * int.Parse(syncInfo.Element("AudioMiliseconds").Value)) }); } + else + { + var verse = verses.Where(v => v.VOrder == verseOrder).SingleOrDefault(); + if (verse != null) + { + verseSyncs.Add(new RecitationVerseSync() + { + VerseOrder = verseOrder, + VerseText = verse.Text, + AudioStartMilliseconds = (int)(oneSecond * int.Parse(syncInfo.Element("AudioMiliseconds").Value)) + }); + } + } + } return new RServiceResult(verseSyncs.ToArray());