修复跨服好友申请

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) {
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

View File

@ -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

View File

@ -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: "黑名单",

View File

@ -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})
}
}()

View File

@ -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()
},
})
}

View File

@ -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

View File

@ -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
}

View File

@ -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
}
//将目标从申请列表中删除

View File

@ -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{