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);
};
ft.on_complete = () => {
console.log("Length: " + array.length);
let base64 = btoa(String.fromCharCode.apply(null, array));
console.log("Length: " + array.length);
let icon = new Icon();
icon.base64 = base64;
icon.id = id;
@ -353,7 +355,9 @@ class IconManager {
class Avatar {
clientUid: string;
avatarId: string;
base64: string;
base64?: string;
url?: string;
blob?: Blob;
}
class AvatarManager {
@ -364,6 +368,7 @@ class AvatarManager {
}
downloadAvatar(client: ClientEntry) : Promise<DownloadFileTransfer> {
console.log("Downloading avatar %s", 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);
if(avatar) {
let i = JSON.parse(avatar) as Avatar;
if(i.base64.length > 0 && i.avatarId == client.properties.client_flag_avatar) { //TODO timestamp?
return i;
if(i.base64) {
if(i.base64.length > 0 && i.avatarId == client.properties.client_flag_avatar) { //TODO timestamp?
return i;
}
}
}
return undefined;
@ -399,9 +406,15 @@ class AvatarManager {
array = concatenate(Uint8Array, array, data);
};
ft.on_complete = () => {
let base64 = btoa(String.fromCharCode.apply(null, array));
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.avatarId = client.properties.client_flag_avatar;
@ -425,7 +438,6 @@ class AvatarManager {
img.attr("alt", "");
let avatar = this.resolveCached(client);
avatar = undefined;
if(avatar) {
img.attr("src", "data:image/png;base64," + avatar.base64);
tag.append(img);
@ -435,8 +447,13 @@ class AvatarManager {
tag.append(loader);
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.log(avatar.base64);
console.log(avatar.url);
img.css("opacity", 0);
tag.append(img);

View file

@ -461,7 +461,7 @@ class ClientEntry {
function str2ab(str) {
let buf = new ArrayBuffer(str.length); // 2 bytes for each char
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);
}
return buf;

View file

@ -160,6 +160,10 @@ class ClientInfoManager extends InfoManager<ClientEntry> {
.attr("target", "_blank")
.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;
}
}

View file

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