#44 syncque api
This commit is contained in:
parent
d7e4ebc760
commit
f6696f129f
@ -600,6 +600,25 @@ namespace RMuseum.Controllers
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Synchronization Queue
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet("syncqueue")]
|
||||
[Authorize]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(IEnumerable<RecitationViewModel>))]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
[ProducesResponseType((int)HttpStatusCode.Forbidden, Type = typeof(string))]
|
||||
public async Task<IActionResult> 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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// constructor
|
||||
/// </summary>
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
/// <summary>
|
||||
/// sound files should be reuploaded (this means xml file is also needs to reuploaded)
|
||||
/// </summary>
|
||||
SoundFilesChanged = 4,
|
||||
SoundOrXMLFilesChanged = 4,
|
||||
|
||||
/// <summary>
|
||||
/// Xml file should be reuploaded
|
||||
|
||||
@ -169,9 +169,9 @@ namespace RMuseum.Models.GanjoorAudio
|
||||
public string LocalXmlFilePath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Value is one or a combination of <see cref="RMuseum.Models.GanjoorAudio.AudioSyncStatus"/>
|
||||
/// AudioSyncStatus
|
||||
/// </summary>
|
||||
public int AudioSyncStatus { get; set; }
|
||||
public AudioSyncStatus AudioSyncStatus { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Review Status
|
||||
|
||||
@ -53,26 +53,7 @@ namespace RMuseum.Models.GanjoorAudio.ViewModels
|
||||
PoemFullTitle = poem.FullTitle;
|
||||
PoemFullUrl = poem.FullUrl;
|
||||
}
|
||||
|
||||
List<AudioSyncStatus> lst = new List<AudioSyncStatus>();
|
||||
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
|
||||
/// <summary>
|
||||
/// Value is one or a combination of <see cref="RMuseum.Models.GanjoorAudio.AudioSyncStatus"/>
|
||||
/// </summary>
|
||||
public AudioSyncStatus[] AudioSyncStatusArray { get; set; }
|
||||
public AudioSyncStatus AudioSyncStatus { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Review Status
|
||||
|
||||
@ -849,6 +849,12 @@
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.RecitationController.GetSynchronizationQueue">
|
||||
<summary>
|
||||
Synchronization Queue
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.RecitationController.#ctor(RMuseum.Services.IRecitationService,RSecurityBackend.Services.IUserPermissionChecker,RSecurityBackend.Services.IAppUserService)">
|
||||
<summary>
|
||||
constructor
|
||||
@ -1801,7 +1807,7 @@
|
||||
meta data should be updated
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:RMuseum.Models.GanjoorAudio.AudioSyncStatus.SoundFilesChanged">
|
||||
<member name="F:RMuseum.Models.GanjoorAudio.AudioSyncStatus.SoundOrXMLFilesChanged">
|
||||
<summary>
|
||||
sound files should be reuploaded (this means xml file is also needs to reuploaded)
|
||||
</summary>
|
||||
@ -1976,7 +1982,7 @@
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.Recitation.AudioSyncStatus">
|
||||
<summary>
|
||||
Value is one or a combination of <see cref="T:RMuseum.Models.GanjoorAudio.AudioSyncStatus"/>
|
||||
AudioSyncStatus
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.Recitation.ReviewStatus">
|
||||
@ -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)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.RecitationViewModel.AudioSyncStatusArray">
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.RecitationViewModel.AudioSyncStatus">
|
||||
<summary>
|
||||
Value is one or a combination of <see cref="T:RMuseum.Models.GanjoorAudio.AudioSyncStatus"/>
|
||||
</summary>
|
||||
@ -5173,6 +5179,13 @@
|
||||
<param name="artistName"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.RecitationService.GetSynchronizationQueue(System.Guid)">
|
||||
<summary>
|
||||
Synchronization Queue
|
||||
</summary>
|
||||
<param name="filteredUserId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:RMuseum.Services.Implementation.RecitationService.Configuration">
|
||||
<summary>
|
||||
Configuration
|
||||
@ -5519,6 +5532,13 @@
|
||||
<param name="artistName"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IRecitationService.GetSynchronizationQueue(System.Guid)">
|
||||
<summary>
|
||||
Synchronization Queue
|
||||
</summary>
|
||||
<param name="filteredUserId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:RMuseum.Services.IRNotificationService">
|
||||
<summary>
|
||||
Internal messaging system interface
|
||||
|
||||
@ -181,5 +181,12 @@ namespace RMuseum.Services
|
||||
/// <param name="artistName"></param>
|
||||
/// <returns></returns>
|
||||
Task<RServiceResult<int>> MakeArtistRecitationsFirst(string artistName);
|
||||
|
||||
/// <summary>
|
||||
/// Synchronization Queue
|
||||
/// </summary>
|
||||
/// <param name="filteredUserId"></param>
|
||||
/// <returns></returns>
|
||||
Task<RServiceResult<RecitationViewModel[]>> GetSynchronizationQueue(Guid filteredUserId);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Synchronization Queue
|
||||
/// </summary>
|
||||
/// <param name="filteredUserId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<RServiceResult<RecitationViewModel[]>> 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<RecitationViewModel[]>(await source.ToArrayAsync());
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<RecitationViewModel[]>(null, exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Configuration
|
||||
/// </summary>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user