修复跨服好友申请

This commit is contained in:
wh_zcy 2022-10-19 17:25:14 +08:00
parent e5f8fe912c
commit 2f6722bc5a
9 changed files with 174 additions and 56 deletions

View File

@ -74,14 +74,15 @@ func (f *ItemList) CreateDefaultCheckList() *widget.List {
}, },
func(id widget.ListItemID, item fyne.CanvasObject) { func(id widget.ListItemID, item fyne.CanvasObject) {
c, _ := item.(*widget.Check) c, _ := item.(*widget.Check)
_id := f.CachedList.Items[id].Id
c.Text = f.CachedList.Items[id].Text c.Text = f.CachedList.Items[id].Text
c.Checked = f.CachedList.Items[id].Checked c.Checked = f.CachedList.Items[id].Checked
c.OnChanged = func(b bool) { c.OnChanged = func(b bool) {
if b { if b {
f.SelItemIds = append(f.SelItemIds, c.Text) f.SelItemIds = append(f.SelItemIds, _id)
} else { } 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.TitleLabel.SetText(fmt.Sprintf("(%d/%d)", len(f.SelItemIds), f.ItemTotal))
f.CachedList.Items[id].Checked = b f.CachedList.Items[id].Checked = b

View File

@ -125,9 +125,9 @@ func (a *appTester) makeNav(setNav func(testCase *model.TestCase)) fyne.CanvasOb
if a.disEnabled(t) { if a.disEnabled(t) {
obj.(*widget.Label).TextStyle = fyne.TextStyle{Italic: true} obj.(*widget.Label).TextStyle = fyne.TextStyle{Italic: true}
if branch { //parent if branch { //parent
obj.(*widget.Label).SetText(fmt.Sprintf("%s(dis)", t.MainType)) obj.(*widget.Label).SetText(fmt.Sprintf("%s(dis0)", t.MainType))
} else { } else {
obj.(*widget.Label).SetText(fmt.Sprintf("%s(dis)", t.SubType)) // obj.(*widget.Label).SetText(fmt.Sprintf("%s(dis1)", t.SubType))
} }
} else { } else {
if branch { //parent if branch { //parent

View File

@ -71,7 +71,7 @@ var (
ff(comm.ModuleEquipment, "upgrade"): &formview.EquipUpgradeView{}, ff(comm.ModuleEquipment, "upgrade"): &formview.EquipUpgradeView{},
//friend //friend
ff(comm.ModuleFriend, friend.FriendSubTypeList): &formview.FriendListView{}, ff(comm.ModuleFriend, friend.FriendSubTypeList): &formview.FriendListView{},
ff(comm.ModuleFriend, friend.FriendSubTypeApply): &formview.FriendApplyView{}, // ff(comm.ModuleFriend, friend.FriendSubTypeApply): &formview.FriendApplyView{},
ff(comm.ModuleFriend, friend.FriendSubTypeAgree): &formview.FriendAgreeView{}, ff(comm.ModuleFriend, friend.FriendSubTypeAgree): &formview.FriendAgreeView{},
ff(comm.ModuleFriend, friend.FriendSubTypeBlacklist): &formview.FriendBlacklistView{}, ff(comm.ModuleFriend, friend.FriendSubTypeBlacklist): &formview.FriendBlacklistView{},
ff(comm.ModuleFriend, friend.FriendSubTypeAddBlack): &formview.FriendAddBlackView{}, ff(comm.ModuleFriend, friend.FriendSubTypeAddBlack): &formview.FriendAddBlackView{},
@ -169,7 +169,7 @@ var (
}, },
"friend": { "friend": {
ff(comm.ModuleFriend, friend.FriendSubTypeList), ff(comm.ModuleFriend, friend.FriendSubTypeList),
ff(comm.ModuleFriend, friend.FriendSubTypeApply), // ff(comm.ModuleFriend, friend.FriendSubTypeApply),
ff(comm.ModuleFriend, friend.FriendSubTypeAgree), ff(comm.ModuleFriend, friend.FriendSubTypeAgree),
ff(comm.ModuleFriend, friend.FriendSubTypeBlacklist), ff(comm.ModuleFriend, friend.FriendSubTypeBlacklist),
ff(comm.ModuleFriend, friend.FriendSubTypeAddBlack), ff(comm.ModuleFriend, friend.FriendSubTypeAddBlack),
@ -533,8 +533,8 @@ var (
}, },
}, },
ff(comm.ModuleFriend, friend.FriendSubTypeList): { ff(comm.ModuleFriend, friend.FriendSubTypeList): {
NavLabel: "好友列表", NavLabel: "我的好友",
Desc: "好友列表", Desc: "我的好友列表",
MainType: string(comm.ModuleFriend), MainType: string(comm.ModuleFriend),
SubType: friend.FriendSubTypeList, SubType: friend.FriendSubTypeList,
Req: &pb.FriendListReq{}, Req: &pb.FriendListReq{},
@ -548,7 +548,7 @@ var (
SubType: friend.FriendSubTypeApply, SubType: friend.FriendSubTypeApply,
Req: &pb.FriendApplyReq{}, Req: &pb.FriendApplyReq{},
Rsp: &pb.FriendApplyResp{}, Rsp: &pb.FriendApplyResp{},
Enabled: true, Enabled: false,
}, },
ff(comm.ModuleFriend, friend.FriendSubTypeBlacklist): { ff(comm.ModuleFriend, friend.FriendSubTypeBlacklist): {
NavLabel: "黑名单", NavLabel: "黑名单",

View File

@ -630,7 +630,7 @@ func (a *appTerm) createDownloadWindow() fyne.Window {
} }
for _, f := range files { 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})
} }
}() }()

View File

@ -1,6 +1,7 @@
package formview package formview
import ( import (
"go_dreamfactory/cmd/v2/lib/common"
"go_dreamfactory/cmd/v2/model" "go_dreamfactory/cmd/v2/model"
"go_dreamfactory/cmd/v2/service" "go_dreamfactory/cmd/v2/service"
"go_dreamfactory/cmd/v2/service/observer" "go_dreamfactory/cmd/v2/service/observer"
@ -17,51 +18,76 @@ import (
// 好友审批 // 好友审批
type FriendAgreeView struct { type FriendAgreeView struct {
ListBaseView BaseformView
itemList common.ItemList
flag bool
greeList func()
} }
func (this *FriendAgreeView) CreateView(t *model.TestCase) fyne.CanvasObject { func (this *FriendAgreeView) CreateView(t *model.TestCase) fyne.CanvasObject {
//init required this.itemList = *common.NewItemList()
this.initItemList()
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() { 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( if err := service.GetPttService().SendToClient(
t.MainType, t.MainType,
t.SubType, t.SubType,
&pb.FriendAgreeReq{ &pb.FriendAgreeReq{
FriendIds: this.selItemIds, FriendIds: this.itemList.SelItemIds,
}, },
); err != nil { ); err != nil {
logrus.Error(err) logrus.Error(err)
return return
} }
this.listBtnFun()
}) })
//拒绝 //拒绝
refuseBtn := widget.NewButtonWithIcon("拒绝", theme.CancelIcon(), func() { refuseBtn := widget.NewButtonWithIcon("拒绝", theme.CancelIcon(), func() {
if len(this.itemList.SelItemIds) == 0 {
common.ShowTip("请选择项目")
return
}
if err := service.GetPttService().SendToClient( if err := service.GetPttService().SendToClient(
string(comm.ModuleFriend), string(comm.ModuleFriend),
friend.FriendSubTypeRefuse, friend.FriendSubTypeRefuse,
&pb.FriendRefuseReq{ &pb.FriendRefuseReq{
FriendIds: this.selItemIds, FriendIds: this.itemList.SelItemIds,
}); err != nil { }); err != nil {
logrus.Error(err) logrus.Error(err)
return return
} }
this.listBtnFun()
}) })
this.createItemListWithCheck() // layout
buttonBar := container.NewHBox(refreshBtn, agreeBtn, refuseBtn)
applyListBtn := widget.NewButton("申请列表", this.listBtnFun()) c := container.NewBorder(buttonBar, nil, nil, nil, this.itemList.ItemList)
split := container.NewHSplit(this.dataListWidget, container.NewVBox(applyListBtn, agreeBtn, refuseBtn))
split.Offset = 1
this.dataListener() this.dataListener()
return split return c
} }
// listener applyListdata // listener applyListdata
@ -80,15 +106,13 @@ func (this *FriendAgreeView) dataListener() {
return return
} }
this.itemListData = model.NewItemModelList()
for _, v := range rsp.List { for _, v := range rsp.List {
fm := &model.ItemModel{ item := common.Item{
Id: v.UserId, Id: v.UserId,
Label: v.NickName, Text: v.NickName,
} }
this.itemListData.DataList = append(this.itemListData.DataList, fm) this.itemList.AddItem(item)
} }
this.reloadListData()
}, },
}) })
} }

