Skip to content

Commit

Permalink
Start to hook up new client code
Browse files Browse the repository at this point in the history
  • Loading branch information
Jacalz committed Jan 19, 2025
1 parent 7948858 commit 4707bc8
Show file tree
Hide file tree
Showing 7 changed files with 83 additions and 20 deletions.
11 changes: 0 additions & 11 deletions internal/transport/transport.go

This file was deleted.

51 changes: 51 additions & 0 deletions internal/ui/components/completion.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package components

import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/driver/desktop"
"fyne.io/fyne/v2/widget"

"github.com/Jacalz/rymdport/v3/completion"
)

// NewCompletionEntry returns a new entry widget that allows completing on tab.
func NewCompletionEntry(driver desktop.Driver, generator func(string) []string) *CompletionEntry {
entry := &CompletionEntry{driver: driver}
entry.completer.Generate = generator
entry.ExtendBaseWidget(entry)
return entry
}

// CompletionEntry allows using tab and shift+tab to
// move forwards and backwards from a set of completions.
type CompletionEntry struct {
widget.Entry
driver desktop.Driver
completer completion.TabCompleter
}

// AcceptsTab overrides tab handling to allow tabs as input.
func (c *CompletionEntry) AcceptsTab() bool {
return true
}

// TypedKey adapts the key inputs to handle tab completion.
func (c *CompletionEntry) TypedKey(key *fyne.KeyEvent) {
switch key.Name {
case desktop.KeyShiftLeft, desktop.KeyShiftRight:
case fyne.KeyTab:
completed := ""

if c.driver.CurrentKeyModifiers()&fyne.KeyModifierShift != 0 {
completed = c.completer.Previous(c.Text)
} else {
completed = c.completer.Next(c.Text)
}

c.CursorColumn = len(completed)
c.SetText(completed)
default:
c.completer.Reset()
c.Entry.TypedKey(key)
}
}
12 changes: 8 additions & 4 deletions internal/ui/recv.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,17 @@ package ui
import (
"github.com/Jacalz/rymdport/v3/internal/ui/components"
"github.com/Jacalz/rymdport/v3/internal/util"
"github.com/Jacalz/rymdport/v3/internal/wormhole"

"fyne.io/fyne/v2"
"fyne.io/fyne/v2/canvas"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/driver/desktop"
"fyne.io/fyne/v2/theme"
"fyne.io/fyne/v2/widget"
)

func buildRecvView(nav *components.StackNavigator, code string) fyne.CanvasObject {
func buildRecvView(_ *wormhole.Client, nav *components.StackNavigator, code string) fyne.CanvasObject {
image := &canvas.Image{FillMode: canvas.ImageFillContain}
image.SetMinSize(fyne.NewSquareSize(150))

Expand Down Expand Up @@ -49,20 +51,22 @@ func buildRecvView(nav *components.StackNavigator, code string) fyne.CanvasObjec
)
}

func createRecvPage(nav *components.StackNavigator) fyne.CanvasObject {
func createRecvPage(a fyne.App, client *wormhole.Client, nav *components.StackNavigator) fyne.CanvasObject {
icon := canvas.NewImageFromResource(theme.DownloadIcon())
icon.FillMode = canvas.ImageFillContain
icon.SetMinSize(fyne.NewSquareSize(200))

description := &widget.Label{Text: "Enter a code below to start receiving data.", Alignment: fyne.TextAlignCenter}

code := &widget.Entry{PlaceHolder: "Code from sender", Validator: util.CodeValidator}
code := components.NewCompletionEntry(a.Driver().(desktop.Driver), client.GenerateCodeCompletion)
code.PlaceHolder = "Code from sender"
code.Validator = util.CodeValidator
code.OnSubmitted = func(input string) {
if code.Validator(input) != nil {
return
}

nav.Push(buildRecvView(nav, input), "Receiving Data")
nav.Push(buildRecvView(client, nav, input), "Receiving Data")
}

start := &widget.Button{
Expand Down
5 changes: 4 additions & 1 deletion internal/ui/setup.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package ui

import (
"github.com/Jacalz/rymdport/v3/internal/ui/components"
"github.com/Jacalz/rymdport/v3/internal/wormhole"

"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
Expand All @@ -18,12 +19,14 @@ func Create(a fyne.App, w fyne.Window) fyne.CanvasObject {
widget.ShowPopUpMenuAtRelativePosition(menu, w.Canvas(), offset, dropdown)
}

client := wormhole.NewClient()

nav := &components.StackNavigator{}
nav.OnBack = nav.Pop
tabs := &container.AppTabs{
Items: []*container.TabItem{
{Text: "Send", Icon: theme.UploadIcon(), Content: createSendPage(w, nav)},
{Text: "Receive", Icon: theme.DownloadIcon(), Content: createRecvPage(nav)},
{Text: "Receive", Icon: theme.DownloadIcon(), Content: createRecvPage(a, client, nav)},
},
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package transport
package wormhole

import (
"context"
Expand Down Expand Up @@ -93,12 +93,12 @@ func (c *Client) activeNameplates() ([]string, error) {
ctx, cancel := context.WithTimeout(context.Background(), 4*time.Second)
defer cancel()

url := c.RendezvousURL
url := c.connection.RendezvousURL
if url == "" {
url = wormhole.DefaultRendezvousURL
}

appID := c.AppID
appID := c.connection.AppID
if appID == "" {
appID = wormhole.WormholeCLIAppID
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package transport
package wormhole

import (
"testing"
Expand Down
16 changes: 16 additions & 0 deletions internal/wormhole/wormhole.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// Package wormhole is a helper around the wormhole package.
package wormhole

import (
"github.com/rymdport/wormhole/wormhole"
)

// NewClient creates a new client object.
func NewClient() *Client {
return &Client{}
}

// Client defines the client for handling sending and receiving.
type Client struct {
connection wormhole.Client
}

0 comments on commit 4707bc8

Please sign in to comment.