diff options
| author | Andrew <saintruler@gmail.com> | 2021-04-28 18:09:00 +0400 |
|---|---|---|
| committer | Andrew <saintruler@gmail.com> | 2021-04-28 18:09:00 +0400 |
| commit | 7d6270f64b1dc00d91230b5c793bc49991f0fcf8 (patch) | |
| tree | ee41d9e909968d56a83a09cf83fbb6e5ff6dbb1c /http-client/main.go | |
| parent | 355dab5bdc924202b1d877b18ae31f04154a4aee (diff) | |
Added http client and tryAuth view to server.
Diffstat (limited to 'http-client/main.go')
| -rw-r--r-- | http-client/main.go | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/http-client/main.go b/http-client/main.go new file mode 100644 index 0000000..14419e5 --- /dev/null +++ b/http-client/main.go @@ -0,0 +1,155 @@ +package main + +import ( + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/app" + "fyne.io/fyne/v2/canvas" + "fyne.io/fyne/v2/container" + "fyne.io/fyne/v2/data/binding" + "fyne.io/fyne/v2/dialog" + "fyne.io/fyne/v2/layout" + "fyne.io/fyne/v2/widget" + "image/color" +) + +type UserData struct { + Username string +} + +func chatLayout(window fyne.Window, user UserData, c chan string) { + window.SetTitle("Сообщения") + storage.binding = binding.BindStringList(&storage.data) + go runClient(user) + + list := widget.NewListWithData(storage.binding, + func() fyne.CanvasObject { + return widget.NewLabel("template") + }, + func(i binding.DataItem, o fyne.CanvasObject) { + o.(*widget.Label).Bind(i.(binding.String)) + }) + + entry := widget.NewEntry() + submit := widget.NewButton("Отправить", func() { + go sendMessage(user, entry.Text) + entry.SetText("") + + storage.RLock() + lastIdx := storage.binding.Length() - 1 + list.Select(lastIdx) + list.Unselect(lastIdx) + storage.RUnlock() + }) + + window.SetContent(container.NewBorder( + nil, + container.NewBorder(nil, nil, nil, submit, entry), + nil, nil, + list, + )) +} + +func loginLayout(window fyne.Window, c chan string) { + window.SetTitle("Войти в чат") + + label := canvas.NewText("Chat", color.White) + label.TextSize = 40 + + loginLabel := widget.NewLabel("Логин: ") + loginEntry := widget.NewEntry() + + chooseKey := widget.NewButton("Выбрать ключ для подписи", func() { + dialog.ShowFileOpen(func(closer fyne.URIReadCloser, err error) { + if closer == nil { + return + } + bufSize := 4096 + data := make([]byte, 0) + buf := make([]byte, bufSize) + n := bufSize + + for n >= bufSize { + n, _ = closer.Read(buf) + data = append(data, buf...) + } + + _ = closer.Close() + }, window) + }) + + loginButton := widget.NewButton("Войти", func() { + var user = UserData{ + Username: loginEntry.Text, + } + chatLayout(window, user, c) + }) + + back := widget.NewButton("Назад", func() { + startLayout(window, c) + }) + + mainContainer := container.NewCenter(container.NewVBox( + container.NewCenter(label), layout.NewSpacer(), + container.NewBorder(nil, nil, loginLabel, nil, loginEntry), + chooseKey, + loginButton, + back, + )) + window.SetContent(mainContainer) +} + +func registerLayout(window fyne.Window, c chan string) { + window.SetTitle("Регистрация") + + label := canvas.NewText("Chat", color.White) + label.TextSize = 40 + + loginLabel := widget.NewLabel("Логин: ") + loginEntry := widget.NewEntry() + + generateKeys := widget.NewButton("Сгенерировать ключи подписи", func() { + + }) + + registerButton := widget.NewButton("Зарегистрироваться", func() { + + }) + + back := widget.NewButton("Назад", func() { + startLayout(window, c) + }) + + window.SetContent(container.NewCenter(container.NewVBox( + container.NewCenter(label), layout.NewSpacer(), + container.NewBorder(nil, nil, loginLabel, nil, loginEntry), + generateKeys, + registerButton, + back, + ))) +} + +func startLayout(window fyne.Window, c chan string) { + window.SetTitle("Chat") + + label := canvas.NewText("Chat", color.White) + label.TextSize = 40 + login := widget.NewButton("Войти", func() { + loginLayout(window, c) + }) + signup := widget.NewButton("Зарегистрироваться", func() { + registerLayout(window, c) + }) + + mainContainer := container.NewCenter(container.NewVBox( + container.NewCenter(label), layout.NewSpacer(), login, signup)) + window.SetContent(mainContainer) +} + +func main() { + myApp := app.New() + window := myApp.NewWindow("") + channel := make(chan string) + + startLayout(window, channel) + window.ShowAndRun() +} |