This commit is contained in:
meixiongfeng 2022-12-12 18:07:01 +08:00
commit d401945ea6
7 changed files with 221 additions and 47 deletions

22
busi/sociaty.go Normal file
View File

@ -0,0 +1,22 @@
package busi
import "legu.airobot/lib"
var _ lib.IScene = (*SociatyScene)(nil)
type SociatyScene struct {
lib.Action
}
func (s *SociatyScene) Info() lib.SceneInfo {
return lib.SceneInfo{
Name: "公会申请",
Desc: "bbb",
}
}
func (s *SociatyScene) Run(robot lib.IRobot) error {
return nil
}

View File

@ -6,6 +6,7 @@ type IAction interface {
type Action struct {
// scene *scene
Id string
Name string
Desc string
}

View File

@ -29,6 +29,7 @@ func init() {
registerScenes(
&busi.FriendScene{},
&busi.SociatyScene{},
)
}

View File

@ -1 +0,0 @@
{"level":"debug","msg":"配置","time":"2022-12-12 11:40:00","场景":[{"id":"799348400","name":"场景1","desc":"111","callers":[{"id":"799348400_1670808209409441100","name":"好友推荐","key":"friend.randlist","num":1}]},{"id":"261021700","name":"登录","callers":[{"id":"261021700_1670808329010907700","name":"好友申请","key":"friend.apply"}],"status":1}]}

View File

@ -24,6 +24,7 @@ type Scene struct {
Desc string `json:"desc,omitempty"` //描述
Callers []*Caller `json:"callers,omitempty"` //调用器列表
Status uint32 `json:"status,omitempty"` //是否启用 默认0未启用 1是启用
Num int `json:"num,omitempty"` //顺序号
}
type Caller struct {

View File

@ -36,7 +36,7 @@ func newMainMenu() *mainMenu {
mm.configMenu = fyne.NewMenuItem("配置", globalWindow.configContainer)
mm.configMenu.Icon = theme.FileTextIcon()
//场景
mm.sceneMenu = fyne.NewMenuItem("场景", globalWindow.sceneContainer)
mm.sceneMenu = fyne.NewMenuItem("场景", globalWindow.newSceneContainer)
mm.sceneMenu.Icon = theme.FileTextIcon()
// AI

View File

@ -90,31 +90,31 @@ func (mw *MainWindow) startContainer() {
}
// 检查场景配置
if config.Scenes == nil {
dialog.ShowCustomConfirm("提示", "创建", "取消", widget.NewLabel("还没有创建任何场景"), func(b bool) {
dialog.ShowCustomConfirm("提示", "选择", "取消", widget.NewLabel("还没有选择任何场景"), func(b bool) {
if !b {
return
}
mw.sceneContainer()
mw.newSceneContainer()
}, mw.w)
return
}
// 检查场景是否启用
isEnable := false
for _, v := range config.Scenes {
if v.Status == lib.STATUS_ENABLE {
isEnable = true
break
}
}
if !isEnable {
dialog.ShowCustomConfirm("提示", "启用", "取消", widget.NewLabel("还没有启用任意场景"), func(b bool) {
if !b {
return
}
mw.sceneContainer()
}, mw.w)
return
}
// isEnable := false
// for _, v := range config.Scenes {
// if v.Status == lib.STATUS_ENABLE {
// isEnable = true
// break
// }
// }
// if !isEnable {
// dialog.ShowCustomConfirm("提示", "启用", "取消", widget.NewLabel("还没有启用任意场景"), func(b bool) {
// if !b {
// return
// }
// mw.sceneContainer()
// }, mw.w)
// return
// }
startBtn.Enable()
startBtn.OnTapped = func() {
ai, err := lib.NewAI(lib.AIParam{RobotCount: uint32(config.Global.UserCount)})
@ -567,65 +567,215 @@ func (mw *MainWindow) sceneContainer() {
func (mw *MainWindow) newSceneContainer() {
//注册的场景列表
registerSceneList := *lib.NewItemList()
registerSceneList.OnSelFunc = func(id widget.ListItemID) {
data := registerSceneList.CachedList.Items[id].Data
info, ok := data.(lib.SceneInfo)
if !ok {
return
}
logrus.Debug(info)
// callerNameEntry.Text = info.Desc
// callerKeyEntry.Text = info.Name
// callerForm.Refresh()
}
// registerSceneList.OnSelFunc = func(id widget.ListItemID) {
// data := registerSceneList.CachedList.Items[id].Data
// info, ok := data.(lib.SceneInfo)
// if !ok {
// return
// }
// logrus.Debug(info)
// // callerNameEntry.Text = info.Desc
// // callerKeyEntry.Text = info.Name
// // callerForm.Refresh()
// }
registerSceneList.ListWidget = registerSceneList.CreateList()
registerSceneReload := func() {
registerSceneList.Reset()
for _, v := range mw.UIImpl.scenes {
info := v.Info()
item := lib.Item{
Id: info.Name,
Text: fmt.Sprintf("%s (%s)", info.Desc, info.Name),
Text: fmt.Sprintf("【%s】 %s", info.Name, info.Desc),
Data: info,
}
registerSceneList.AddItem(item)
}
registerSceneList.SearchItem = registerSceneList.CachedList.Items
}
registerSceneReload()
// 选中的场景列表
selectedSceneList := *lib.NewItemList()
selectedSceneList.ListWidget = selectedSceneList.CreateList()
selectedSceneLoad := func() {
selectedSceneList.Reset()
scenes := mw.config.Scenes
sort.SliceStable(scenes, func(i, j int) bool {
return scenes[i].Num < scenes[j].Num
})
for _, v := range scenes {
item := lib.Item{
Id: v.ID,
Text: fmt.Sprintf("%d【%s】 %s", v.Num, v.Name, v.Desc),
}
selectedSceneList.AddItem(item)
}
}
selectedSceneLoad()
//场景按钮
addSceneBtn := widget.NewButtonWithIcon("添加场景", theme.ContentAddIcon(), nil)
deleSceneBtn := widget.NewButtonWithIcon("删除场景", theme.DeleteIcon(), nil)
setNumBtn := widget.NewButtonWithIcon("设置序号", theme.ListIcon(), nil)
// 刷新场景
refreshBtn := widget.NewButtonWithIcon("", theme.ViewRefreshIcon(), nil)
//search
searchEntry := widget.NewEntry()
searchEntry.PlaceHolder = "输入要搜索的用例"
searchEntry.OnChanged = func(s string) {
if s == "" {
registerSceneReload()
} else {
newList := []lib.Item{}
for _, v := range registerSceneList.SearchItem {
if strings.Contains(v.Text, s) {
newList = append(newList, v)
}
}
registerSceneList.CachedList.Items = newList
registerSceneList.ListWidget.Refresh()
}
}
// 工具条
toolbar := container.NewHBox(addSceneBtn, deleSceneBtn, layout.NewSpacer(), refreshBtn)
//布局
var dynamic fyne.CanvasObject
contentRender := func() {
// sceneLoad()
if len(selectedSceneList.CachedList.Items) == 0 {
dynamic = container.NewCenter(widget.NewLabel("还没有创建任何场景"))
registerSceneReload()
if len(registerSceneList.CachedList.Items) == 0 {
dynamic = container.NewCenter(widget.NewLabel("还没有注册任何场景"))
} else {
split := container.NewHSplit(selectedSceneList.ListWidget, selectedSceneList.ListWidget)
split.Offset = 0.3
dynamic = split
selectedSceneLoad()
if len(selectedSceneList.CachedList.Items) == 0 {
dynamic = container.NewCenter(widget.NewLabel("还没有选择任何场景"))
} else {
dynamic = container.NewBorder(container.NewHBox(setNumBtn, deleSceneBtn, layout.NewSpacer()), nil, nil, nil, selectedSceneList.ListWidget)
}
}
content := container.NewBorder(toolbar, nil, nil, nil, dynamic)
mw.changeContent(content)
split := container.NewHSplit(
container.NewBorder(
container.NewBorder(nil, nil, container.NewHBox(addSceneBtn), nil, searchEntry), nil, nil, nil,
registerSceneList.ListWidget), dynamic)
split.Offset = 0.4
mw.changeContent(split)
}
contentRender()
getMaxNum := func() int {
scenes := mw.config.Scenes
if len(scenes) == 0 {
return 1
}
// 降序
sort.SliceStable(scenes, func(i, j int) bool {
return scenes[i].Num > scenes[j].Num
})
return scenes[0].Num + 1
}
// 添加场景事件
addSceneBtn.OnTapped = func() {
selId := registerSceneList.SelectedId()
if selId == "" {
ShowTip("请选择一个场景")
return
}
for _, v := range mw.UIImpl.scenes {
si := v.Info()
if si.Name == "" {
break
}
if si.Name == selId {
item := lib.Item{
Id: si.Name,
Text: si.Name,
}
selectedSceneList.AddItem(item)
scenes_conf := mw.config.Scenes
scenes_conf = append(scenes_conf, &storage.Scene{
ID: cast.ToString(time.Now().Nanosecond()),
Name: si.Name,
Desc: si.Desc,
Num: getMaxNum(),
})
mw.config.Scenes = scenes_conf
if err := mw.storage.StoreConfig(mw.config); err != nil {
ShowTip(fmt.Sprintf("错误:%v", err.Error()))
return
}
}
}
contentRender()
}
// 删除场景事件
deleSceneBtn.OnTapped = func() {
selId := selectedSceneList.SelectedId()
if selId == "" {
ShowTip("请选择一个场景")
return
}
scenes := mw.config.Scenes
for i, item := range scenes {
if item.ID == selId {
scenes = append(scenes[:i], scenes[i+1:]...)
break
}
}
mw.config.Scenes = scenes
selectedSceneLoad()
if err := mw.storage.StoreConfig(mw.config); err != nil {
ShowTip(fmt.Sprintf("错误:%v", err.Error()))
return
}
}
// 设置序号事件
setNumBtn.OnTapped = func() {
selId := selectedSceneList.SelectedId()
if selId == "" {
ShowTip("请选择一个场景")
return
}
sceneNumEntry := widget.NewEntry()
sceneNumEntry.Text = "0"
sceneItems := []*widget.FormItem{
widget.NewFormItem("顺序号", sceneNumEntry),
}
// 加载
var sceneConf *storage.Scene
for _, item := range mw.config.Scenes {
if item.ID == selId {
sceneConf = item
}
}
if sceneConf != nil {
sceneNumEntry.Text = cast.ToString(sceneConf.Num)
}
editSceneWin := dialog.NewForm("编辑场景序号", "确定", "取消", sceneItems, func(b bool) {
if !b {
return
}
for _, item := range mw.config.Scenes {
if item.ID == selId {
item.Num = cast.ToInt(sceneNumEntry.Text)
}
}
if err := mw.storage.StoreConfig(mw.config); err != nil {
ShowTip(fmt.Sprintf("错误:%v", err.Error()))
return
}
selectedSceneLoad()
}, mw.w)
editSceneWin.Resize(fyne.NewSize(300, 150))
editSceneWin.Show()
}
}
// 导出配置