diff --git a/RMuseum/Controllers/RecitationController.cs b/RMuseum/Controllers/RecitationController.cs
index a6f5505f..c77ccabe 100644
--- a/RMuseum/Controllers/RecitationController.cs
+++ b/RMuseum/Controllers/RecitationController.cs
@@ -600,6 +600,25 @@ namespace RMuseum.Controllers
}
+ ///
+ /// Synchronization Queue
+ ///
+ ///
+ [HttpGet("syncqueue")]
+ [Authorize]
+ [ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(IEnumerable))]
+ [ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
+ [ProducesResponseType((int)HttpStatusCode.Forbidden, Type = typeof(string))]
+ public async Task GetSynchronizationQueue()
+ {
+ Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
+ var res = await _audioService.GetSynchronizationQueue(loggedOnUserId);
+ if (!string.IsNullOrEmpty(res.ExceptionString))
+ return BadRequest(res.ExceptionString);
+
+ return Ok(res.Result);
+ }
+
///
/// constructor
///
diff --git a/RMuseum/Models/GanjoorAudio/AudioSyncStatus.cs b/RMuseum/Models/GanjoorAudio/AudioSyncStatus.cs
index 237c9696..da478c6b 100644
--- a/RMuseum/Models/GanjoorAudio/AudioSyncStatus.cs
+++ b/RMuseum/Models/GanjoorAudio/AudioSyncStatus.cs
@@ -23,7 +23,7 @@
///
/// sound files should be reuploaded (this means xml file is also needs to reuploaded)
///
- SoundFilesChanged = 4,
+ SoundOrXMLFilesChanged = 4,
///
/// Xml file should be reuploaded
diff --git a/RMuseum/Models/GanjoorAudio/Recitation.cs b/RMuseum/Models/GanjoorAudio/Recitation.cs
index 58f13336..6c6550a3 100644
--- a/RMuseum/Models/GanjoorAudio/Recitation.cs
+++ b/RMuseum/Models/GanjoorAudio/Recitation.cs
@@ -169,9 +169,9 @@ namespace RMuseum.Models.GanjoorAudio
public string LocalXmlFilePath { get; set; }
///
- /// Value is one or a combination of
+ /// AudioSyncStatus
///
- public int AudioSyncStatus { get; set; }
+ public AudioSyncStatus AudioSyncStatus { get; set; }
///
/// Review Status
diff --git a/RMuseum/Models/GanjoorAudio/ViewModels/RecitationViewModel.cs b/RMuseum/Models/GanjoorAudio/ViewModels/RecitationViewModel.cs
index 9c6be398..b80fbf1c 100644
--- a/RMuseum/Models/GanjoorAudio/ViewModels/RecitationViewModel.cs
+++ b/RMuseum/Models/GanjoorAudio/ViewModels/RecitationViewModel.cs
@@ -53,26 +53,7 @@ namespace RMuseum.Models.GanjoorAudio.ViewModels
PoemFullTitle = poem.FullTitle;
PoemFullUrl = poem.FullUrl;
}
-
- List lst = new List();
- foreach(AudioSyncStatus status in
- new AudioSyncStatus[]
- {
- AudioSyncStatus.SynchronizedOrRejected,
- AudioSyncStatus.NewItem,
- AudioSyncStatus.MetadataChanged,
- AudioSyncStatus.SoundFilesChanged,
- AudioSyncStatus.Deleted
- })
- {
- if(
- src.AudioSyncStatus == (( (int)status )| src.AudioSyncStatus)
- )
- {
- lst.Add(status);
- }
- }
- AudioSyncStatusArray = lst.ToArray();
+ AudioSyncStatus = src.AudioSyncStatus;
ReviewMsg = src.ReviewMsg;
}
@@ -240,7 +221,7 @@ namespace RMuseum.Models.GanjoorAudio.ViewModels
///
/// Value is one or a combination of
///
- public AudioSyncStatus[] AudioSyncStatusArray { get; set; }
+ public AudioSyncStatus AudioSyncStatus { get; set; }
///
/// Review Status
diff --git a/RMuseum/RMuseum.xml b/RMuseum/RMuseum.xml
index e0b463ed..fdfa4361 100644
--- a/RMuseum/RMuseum.xml
+++ b/RMuseum/RMuseum.xml
@@ -849,6 +849,12 @@
+
+
+ Synchronization Queue
+
+
+
constructor
@@ -1801,7 +1807,7 @@
meta data should be updated
-
+
sound files should be reuploaded (this means xml file is also needs to reuploaded)
@@ -1976,7 +1982,7 @@
- Value is one or a combination of
+ AudioSyncStatus
@@ -2348,7 +2354,7 @@
XML File local path on Windows Server (if item is not rejected probably it is not valid and it is deleted)
-
+
Value is one or a combination of
@@ -5173,6 +5179,13 @@
+
+
+ Synchronization Queue
+
+
+
+
Configuration
@@ -5519,6 +5532,13 @@
+
+
+ Synchronization Queue
+
+
+
+
Internal messaging system interface
diff --git a/RMuseum/Services/IRecitationService.cs b/RMuseum/Services/IRecitationService.cs
index e013f00a..04bbd13e 100644
--- a/RMuseum/Services/IRecitationService.cs
+++ b/RMuseum/Services/IRecitationService.cs
@@ -181,5 +181,12 @@ namespace RMuseum.Services
///
///
Task> MakeArtistRecitationsFirst(string artistName);
+
+ ///
+ /// Synchronization Queue
+ ///
+ ///
+ ///
+ Task> GetSynchronizationQueue(Guid filteredUserId);
}
}
diff --git a/RMuseum/Services/Implementation/RecitationService.cs b/RMuseum/Services/Implementation/RecitationService.cs
index b9622fe4..ca8b3118 100644
--- a/RMuseum/Services/Implementation/RecitationService.cs
+++ b/RMuseum/Services/Implementation/RecitationService.cs
@@ -116,7 +116,7 @@ namespace RMuseum.Services.Implementation
if (recitation.ReviewStatus == AudioReviewStatus.Approved)
{
- recitation.AudioSyncStatus = (int)AudioSyncStatus.Deleted;
+ recitation.AudioSyncStatus = AudioSyncStatus.Deleted;
_context.Recitations.Update(recitation);
await _context.SaveChangesAsync();
@@ -311,7 +311,7 @@ namespace RMuseum.Services.Implementation
if(narration.ReviewStatus == AudioReviewStatus.Approved)
{
- narration.AudioSyncStatus = (int)AudioSyncStatus.MetadataChanged;
+ narration.AudioSyncStatus = AudioSyncStatus.MetadataChanged;
_context.Recitations.Update(narration);
await _context.SaveChangesAsync();
@@ -366,7 +366,7 @@ namespace RMuseum.Services.Implementation
}
- narration.AudioSyncStatus = (int)AudioSyncStatus.SynchronizedOrRejected;
+ narration.AudioSyncStatus = AudioSyncStatus.SynchronizedOrRejected;
context.Recitations.Update(narration);
await context.SaveChangesAsync();
@@ -413,9 +413,6 @@ namespace RMuseum.Services.Implementation
{
await src.FillAsync(srcData);
- int audioSyncStatus = (int)AudioSyncStatus.SynchronizedOrRejected;
-
-
foreach (DataRow row in srcData.Rows)
{
@@ -435,7 +432,7 @@ namespace RMuseum.Services.Implementation
Mp3SizeInBytes = (int)row["audio_mp3bsize"],
OggSizeInBytes = (int)row["audio_oggbsize"],
UploadDate = (DateTime)row["audio_date"],
- AudioSyncStatus = audioSyncStatus,
+ AudioSyncStatus = AudioSyncStatus.SynchronizedOrRejected,
ReviewStatus = AudioReviewStatus.Approved
};
newRecord.FileLastUpdated = newRecord.UploadDate;
@@ -770,7 +767,7 @@ namespace RMuseum.Services.Implementation
existing.Mp3FileCheckSum = audio.FileCheckSum;
existing.Mp3SizeInBytes = mp3fileSize;
existing.FileLastUpdated = session.UploadEndTime;
- existing.AudioSyncStatus = (int)AudioSyncStatus.SoundFilesChanged;
+ existing.AudioSyncStatus = AudioSyncStatus.SoundOrXMLFilesChanged;
context.Recitations.Update(existing);
@@ -834,7 +831,7 @@ namespace RMuseum.Services.Implementation
FileLastUpdated = session.UploadEndTime,
LocalMp3FilePath = localMp3FilePath,
LocalXmlFilePath = localXmlFilePath,
- AudioSyncStatus = (int)AudioSyncStatus.NewItem,
+ AudioSyncStatus = AudioSyncStatus.NewItem,
ReviewStatus = AudioReviewStatus.Draft
};
@@ -944,7 +941,7 @@ namespace RMuseum.Services.Implementation
}
if (narration.ReviewStatus == AudioReviewStatus.Rejected)
{
- narration.AudioSyncStatus = (int)AudioSyncStatus.SynchronizedOrRejected;
+ narration.AudioSyncStatus = AudioSyncStatus.SynchronizedOrRejected;
File.Delete(narration.LocalMp3FilePath);
File.Delete(narration.LocalXmlFilePath);
}
@@ -1013,7 +1010,7 @@ namespace RMuseum.Services.Implementation
private async Task _PublishNarration(Recitation narration, RecitationPublishingTracker tracker, RMuseumDbContext context)
{
- bool replace = narration.AudioSyncStatus == (int)AudioSyncStatus.SoundFilesChanged;
+ bool replace = narration.AudioSyncStatus == AudioSyncStatus.SoundOrXMLFilesChanged;
using var client = new SftpClient
@@ -1086,7 +1083,7 @@ namespace RMuseum.Services.Implementation
- narration.AudioSyncStatus = (int)AudioSyncStatus.SynchronizedOrRejected;
+ narration.AudioSyncStatus = AudioSyncStatus.SynchronizedOrRejected;
context.Recitations.Update(narration);
await context.SaveChangesAsync();
@@ -1193,13 +1190,13 @@ 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
{
- var list = await context.Recitations.Where(a => a.ReviewStatus == AudioReviewStatus.Approved && a.AudioSyncStatus != (int)AudioSyncStatus.SynchronizedOrRejected).ToListAsync();
+ var list = await context.Recitations.Where(a => a.ReviewStatus == AudioReviewStatus.Approved && a.AudioSyncStatus != AudioSyncStatus.SynchronizedOrRejected).ToListAsync();
foreach (Recitation narration in list)
{
switch(narration.AudioSyncStatus)
{
- case (int)AudioSyncStatus.NewItem:
- case (int)AudioSyncStatus.SoundFilesChanged:
+ case AudioSyncStatus.NewItem:
+ case AudioSyncStatus.SoundOrXMLFilesChanged:
{
RecitationPublishingTracker tracker = new RecitationPublishingTracker()
{
@@ -1215,10 +1212,10 @@ namespace RMuseum.Services.Implementation
await _PublishNarration(narration, tracker, context);
}
break;
- case (int)AudioSyncStatus.MetadataChanged:
+ case AudioSyncStatus.MetadataChanged:
await _UpdateRemoteRecitations(narration, context);
break;
- case (int)AudioSyncStatus.Deleted:
+ case AudioSyncStatus.Deleted:
await _DeleteNarrationFromRemote(narration, context);
break;
}
@@ -1639,7 +1636,7 @@ namespace RMuseum.Services.Implementation
foreach(Recitation other in otherRecitaions)
{
other.AudioOrder = other.AudioOrder + 1;
- other.AudioSyncStatus = (int)AudioSyncStatus.MetadataChanged;
+ other.AudioSyncStatus = AudioSyncStatus.MetadataChanged;
_context.Recitations.Update(other);
await _context.SaveChangesAsync();
@@ -1647,7 +1644,7 @@ namespace RMuseum.Services.Implementation
}
recitation.AudioOrder = 1;
- recitation.AudioSyncStatus = (int)AudioSyncStatus.MetadataChanged;
+ recitation.AudioSyncStatus = AudioSyncStatus.MetadataChanged;
_context.Recitations.Update(recitation);
await _UpdateRemoteRecitations(recitation, _context);
@@ -1662,6 +1659,36 @@ namespace RMuseum.Services.Implementation
}
}
+ ///
+ /// Synchronization Queue
+ ///
+ ///
+ ///
+ public async Task> GetSynchronizationQueue(Guid filteredUserId)
+ {
+ try
+ {
+ var source =
+ from audio in _context.Recitations.Include(a => a.Owner)
+ join poem in _context.GanjoorPoems
+ on audio.GanjoorPostId equals poem.Id
+ where
+ (filteredUserId == Guid.Empty || audio.OwnerId == filteredUserId)
+ &&
+ audio.ReviewStatus == AudioReviewStatus.Approved
+ &&
+ audio.AudioSyncStatus != AudioSyncStatus.SynchronizedOrRejected
+ orderby audio.UploadDate descending
+ select new RecitationViewModel(audio, audio.Owner, poem);
+
+ return new RServiceResult(await source.ToArrayAsync());
+ }
+ catch (Exception exp)
+ {
+ return new RServiceResult(null, exp.ToString());
+ }
+ }
+
///
/// Configuration
///