View File

@ -1,6 +1,7 @@
package formview package formview
import ( import (
"go_dreamfactory/cmd/v2/lib/common"
"go_dreamfactory/cmd/v2/model" "go_dreamfactory/cmd/v2/model"
"go_dreamfactory/cmd/v2/service" "go_dreamfactory/cmd/v2/service"
"go_dreamfactory/cmd/v2/service/observer" "go_dreamfactory/cmd/v2/service/observer"
@ -17,17 +18,16 @@ import (
//好友列表 //好友列表
type FriendListView struct { type FriendListView struct {
ListBaseView //继承支持好友列表的基类
friendList func() friendList func()
BaseformView
itemList *common.ItemList
flag bool flag bool
} }
func (this *FriendListView) CreateView(t *model.TestCase) fyne.CanvasObject { func (this *FriendListView) CreateView(t *model.TestCase) fyne.CanvasObject {
// init required this.itemList = common.NewItemList()
this.initItemList()
// create friend list view this.itemList.ItemList = this.itemList.CreateDefaultCheckList()
this.createItemListWithCheck()
// new friendlist btn // new friendlist btn
this.friendList = func() { this.friendList = func() {
@ -37,33 +37,42 @@ func (this *FriendListView) CreateView(t *model.TestCase) fyne.CanvasObject {
&pb.FriendListReq{}); err != nil { &pb.FriendListReq{}); err != nil {
logrus.Error(err) 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() { zanBtn := widget.NewButtonWithIcon("点赞", theme.ConfirmIcon(), func() {
if len(this.itemList.SelItemIds) == 0 {
common.ShowTip("请选择项目")
return
}
if err := service.GetPttService().SendToClient( if err := service.GetPttService().SendToClient(
t.MainType, t.MainType,
friend.FriendSubTypeZan, friend.FriendSubTypeZan,
&pb.FriendZanReq{ &pb.FriendZanReq{
FriendIds: this.selItemIds, FriendIds: this.itemList.SelItemIds,
}, },
); err != nil { ); err != nil {
logrus.Error(err) logrus.Error(err)
return return
} }
this.listBtnFun()
}) })
// layout buttonBar := container.NewHBox(refreshBtn, zanBtn)
split := container.NewHSplit(this.dataListWidget, container.NewVBox(friendListBtn, zanBtn))
split.Offset = 1
// 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 //data listener for
this.dataListener() this.dataListener()
return split return c
} }
func (this *FriendListView) Load() { func (this *FriendListView) Load() {
@ -88,15 +97,14 @@ func (this *FriendListView) dataListener() {
return return
} }
this.itemListData = model.NewItemModelList()
for _, v := range rsp.List { for _, v := range rsp.List {
fm := &model.ItemModel{ item := common.Item{
Id: v.UserId, Id: v.UserId,
Label: v.NickName, Text: v.NickName,
} }
this.itemListData.DataList = append(this.itemListData.DataList, fm) this.itemList.AddItem(item)
} }
this.reloadListData()
}, },
}) })
this.flag = true this.flag = true

