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;
+ }
+
}
}
});