using RSecurityBackend.Models.Auth.ViewModels; using System; using System.Collections.Generic; namespace RMuseum.Models.GanjoorAudio.ViewModels { /// /// Poem Narration view model /// public class PoemNarrationViewModel { /// /// constructor /// /// 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; List lst = new List(); 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(); } /// /// Id /// public Guid Id { get; set; } /// /// Owner User /// public PublicRAppUser Owner { 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 /// 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 $"/i/{SoundFilesFolder}/{FileNameWithoutExtension}.mp3"; } } /// /// MP3 url /// public string Mp3Url { get { return $"https://i.ganjoor.net/{SoundFilesFolder}/{FileNameWithoutExtension}.mp3"; } } /// /// OGG File Path /// public string RemoteOggFilePath { get { return $"/i/{SoundFilesFolder}/{FileNameWithoutExtension}.ogg"; } } /// /// OGG url /// public string OggUrl { get { return $"https://i.ganjoor.net/{SoundFilesFolder}/{FileNameWithoutExtension}.ogg"; } } /// /// This is also a legacy field /// /// /// "/i/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 $"/i/{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; } /// /// 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; } /// /// Value is one or a combination of /// public AudioSyncStatus[] AudioSyncStatusArray { get; set; } /// /// Review Status /// public AudioReviewStatus ReviewStatus { get; set; } } }