Fixed avatar implementation

This commit is contained in:
WolverinDEV 2018-08-12 16:38:38 +02:00
parent fcef5a22e9
commit 5c8273b092
4 changed files with 35 additions and 8 deletions

View file

@ -287,7 +287,9 @@ class IconManager {
array = concatenate(Uint8Array, array, data); array = concatenate(Uint8Array, array, data);
}; };
ft.on_complete = () => { ft.on_complete = () => {
console.log("Length: " + array.length);
let base64 = btoa(String.fromCharCode.apply(null, array)); let base64 = btoa(String.fromCharCode.apply(null, array));
console.log("Length: " + array.length);
let icon = new Icon(); let icon = new Icon();
icon.base64 = base64; icon.base64 = base64;
icon.id = id; icon.id = id;
@ -353,7 +355,9 @@ class IconManager {
class Avatar { class Avatar {
clientUid: string; clientUid: string;
avatarId: string; avatarId: string;
base64: string; base64?: string;
url?: string;
blob?: Blob;
} }
class AvatarManager { class AvatarManager {
@ -364,6 +368,7 @@ class AvatarManager {
} }
downloadAvatar(client: ClientEntry) : Promise<DownloadFileTransfer> { downloadAvatar(client: ClientEntry) : Promise<DownloadFileTransfer> {
console.log("Downloading avatar %s", client.avatarId());
return this.handle.requestFileDownload("", "/avatar_" + client.avatarId()); return this.handle.requestFileDownload("", "/avatar_" + client.avatarId());
} }
@ -371,8 +376,10 @@ class AvatarManager {
let avatar = localStorage.getItem("avatar_" + client.properties.client_unique_identifier); let avatar = localStorage.getItem("avatar_" + client.properties.client_unique_identifier);
if(avatar) { if(avatar) {
let i = JSON.parse(avatar) as Avatar; let i = JSON.parse(avatar) as Avatar;
if(i.base64.length > 0 && i.avatarId == client.properties.client_flag_avatar) { //TODO timestamp? if(i.base64) {
return i; if(i.base64.length > 0 && i.avatarId == client.properties.client_flag_avatar) { //TODO timestamp?
return i;
}
} }
} }
return undefined; return undefined;
@ -399,9 +406,15 @@ class AvatarManager {
array = concatenate(Uint8Array, array, data); array = concatenate(Uint8Array, array, data);
}; };
ft.on_complete = () => { ft.on_complete = () => {
let base64 = btoa(String.fromCharCode.apply(null, array));
let avatar = new Avatar(); let avatar = new Avatar();
avatar.base64 = base64; if(array.length > 1 * 1024 * 1024) {
let blob_image = new Blob([array]);
avatar.url = URL.createObjectURL(blob_image);
avatar.blob = blob_image;
} else {
let base64 = btoa(String.fromCharCode.apply(null, array));
avatar.base64 = base64;
}
avatar.clientUid = client.clientUid(); avatar.clientUid = client.clientUid();
avatar.avatarId = client.properties.client_flag_avatar; avatar.avatarId = client.properties.client_flag_avatar;
@ -425,7 +438,6 @@ class AvatarManager {
img.attr("alt", ""); img.attr("alt", "");
let avatar = this.resolveCached(client); let avatar = this.resolveCached(client);
avatar = undefined;
if(avatar) { if(avatar) {
img.attr("src", "data:image/png;base64," + avatar.base64); img.attr("src", "data:image/png;base64," + avatar.base64);
tag.append(img); tag.append(img);
@ -435,8 +447,13 @@ class AvatarManager {
tag.append(loader); tag.append(loader);
this.loadAvatar(client).then(avatar => { this.loadAvatar(client).then(avatar => {
img.attr("src", "data:image/png;base64," + avatar.base64); if(avatar.url)
img.attr("src", avatar.url);
else
img.attr("src", "data:image/png;base64," + avatar.base64);
console.debug("Avatar " + client.clientNickName() + " loaded :)"); console.debug("Avatar " + client.clientNickName() + " loaded :)");
console.log(avatar.base64);
console.log(avatar.url);
img.css("opacity", 0); img.css("opacity", 0);
tag.append(img); tag.append(img);

View file

@ -461,7 +461,7 @@ class ClientEntry {
function str2ab(str) { function str2ab(str) {
let buf = new ArrayBuffer(str.length); // 2 bytes for each char let buf = new ArrayBuffer(str.length); // 2 bytes for each char
let bufView = new Uint8Array(buf); let bufView = new Uint8Array(buf);
for (let i=0, strLen=str.length; i<strLen; i++) { for (let i=0, strLen = str.length; i<strLen; i++) {
bufView[i] = str.charCodeAt(i); bufView[i] = str.charCodeAt(i);
} }
return buf; return buf;

View file

@ -160,6 +160,10 @@ class ClientInfoManager extends InfoManager<ClientEntry> {
.attr("target", "_blank") .attr("target", "_blank")
.text(client.properties.client_teaforum_id); .text(client.properties.client_teaforum_id);
} }
if(client.properties.client_flag_avatar && client.properties.client_flag_avatar.length > 0) {
properties["client_avatar"] = client.channelTree.client.fileManager.avatars.generateTag(client);
}
return properties; return properties;
} }
} }

View file

@ -541,6 +541,12 @@
<a style="align-self: center">Microphone Muted</a> <a style="align-self: center">Microphone Muted</a>
</div> </div>
{{/if}} {{/if}}
{{if property_client_flag_avatar && property_client_flag_avatar.length > 0}}
<div>
<node key="client_avatar"/>
</div>
{{/if}}
</script> </script>
<script id="tmpl_selected_music" type="text/html"> <script id="tmpl_selected_music" type="text/html">