Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement debug page #346

Merged
merged 1 commit into from
Mar 15, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ go 1.13

require (
gioui.org v0.0.0-20210228180843-e1248651c871
github.com/decred/dcrd/chaincfg v1.5.2
github.com/decred/dcrd/chaincfg v1.5.2 // indirect
github.com/decred/dcrd/chaincfg/chainhash v1.0.2
github.com/decred/dcrd/dcrutil v1.4.0
github.com/decred/dcrd/dcrutil/v2 v2.0.1
Expand All @@ -15,14 +15,13 @@ require (
github.com/jrick/logrotate v1.0.0
github.com/onsi/ginkgo v1.14.0
github.com/onsi/gomega v1.10.1
github.com/planetdecred/dcrlibwallet v1.5.3-0.20210201161715-b37bb92b10a3
github.com/planetdecred/dcrlibwallet v1.5.3-0.20210224132742-5d0bc5e13370
github.com/skip2/go-qrcode v0.0.0-20191027152451-9434209cb086
golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3
golang.org/x/image v0.0.0-20200618115811-c13761719519
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208
)

// TODO: Remove and use an actual release of dcrlibwallet
replace (
decred.org/dcrwallet => decred.org/dcrwallet v1.6.0-rc4
github.com/decred/dcrdata/txhelpers/v4 => github.com/decred/dcrdata/txhelpers/v4 v4.0.0-20200108145420-f82113e7e212
Expand Down
31 changes: 23 additions & 8 deletions go.sum

Large diffs are not rendered by default.

10 changes: 9 additions & 1 deletion log.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,14 @@ import (
// the write-end pipe of an initialized log rotator.
type logWriter struct{}

var internalLog = make(chan string, 10)

// Write writes the data in p to standard out and the log rotator.
func (logWriter) Write(p []byte) (n int, err error) {
func (l logWriter) Write(p []byte) (n int, err error) {
os.Stdout.Write(p)
go func() {
internalLog <- string(p)
}()
return logRotator.Write(p)
}

Expand All @@ -48,17 +53,20 @@ var (

walletLog = backendLog.Logger("WALL")
winLog = backendLog.Logger("UI")
dlwlLog = backendLog.Logger("DLWL")
)

// Initialize package-global logger variables.
func init() {
wallet.UseLogger(walletLog)
ui.UseLogger(winLog)
dcrlibwallet.UseLogger(dlwlLog)
}

// subsystemLoggers maps each subsystem identifier to its associated logger.
var subsystemLoggers = map[string]slog.Logger{
"WALL": walletLog,
"DLWL": dlwlLog,
"UI": winLog,
"GDCR": log,
}
Expand Down
2 changes: 1 addition & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ func main() {
collection = append(collection, text.FontFace{Font: text.Font{}, Face: fnt})
}

win, err := ui.CreateWindow(wal, decredIcons, collection)
win, err := ui.CreateWindow(wal, decredIcons, collection, internalLog)
if err != nil {
fmt.Printf("Could not initialize window: %s\ns", err)
return
Expand Down
7 changes: 3 additions & 4 deletions ui/account_details_page.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,14 +93,13 @@ func (pg *acctDetailsPage) Layout(gtx layout.Context, common pageCommon) layout.
})
})
},
extras: func(gtx C) D {
extraItem: pg.editAccount,
extra: func(gtx C) D {
return layout.Inset{}.Layout(gtx, func(gtx C) D {
edit := common.icons.editIcon
edit.Scale = 1
return layout.E.Layout(gtx, func(gtx C) D {
return decredmaterial.Clickable(gtx, pg.editAccount, func(gtx C) D {
return edit.Layout(gtx)
})
return edit.Layout(gtx)
})
})
},
Expand Down
78 changes: 70 additions & 8 deletions ui/debug_page.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,37 @@ package ui

import (
"gioui.org/layout"
"gioui.org/widget"

"github.com/planetdecred/godcr/ui/decredmaterial"
"github.com/planetdecred/godcr/ui/values"
)

const PageDebug = "Debug"

type debugItem struct {
clickable *widget.Clickable
text string
page string
}

type debugPage struct {
dummyText decredmaterial.Label
theme *decredmaterial.Theme
debugItems []debugItem
}

func (win *Window) DebugPage(common pageCommon) layout.Widget {
debugItems := []debugItem{
{
clickable: new(widget.Clickable),
text: "Check wallet logs",
page: PageLog,
},
}

pg := &debugPage{
dummyText: common.theme.H5("Not yet implemented"),
theme: common.theme,
debugItems: debugItems,
}

return func(gtx C) D {
Expand All @@ -23,15 +41,59 @@ func (win *Window) DebugPage(common pageCommon) layout.Widget {
}
}

// main settings layout
func (pg *debugPage) Layout(gtx layout.Context, common pageCommon) layout.Dimensions {
return common.Layout(gtx, func(gtx C) D {
return layout.Center.Layout(gtx, func(gtx C) D {
return pg.dummyText.Layout(gtx)
func (pg *debugPage) handle(common pageCommon) {
for i := range pg.debugItems {
for pg.debugItems[i].clickable.Clicked() {
common.changePage(pg.debugItems[i].page)
}
}
}

func (pg *debugPage) debugItem(gtx C, i int, common pageCommon) D {
return decredmaterial.Clickable(gtx, pg.debugItems[i].clickable, func(gtx C) D {
return layout.Flex{}.Layout(gtx,
layout.Rigid(func(gtx C) D {
return layout.UniformInset(values.MarginPadding15).Layout(gtx, func(gtx C) D {
return common.theme.Body1(pg.debugItems[i].text).Layout(gtx)
})
}),
layout.Flexed(1, func(gtx C) D {
return layout.E.Layout(gtx, func(gtx C) D {
return layout.UniformInset(values.MarginPadding15).Layout(gtx, func(gtx C) D {
return common.icons.chevronRight.Layout(gtx, values.MarginPadding22)
})
})
}),
)
})
}

func (pg *debugPage) layoutDebugItems(gtx C, common pageCommon) {
background := common.theme.Color.Surface
card := common.theme.Card()
card.Color = background
card.Layout(gtx, func(gtx C) D {
list := layout.List{Axis: layout.Vertical}
return list.Layout(gtx, len(pg.debugItems), func(gtx C, i int) D {
return pg.debugItem(gtx, i, common)
})
})
}

func (pg *debugPage) handle(common pageCommon) {
func (pg *debugPage) Layout(gtx C, common pageCommon) D {
container := func(gtx C) D {
page := SubPage{
title: "Debug",
back: func() {
common.changePage(PageMore)
},
body: func(gtx C) D {
pg.layoutDebugItems(gtx, common)
return layout.Dimensions{Size: gtx.Constraints.Max}
},
}
return common.SubPageLayout(gtx, page)

}
return common.Layout(gtx, container)
}
111 changes: 111 additions & 0 deletions ui/log_page.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
package ui

import (
"sync"

"gioui.org/layout"
"gioui.org/unit"
"gioui.org/widget"
"github.com/planetdecred/godcr/ui/decredmaterial"
"github.com/planetdecred/godcr/ui/values"
)

const PageLog = "Log"

type logPage struct {
theme *decredmaterial.Theme

copyLog *widget.Clickable
copyIcon *widget.Image

entriesList layout.List
fullLog string
logEntries []decredmaterial.Label
entriesLock sync.Mutex
}

func (win *Window) LogPage(common pageCommon) layout.Widget {
pg := &logPage{
theme: common.theme,
entriesList: layout.List{
Axis: layout.Vertical,
ScrollToEnd: true,
},
copyLog: new(widget.Clickable),
logEntries: make([]decredmaterial.Label, 0, 20),
}

pg.copyIcon = common.icons.copyIcon
pg.copyIcon.Scale = 0.25

go pg.watchLogs(win.internalLog)

return func(gtx C) D {
//pg.handle(common)
return pg.Layout(gtx, common)
}
}

func (pg *logPage) copyLogEntries(common pageCommon) {
go func() {
pg.entriesLock.Lock()
defer pg.entriesLock.Unlock()
common.clipboard <- WriteClipboard{
Text: pg.fullLog,
}
}()
}

func (pg *logPage) watchLogs(internalLog chan string) {
for l := range internalLog {
entry := l[:len(l)-1]
pg.entriesLock.Lock()
pg.fullLog += l
pg.logEntries = append(pg.logEntries, pg.theme.Body1(entry))
pg.entriesLock.Unlock()
}
}

func (pg *logPage) Layout(gtx C, common pageCommon) D {
container := func(gtx C) D {
page := SubPage{
title: "Wallet log",
back: func() {
common.changePage(PageDebug)
},
extraItem: pg.copyLog,
extra: func(gtx C) D {
return layout.Center.Layout(gtx, func(gtx C) D {
return decredmaterial.Clickable(gtx, pg.copyLog, func(gtx C) D {
sz := gtx.Constraints.Max.X
pg.copyIcon.Scale = float32(sz) / float32(gtx.Px(unit.Dp(float32(sz))))
return pg.copyIcon.Layout(gtx)
})

})
},
handleExtra: func() {
pg.copyLogEntries(common)
},
body: func(gtx C) D {
background := common.theme.Color.Surface
card := common.theme.Card()
card.Color = background
return card.Layout(gtx, func(gtx C) D {
gtx.Constraints.Min.X = gtx.Constraints.Max.X
gtx.Constraints.Min.Y = gtx.Constraints.Max.Y
return layout.UniformInset(values.MarginPadding15).Layout(gtx, func(gtx C) D {
return pg.entriesList.Layout(gtx, len(pg.logEntries), func(gtx C, i int) D {
pg.entriesLock.Lock()
defer pg.entriesLock.Unlock()
return pg.logEntries[i].Layout(gtx)
})
})

})
},
}
return common.SubPageLayout(gtx, page)
}
return common.Layout(gtx, container)
}
14 changes: 10 additions & 4 deletions ui/page.go
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,7 @@ func (win *Window) addPages(decredIcons map[string]image.Image) {
win.pages[PageSecurityTools] = win.SecurityToolsPage(common)
win.pages[PagePoliteia] = win.PoliteiaPage(common)
win.pages[PageDebug] = win.DebugPage(common)
win.pages[PageLog] = win.LogPage(common)
win.pages[PageAbout] = win.AboutPage(common)
win.pages[PageHelp] = win.HelpPage(common)
win.pages[PageUTXO] = win.UTXOPage(common)
Expand Down Expand Up @@ -685,7 +686,9 @@ type SubPage struct {
back func()
body layout.Widget
infoTemplate string
extras layout.Widget
extraItem *widget.Clickable
extra layout.Widget
handleExtra func()
}

func (page pageCommon) SubPageLayout(gtx layout.Context, sp SubPage) layout.Dimensions {
Expand Down Expand Up @@ -728,12 +731,11 @@ func (page pageCommon) subpageHeader(gtx layout.Context, sp SubPage) layout.Dime
return layout.Dimensions{}
}),
layout.Flexed(1, func(gtx layout.Context) layout.Dimensions {
if sp.extras != nil {
return layout.E.Layout(gtx, sp.extras)
}
return layout.E.Layout(gtx, func(gtx C) D {
if sp.infoTemplate != "" {
return page.subPageInfoButton.Layout(gtx)
} else if sp.extraItem != nil {
return decredmaterial.Clickable(gtx, sp.extraItem, sp.extra)
}
return layout.Dimensions{}
})
Expand Down Expand Up @@ -767,6 +769,10 @@ func (page pageCommon) subpageEventHandler(sp SubPage) {
if page.subPageBackButton.Button.Clicked() {
sp.back()
}

if sp.extraItem != nil && sp.extraItem.Clicked() {
sp.handleExtra()
}
}

func mustIcon(ic *widget.Icon, err error) *widget.Icon {
Expand Down
Loading