252 lines
7.7 KiB
Go
252 lines
7.7 KiB
Go
package ui
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"go_dreamfactory/cmd/v2/lib/common"
|
|
os_storage "go_dreamfactory/cmd/v2/lib/storage"
|
|
"go_dreamfactory/cmd/v2/service"
|
|
"go_dreamfactory/cmd/v2/service/observer"
|
|
"go_dreamfactory/pb"
|
|
"strings"
|
|
|
|
mytheme "go_dreamfactory/cmd/v2/theme"
|
|
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/container"
|
|
"fyne.io/fyne/v2/dialog"
|
|
"fyne.io/fyne/v2/layout"
|
|
"fyne.io/fyne/v2/theme"
|
|
"fyne.io/fyne/v2/widget"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/spf13/cast"
|
|
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
"go.mongodb.org/mongo-driver/mongo/options"
|
|
)
|
|
|
|
type appMgo struct {
|
|
appAdapter
|
|
conf *os_storage.Config
|
|
storage os_storage.Storage
|
|
db *mongo.Database
|
|
client *mongo.Client
|
|
scriptEntry *widget.Entry
|
|
}
|
|
|
|
func (this *appMgo) LazyInit(ptService service.PttService, obs observer.Observer) error {
|
|
this.tabItem = container.NewTabItemWithIcon(common.TOOLBAR_MGODB, theme.DownloadIcon(), nil)
|
|
content := container.NewMax()
|
|
content.Objects = []fyne.CanvasObject{}
|
|
|
|
this.scriptEntry = widget.NewMultiLineEntry()
|
|
|
|
connWinBtn := widget.NewButton("连接设置", this.showConWin)
|
|
openConnBtn := widget.NewButton("打开连接", this.openConn)
|
|
closeConnBtn := widget.NewButton("关闭连接", this.closeConn)
|
|
createServerConfBtn := widget.NewButton("创建服务配置", this.createServerConf)
|
|
btns := container.NewHBox(connWinBtn, openConnBtn, createServerConfBtn, layout.NewSpacer(), closeConnBtn)
|
|
content.Objects = append(content.Objects, container.NewBorder(btns, nil, nil, nil, this.scriptEntry))
|
|
this.tabItem.Content = content
|
|
this.storage, _ = os_storage.NewOSStorage()
|
|
var err error
|
|
this.conf, err = this.storage.LoadConfig()
|
|
if err != nil {
|
|
logrus.Error(err)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (this *appMgo) openConn() {
|
|
if this.conf.MgoDB == nil {
|
|
dialog.ShowError(errors.New("MgoDB没有配置"), toolWin.w)
|
|
return
|
|
}
|
|
var option *options.ClientOptions
|
|
if (this.conf.MgoDB.User == "" && this.conf.MgoDB.Password == "") &&
|
|
this.conf.MgoDB.Host != "" && this.conf.MgoDB.Port != 0 && this.conf.MgoDB.Database != "" {
|
|
option = options.Client().ApplyURI(fmt.Sprintf("mongodb://%s:%d", this.conf.MgoDB.Host, this.conf.MgoDB.Port))
|
|
} else {
|
|
option = options.Client().ApplyURI(fmt.Sprintf("mongodb://%s:%s@%s:%d", this.conf.MgoDB.User, this.conf.MgoDB.Password,
|
|
this.conf.MgoDB.Host, this.conf.MgoDB.Port))
|
|
}
|
|
client, err := mongo.Connect(context.TODO(), option)
|
|
if err != nil {
|
|
logrus.Error(err)
|
|
return
|
|
}
|
|
if err2 := client.Ping(context.TODO(), nil); err2 != nil {
|
|
logrus.Error("Mongo连接失败", err2)
|
|
return
|
|
}
|
|
this.db = client.Database(this.conf.MgoDB.Database)
|
|
|
|
this.scriptEntry.Text = this.db.Name() + " 连接成功"
|
|
this.scriptEntry.Refresh()
|
|
}
|
|
|
|
func (this *appMgo) closeConn() {
|
|
if this.db != nil {
|
|
if err := this.db.Client().Disconnect(context.TODO()); err != nil {
|
|
this.scriptEntry.Text = "连接关闭失败"
|
|
} else {
|
|
this.scriptEntry.Text = "连接关闭成功"
|
|
}
|
|
this.scriptEntry.Refresh()
|
|
}
|
|
}
|
|
|
|
func (this *appMgo) createServerConf() {
|
|
serverId := widget.NewEntry()
|
|
serverName := widget.NewEntry()
|
|
owner := widget.NewEntry()
|
|
cross := widget.NewEntry()
|
|
crossId := widget.NewEntry()
|
|
singleserver := widget.NewEntry()
|
|
opentime := widget.NewEntry()
|
|
redisIsCluster := widget.NewEntry()
|
|
redisAddr := widget.NewEntry()
|
|
redisPassword := widget.NewEntry()
|
|
redisDb := widget.NewEntry()
|
|
mongoUrl := widget.NewEntry()
|
|
mongoDatabase := widget.NewEntry()
|
|
|
|
form := widget.NewForm(
|
|
widget.NewFormItem("serverid", serverId),
|
|
widget.NewFormItem("serverName", serverName),
|
|
widget.NewFormItem("owner", owner),
|
|
widget.NewFormItem("cross", cross),
|
|
widget.NewFormItem("crossId", crossId),
|
|
widget.NewFormItem("singleserver", singleserver),
|
|
widget.NewFormItem("opentime", opentime),
|
|
widget.NewFormItem("redisIsCluster", redisIsCluster),
|
|
widget.NewFormItem("redisAddr", redisAddr),
|
|
widget.NewFormItem("redisPassword", redisPassword),
|
|
widget.NewFormItem("redisDb", redisDb),
|
|
widget.NewFormItem("mongoUrl", mongoUrl),
|
|
widget.NewFormItem("mongoDatabase", mongoDatabase),
|
|
)
|
|
|
|
if this.conf.ServiceDBInfo != nil {
|
|
serverId.Text = this.conf.ServiceDBInfo.Serverid
|
|
serverName.Text = this.conf.ServiceDBInfo.ServerName
|
|
owner.Text = this.conf.ServiceDBInfo.Owner
|
|
cross.Text = this.conf.ServiceDBInfo.Cross
|
|
crossId.Text = this.conf.ServiceDBInfo.CrossId
|
|
singleserver.Text = this.conf.ServiceDBInfo.Singleserver
|
|
opentime.Text = cast.ToString(this.conf.ServiceDBInfo.Opentime)
|
|
redisIsCluster.Text = cast.ToString(this.conf.ServiceDBInfo.RedisIsCluster)
|
|
redisAddr.Text = strings.Join(this.conf.ServiceDBInfo.RedisAddr, ",")
|
|
redisPassword.Text = this.conf.ServiceDBInfo.RedisPassword
|
|
redisDb.Text = cast.ToString(this.conf.ServiceDBInfo.RedisDb)
|
|
mongoUrl.Text = this.conf.ServiceDBInfo.MongodbUrl
|
|
mongoDatabase.Text = this.conf.ServiceDBInfo.MongodbDatabase
|
|
}
|
|
|
|
subBtn := widget.NewButton("保存", func() {
|
|
this.conf.ServiceDBInfo = &pb.ServiceDBInfo{
|
|
Serverid: serverId.Text,
|
|
ServerName: serverName.Text,
|
|
Owner: owner.Text,
|
|
Cross: cross.Text,
|
|
CrossId: crossId.Text,
|
|
Singleserver: singleserver.Text,
|
|
Opentime: cast.ToInt64(opentime.Text),
|
|
RedisIsCluster: cast.ToBool(redisIsCluster.Text),
|
|
RedisAddr: strings.Split(redisAddr.Text, ","),
|
|
RedisPassword: redisPassword.Text,
|
|
RedisDb: cast.ToInt32(redisDb.Text),
|
|
MongodbUrl: mongoUrl.Text,
|
|
MongodbDatabase: mongoDatabase.Text,
|
|
}
|
|
if err := this.storage.StoreConfig(this.conf); err != nil {
|
|
logrus.Error(err)
|
|
}
|
|
})
|
|
subBtn.Importance = widget.HighImportance
|
|
|
|
execBtn := widget.NewButton("插入", func() {
|
|
if this.db == nil {
|
|
common.ShowTip("请先打开连接")
|
|
return
|
|
}
|
|
c := this.db.Collection("serverdata")
|
|
if _, err := c.InsertOne(context.TODO(), this.conf.ServiceDBInfo); err != nil {
|
|
logrus.Error(err)
|
|
return
|
|
}
|
|
|
|
this.scriptEntry.Text = "插入成功"
|
|
this.scriptEntry.Refresh()
|
|
})
|
|
dconf := dialog.NewCustom("配置", "关闭", container.NewVBox(form, container.NewHBox(layout.NewSpacer(), subBtn, execBtn)), toolWin.w)
|
|
dconf.Resize(fyne.NewSize(400, 600))
|
|
dconf.Show()
|
|
|
|
}
|
|
|
|
func (this *appMgo) showConWin() {
|
|
|
|
connName := widget.NewEntry()
|
|
|
|
address := widget.NewEntry()
|
|
|
|
port := widget.NewEntry()
|
|
|
|
user := widget.NewEntry()
|
|
password := widget.NewPasswordEntry()
|
|
|
|
database := widget.NewEntry()
|
|
|
|
form := widget.NewForm(
|
|
widget.NewFormItem("Name", connName),
|
|
widget.NewFormItem("Address", container.NewBorder(nil, nil, nil, port, address)),
|
|
widget.NewFormItem("User", user),
|
|
widget.NewFormItem("Password", password),
|
|
widget.NewFormItem("Database", database),
|
|
)
|
|
|
|
if this.conf.MgoDB != nil {
|
|
connName.Text = this.conf.MgoDB.Name
|
|
address.Text = this.conf.MgoDB.Host
|
|
port.Text = cast.ToString(this.conf.MgoDB.Port)
|
|
user.Text = this.conf.MgoDB.User
|
|
password.Text = this.conf.MgoDB.Password
|
|
database.Text = this.conf.MgoDB.Database
|
|
}
|
|
form.OnSubmit = func() {
|
|
this.conf.MgoDB = &os_storage.MgoDB{
|
|
Name: connName.Text,
|
|
Host: address.Text,
|
|
Port: cast.ToInt32(port.Text),
|
|
User: user.Text,
|
|
Password: password.Text,
|
|
Database: database.Text,
|
|
}
|
|
|
|
if connName.Text == "" || address.Text == "" || port.Text == "" {
|
|
common.ShowTip("请填写完整")
|
|
return
|
|
}
|
|
if err := this.storage.StoreConfig(this.conf); err != nil {
|
|
logrus.Error(err)
|
|
return
|
|
}
|
|
dialog.ShowInformation("提示", "保存成功", toolWin.w)
|
|
}
|
|
form.SubmitText = "保存"
|
|
|
|
dconf := dialog.NewCustom("设置链接", "关闭", form, toolWin.w)
|
|
dconf.Resize(fyne.NewSize(400, 200))
|
|
dconf.Show()
|
|
}
|
|
|
|
func (a *appMgo) GetAppName() string {
|
|
return common.TOOLBAR_MGODB
|
|
}
|
|
func (a *appMgo) Icon() fyne.Resource {
|
|
return mytheme.ResourceMongodbJpg
|
|
}
|