#7 adding User Narration Profile and using it to name files during post processing
This commit is contained in:
parent
f2ba1c723b
commit
675f0393e5
@ -11,6 +11,7 @@ using RMuseum.Models.Notification;
|
||||
using RSecurityBackend.DbContext;
|
||||
using RSecurityBackend.Models.Auth.Db;
|
||||
using System;
|
||||
using Dapper;
|
||||
|
||||
namespace RMuseum.DbContext
|
||||
{
|
||||
@ -138,5 +139,10 @@ namespace RMuseum.DbContext
|
||||
/// </summary>
|
||||
public DbSet<UploadSession> UploadSessions { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// User Narration Profiles
|
||||
/// </summary>
|
||||
public DbSet<UserNarrationProfile> UserNarrationProfiles { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
58
RMuseum/Models/GanjoorAudio/UserNarrationProfile.cs
Normal file
58
RMuseum/Models/GanjoorAudio/UserNarrationProfile.cs
Normal file
@ -0,0 +1,58 @@
|
||||
using RSecurityBackend.Models.Auth.Db;
|
||||
using System;
|
||||
|
||||
namespace RMuseum.Models.GanjoorAudio
|
||||
{
|
||||
/// <summary>
|
||||
/// Narration Profiles for users
|
||||
/// </summary>
|
||||
public class UserNarrationProfile
|
||||
{
|
||||
/// <summary>
|
||||
/// Id
|
||||
/// </summary>
|
||||
public Guid Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// User
|
||||
/// </summary>
|
||||
public RAppUser User { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// UserId
|
||||
/// </summary>
|
||||
public Guid UserId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// this would be appended to audio files names prefixed by a dash to make them unique and specfic to user
|
||||
/// filenames usually would look like {GanjoorPostId}-{FileSuffixWithoutDash}.{ext}
|
||||
/// for example 2200-hrm.xml
|
||||
/// </summary>
|
||||
public string FileSuffixWithoutDash { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// artist name
|
||||
/// </summary>
|
||||
public string ArtistName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// artist url
|
||||
/// </summary>
|
||||
public string ArtistUrl { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// audio src
|
||||
/// </summary>
|
||||
public string AudioSrc { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// audio src url
|
||||
/// </summary>
|
||||
public string AudioSrcUrl { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// is default
|
||||
/// </summary>
|
||||
public bool IsDefault { get; set; }
|
||||
}
|
||||
}
|
||||
@ -27,7 +27,6 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Services\Implementation\ImportedFromDesktopGanjoor\" />
|
||||
<Folder Include="Swashbuckle\" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -825,6 +825,11 @@
|
||||
Upload Sessions
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.DbContext.RMuseumDbContext.UserNarrationProfiles">
|
||||
<summary>
|
||||
User Narration Profiles
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.Artifact.PublishStatus">
|
||||
<summary>
|
||||
Items or pictures status
|
||||
@ -1778,6 +1783,58 @@
|
||||
Review Status
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.GanjoorAudio.UserNarrationProfile">
|
||||
<summary>
|
||||
Narration Profiles for users
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.UserNarrationProfile.Id">
|
||||
<summary>
|
||||
Id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.UserNarrationProfile.User">
|
||||
<summary>
|
||||
User
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.UserNarrationProfile.UserId">
|
||||
<summary>
|
||||
UserId
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.UserNarrationProfile.FileSuffixWithoutDash">
|
||||
<summary>
|
||||
this would be appended to audio files names prefixed by a dash to make them unique and specfic to user
|
||||
filenames usually would look like {GanjoorPostId}-{FileSuffixWithoutDash}.{ext}
|
||||
for example 2200-hrm.xml
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.UserNarrationProfile.ArtistName">
|
||||
<summary>
|
||||
artist name
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.UserNarrationProfile.ArtistUrl">
|
||||
<summary>
|
||||
artist url
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.UserNarrationProfile.AudioSrc">
|
||||
<summary>
|
||||
audio src
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.UserNarrationProfile.AudioSrcUrl">
|
||||
<summary>
|
||||
audio src url
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.GanjoorAudio.UserNarrationProfile.IsDefault">
|
||||
<summary>
|
||||
is default
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.GanjoorAudio.ViewModels.PoemNarrationViewModel">
|
||||
<summary>
|
||||
Poem Narration view model
|
||||
@ -4220,6 +4277,35 @@
|
||||
<param name="format"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:RMuseum.Services.Implementation.ImportedFromDesktopGanjoor.GPersianTextSync">
|
||||
<summary>
|
||||
Persian specific text utility class
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.ImportedFromDesktopGanjoor.GPersianTextSync.Sync(System.String)">
|
||||
<summary>
|
||||
convert arabic characters to persian equivalents
|
||||
</summary>
|
||||
<param name="inputStr"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:RMuseum.Services.Implementation.ImportedFromDesktopGanjoor.GPersianTextSync.PersianLetters">
|
||||
<summary>
|
||||
list of persian letters
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.ImportedFromDesktopGanjoor.GPersianTextSync.Farglisize(System.String)">
|
||||
<summary>
|
||||
convert persian text to simple pinglish
|
||||
</summary>
|
||||
<param name="inputStr"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="F:RMuseum.Services.Implementation.ImportedFromDesktopGanjoor.GPersianTextSync._PinglishDic">
|
||||
<summary>
|
||||
equaivalnet for persian characters
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Services.Implementation.PictureFileService">
|
||||
<summary>
|
||||
manipulating picture files
|
||||
|
||||
@ -7,9 +7,11 @@ using MySql.Data.MySqlClient;
|
||||
using NAudio.Wave;
|
||||
using OggVorbisEncoder;
|
||||
using RMuseum.DbContext;
|
||||
using RMuseum.Migrations;
|
||||
using RMuseum.Models.GanjoorAudio;
|
||||
using RMuseum.Models.GanjoorAudio.ViewModels;
|
||||
using RMuseum.Models.UploadSession;
|
||||
using RMuseum.Services.Implementation.ImportedFromDesktopGanjoor;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using RSecurityBackend.Services.Implementation;
|
||||
using System;
|
||||
@ -157,7 +159,8 @@ namespace RMuseum.Services.Implementation
|
||||
UseId = userId,
|
||||
UploadStartTime = DateTime.Now,
|
||||
Status = UploadSessionProcessStatus.NotStarted,
|
||||
ProcessProgress = 0
|
||||
ProcessProgress = 0,
|
||||
User = await _context.Users.Where(u => u.Id == userId).FirstOrDefaultAsync() //this would be referenced later and is needed
|
||||
};
|
||||
await _context.UploadSessions.AddAsync(session);
|
||||
await _context.SaveChangesAsync();
|
||||
@ -258,7 +261,7 @@ namespace RMuseum.Services.Implementation
|
||||
try
|
||||
{
|
||||
file.MP3FileCheckSum = PoemAudio.ComputeCheckSum(file.FilePath);
|
||||
mp3files.Add(file);
|
||||
mp3files.Add(file);
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
@ -296,10 +299,36 @@ namespace RMuseum.Services.Implementation
|
||||
File.WriteAllBytes(Path.Combine(Path.GetDirectoryName(mp3file.FilePath), $"{Path.GetFileNameWithoutExtension(mp3file.FilePath)}.ogg") , oggBytes);
|
||||
}
|
||||
|
||||
//create draft poem narration:
|
||||
var FileNameWithoutExtension = $"{audio.PoemId}-{session.UseId}";//TODO: use user profiles for audio files here
|
||||
//TODO: rename and move files somewhere here
|
||||
|
||||
|
||||
|
||||
UserNarrationProfile defProfile = await context.UserNarrationProfiles.Where(p => p.UserId == session.UseId && p.IsDefault == true).FirstOrDefaultAsync();
|
||||
if(defProfile == null)
|
||||
{
|
||||
defProfile = new UserNarrationProfile()
|
||||
{
|
||||
FileSuffixWithoutDash = !string.IsNullOrEmpty(session.User.FirstName) ? !string.IsNullOrEmpty(session.User.SureName) ?
|
||||
GPersianTextSync.Farglisize($"{session.User.FirstName[0]}{session.User.SureName[0]}")
|
||||
:
|
||||
GPersianTextSync.Farglisize($"{session.User.FirstName[0]}") : $"{session.User.UserName[0]}",
|
||||
ArtistName = $"{session.User.FirstName} {session.User.SureName}",
|
||||
ArtistUrl = "",
|
||||
AudioSrc = "",
|
||||
AudioSrcUrl = ""
|
||||
|
||||
};
|
||||
}
|
||||
//create draft poem narration:
|
||||
string FileNameWithoutExtension = $"{audio.PoemId}-{defProfile.FileSuffixWithoutDash}";
|
||||
|
||||
Guid legacyAudioGuid = audio.SyncGuid;
|
||||
while(
|
||||
(await context.AudioFiles.Where(a => a.LegacyAudioGuid == legacyAudioGuid).FirstOrDefaultAsync()) != null
|
||||
)
|
||||
{ legacyAudioGuid = Guid.NewGuid(); }
|
||||
|
||||
//TODO: rename and move files somewhere here
|
||||
|
||||
PoemNarration narration = new PoemNarration()
|
||||
{
|
||||
OwnerId = session.UseId,
|
||||
@ -308,11 +337,11 @@ namespace RMuseum.Services.Implementation
|
||||
FileNameWithoutExtension = FileNameWithoutExtension,
|
||||
SoundFilesFolder = "a2",
|
||||
AudioTitle = audio.PoemTitle,
|
||||
AudioArtist = "",//TODO: use user profiles for audio files here
|
||||
AudioArtistUrl = "",//TODO: use user profiles for audio files here
|
||||
AudioSrc = "", //TODO: use user profiles for audio files here
|
||||
AudioSrcUrl = "", //TODO: use user profiles for audio files here
|
||||
LegacyAudioGuid = audio.SyncGuid, //check for repeated guid here
|
||||
AudioArtist = defProfile.ArtistName,
|
||||
AudioArtistUrl = defProfile.ArtistUrl,
|
||||
AudioSrc = defProfile.AudioSrc,
|
||||
AudioSrcUrl = defProfile.AudioSrcUrl,
|
||||
LegacyAudioGuid = legacyAudioGuid,
|
||||
Mp3FileCheckSum = audio.FileCheckSum,
|
||||
Mp3SizeInBytes = mp3fileSize,
|
||||
OggSizeInBytes = oggfileSize,
|
||||
|
||||
@ -0,0 +1,105 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace RMuseum.Services.Implementation.ImportedFromDesktopGanjoor
|
||||
{
|
||||
/// <summary>
|
||||
/// Persian specific text utility class
|
||||
/// </summary>
|
||||
public class GPersianTextSync
|
||||
{
|
||||
/// <summary>
|
||||
/// convert arabic characters to persian equivalents
|
||||
/// </summary>
|
||||
/// <param name="inputStr"></param>
|
||||
/// <returns></returns>
|
||||
public static string Sync(string inputStr)
|
||||
{
|
||||
return
|
||||
inputStr
|
||||
.Replace('ك', 'ک')
|
||||
.Replace('ي', 'ی')
|
||||
.Replace("ۀ", "هٔ")
|
||||
.Replace("هی", "هٔ")
|
||||
.Replace("0", "۰")
|
||||
.Replace("1", "۱")
|
||||
.Replace("2", "۲")
|
||||
.Replace("3", "۳")
|
||||
.Replace("4", "۴")
|
||||
.Replace("5", "۵")
|
||||
.Replace("6", "۶")
|
||||
.Replace("7", "۷")
|
||||
.Replace("8", "۸")
|
||||
.Replace("9", "۹");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// list of persian letters
|
||||
/// </summary>
|
||||
public static string PersianLetters
|
||||
{
|
||||
get
|
||||
{
|
||||
return "اآئأإءبپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی";
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// convert persian text to simple pinglish
|
||||
/// </summary>
|
||||
/// <param name="inputStr"></param>
|
||||
/// <returns></returns>
|
||||
public static string Farglisize(string inputStr)
|
||||
{
|
||||
string outStr = "";
|
||||
string s;
|
||||
foreach (char c in inputStr)
|
||||
if (_PinglishDic.TryGetValue(c, out s))
|
||||
outStr += s;
|
||||
return outStr;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// equaivalnet for persian characters
|
||||
/// </summary>
|
||||
private static Dictionary<char, string> _PinglishDic = new Dictionary<char, string>()
|
||||
{
|
||||
{'ا', "a"},
|
||||
{'آ', "a"},
|
||||
{'ب', "b"},
|
||||
{'پ', "p"},
|
||||
{'ت', "t"},
|
||||
{'ث', "s"},
|
||||
{'ج', "j"},
|
||||
{'چ', "ch"},
|
||||
{'ح', "h"},
|
||||
{'خ', "kh"},
|
||||
{'د', "d"},
|
||||
{'ذ', "z"},
|
||||
{'ر', "r"},
|
||||
{'ز', "z"},
|
||||
{'ژ', "zh"},
|
||||
{'س', "s"},
|
||||
{'ش', "sh"},
|
||||
{'ص', "s"},
|
||||
{'ض', "z"},
|
||||
{'ط', "t"},
|
||||
{'ظ', "z"},
|
||||
{'ع', "E"},
|
||||
{'غ', "gh"},
|
||||
{'ف', "f"},
|
||||
{'ق', "gh"},
|
||||
{'ک', "k"},
|
||||
{'گ', "g"},
|
||||
{'ل', "l"},
|
||||
{'م', "m"},
|
||||
{'ن', "n"},
|
||||
{'ه', "h"},
|
||||
{'و', "v"},
|
||||
{'ی', "i"},
|
||||
{'ئ', "E"},
|
||||
{'أ', "A"},
|
||||
{'إ', "E"},
|
||||
{' ', "-"},
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -40,7 +40,8 @@
|
||||
"Database": "adab"
|
||||
},
|
||||
"AudioUploadService": {
|
||||
"StoragePath": "C:\\audio"
|
||||
"StoragePath": "C:\\audio",
|
||||
"LocalAudioRepositoryPath": "D:\\My Documents\\My Web Design\\ganjoor\\www\\i",
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user