From bf9962ea2f26c81e6e196e759e5770e743f15516 Mon Sep 17 00:00:00 2001 From: Hamid Reza Mohammadi Date: Thu, 26 Nov 2020 10:17:16 +0330 Subject: [PATCH] #41 retrypublish fixes --- .../Models/GanjoorAudio/AudioSyncStatus.cs | 2 +- .../ViewModels/RecitationViewModel.cs | 1 - RMuseum/RMuseum.xml | 5 -- RMuseum/Services/IBackgroundTaskQueue.cs | 2 + .../Implementation/BackgroundTaskQueue.cs | 8 ++ .../Implementation/RecitationService.cs | 83 ++++++++++++++----- 6 files changed, 73 insertions(+), 28 deletions(-) diff --git a/RMuseum/Models/GanjoorAudio/AudioSyncStatus.cs b/RMuseum/Models/GanjoorAudio/AudioSyncStatus.cs index be17eb23..237c9696 100644 --- a/RMuseum/Models/GanjoorAudio/AudioSyncStatus.cs +++ b/RMuseum/Models/GanjoorAudio/AudioSyncStatus.cs @@ -28,7 +28,7 @@ /// /// Xml file should be reuploaded /// - XmlFileChanged = 8, + //XmlFileChanged = 8, /// /// Item should be deleted diff --git a/RMuseum/Models/GanjoorAudio/ViewModels/RecitationViewModel.cs b/RMuseum/Models/GanjoorAudio/ViewModels/RecitationViewModel.cs index 6e9f4935..9c6be398 100644 --- a/RMuseum/Models/GanjoorAudio/ViewModels/RecitationViewModel.cs +++ b/RMuseum/Models/GanjoorAudio/ViewModels/RecitationViewModel.cs @@ -62,7 +62,6 @@ namespace RMuseum.Models.GanjoorAudio.ViewModels AudioSyncStatus.NewItem, AudioSyncStatus.MetadataChanged, AudioSyncStatus.SoundFilesChanged, - AudioSyncStatus.XmlFileChanged, AudioSyncStatus.Deleted }) { diff --git a/RMuseum/RMuseum.xml b/RMuseum/RMuseum.xml index a23ab48a..e0b463ed 100644 --- a/RMuseum/RMuseum.xml +++ b/RMuseum/RMuseum.xml @@ -1806,11 +1806,6 @@ sound files should be reuploaded (this means xml file is also needs to reuploaded) - - - Xml file should be reuploaded - - Item should be deleted diff --git a/RMuseum/Services/IBackgroundTaskQueue.cs b/RMuseum/Services/IBackgroundTaskQueue.cs index 65b76bab..6a4318fd 100644 --- a/RMuseum/Services/IBackgroundTaskQueue.cs +++ b/RMuseum/Services/IBackgroundTaskQueue.cs @@ -10,5 +10,7 @@ namespace RMuseum.Services Task> DequeueAsync( CancellationToken cancellationToken); + + int Count { get; } } } diff --git a/RMuseum/Services/Implementation/BackgroundTaskQueue.cs b/RMuseum/Services/Implementation/BackgroundTaskQueue.cs index e8c48102..20c24ffd 100644 --- a/RMuseum/Services/Implementation/BackgroundTaskQueue.cs +++ b/RMuseum/Services/Implementation/BackgroundTaskQueue.cs @@ -31,5 +31,13 @@ namespace RMuseum.Services.Implementation return workItem; } + + public int Count + { + get + { + return _workItems.Count; + } + } } } diff --git a/RMuseum/Services/Implementation/RecitationService.cs b/RMuseum/Services/Implementation/RecitationService.cs index 7027e67b..c57b7882 100644 --- a/RMuseum/Services/Implementation/RecitationService.cs +++ b/RMuseum/Services/Implementation/RecitationService.cs @@ -341,12 +341,9 @@ namespace RMuseum.Services.Implementation try { - - - string sql = $"UPDATE ganja_gaudio SET audio_title = '{narration.AudioTitle}',audio_artist = '{narration.AudioArtist}', " + - $"audio_artist_url = '{narration.AudioArtistUrl}',audio_src = '{narration.AudioSrc}',audio_src_url = '{narration.AudioSrcUrl}' " + - $" WHERE audio_post_ID = {narration.GanjoorPostId} AND audio_order = {narration.AudioOrder} AND audio_guid = '{narration.LegacyAudioGuid}'"; + $"audio_artist_url = '{narration.AudioArtistUrl}',audio_src = '{narration.AudioSrc}',audio_src_url = '{narration.AudioSrcUrl}', audio_order = {narration.AudioOrder} " + + $" WHERE audio_post_ID = {narration.GanjoorPostId} AND audio_guid = '{narration.LegacyAudioGuid}'"; using (MySqlConnection connection = new MySqlConnection @@ -784,8 +781,20 @@ namespace RMuseum.Services.Implementation async token => { using (RMuseumDbContext publishcontext = new RMuseumDbContext(Configuration)) //this is long running job, so _context might be already been freed/collected by GC - { - await _PublishNarration(existing, publishcontext, true); + { + RecitationPublishingTracker tracker = new RecitationPublishingTracker() + { + PoemNarrationId = existing.Id, + StartDate = DateTime.Now, + XmlFileCopied = false, + Mp3FileCopied = false, + FirstDbUpdated = false, + SecondDbUpdated = false, + }; + publishcontext.RecitationPublishingTrackers.Add(tracker); + await publishcontext.SaveChangesAsync(); + + await _PublishNarration(existing, tracker, publishcontext); } }); @@ -972,7 +981,19 @@ namespace RMuseum.Services.Implementation { using (RMuseumDbContext context = new RMuseumDbContext(Configuration)) //this is long running job, so _context might be already been freed/collected by GC { - await _PublishNarration(narration, context, false); + RecitationPublishingTracker tracker = new RecitationPublishingTracker() + { + PoemNarrationId = narration.Id, + StartDate = DateTime.Now, + XmlFileCopied = false, + Mp3FileCopied = false, + FirstDbUpdated = false, + SecondDbUpdated = false, + }; + context.RecitationPublishingTrackers.Add(tracker); + await context.SaveChangesAsync(); + + await _PublishNarration(narration, tracker, context); } }); } @@ -990,19 +1011,10 @@ namespace RMuseum.Services.Implementation - private async Task _PublishNarration(Recitation narration, RMuseumDbContext context, bool replace) + private async Task _PublishNarration(Recitation narration, RecitationPublishingTracker tracker, RMuseumDbContext context) { - RecitationPublishingTracker tracker = new RecitationPublishingTracker() - { - PoemNarrationId = narration.Id, - StartDate = DateTime.Now, - XmlFileCopied = false, - Mp3FileCopied = false, - FirstDbUpdated = false, - SecondDbUpdated = false, - }; - context.RecitationPublishingTrackers.Add(tracker); - await context.SaveChangesAsync(); + bool replace = narration.AudioSyncStatus == (int)AudioSyncStatus.SoundFilesChanged; + using var client = new SftpClient ( @@ -1158,6 +1170,9 @@ namespace RMuseum.Services.Implementation /// public async Task RetryPublish() { + if (_backgroundTaskQueue.Count > 0) + return; + var unpublishedQueue = await _context.RecitationPublishingTrackers.Where(r => r.Finished == false).ToArrayAsync(); if (unpublishedQueue.Length > 0) { @@ -1174,7 +1189,33 @@ namespace RMuseum.Services.Implementation var list = await context.Recitations.Where(a => a.ReviewStatus == AudioReviewStatus.Approved && a.AudioSyncStatus != (int)AudioSyncStatus.SynchronizedOrRejected).ToListAsync(); foreach (Recitation narration in list) { - await _PublishNarration(narration, context, false); + switch(narration.AudioSyncStatus) + { + case (int)AudioSyncStatus.NewItem: + case (int)AudioSyncStatus.SoundFilesChanged: + { + RecitationPublishingTracker tracker = new RecitationPublishingTracker() + { + PoemNarrationId = narration.Id, + StartDate = DateTime.Now, + XmlFileCopied = false, + Mp3FileCopied = false, + FirstDbUpdated = false, + SecondDbUpdated = false, + }; + context.RecitationPublishingTrackers.Add(tracker); + await context.SaveChangesAsync(); + await _PublishNarration(narration, tracker, context); + } + break; + case (int)AudioSyncStatus.MetadataChanged: + await _UpdateRemoteRecitations(narration, context); + break; + case (int)AudioSyncStatus.Deleted: + await _DeleteNarrationFromRemote(narration, context); + break; + } + } } });