import {
AlignmentFlag, Direction, QBoxLayout, QLabel, QPixmap, QWidget,
} from '@nodegui/nodegui';
import { GuildMember, User } from 'discord.js';
import { pictureWorker } from '../../utilities/PictureWorker';
import { CustomStatusLabel } from './CustomStatusLabel';
export class Profile extends QWidget {
layout = new QBoxLayout(Direction.TopToBottom);
private avatar = new QLabel(this);
private nickname = new QLabel(this);
private username = new QLabel(this);
private unreadInd = new QLabel(this.avatar);
private custom = new CustomStatusLabel();
constructor(parent?: any) {
super(parent);
this.setObjectName('Profile');
this.initComponent();
}
private initComponent() {
const {
layout, avatar, nickname, username, custom, unreadInd,
} = this;
layout.setContentsMargins(16, 16, 16, 16);
layout.setSpacing(0);
layout.addWidget(avatar);
layout.addWidget(nickname);
layout.addWidget(username);
layout.addWidget(custom);
unreadInd.setObjectName('StatusIndicator');
unreadInd.setFixedSize(28, 28);
unreadInd.setProperty('tooltip', 'Offline');
unreadInd.move(124, 54);
avatar.setAlignment(AlignmentFlag.AlignHCenter);
nickname.setAlignment(AlignmentFlag.AlignHCenter);
username.setAlignment(AlignmentFlag.AlignHCenter);
avatar.setMinimumSize(0, 80);
nickname.setObjectName('Nickname');
nickname.setWordWrap(true);
username.setObjectName('Username');
username.setWordWrap(true);
this.setLayout(layout);
}
setPlaying(value: boolean) {
this.setProperty('isPlaying', value ? 'true' : 'false');
}
async loadProfile(someone: User | GuildMember) {
const {
avatar, username, nickname, custom, unreadInd,
} = this;
const user = someone instanceof GuildMember ? someone.user : someone;
const member = someone instanceof GuildMember ? someone : null;
if (!user) return;
this.setMinimumSize(250, 0);
unreadInd.setProperty('color', user.presence.status);
unreadInd.repolish();
avatar.clear();
pictureWorker.loadImage(user.displayAvatarURL({ format: 'png', size: 256 }))
.then((path) => avatar.setPixmap(new QPixmap(path).scaled(80, 80, 1, 1)));
if (member?.nickname) {
username.show();
nickname.setText(`${member.nickname}`);
username.setText(user.tag);
} else {
nickname.setText(`${user.username}#${user.discriminator}`);
username.hide();
}
this.repolish();
custom.loadStatus(user);
}
}