commit
afa5e5025b
@ -1423,7 +1423,7 @@ namespace RMuseum.Controllers
|
||||
loggedOnUserId,
|
||||
new Guid(User.Claims.FirstOrDefault(c => c.Type == "SessionId").Value),
|
||||
RMuseumSecurableItem.NoteEntityShortName,
|
||||
RMuseumSecurableItem.ModerateCommentsOperationShortName
|
||||
RMuseumSecurableItem.ModerateOperationShortName
|
||||
);
|
||||
if (!string.IsNullOrEmpty(canModerate.ExceptionString))
|
||||
return BadRequest(canModerate.ExceptionString);
|
||||
@ -1460,7 +1460,7 @@ namespace RMuseum.Controllers
|
||||
loggedOnUserId,
|
||||
new Guid(User.Claims.FirstOrDefault(c => c.Type == "SessionId").Value),
|
||||
RMuseumSecurableItem.NoteEntityShortName,
|
||||
RMuseumSecurableItem.ModerateCommentsOperationShortName
|
||||
RMuseumSecurableItem.ModerateOperationShortName
|
||||
);
|
||||
if (!string.IsNullOrEmpty(canModerate.ExceptionString))
|
||||
return BadRequest(canModerate.ExceptionString);
|
||||
|
||||
@ -1,10 +1,14 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Newtonsoft.Json;
|
||||
using RMuseum.Models.Auth.Memory;
|
||||
using RMuseum.Models.GanjoorAudio;
|
||||
using RMuseum.Models.GanjoorAudio.ViewModels;
|
||||
using RMuseum.Services;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using RSecurityBackend.Services;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Threading.Tasks;
|
||||
@ -16,6 +20,53 @@ namespace RMuseum.Controllers
|
||||
public class AudioNarrationController : Controller
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// Gets audio narrations, user must have narration::moderate permission to be able to see all users narrations
|
||||
/// </summary>
|
||||
/// <param name="paging"></param>
|
||||
/// <param name="allUsers">default: false, user must have narration::moderate permission to be able to see all users narrations</param>
|
||||
/// <param name="status">default: -1, unfiltered</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
[Authorize]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(IEnumerable<PoemNarrationViewModel>))]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
[ProducesResponseType((int)HttpStatusCode.Forbidden, Type = typeof(string))]
|
||||
|
||||
public async Task<IActionResult> Get([FromQuery] PagingParameterModel paging, bool allUsers = false, AudioReviewStatus status = AudioReviewStatus.All )
|
||||
{
|
||||
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
|
||||
Guid sessionId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "SessionId").Value);
|
||||
|
||||
if (allUsers)
|
||||
{
|
||||
RServiceResult<bool>
|
||||
canView =
|
||||
await _userPermissionChecker.Check
|
||||
(
|
||||
loggedOnUserId,
|
||||
sessionId,
|
||||
RMuseumSecurableItem.AudioNarrationEntityShortName,
|
||||
RMuseumSecurableItem.ModerateOperationShortName
|
||||
);
|
||||
if (!string.IsNullOrEmpty(canView.ExceptionString))
|
||||
return BadRequest(canView.ExceptionString);
|
||||
|
||||
if (!canView.Result)
|
||||
return StatusCode((int)HttpStatusCode.Forbidden);
|
||||
}
|
||||
|
||||
var res = await _audioService.GetAll(paging, allUsers ? Guid.Empty : loggedOnUserId, status);
|
||||
if(!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
|
||||
// Paging Header
|
||||
HttpContext.Response.Headers.Add("paging-headers", JsonConvert.SerializeObject(res.Result.PagingMeta));
|
||||
|
||||
return Ok(res.Result.Items);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// imports data from ganjoor MySql database
|
||||
/// </summary>
|
||||
|
||||
@ -51,7 +51,7 @@ namespace RMuseum.Models.Auth.Memory
|
||||
///<summary>
|
||||
/// moderate
|
||||
/// </summary>
|
||||
public const string ModerateCommentsOperationShortName = "moderate";
|
||||
public const string ModerateOperationShortName = "moderate";
|
||||
|
||||
///<summary>
|
||||
/// review suggested ganjoor links
|
||||
@ -108,7 +108,7 @@ namespace RMuseum.Models.Auth.Memory
|
||||
Description = "یادداشتها",
|
||||
Operations = new SecurableItemOperation[]
|
||||
{
|
||||
new SecurableItemOperation(ModerateCommentsOperationShortName, "بررسی", false)
|
||||
new SecurableItemOperation(ModerateOperationShortName, "بررسی", false)
|
||||
}
|
||||
},
|
||||
new SecurableItem()
|
||||
@ -118,7 +118,7 @@ namespace RMuseum.Models.Auth.Memory
|
||||
Operations = new SecurableItemOperation[]
|
||||
{
|
||||
new SecurableItemOperation(ImportOperationShortName, "ورود اطلاعات", false),
|
||||
new SecurableItemOperation(ModerateCommentsOperationShortName, "بررسی", false)
|
||||
new SecurableItemOperation(ModerateOperationShortName, "بررسی", false)
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@ -5,19 +5,27 @@
|
||||
/// </summary>
|
||||
public enum AudioReviewStatus
|
||||
{
|
||||
/// <summary>
|
||||
/// All / Unfiltered (for queris)
|
||||
/// </summary>
|
||||
All = -1,
|
||||
/// <summary>
|
||||
/// Draft
|
||||
/// </summary>
|
||||
Draft = 0,
|
||||
/// <summary>
|
||||
/// pending for review
|
||||
/// </summary>
|
||||
Pending = 0,
|
||||
Pending = 1,
|
||||
|
||||
/// <summary>
|
||||
/// approved
|
||||
/// </summary>
|
||||
Approved = 1,
|
||||
Approved = 2,
|
||||
|
||||
/// <summary>
|
||||
/// Rejected
|
||||
/// </summary>
|
||||
Rejected = 2
|
||||
Rejected = 3
|
||||
}
|
||||
}
|
||||
|
||||
@ -89,6 +89,11 @@ namespace RMuseum.Models.GanjoorAudio
|
||||
/// </remarks>
|
||||
public string RemoteXMLFilePath { get { return $"/i/{SoundFilesFolder}/x/{FileNameWithoutExtension}.xml"; } }
|
||||
|
||||
/// <summary>
|
||||
/// XML url
|
||||
/// </summary>
|
||||
public string XMLUrl { get { return $"https://i.ganjoor.net/{SoundFilesFolder}/x/{FileNameWithoutExtension}.xml"; } }
|
||||
|
||||
/// <summary>
|
||||
/// Audio Title
|
||||
/// </summary>
|
||||
|
||||
216
RMuseum/Models/GanjoorAudio/ViewModels/PoemNarrationViewModel.cs
Normal file
216
RMuseum/Models/GanjoorAudio/ViewModels/PoemNarrationViewModel.cs
Normal file
@ -0,0 +1,216 @@
|
||||
using RSecurityBackend.Models.Auth.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace RMuseum.Models.GanjoorAudio.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// Poem Narration view model
|
||||
/// </summary>
|
||||
public class PoemNarrationViewModel
|
||||
{
|
||||
/// <summary>
|
||||
/// constructor
|
||||
/// </summary>
|
||||
/// <param name="src"></param>
|
||||
public PoemNarrationViewModel(PoemNarration src)
|
||||
{
|
||||
Id = src.Id;
|
||||
Owner = new PublicRAppUser(src.Owner);
|
||||
GanjoorAudioId = src.GanjoorAudioId;
|
||||
GanjoorPostId = src.GanjoorPostId;
|
||||
AudioOrder = src.AudioOrder;
|
||||
FileNameWithoutExtension = src.FileNameWithoutExtension;
|
||||
SoundFilesFolder = src.SoundFilesFolder;
|
||||
AudioTitle = src.AudioTitle;
|
||||
AudioArtist = src.AudioArtist;
|
||||
AudioArtistUrl = src.AudioArtistUrl;
|
||||
AudioSrc = src.AudioSrc;
|
||||
AudioSrcUrl = src.AudioSrcUrl;
|
||||
LegacyAudioGuid = src.LegacyAudioGuid;
|
||||
Mp3FileCheckSum = src.Mp3FileCheckSum;
|
||||
Mp3SizeInBytes = src.Mp3SizeInBytes;
|
||||
OggSizeInBytes = src.OggSizeInBytes;
|
||||
LocalMp3FilePath = src.LocalMp3FilePath;
|
||||
LocalXmlFilePath = src.LocalXmlFilePath;
|
||||
ReviewStatus = src.ReviewStatus;
|
||||
UploadDate = src.UploadDate;
|
||||
ReviewDate = src.ReviewDate;
|
||||
List<AudioSyncStatus> lst = new List<AudioSyncStatus>();
|
||||
foreach(AudioSyncStatus status in
|
||||
new AudioSyncStatus[]
|
||||
{
|
||||
AudioSyncStatus.SynchronizedOrRejected,
|
||||
AudioSyncStatus.NewItem,
|
||||
AudioSyncStatus.MetadataChanged,
|
||||
AudioSyncStatus.SoundFilesChanged,
|
||||
AudioSyncStatus.XmlFileChanged,
|
||||
AudioSyncStatus.Deleted
|
||||
})
|
||||
{
|
||||
if(
|
||||
src.AudioSyncStatus == (( (int)status )| src.AudioSyncStatus)
|
||||
)
|
||||
{
|
||||
lst.Add(status);
|
||||
}
|
||||
}
|
||||
AudioSyncStatusArray = lst.ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Id
|
||||
/// </summary>
|
||||
public Guid Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Owner User
|
||||
/// </summary>
|
||||
public PublicRAppUser Owner { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Final data is actually exported to a MySQL database which this auto increment field is its key
|
||||
/// </summary>
|
||||
public int GanjoorAudioId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Ganjoor Post Id
|
||||
/// </summary>
|
||||
public int GanjoorPostId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// This determines where an audio is displayed between a list of sounds related to a specfic poem
|
||||
/// </summary>
|
||||
public int AudioOrder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Using this field content you would determine xml, mp3 and ogg file names
|
||||
/// </summary>
|
||||
public string FileNameWithoutExtension { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// combining this with <see cref="FileNameWithoutExtension"/> + .ext would preduce relative path of sound files on our file server the full path would become [HOMEPath] + '/i/' + this value
|
||||
/// </summary>
|
||||
/// <sample>
|
||||
/// "a2"
|
||||
/// </sample>
|
||||
/// <remarks>
|
||||
/// We had previously used different pathes because when a directory became overcrowded our connection time would increase unbearably due to IRAN internet problems, so it is sensible to store it per record and not as a global option value
|
||||
/// </remarks>
|
||||
public string SoundFilesFolder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// MP3 File Path
|
||||
/// </summary>
|
||||
public string RemoteMp3FilePath { get { return $"/i/{SoundFilesFolder}/{FileNameWithoutExtension}.mp3"; } }
|
||||
|
||||
/// <summary>
|
||||
/// MP3 url
|
||||
/// </summary>
|
||||
public string Mp3Url { get { return $"https://i.ganjoor.net/{SoundFilesFolder}/{FileNameWithoutExtension}.mp3"; } }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// OGG File Path
|
||||
/// </summary>
|
||||
public string RemoteOggFilePath { get { return $"/i/{SoundFilesFolder}/{FileNameWithoutExtension}.ogg"; } }
|
||||
|
||||
/// <summary>
|
||||
/// OGG url
|
||||
/// </summary>
|
||||
public string OggUrl { get { return $"https://i.ganjoor.net/{SoundFilesFolder}/{FileNameWithoutExtension}.ogg"; } }
|
||||
|
||||
/// <summary>
|
||||
/// This is also a legacy field
|
||||
/// </summary>
|
||||
/// <sample>
|
||||
/// "/i/a2/x"
|
||||
/// </sample>
|
||||
/// <remarks>
|
||||
/// XML Schema is defined based on Desktop Ganjoor (https://github.com/ganjoor/ganjoor) code, for
|
||||
/// more information take a look at this code:
|
||||
/// https://github.com/ganjoor/ganjoor/blob/master/ganjoor/Audio%20Support/PoemAudioListProcessor.cs
|
||||
/// </remarks>
|
||||
public string RemoteXMLFilePath { get { return $"/i/{SoundFilesFolder}/x/{FileNameWithoutExtension}.xml"; } }
|
||||
|
||||
/// <summary>
|
||||
/// XML url
|
||||
/// </summary>
|
||||
public string XMLUrl { get { return $"https://i.ganjoor.net/{SoundFilesFolder}/x/{FileNameWithoutExtension}.xml"; } }
|
||||
|
||||
/// <summary>
|
||||
/// Audio Title
|
||||
/// </summary>
|
||||
public string AudioTitle { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Audio Artist
|
||||
/// </summary>
|
||||
public string AudioArtist { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Audio Artist Url
|
||||
/// </summary>
|
||||
public string AudioArtistUrl { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Audio Source
|
||||
/// </summary>
|
||||
public string AudioSrc { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Audio Src Url
|
||||
/// </summary>
|
||||
public string AudioSrcUrl { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Legacy Audio Guid
|
||||
/// </summary>
|
||||
public Guid LegacyAudioGuid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Audio File CheckSum
|
||||
/// </summary>
|
||||
public string Mp3FileCheckSum { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// mp3 size in bytes
|
||||
/// </summary>
|
||||
public int Mp3SizeInBytes { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// ogg size in bytes
|
||||
/// </summary>
|
||||
public int OggSizeInBytes { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Upload Date
|
||||
/// </summary>
|
||||
public DateTime UploadDate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Review Date (Approve or Reject)
|
||||
/// </summary>
|
||||
public DateTime ReviewDate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// MP3 File local path on Windows Server (if item is not rejected probably it is not valid and it is deleted)
|
||||
/// </summary>
|
||||
public string LocalMp3FilePath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// XML File local path on Windows Server (if item is not rejected probably it is not valid and it is deleted)
|
||||
/// </summary>
|
||||
public string LocalXmlFilePath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Value is one or a combination of <see cref="RMuseum.Models.GanjoorAudio.AudioSyncStatus"/>
|
||||
/// </summary>
|
||||
public AudioSyncStatus[] AudioSyncStatusArray { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Review Status
|
||||
/// </summary>
|
||||
public AudioReviewStatus ReviewStatus { get; set; }
|
||||
}
|
||||
}
|
||||
@ -620,6 +620,15 @@
|
||||
Captcha service
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.AudioNarrationController.Get(RSecurityBackend.Models.Generic.PagingParameterModel,System.Boolean,RMuseum.Models.GanjoorAudio.AudioReviewStatus)">
|
||||
<summary>
|
||||
Gets audio narrations, user must have narration::moderate permission to be able to see all users narrations
|
||||
</summary>
|
||||
<param name="paging"></param>
|
||||
<param name="allUsers">default: false, user must have narration::moderate permission to be able to see all users narrations</param>
|
||||
<param name="status">default: -1, unfiltered</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.AudioNarrationController.MysqlonetimeImport">
|
||||
<summary>
|
||||
imports data from ganjoor MySql database
|
||||
@ -1404,7 +1413,7 @@
|
||||
import
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:RMuseum.Models.Auth.Memory.RMuseumSecurableItem.ModerateCommentsOperationShortName">
|
||||
<member name="F:RMuseum.Models.Auth.Memory.RMuseumSecurableItem.ModerateOperationShortName">
|
||||
<summary>
|
||||
moderate
|
||||
</summary>
|
||||
@ -1534,6 +1543,16 @@
|
||||
Audio Review Status
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:RMuseum.Models.GanjoorAudio.AudioReviewStatus.All">
|
||||
<summary>
|
||||
All / Unfiltered (for queris)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:RMuseum.Models.GanjoorAudio.AudioReviewStatus.Draft">
|
||||
<summary>
|
||||
Draft
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:RMuseum.Models.GanjoorAudio.AudioReviewStatus.Pending">
|
||||
<summary>
|
||||
pending for review
|
||||
@ -1668,6 +1687,11 @@
|
||||
https://github.com/ganjoor/ganjoor/blob/master/ganjoor/Audio%20Support/PoemAudioListProcessor.cs
|
||||
</remarks>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.PoemNarration.XMLUrl">
|
||||
<summary>
|
||||
XML url
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.PoemNarration.AudioTitle">
|
||||
<summary>
|
||||
Audio Title
|
||||
@ -1743,6 +1767,171 @@
|
||||
Review Status
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel">
|
||||
<summary>
|
||||
Poem Narration view model
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.#ctor(RMuseum.Models.GanjoorAudio.PoemNarration)">
|
||||
<summary>
|
||||
constructor
|
||||
</summary>
|
||||
<param name="src"></param>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.Id">
|
||||
<summary>
|
||||
Id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.Owner">
|
||||
<summary>
|
||||
Owner User
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.GanjoorAudioId">
|
||||
<summary>
|
||||
Final data is actually exported to a MySQL database which this auto increment field is its key
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.GanjoorPostId">
|
||||
<summary>
|
||||
Ganjoor Post Id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.AudioOrder">
|
||||
<summary>
|
||||
This determines where an audio is displayed between a list of sounds related to a specfic poem
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.FileNameWithoutExtension">
|
||||
<summary>
|
||||
Using this field content you would determine xml, mp3 and ogg file names
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.SoundFilesFolder">
|
||||
<summary>
|
||||
combining this with <see cref="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.FileNameWithoutExtension"/> + .ext would preduce relative path of sound files on our file server the full path would become [HOMEPath] + '/i/' + this value
|
||||
</summary>
|
||||
<sample>
|
||||
"a2"
|
||||
</sample>
|
||||
<remarks>
|
||||
We had previously used different pathes because when a directory became overcrowded our connection time would increase unbearably due to IRAN internet problems, so it is sensible to store it per record and not as a global option value
|
||||
</remarks>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.RemoteMp3FilePath">
|
||||
<summary>
|
||||
MP3 File Path
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.Mp3Url">
|
||||
<summary>
|
||||
MP3 url
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.RemoteOggFilePath">
|
||||
<summary>
|
||||
OGG File Path
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.OggUrl">
|
||||
<summary>
|
||||
OGG url
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.RemoteXMLFilePath">
|
||||
<summary>
|
||||
This is also a legacy field
|
||||
</summary>
|
||||
<sample>
|
||||
"/i/a2/x"
|
||||
</sample>
|
||||
<remarks>
|
||||
XML Schema is defined based on Desktop Ganjoor (https://github.com/ganjoor/ganjoor) code, for
|
||||
more information take a look at this code:
|
||||
https://github.com/ganjoor/ganjoor/blob/master/ganjoor/Audio%20Support/PoemAudioListProcessor.cs
|
||||
</remarks>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.XMLUrl">
|
||||
<summary>
|
||||
XML url
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.AudioTitle">
|
||||
<summary>
|
||||
Audio Title
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.AudioArtist">
|
||||
<summary>
|
||||
Audio Artist
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.AudioArtistUrl">
|
||||
<summary>
|
||||
Audio Artist Url
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.AudioSrc">
|
||||
<summary>
|
||||
Audio Source
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.AudioSrcUrl">
|
||||
<summary>
|
||||
Audio Src Url
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.LegacyAudioGuid">
|
||||
<summary>
|
||||
Legacy Audio Guid
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.Mp3FileCheckSum">
|
||||
<summary>
|
||||
Audio File CheckSum
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.Mp3SizeInBytes">
|
||||
<summary>
|
||||
mp3 size in bytes
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.OggSizeInBytes">
|
||||
<summary>
|
||||
ogg size in bytes
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.UploadDate">
|
||||
<summary>
|
||||
Upload Date
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.ReviewDate">
|
||||
<summary>
|
||||
Review Date (Approve or Reject)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.LocalMp3FilePath">
|
||||
<summary>
|
||||
MP3 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.PoemNarrationViewModel.LocalXmlFilePath">
|
||||
<summary>
|
||||
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.PoemNarrationViewModel.AudioSyncStatusArray">
|
||||
<summary>
|
||||
Value is one or a combination of <see cref="T:RMuseum.Models.GanjoorAudio.AudioSyncStatus"/>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel.ReviewStatus">
|
||||
<summary>
|
||||
Review Status
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.GanjoorIntegration.GanjoorLink">
|
||||
<summary>
|
||||
ganjoor link for artifacts and items
|
||||
@ -3029,6 +3218,15 @@
|
||||
Audio Narration Service
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IAudioNarrationService.GetAll(RSecurityBackend.Models.Generic.PagingParameterModel,System.Guid,RMuseum.Models.GanjoorAudio.AudioReviewStatus)">
|
||||
<summary>
|
||||
returns list of narrations
|
||||
</summary>
|
||||
<param name="paging"></param>
|
||||
<param name="filteredUserId">send Guid.Empty if you want all narrations</param>
|
||||
<param name="status"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IAudioNarrationService.OneTimeImport(System.Guid)">
|
||||
<summary>
|
||||
imports data from ganjoor MySql database
|
||||
@ -3749,6 +3947,15 @@
|
||||
Audio Narration Service Implementation
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.AudioNarrationService.GetAll(RSecurityBackend.Models.Generic.PagingParameterModel,System.Guid,RMuseum.Models.GanjoorAudio.AudioReviewStatus)">
|
||||
<summary>
|
||||
returns list of narrations
|
||||
</summary>
|
||||
<param name="paging"></param>
|
||||
<param name="filteredUserId">send Guid.Empty if you want all narrations</param>
|
||||
<param name="status"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.AudioNarrationService.OneTimeImport(System.Guid)">
|
||||
<summary>
|
||||
imports data from ganjoor MySql database
|
||||
|
||||
@ -1,4 +1,6 @@
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using RMuseum.Models.GanjoorAudio;
|
||||
using RMuseum.Models.GanjoorAudio.ViewModels;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
@ -9,6 +11,15 @@ namespace RMuseum.Services
|
||||
/// </summary>
|
||||
public interface IAudioNarrationService
|
||||
{
|
||||
/// <summary>
|
||||
/// returns list of narrations
|
||||
/// </summary>
|
||||
/// <param name="paging"></param>
|
||||
/// <param name="filteredUserId">send Guid.Empty if you want all narrations</param>
|
||||
/// <param name="status"></param>
|
||||
/// <returns></returns>
|
||||
public Task<RServiceResult<(PaginationMetadata PagingMeta, PoemNarrationViewModel[] Items)>> GetAll(PagingParameterModel paging, Guid filteredUserId, AudioReviewStatus status);
|
||||
|
||||
/// <summary>
|
||||
/// imports data from ganjoor MySql database
|
||||
/// </summary>
|
||||
|
||||
@ -3,21 +3,64 @@ using Microsoft.Extensions.Configuration;
|
||||
using MySql.Data.MySqlClient;
|
||||
using RMuseum.DbContext;
|
||||
using RMuseum.Models.GanjoorAudio;
|
||||
using RMuseum.Models.GanjoorAudio.ViewModels;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using RSecurityBackend.Services.Implementation;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Security.Policy;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RMuseum.Services.Implementation
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// Audio Narration Service Implementation
|
||||
/// </summary>
|
||||
public class AudioNarrationService : IAudioNarrationService
|
||||
{
|
||||
/// <summary>
|
||||
/// returns list of narrations
|
||||
/// </summary>
|
||||
/// <param name="paging"></param>
|
||||
/// <param name="filteredUserId">send Guid.Empty if you want all narrations</param>
|
||||
/// <param name="status"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<RServiceResult<(PaginationMetadata PagingMeta, PoemNarrationViewModel[] Items)>> GetAll(PagingParameterModel paging, Guid filteredUserId, AudioReviewStatus status)
|
||||
{
|
||||
try
|
||||
{
|
||||
var source =
|
||||
|
||||
_context.AudioFiles
|
||||
.Include(a => a.Owner)
|
||||
.Where(a =>
|
||||
(filteredUserId == Guid.Empty || a.OwnerId == filteredUserId)
|
||||
&&
|
||||
(status == AudioReviewStatus.All || a.ReviewStatus == status)
|
||||
)
|
||||
.OrderBy(a => a.UploadDate)
|
||||
.AsQueryable();
|
||||
|
||||
(PaginationMetadata PagingMeta, PoemNarration[] Items) paginatedResult =
|
||||
await QueryablePaginator<PoemNarration>.Paginate(source, paging);
|
||||
|
||||
List<PoemNarrationViewModel> res = new List<PoemNarrationViewModel>();
|
||||
foreach(PoemNarration audio in paginatedResult.Items)
|
||||
{
|
||||
res.Add(new PoemNarrationViewModel(audio));
|
||||
}
|
||||
|
||||
return new RServiceResult<(PaginationMetadata PagingMeta, PoemNarrationViewModel[] Items)>((paginatedResult.PagingMeta, res.ToArray()));
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<(PaginationMetadata PagingMeta, PoemNarrationViewModel[] Items)>((PagingMeta: null, Items: null), exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// imports data from ganjoor MySql database
|
||||
/// </summary>
|
||||
|
||||
@ -14,17 +14,17 @@
|
||||
const int MaxPageSize = 1000;
|
||||
|
||||
/// <summary>
|
||||
/// page number
|
||||
/// page number starting from 1
|
||||
/// </summary>
|
||||
public int PageNumber { get; set; } = 1;
|
||||
|
||||
/// <summary>
|
||||
/// actual page size
|
||||
/// actual page size (-1 == all items)
|
||||
/// </summary>
|
||||
private int _pageSize { get; set; } = -1;
|
||||
|
||||
/// <summary>
|
||||
/// settable page size
|
||||
/// settable page size (-1 == all items, 1000 maxpagesize)
|
||||
/// </summary>
|
||||
public int PageSize
|
||||
{
|
||||
|
||||
@ -1669,17 +1669,17 @@
|
||||
</member>
|
||||
<member name="P:RSecurityBackend.Models.Generic.PagingParameterModel.PageNumber">
|
||||
<summary>
|
||||
page number
|
||||
page number starting from 1
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RSecurityBackend.Models.Generic.PagingParameterModel._pageSize">
|
||||
<summary>
|
||||
actual page size
|
||||
actual page size (-1 == all items)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RSecurityBackend.Models.Generic.PagingParameterModel.PageSize">
|
||||
<summary>
|
||||
settable page size
|
||||
settable page size (-1 == all items, 1000 maxpagesize)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RSecurityBackend.Models.Generic.RServiceResult`1">
|
||||
|
||||
Loading…
Reference in New Issue
Block a user