diff --git a/RMuseum/Models/GanjoorAudio/PoemNarration.cs b/RMuseum/Models/GanjoorAudio/PoemNarration.cs index 8da3ed50..3ecc3522 100644 --- a/RMuseum/Models/GanjoorAudio/PoemNarration.cs +++ b/RMuseum/Models/GanjoorAudio/PoemNarration.cs @@ -89,6 +89,11 @@ namespace RMuseum.Models.GanjoorAudio /// 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 /// diff --git a/RMuseum/Models/GanjoorAudio/ViewModels/PoemNarrationViewModel.cs b/RMuseum/Models/GanjoorAudio/ViewModels/PoemNarrationViewModel.cs new file mode 100644 index 00000000..9721abb3 --- /dev/null +++ b/RMuseum/Models/GanjoorAudio/ViewModels/PoemNarrationViewModel.cs @@ -0,0 +1,214 @@ +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; } + } +} diff --git a/RMuseum/RMuseum.xml b/RMuseum/RMuseum.xml index 2a51a003..80293aaf 100644 --- a/RMuseum/RMuseum.xml +++ b/RMuseum/RMuseum.xml @@ -1668,6 +1668,11 @@ https://github.com/ganjoor/ganjoor/blob/master/ganjoor/Audio%20Support/PoemAudioListProcessor.cs + + + XML url + + Audio Title @@ -1743,6 +1748,171 @@ Review Status + + + Poem Narration view model + + + + + constructor + + + + + + Id + + + + + Owner User + + + + + Final data is actually exported to a MySQL database which this auto increment field is its key + + + + + Ganjoor Post Id + + + + + This determines where an audio is displayed between a list of sounds related to a specfic poem + + + + + Using this field content you would determine xml, mp3 and ogg file names + + + + + 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 + + + + + MP3 File Path + + + + + MP3 url + + + + + OGG File Path + + + + + OGG url + + + + + 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 + + + + + XML url + + + + + Audio Title + + + + + Audio Artist + + + + + Audio Artist Url + + + + + Audio Source + + + + + Audio Src Url + + + + + Legacy Audio Guid + + + + + Audio File CheckSum + + + + + mp3 size in bytes + + + + + ogg size in bytes + + + + + Upload Date + + + + + Review Date (Approve or Reject) + + + + + MP3 File local path on Windows Server (if item is not rejected probably it is not valid and it is deleted) + + + + + 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 + + + + + Review Status + + ganjoor link for artifacts and items