View File

@ -1,24 +1,97 @@
package formview package formview
import ( import (
"fmt"
"go_dreamfactory/cmd/v2/lib/common"
"go_dreamfactory/cmd/v2/model" "go_dreamfactory/cmd/v2/model"
"go_dreamfactory/cmd/v2/service" "go_dreamfactory/cmd/v2/service"
"go_dreamfactory/cmd/v2/service/observer"
"go_dreamfactory/comm"
"go_dreamfactory/modules/friend"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"fyne.io/fyne/v2" "fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/theme"
"fyne.io/fyne/v2/widget"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
type FriendRandListView struct { type FriendRandListView struct {
BaseformView BaseformView
itemList *common.ItemList
friendRandList func()
flag bool
} }
func (this *FriendRandListView) CreateView(t *model.TestCase) fyne.CanvasObject { 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, if err := service.GetPttService().SendToClient(t.MainType, t.SubType,
&pb.FriendRandlistReq{}); err != nil { &pb.FriendRandlistReq{}); err != nil {
logrus.Error(err) 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
} }

View File

@ -50,6 +50,14 @@ func (this *apiComp) Agree(session comm.IUserSession, req *pb.FriendAgreeReq) (c
//同意的好友 //同意的好友
agreeIds := []string{} agreeIds := []string{}
for _, friendId := range req.FriendIds { 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 { if _, ok := utils.Find(self.FriendIds, friendId); !ok {
//不在好友列表中就加入 //不在好友列表中就加入
agreeIds = append(agreeIds, friendId) agreeIds = append(agreeIds, friendId)
@ -82,6 +90,7 @@ func (this *apiComp) Agree(session comm.IUserSession, req *pb.FriendAgreeReq) (c
}) })
if err != nil { if err != nil {
code = pb.ErrorCode_DBError code = pb.ErrorCode_DBError
return
} }
//将目标从申请列表中删除 //将目标从申请列表中删除

View File

@ -58,9 +58,11 @@ func (this *apiComp) Randlist(session comm.IUserSession, req *pb.FriendRandlistR
} }
} else { } else {
for _, v := range newList { for _, v := range newList {
if v.Uid != "" {
randOnlineUsers = append(randOnlineUsers, v.Uid) randOnlineUsers = append(randOnlineUsers, v.Uid)
} }
} }
}
var userList []*pb.FriendBase var userList []*pb.FriendBase
@ -79,9 +81,10 @@ func (this *apiComp) Randlist(session comm.IUserSession, req *pb.FriendRandlistR
// 申请过的在线好友,设置申请状态 // 申请过的在线好友,设置申请状态
if _, ok := utils.Findx(target.ApplyIds, self.Uid); ok { if _, ok := utils.Findx(target.ApplyIds, self.Uid); ok {
base.IsApplied = true base.IsApplied = true
} else {
userList = append(userList, base)
} }
userList = append(userList, base)
} }
rsp := &pb.FriendRandlistResp{ rsp := &pb.FriendRandlistResp{