Load images within datapacket delayed and cache them locally

This commit is contained in:
lukeIam committed 2013-12-13 17:43:18 +01:00
1 parent 08f4428e28
commit 2f2349ffbb
6 files changed
+133 -21

No files matched your search

+46 -7
View File
@@ -46,7 +46,7 @@ namespace Vocaluxe.Base.Server
_Clients = new Dictionary<int, CClientHandler>();
_Server = new CServer(CConfig.ServerPort, CConfig.ServerEncryption == EOffOn.TR_CONFIG_ON);
//_Server = new CServer(RequestHandler, CConfig.ServerPort, CConfig.ServerPassword);
//TODO: remove CConfig.ServerPassword
CServer.SendKeyEvent = sendKeyEvent;
CServer.GetProfileData = getProfileData;
@@ -62,6 +62,7 @@ namespace Vocaluxe.Base.Server
CServer.GetUserRole = getUserRole;
CServer.SetUserRole = setUserRole;
CServer.GetUserIdFromUsername = getUserIdFromUsername;
CServer.GetDelayedImage = getDelayedImage;
_Discover = new CDiscover(CConfig.ServerPort, CCommands.BroadcastKeyword);
Controller.Init();
@@ -198,7 +199,7 @@ namespace Vocaluxe.Base.Server
else if (newProfile.Avatar == null)
{
newProfile.Avatar = CProfiles.GetAvatars().First();
/*CAvatar avatar = new CAvatar(-1);
avatar.LoadFromFile("Profiles\\Avatar_f.png");
CProfiles.AddAvatar(avatar);
@@ -262,9 +263,7 @@ namespace Vocaluxe.Base.Server
{
if (File.Exists(avatar.FileName))
{
Image avatarImage = Image.FromFile(avatar.FileName);
//TODO: Convert??? and Resize?
profileData.Avatar = new Base64Image(avatarImage, avatarImage.RawFormat);
profileData.Avatar = new Base64Image(createDelayedImage(avatar.FileName));
}
}
return profileData;
@@ -315,6 +314,8 @@ namespace Vocaluxe.Base.Server
#region website
private static Dictionary<string, string> delayedImagePath = new Dictionary<string, string>();
private static byte[] getSiteFile(string filename)
{
string path = "Website/" + filename;
@@ -335,6 +336,45 @@ namespace Vocaluxe.Base.Server
return File.ReadAllBytes(path);
}
private static string createDelayedImage(string filename)
{
byte[] by = SHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(filename));
var sb = new StringBuilder();
foreach (byte b in by)
{
sb.Append(b.ToString("x2"));
}
string hashedFilename = sb.ToString();
if (!delayedImagePath.ContainsKey(hashedFilename))
{
delayedImagePath.Add(hashedFilename, filename);
}
return hashedFilename;
}
private static Base64Image getDelayedImage(string hashedFilename)
{
if (!delayedImagePath.ContainsKey(hashedFilename))
{
throw new FileNotFoundException("Image not found");
}
string fileName = delayedImagePath[hashedFilename];
if (File.Exists(fileName))
{
Image image = Image.FromFile(fileName);
return new Base64Image(image, image.RawFormat);
}
else
{
throw new FileNotFoundException("Image not found");
}
}
#endregion
#region songs
@@ -376,8 +416,7 @@ namespace Vocaluxe.Base.Server
result.SongId = song.ID;
if (includeCover)
{
Image cover = Image.FromFile(song.Folder + "\\" + song.CoverFileName);
result.Cover = new Base64Image(cover, cover.RawFormat);
result.Cover = new Base64Image(createDelayedImage(song.Folder + "\\" + song.CoverFileName));
}
}
return result;