diff --git a/cmd/v2/lib/common/itemlist.go b/cmd/v2/lib/common/itemlist.go index 1ca134b59..6e228441b 100644 --- a/cmd/v2/lib/common/itemlist.go +++ b/cmd/v2/lib/common/itemlist.go @@ -74,14 +74,15 @@ func (f *ItemList) CreateDefaultCheckList() *widget.List { }, func(id widget.ListItemID, item fyne.CanvasObject) { c, _ := item.(*widget.Check) + _id := f.CachedList.Items[id].Id c.Text = f.CachedList.Items[id].Text c.Checked = f.CachedList.Items[id].Checked c.OnChanged = func(b bool) { if b { - f.SelItemIds = append(f.SelItemIds, c.Text) + f.SelItemIds = append(f.SelItemIds, _id) } else { - f.SelItemIds = utils.DeleteString(f.SelItemIds, c.Text) + f.SelItemIds = utils.DeleteString(f.SelItemIds, _id) } f.TitleLabel.SetText(fmt.Sprintf("(%d/%d)", len(f.SelItemIds), f.ItemTotal)) f.CachedList.Items[id].Checked = b diff --git a/cmd/v2/ui/app_testcase.go b/cmd/v2/ui/app_testcase.go index a4ce45333..4270219a8 100644 --- a/cmd/v2/ui/app_testcase.go +++ b/cmd/v2/ui/app_testcase.go @@ -125,9 +125,9 @@ func (a *appTester) makeNav(setNav func(testCase *model.TestCase)) fyne.CanvasOb if a.disEnabled(t) { obj.(*widget.Label).TextStyle = fyne.TextStyle{Italic: true} if branch { //parent - obj.(*widget.Label).SetText(fmt.Sprintf("%s(dis)", t.MainType)) + obj.(*widget.Label).SetText(fmt.Sprintf("%s(dis0)", t.MainType)) } else { - obj.(*widget.Label).SetText(fmt.Sprintf("%s(dis)", t.SubType)) + // obj.(*widget.Label).SetText(fmt.Sprintf("%s(dis1)", t.SubType)) } } else { if branch { //parent diff --git a/cmd/v2/ui/protocol.go b/cmd/v2/ui/protocol.go index 5b0478e20..332032aec 100644 --- a/cmd/v2/ui/protocol.go +++ b/cmd/v2/ui/protocol.go @@ -70,8 +70,8 @@ var ( ff(comm.ModuleEquipment, "equip"): &formview.EquipUpDownView{}, ff(comm.ModuleEquipment, "upgrade"): &formview.EquipUpgradeView{}, //friend - ff(comm.ModuleFriend, friend.FriendSubTypeList): &formview.FriendListView{}, - ff(comm.ModuleFriend, friend.FriendSubTypeApply): &formview.FriendApplyView{}, + ff(comm.ModuleFriend, friend.FriendSubTypeList): &formview.FriendListView{}, + // ff(comm.ModuleFriend, friend.FriendSubTypeApply): &formview.FriendApplyView{}, ff(comm.ModuleFriend, friend.FriendSubTypeAgree): &formview.FriendAgreeView{}, ff(comm.ModuleFriend, friend.FriendSubTypeBlacklist): &formview.FriendBlacklistView{}, ff(comm.ModuleFriend, friend.FriendSubTypeAddBlack): &formview.FriendAddBlackView{}, @@ -169,7 +169,7 @@ var ( }, "friend": { ff(comm.ModuleFriend, friend.FriendSubTypeList), - ff(comm.ModuleFriend, friend.FriendSubTypeApply), + // ff(comm.ModuleFriend, friend.FriendSubTypeApply), ff(comm.ModuleFriend, friend.FriendSubTypeAgree), ff(comm.ModuleFriend, friend.FriendSubTypeBlacklist), ff(comm.ModuleFriend, friend.FriendSubTypeAddBlack), @@ -533,8 +533,8 @@ var ( }, }, ff(comm.ModuleFriend, friend.FriendSubTypeList): { - NavLabel: "好友列表", - Desc: "好友列表", + NavLabel: "我的好友", + Desc: "我的好友列表", MainType: string(comm.ModuleFriend), SubType: friend.FriendSubTypeList, Req: &pb.FriendListReq{}, @@ -548,7 +548,7 @@ var ( SubType: friend.FriendSubTypeApply, Req: &pb.FriendApplyReq{}, Rsp: &pb.FriendApplyResp{}, - Enabled: true, + Enabled: false, }, ff(comm.ModuleFriend, friend.FriendSubTypeBlacklist): { NavLabel: "黑名单", diff --git a/cmd/v2/ui/tool_term.go b/cmd/v2/ui/tool_term.go index f874011eb..d0b3a770b 100644 --- a/cmd/v2/ui/tool_term.go +++ b/cmd/v2/ui/tool_term.go @@ -630,7 +630,7 @@ func (a *appTerm) createDownloadWindow() fyne.Window { } for _, f := range files { - a.downloadList.AddItem(common.Item{Text: f.FileName, Size: f.Size}) + a.downloadList.AddItem(common.Item{Id: f.FileName, Text: f.FileName, Size: f.Size}) } }() diff --git a/cmd/v2/ui/views/friend_agree.go b/cmd/v2/ui/views/friend_agree.go index 0fe607cb2..974ef0704 100644 --- a/cmd/v2/ui/views/friend_agree.go +++ b/cmd/v2/ui/views/friend_agree.go @@ -1,6 +1,7 @@ package formview import ( + "go_dreamfactory/cmd/v2/lib/common" "go_dreamfactory/cmd/v2/model" "go_dreamfactory/cmd/v2/service" "go_dreamfactory/cmd/v2/service/observer" @@ -17,51 +18,76 @@ import ( // 好友审批 type FriendAgreeView struct { - ListBaseView + BaseformView + itemList common.ItemList + flag bool + greeList func() } func (this *FriendAgreeView) CreateView(t *model.TestCase) fyne.CanvasObject { - //init required - this.initItemList() + this.itemList = *common.NewItemList() + + this.itemList.ItemList = this.itemList.CreateDefaultCheckList() + + this.greeList = func() { + if err := service.GetPttService().SendToClient( + string(comm.ModuleFriend), + friend.FriendSubTypeApplyList, + &pb.FriendApplyListReq{}); err != nil { + logrus.Error(err) + } + } + defer this.greeList() + + refreshBtn := widget.NewButtonWithIcon("", theme.ViewRefreshIcon(), func() { + this.itemList.Reset() + this.greeList() + }) //同意提交 agreeBtn := widget.NewButtonWithIcon("同意", theme.ConfirmIcon(), func() { + if len(this.itemList.SelItemIds) == 0 { + common.ShowTip("请选择项目") + return + } + logrus.Debug(this.itemList.SelItemIds) if err := service.GetPttService().SendToClient( t.MainType, t.SubType, &pb.FriendAgreeReq{ - FriendIds: this.selItemIds, + FriendIds: this.itemList.SelItemIds, }, ); err != nil { logrus.Error(err) return } - this.listBtnFun() }) //拒绝 refuseBtn := widget.NewButtonWithIcon("拒绝", theme.CancelIcon(), func() { + if len(this.itemList.SelItemIds) == 0 { + common.ShowTip("请选择项目") + return + } if err := service.GetPttService().SendToClient( string(comm.ModuleFriend), friend.FriendSubTypeRefuse, &pb.FriendRefuseReq{ - FriendIds: this.selItemIds, + FriendIds: this.itemList.SelItemIds, }); err != nil { logrus.Error(err) return } - this.listBtnFun() + }) - this.createItemListWithCheck() + // layout + buttonBar := container.NewHBox(refreshBtn, agreeBtn, refuseBtn) - applyListBtn := widget.NewButton("申请列表", this.listBtnFun()) - - split := container.NewHSplit(this.dataListWidget, container.NewVBox(applyListBtn, agreeBtn, refuseBtn)) - split.Offset = 1 + c := container.NewBorder(buttonBar, nil, nil, nil, this.itemList.ItemList) this.dataListener() - return split + return c } // listener applyListdata @@ -80,15 +106,13 @@ func (this *FriendAgreeView) dataListener() { return } - this.itemListData = model.NewItemModelList() for _, v := range rsp.List { - fm := &model.ItemModel{ - Id: v.UserId, - Label: v.NickName, + item := common.Item{ + Id: v.UserId, + Text: v.NickName, } - this.itemListData.DataList = append(this.itemListData.DataList, fm) + this.itemList.AddItem(item) } - this.reloadListData() }, }) } diff --git a/cmd/v2/ui/views/friend_list.go b/cmd/v2/ui/views/friend_list.go index f5b7e68ba..5923223a4 100644 --- a/cmd/v2/ui/views/friend_list.go +++ b/cmd/v2/ui/views/friend_list.go @@ -1,6 +1,7 @@ package formview import ( + "go_dreamfactory/cmd/v2/lib/common" "go_dreamfactory/cmd/v2/model" "go_dreamfactory/cmd/v2/service" "go_dreamfactory/cmd/v2/service/observer" @@ -17,17 +18,16 @@ import ( //好友列表 type FriendListView struct { - ListBaseView //继承支持好友列表的基类 - friendList func() - flag bool + friendList func() + BaseformView + itemList *common.ItemList + flag bool } func (this *FriendListView) CreateView(t *model.TestCase) fyne.CanvasObject { - // init required - this.initItemList() + this.itemList = common.NewItemList() - // create friend list view - this.createItemListWithCheck() + this.itemList.ItemList = this.itemList.CreateDefaultCheckList() // new friendlist btn this.friendList = func() { @@ -37,33 +37,42 @@ func (this *FriendListView) CreateView(t *model.TestCase) fyne.CanvasObject { &pb.FriendListReq{}); err != nil { logrus.Error(err) } - this.itemListData = model.NewItemModelList() } - friendListBtn := widget.NewButton("好友列表", this.friendList) + + defer this.friendList() + + refreshBtn := widget.NewButtonWithIcon("", theme.ViewRefreshIcon(), func() { + this.itemList.Reset() + this.friendList() + }) //点赞 zanBtn := widget.NewButtonWithIcon("点赞", theme.ConfirmIcon(), func() { - + if len(this.itemList.SelItemIds) == 0 { + common.ShowTip("请选择项目") + return + } if err := service.GetPttService().SendToClient( t.MainType, friend.FriendSubTypeZan, &pb.FriendZanReq{ - FriendIds: this.selItemIds, + FriendIds: this.itemList.SelItemIds, }, ); err != nil { logrus.Error(err) return } - this.listBtnFun() }) - // layout - split := container.NewHSplit(this.dataListWidget, container.NewVBox(friendListBtn, zanBtn)) - split.Offset = 1 + buttonBar := container.NewHBox(refreshBtn, zanBtn) + // layout + // split := container.NewHSplit(this.itemList.ItemList, container.NewVBox(friendListBtn, zanBtn)) + // split.Offset = 1 + c := container.NewBorder(buttonBar, nil, nil, nil, this.itemList.ItemList) //data listener for this.dataListener() - return split + return c } func (this *FriendListView) Load() { @@ -88,15 +97,14 @@ func (this *FriendListView) dataListener() { return } - this.itemListData = model.NewItemModelList() for _, v := range rsp.List { - fm := &model.ItemModel{ - Id: v.UserId, - Label: v.NickName, + item := common.Item{ + Id: v.UserId, + Text: v.NickName, } - this.itemListData.DataList = append(this.itemListData.DataList, fm) + this.itemList.AddItem(item) } - this.reloadListData() + }, }) this.flag = true diff --git a/cmd/v2/ui/views/friend_randlist.go b/cmd/v2/ui/views/friend_randlist.go index 14d477651..d4eda103a 100644 --- a/cmd/v2/ui/views/friend_randlist.go +++ b/cmd/v2/ui/views/friend_randlist.go @@ -1,24 +1,97 @@ package formview 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/friend" "go_dreamfactory/pb" "fyne.io/fyne/v2" + "fyne.io/fyne/v2/container" + "fyne.io/fyne/v2/theme" + "fyne.io/fyne/v2/widget" "github.com/sirupsen/logrus" ) type FriendRandListView struct { BaseformView + itemList *common.ItemList + friendRandList func() + flag bool } func (this *FriendRandListView) CreateView(t *model.TestCase) fyne.CanvasObject { - this.form.OnSubmit = func() { + this.itemList = common.NewItemList() + + this.itemList.ItemList = this.itemList.CreateList() + + this.friendRandList = func() { if err := service.GetPttService().SendToClient(t.MainType, t.SubType, &pb.FriendRandlistReq{}); err != nil { logrus.Error(err) } } - return this.form + defer this.friendRandList() + + refreshBtn := widget.NewButtonWithIcon("", theme.ViewRefreshIcon(), func() { + this.itemList.Reset() + this.friendRandList() + }) + //好友申请 + friendApplyBtn := widget.NewButton("申请", func() { + selItems := this.itemList.SelItemIds + if len(selItems) == 0 || (len(selItems) > 0 && selItems[0] == "") { + common.ShowTip("请选择项目") + return + } + logrus.Debug(this.itemList.SelItemIds[0]) + if err := service.GetPttService().SendToClient(t.MainType, "apply", &pb.FriendApplyReq{ + FriendId: this.itemList.SelItemIds[0], + }); err != nil { + logrus.Error(err) + } + }) + + btnBar := container.NewHBox(refreshBtn, friendApplyBtn) + + // layout + c := container.NewBorder(btnBar, nil, nil, nil, this.itemList.ItemList) + + this.dataListener() + return c +} + +func (this *FriendRandListView) dataListener() { + if this.flag { + return + } + this.obs.AddListener(observer.EVENT_REQ_RSP, observer.Listener{ + OnNotify: func(d interface{}, args ...interface{}) { + data := d.(*pb.UserMessage) + if !(data.MainType == string(comm.ModuleFriend) && + data.SubType == friend.FriendSubTypeRandList) { + return + } + rsp := &pb.FriendRandlistResp{} + + if !comm.ProtoUnmarshal(data, rsp) { + logrus.Error("unmarshal err") + return + } + + for _, v := range rsp.List { + item := common.Item{ + Id: v.UserId, + Text: fmt.Sprintf("%s 服务:%s", v.NickName, v.ServerId), + } + this.itemList.AddItem(item) + } + + }, + }) + this.flag = true } diff --git a/modules/friend/api_cross_agree.go b/modules/friend/api_cross_agree.go index 385552717..0bc6f4236 100644 --- a/modules/friend/api_cross_agree.go +++ b/modules/friend/api_cross_agree.go @@ -50,6 +50,14 @@ func (this *apiComp) Agree(session comm.IUserSession, req *pb.FriendAgreeReq) (c //同意的好友 agreeIds := []string{} for _, friendId := range req.FriendIds { + // 验证friendId是否有效 + user, err := this.moduleFriend.ModuleUser.GetRmoteUser(friendId) + if err != nil { + continue + } + if user.Uid == "" { + continue + } if _, ok := utils.Find(self.FriendIds, friendId); !ok { //不在好友列表中就加入 agreeIds = append(agreeIds, friendId) @@ -82,6 +90,7 @@ func (this *apiComp) Agree(session comm.IUserSession, req *pb.FriendAgreeReq) (c }) if err != nil { code = pb.ErrorCode_DBError + return } //将目标从申请列表中删除 diff --git a/modules/friend/api_cross_randlist.go b/modules/friend/api_cross_randlist.go index ebfa7d363..fe0262979 100644 --- a/modules/friend/api_cross_randlist.go +++ b/modules/friend/api_cross_randlist.go @@ -58,7 +58,9 @@ func (this *apiComp) Randlist(session comm.IUserSession, req *pb.FriendRandlistR } } else { for _, v := range newList { - randOnlineUsers = append(randOnlineUsers, v.Uid) + if v.Uid != "" { + randOnlineUsers = append(randOnlineUsers, v.Uid) + } } } @@ -79,9 +81,10 @@ func (this *apiComp) Randlist(session comm.IUserSession, req *pb.FriendRandlistR // 申请过的在线好友,设置申请状态 if _, ok := utils.Findx(target.ApplyIds, self.Uid); ok { base.IsApplied = true + } else { + userList = append(userList, base) } - userList = append(userList, base) } rsp := &pb.FriendRandlistResp{