diff options
author | Tulir Asokan <tulir@maunium.net> | 2020-04-19 18:06:45 +0300 |
---|---|---|
committer | Tulir Asokan <tulir@maunium.net> | 2020-04-19 18:06:49 +0300 |
commit | a66b02ae8b65db97ee51adccd34cd6c173f22b8d (patch) | |
tree | a1ec45bc7be7eb797d7b9ca0dc4b98d0d1bde188 /ui | |
parent | 6a907354e21469a83c51f50bc4dd520ffe8915d6 (diff) |
Add progress bar for first sync
Diffstat (limited to 'ui')
-rw-r--r-- | ui/syncing-modal.go | 71 | ||||
-rw-r--r-- | ui/view-main.go | 6 |
2 files changed, 77 insertions, 0 deletions
diff --git a/ui/syncing-modal.go b/ui/syncing-modal.go new file mode 100644 index 0000000..9696d8a --- /dev/null +++ b/ui/syncing-modal.go @@ -0,0 +1,71 @@ +// gomuks - A terminal Matrix client written in Go. +// Copyright (C) 2020 Tulir Asokan +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see <https://www.gnu.org/licenses/>. + +package ui + +import ( + "time" + + "maunium.net/go/mauview" +) + +type SyncingModal struct { + parent *MainView + text *mauview.TextView + progress *mauview.ProgressBar +} + +func NewSyncingModal(parent *MainView) (mauview.Component, *SyncingModal) { + sm := &SyncingModal{ + parent: parent, + progress: mauview.NewProgressBar(), + text: mauview.NewTextView(), + } + return mauview.Center( + mauview.NewBox( + mauview.NewFlex(). + SetDirection(mauview.FlexRow). + AddFixedComponent(sm.progress, 1). + AddFixedComponent(mauview.Center(sm.text, 40, 1), 1)). + SetTitle("Synchronizing"), + 42, 4). + SetAlwaysFocusChild(true), sm +} + +func (sm *SyncingModal) SetMessage(text string) { + sm.text.SetText(text) +} + +func (sm *SyncingModal) SetIndeterminate() { + sm.progress.SetIndeterminate(true) + sm.parent.parent.app.SetRedrawTicker(100 * time.Millisecond) + sm.parent.parent.app.Redraw() +} + +func (sm *SyncingModal) SetSteps(max int) { + sm.progress.SetMax(max) + sm.progress.SetIndeterminate(false) + sm.parent.parent.app.SetRedrawTicker(1 * time.Minute) + sm.parent.parent.Render() +} + +func (sm *SyncingModal) Step() { + sm.progress.Increment(1) +} + +func (sm *SyncingModal) Close() { + sm.parent.HideModal() +} diff --git a/ui/view-main.go b/ui/view-main.go index e38756f..b2f4ff0 100644 --- a/ui/view-main.go +++ b/ui/view-main.go @@ -169,6 +169,12 @@ func (view *MainView) ShowBare(roomView *RoomView) { }) } +func (view *MainView) OpenSyncingModal() ifc.SyncingModal { + component, modal := NewSyncingModal(view) + view.ShowModal(component) + return modal +} + func (view *MainView) OnKeyEvent(event mauview.KeyEvent) bool { view.BumpFocus(view.currentRoom) |