using RSecurityBackend.Models.Auth.Db; using System; namespace RMuseum.Models.GanjoorAudio { /// /// Poem Narration /// public class Recitation { /// /// Id /// public int Id { get; set; } /// /// Owner User /// public RAppUser Owner { get; set; } /// /// Owner User Id /// public Guid OwnerId { get; set; } /// /// Final data is actually exported to a MySQL database which this auto increment field is its key /// public int GanjoorAudioId { get; set; } /// /// Ganjoor Post Id /// /// /// Caution: this could become a relation with newly added table /// but if we do this we lose the ability to drop and create without losing narration data /// public int GanjoorPostId { get; set; } /// /// This determines where an audio is displayed between a list of sounds related to a specfic poem /// public int AudioOrder { get; set; } /// /// Using this field content you would determine xml, mp3 and ogg file names /// public string FileNameWithoutExtension { get; set; } /// /// combining this with + .ext would preduce relative path of sound files on our file server the full path would become [HOMEPath] + '/i/' + this value /// /// /// "a2" /// /// /// 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 /// public string SoundFilesFolder { get; set; } /// /// MP3 File Path /// public string RemoteMp3FilePath { get { return $"/{SoundFilesFolder}/{FileNameWithoutExtension}.mp3"; } } /// /// MP3 url /// public string Mp3Url { get { return $"https://i.ganjoor.net/{SoundFilesFolder}/{FileNameWithoutExtension}.mp3"; } } /// /// This is also a legacy field /// /// /// "/a2/x" /// /// /// 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 /// public string RemoteXMLFilePath { get { return $"/{SoundFilesFolder}/x/{FileNameWithoutExtension}.xml"; } } /// /// XML url /// public string XMLUrl { get { return $"https://i.ganjoor.net/{SoundFilesFolder}/x/{FileNameWithoutExtension}.xml"; } } /// /// Audio Title /// public string AudioTitle { get; set; } /// /// Audio Artist /// public string AudioArtist { get; set; } /// /// Audio Artist Url /// public string AudioArtistUrl { get; set; } /// /// Audio Source /// public string AudioSrc { get; set; } /// /// Audio Src Url /// public string AudioSrcUrl { get; set; } /// /// Legacy Audio Guid /// public Guid LegacyAudioGuid { get; set; } /// /// Audio File CheckSum /// public string Mp3FileCheckSum { get; set; } /// /// mp3 size in bytes /// public int Mp3SizeInBytes { get; set; } /// /// ogg size in bytes /// public int OggSizeInBytes { get; set; } /// /// Upload Date /// public DateTime UploadDate { get; set; } /// /// File Last Updated /// public DateTime FileLastUpdated { get; set; } /// /// Review Date (Approve or Reject) /// public DateTime ReviewDate{ get; set; } /// /// MP3 File local path on Windows Server (if item is not rejected probably it is not valid and it is deleted) /// public string LocalMp3FilePath { get; set; } /// /// XML File local path on Windows Server (if item is not rejected probably it is not valid and it is deleted) /// public string LocalXmlFilePath { get; set; } /// /// AudioSyncStatus /// public AudioSyncStatus AudioSyncStatus { get; set; } /// /// Review Status /// public AudioReviewStatus ReviewStatus { get; set; } /// /// Reviewer user /// public virtual RAppUser Reviewer { get; set; } /// /// Reviewer user /// public Guid? ReviewerId { get; set; } /// /// Review Message /// public string ReviewMsg { get; set; } /// /// initial score for ordering recitations /// public int InitialScore { get; set; } /// /// Recitation Type /// public RecitationType RecitationType { get; set; } /// /// in sync with text /// public bool InSyncWithText { get; set; } = true; } }