322 lines
10 KiB
Go
322 lines
10 KiB
Go
package ui
|
|
|
|
import (
|
|
"fmt"
|
|
"go_dreamfactory/cmd/v2/lib/common"
|
|
"go_dreamfactory/cmd/v2/model"
|
|
"go_dreamfactory/cmd/v2/service"
|
|
"go_dreamfactory/cmd/v2/service/observer"
|
|
"go_dreamfactory/comm"
|
|
// "go_dreamfactory/modules/user"
|
|
"go_dreamfactory/pb"
|
|
"time"
|
|
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/container"
|
|
"fyne.io/fyne/v2/data/binding"
|
|
"fyne.io/fyne/v2/layout"
|
|
"fyne.io/fyne/v2/theme"
|
|
"fyne.io/fyne/v2/widget"
|
|
"github.com/atotto/clipboard"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/spf13/cast"
|
|
)
|
|
|
|
type toyUserInfo struct {
|
|
toyAdapter
|
|
|
|
dataList *widget.List
|
|
titleLabel *widget.Label
|
|
|
|
userInfo *service.UserInfo
|
|
|
|
data binding.ExternalStringList
|
|
obs observer.Observer
|
|
copyBtn *widget.Button
|
|
refreshBtn *widget.Button
|
|
logoutBtn *widget.Button
|
|
}
|
|
|
|
func (this *toyUserInfo) Init(obs observer.Observer) error {
|
|
this.obs = obs
|
|
this.titleLabel = widget.NewLabel(common.USERINFO_PANEL_TITLE)
|
|
this.data = binding.BindStringList(&[]string{})
|
|
|
|
// 复制UID button
|
|
this.copyBtn = widget.NewButtonWithIcon("", theme.ContentCopyIcon(), func() {
|
|
if this.userInfo != nil && this.userInfo.DbUser != nil {
|
|
_ = clipboard.WriteAll(this.userInfo.DbUser.Uid)
|
|
common.ShowTip("已复制UID到剪贴板")
|
|
}
|
|
})
|
|
this.copyBtn.Disable()
|
|
|
|
// 刷新
|
|
this.refreshBtn = widget.NewButtonWithIcon("", theme.ViewRefreshIcon(), func() {
|
|
if err := service.GetPttService().SendToClient(
|
|
string("user"),
|
|
"info",
|
|
&pb.UserInfoReq{}); err != nil {
|
|
logrus.Error(err)
|
|
return
|
|
}
|
|
})
|
|
this.refreshBtn.Disable()
|
|
|
|
// 注销用户
|
|
this.logoutBtn = widget.NewButtonWithIcon("", theme.AccountIcon(), func() {
|
|
// if err := service.GetPttService().SendToClient(
|
|
// string("user"),
|
|
// user.UserSubTypeInfo,
|
|
// &pb.UserInfoReq{}); err != nil {
|
|
// logrus.Error(err)
|
|
// return
|
|
// }
|
|
})
|
|
|
|
// list
|
|
this.dataList = widget.NewListWithData(this.data,
|
|
func() fyne.CanvasObject {
|
|
return widget.NewLabel("template")
|
|
},
|
|
func(i binding.DataItem, o fyne.CanvasObject) {
|
|
o.(*widget.Label).Bind(i.(binding.String))
|
|
},
|
|
)
|
|
|
|
// md
|
|
// sign := widget.NewRichTextFromMarkdown(``)
|
|
// layout
|
|
this.widget = widget.NewCard("", "",
|
|
container.NewBorder(container.NewHBox(this.titleLabel, layout.NewSpacer(), this.logoutBtn, this.refreshBtn, this.copyBtn),
|
|
nil, nil, nil, container.NewVScroll(this.dataList)))
|
|
this.widget.Resize(fyne.NewSize(ToyWidth, 750))
|
|
|
|
this.dataListener()
|
|
return nil
|
|
}
|
|
|
|
func (this *toyUserInfo) dataListener() {
|
|
this.obs.AddListener(observer.EVENT_USERINFO, observer.Listener{
|
|
OnNotify: func(d interface{}, args ...interface{}) {
|
|
time.Sleep(time.Millisecond * 50)
|
|
_ = this.data.Set([]string{})
|
|
if this.copyBtn.Disabled() {
|
|
this.copyBtn.Enable()
|
|
}
|
|
if this.refreshBtn.Disabled() {
|
|
this.refreshBtn.Enable()
|
|
}
|
|
this.userInfo = d.(*service.UserInfo)
|
|
if this.userInfo == nil {
|
|
return
|
|
}
|
|
|
|
uid = this.userInfo.DbUser.Uid
|
|
// _ = this.data.Append(fmt.Sprintf("%-3s\t: %s", common.USERINFO_UID, this.userInfo.DbUser.Uid))
|
|
_ = this.data.Append(this.getAcc()) //0
|
|
_ = this.data.Append(this.getSid()) //1
|
|
_ = this.data.Append(this.getName()) //2
|
|
_ = this.data.Append(this.getAvatar()) //3
|
|
_ = this.data.Append(this.getVip()) //4
|
|
_ = this.data.Append(this.getLv()) //5
|
|
_ = this.data.Append(this.getGold()) //6
|
|
_ = this.data.Append(this.getExp()) //7
|
|
_ = this.data.Append(this.getDiamond()) //8
|
|
_ = this.data.Append(this.getTitle()) //9
|
|
_ = this.data.Append(this.getActiveDay()) //10
|
|
_ = this.data.Append(this.getActiveWeek()) //11
|
|
_ = this.data.Append(this.getFriendPoint()) //12
|
|
_ = this.data.Append(this.getModiNameCount()) //13
|
|
_ = this.data.Append(this.getCreateTime())
|
|
_ = this.data.Append(this.getSign()) //15
|
|
_ = this.data.Append(this.getBgp()) //16
|
|
_ = this.data.Append(this.getFigure()) //17
|
|
_ = this.data.Append(this.getVit()) //18
|
|
|
|
this.setProp(2, common.USERINFO_NAME, this.userInfo.DbUser.Name)
|
|
},
|
|
})
|
|
|
|
this.obs.AddListener(observer.EVENT_REQ_RSP, observer.Listener{
|
|
OnNotify: func(d interface{}, args ...interface{}) {
|
|
data := d.(*pb.UserMessage)
|
|
//change name
|
|
if data.MainType == string("user") &&
|
|
data.SubType == "modifyname" {
|
|
rsp := &pb.UserModifynameResp{}
|
|
if !comm.ProtoUnmarshal(data, rsp) {
|
|
logrus.Error("unmarshal err")
|
|
return
|
|
}
|
|
// updatename
|
|
this.setProp(2, common.USERINFO_NAME, rsp.Name)
|
|
}
|
|
|
|
//update info
|
|
if data.MainType == string("user") &&
|
|
data.SubType == "info" {
|
|
rsp := &pb.UserInfoResp{}
|
|
if !comm.ProtoUnmarshal(data, rsp) {
|
|
logrus.Error("unmarshal err")
|
|
return
|
|
}
|
|
|
|
if rsp.Data == nil {
|
|
logrus.Debug("没有用户数据返回")
|
|
}
|
|
|
|
this.setProp(1, common.USERINFO_SERVER, rsp.Data.Sid)
|
|
this.setProp(2, common.USERINFO_NAME, rsp.Data.Name)
|
|
this.setProp(3, common.USERINFO_AVATAR, rsp.Data.Avatar)
|
|
this.setProp(4, common.USERINFO_VIP, rsp.Data.Vip)
|
|
this.setProp(5, common.USERINFO_LV, rsp.Data.Lv)
|
|
this.setProp(6, common.USERINFO_GOLD, rsp.Data.Gold)
|
|
this.setProp(7, common.USERINFO_EXP, rsp.Data.Exp)
|
|
this.setProp(8, common.USERINFO_DIAMOND, rsp.Data.Diamond)
|
|
this.setProp(9, common.USERINFO_TITLE, rsp.Data.Title)
|
|
this.setProp(10, common.USERINFO_ACTIVE_DAY, rsp.Ex.Activeday)
|
|
this.setProp(11, common.USERINFO_ACTIVE_WEEK, rsp.Ex.Activeweek)
|
|
this.setProp(12, common.USERINFO_FRIENDPOINT, rsp.Ex.FriendPoint)
|
|
this.setProp(13, common.USERINFO_MODINAME, rsp.Ex.ModifynameCount)
|
|
this.setProp(13, common.USERINFO_MODINAME, rsp.Ex.ModifynameCount)
|
|
this.setProp(15, common.USERINFO_SIGN, rsp.Ex.Sign)
|
|
this.setProp(16, "背景", rsp.Data.Bgp)
|
|
this.setProp(17, "形象", rsp.Data.Figure)
|
|
this.setProp(18, "体力", rsp.Data.Ps)
|
|
}
|
|
},
|
|
})
|
|
|
|
this.obs.AddListener(observer.EVENT_USER_CHANGE, observer.Listener{
|
|
OnNotify: func(d interface{}, args ...interface{}) {
|
|
data := d.(*model.PushModel)
|
|
// listener gold
|
|
if data.Msg.MainType == string("user") &&
|
|
data.Msg.SubType == "reschange" {
|
|
rsp := &pb.UserResChangedPush{}
|
|
if !comm.ProtoUnmarshal(data.Msg, rsp) {
|
|
logrus.Error("unmarshal err")
|
|
return
|
|
}
|
|
// this.setProp(6, common.USERINFO_GOLD, rsp.Gold)
|
|
// this.setProp(7, common.USERINFO_EXP, rsp.Exp)
|
|
// this.setProp(8, common.USERINFO_DIAMOND, rsp.Diamond)
|
|
}
|
|
// listener exp
|
|
// if data.Msg.MainType == string("user") &&
|
|
// data.Msg.SubType == "" {
|
|
//TODO change exp
|
|
// }
|
|
|
|
},
|
|
})
|
|
}
|
|
|
|
func (this *toyUserInfo) setProp(idx int, label string, val interface{}) {
|
|
// v, _ := this.data.GetValue(idx)
|
|
// if v != "" {
|
|
logrus.WithFields(logrus.Fields{"idx": idx, "lbl": label, "val": val}).Debug("更新Prop")
|
|
if err := this.data.SetValue(idx, fmt.Sprintf("%-3s\t: %v", label, val)); err != nil {
|
|
logrus.WithFields(logrus.Fields{"idx": idx, "val": val}).Error(err)
|
|
}
|
|
// }
|
|
}
|
|
|
|
func (this *toyUserInfo) getAcc() string {
|
|
return fmt.Sprintf("%-3s\t: %s", common.USERINFO_ACC, this.userInfo.DbUser.Binduid)
|
|
}
|
|
|
|
func (this *toyUserInfo) getSid() string {
|
|
return fmt.Sprintf("%-3s\t: %s", common.USERINFO_SERVER, this.userInfo.DbUser.Sid)
|
|
}
|
|
|
|
func (this *toyUserInfo) getName() string {
|
|
return fmt.Sprintf("%-3s\t: %s", common.USERINFO_NAME, this.userInfo.DbUser.Name)
|
|
}
|
|
|
|
func (this *toyUserInfo) getAvatar() string {
|
|
return fmt.Sprintf("%-3s\t: %s", common.USERINFO_AVATAR, this.userInfo.DbUser.Avatar)
|
|
}
|
|
|
|
func (this *toyUserInfo) getVip() string {
|
|
return fmt.Sprintf("%-3s\t: %s", common.USERINFO_VIP, cast.ToString(this.userInfo.DbUser.Vip))
|
|
}
|
|
|
|
func (this *toyUserInfo) getLv() string {
|
|
return fmt.Sprintf("%-3s\t: %s", common.USERINFO_LV, cast.ToString(this.userInfo.DbUser.Lv))
|
|
}
|
|
|
|
func (this *toyUserInfo) getGold() string {
|
|
return fmt.Sprintf("%-3s\t: %s", common.USERINFO_GOLD, cast.ToString(this.userInfo.DbUser.Gold))
|
|
}
|
|
|
|
func (this *toyUserInfo) getExp() string {
|
|
return fmt.Sprintf("%-3s\t: %s", common.USERINFO_EXP, cast.ToString(this.userInfo.DbUser.Exp))
|
|
}
|
|
|
|
func (this *toyUserInfo) getDiamond() string {
|
|
return fmt.Sprintf("%-3s\t: %s", common.USERINFO_DIAMOND, cast.ToString(this.userInfo.DbUser.Diamond))
|
|
}
|
|
|
|
func (this *toyUserInfo) getTitle() string {
|
|
return fmt.Sprintf("%-3s\t: %s", common.USERINFO_TITLE, cast.ToString(this.userInfo.DbUser.Exp))
|
|
}
|
|
|
|
func (this *toyUserInfo) getFigure() string {
|
|
return fmt.Sprintf("%-3s\t: %s", "形象", cast.ToString(this.userInfo.DbUser.Figure))
|
|
}
|
|
|
|
func (this *toyUserInfo) getBgp() string {
|
|
return fmt.Sprintf("%-3s\t: %s", "背景", cast.ToString(this.userInfo.DbUser.Bgp))
|
|
}
|
|
|
|
func (this *toyUserInfo) getVit() string {
|
|
return fmt.Sprintf("%-3s\t: %s", "体力", cast.ToString(this.userInfo.DbUser.Ps))
|
|
}
|
|
|
|
func (this *toyUserInfo) getActiveDay() string {
|
|
if this.userInfo.DbUserExpand == nil {
|
|
return fmt.Sprintf("%-3s\t: %s", common.USERINFO_ACTIVE_DAY, cast.ToString(0))
|
|
}
|
|
return fmt.Sprintf("%-3s\t: %s", common.USERINFO_ACTIVE_DAY, cast.ToString(this.userInfo.DbUserExpand.Activeday))
|
|
}
|
|
|
|
func (this *toyUserInfo) getActiveWeek() string {
|
|
if this.userInfo.DbUserExpand == nil {
|
|
return fmt.Sprintf("%-3s\t: %s", common.USERINFO_ACTIVE_WEEK, cast.ToString(0))
|
|
}
|
|
return fmt.Sprintf("%-3s\t: %s", common.USERINFO_ACTIVE_WEEK, cast.ToString(this.userInfo.DbUserExpand.Activeweek))
|
|
}
|
|
|
|
func (this *toyUserInfo) getFriendPoint() string {
|
|
if this.userInfo.DbUserExpand == nil {
|
|
return fmt.Sprintf("%-3s\t: %s", common.USERINFO_FRIENDPOINT, cast.ToString(0))
|
|
}
|
|
return fmt.Sprintf("%-3s\t: %s", common.USERINFO_FRIENDPOINT, cast.ToString(this.userInfo.DbUserExpand.FriendPoint))
|
|
}
|
|
|
|
func (this *toyUserInfo) getModiNameCount() string {
|
|
if this.userInfo.DbUserExpand == nil {
|
|
return fmt.Sprintf("%-3s\t: %s", common.USERINFO_MODINAME, "")
|
|
}
|
|
return fmt.Sprintf("%-3s\t: %s", common.USERINFO_MODINAME, cast.ToString(this.userInfo.DbUserExpand.ModifynameCount))
|
|
}
|
|
|
|
func (this *toyUserInfo) getSign() string {
|
|
if this.userInfo.DbUserExpand == nil {
|
|
return fmt.Sprintf("%-3s\t: %s", common.USERINFO_SIGN, "")
|
|
}
|
|
return fmt.Sprintf("%-3s\t: %s", common.USERINFO_SIGN, cast.ToString(this.userInfo.DbUserExpand.Sign))
|
|
}
|
|
|
|
func (this *toyUserInfo) getCreateTime() string {
|
|
ctime := this.userInfo.DbUser.Ctime
|
|
if ctime <= 0 {
|
|
return ""
|
|
}
|
|
tt := time.Unix(ctime, 0)
|
|
|
|
return fmt.Sprintf("%-3s\t: %s", common.USERINFO_CREATETM, tt.Format(time.RFC3339))
|
|
}
|