about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorReto Brunner <reto@labrat.space>2019-07-31 09:50:07 +0200
committerDrew DeVault <sir@cmpwn.com>2019-08-02 09:26:10 -0400
commit9570f4b4d0cdf525ce1695971636a0b58f1a091b (patch)
tree4a6d8773945d43ef8db4b8e8b298be306c822081
parent04ccbd09b1f9369949b89b4815752d08a0ca9786 (diff)
downloadaerc-9570f4b4d0cdf525ce1695971636a0b58f1a091b.tar.gz
msglist: add initialization state
Make the msglist aware of whether we are still initializing or not.
We never stopped spinning the msglist if we didn't get any Directories back
from types.ListDirectories.
With this change, we can set the init state from the account and display
the spinner only if we don't know whether we have directories or not and else
the "no messages" string from the config.
-rw-r--r--widgets/account.go2
-rw-r--r--widgets/msglist.go46
2 files changed, 33 insertions, 15 deletions
diff --git a/widgets/account.go b/widgets/account.go
index de81ab8..07b5010 100644
--- a/widgets/account.go
+++ b/widgets/account.go
@@ -147,6 +147,8 @@ func (acct *AccountView) connected(msg types.WorkerMessage) {
 			if dir != "" {
 				acct.dirlist.Select(dir)
 			}
+
+			acct.msglist.SetInitDone()
 			acct.logger.Println("Connected.")
 			acct.host.SetStatus("Connected.")
 		})
diff --git a/widgets/msglist.go b/widgets/msglist.go
index abf6921..9900a32 100644
--- a/widgets/msglist.go
+++ b/widgets/msglist.go
@@ -16,20 +16,22 @@ import (
 
 type MessageList struct {
 	ui.Invalidatable
-	conf    *config.AercConfig
-	logger  *log.Logger
-	height  int
-	scroll  int
-	nmsgs   int
-	spinner *Spinner
-	store   *lib.MessageStore
+	conf          *config.AercConfig
+	logger        *log.Logger
+	height        int
+	scroll        int
+	nmsgs         int
+	spinner       *Spinner
+	store         *lib.MessageStore
+	isInitalizing bool
 }
 
 func NewMessageList(conf *config.AercConfig, logger *log.Logger) *MessageList {
 	ml := &MessageList{
-		conf:    conf,
-		logger:  logger,
-		spinner: NewSpinner(),
+		conf:          conf,
+		logger:        logger,
+		spinner:       NewSpinner(),
+		isInitalizing: true,
 	}
 	ml.spinner.OnInvalidate(func(_ ui.Drawable) {
 		ml.Invalidate()
@@ -49,8 +51,14 @@ func (ml *MessageList) Draw(ctx *ui.Context) {
 
 	store := ml.Store()
 	if store == nil {
-		ml.spinner.Draw(ctx)
-		return
+		if ml.isInitalizing {
+			ml.spinner.Draw(ctx)
+			return
+		} else {
+			ml.spinner.Stop()
+			ml.drawEmptyMessage(ctx)
+			return
+		}
 	}
 
 	var (
@@ -111,9 +119,7 @@ func (ml *MessageList) Draw(ctx *ui.Context) {
 	}
 
 	if len(uids) == 0 {
-		msg := ml.conf.Ui.EmptyMessage
-		ctx.Printf((ctx.Width()/2)-(len(msg)/2), 0,
-			tcell.StyleDefault, "%s", msg)
+		ml.drawEmptyMessage(ctx)
 	}
 
 	if len(needsHeaders) != 0 {
@@ -171,6 +177,10 @@ func (ml *MessageList) SetStore(store *lib.MessageStore) {
 	ml.Invalidate()
 }
 
+func (ml *MessageList) SetInitDone() {
+	ml.isInitalizing = false
+}
+
 func (ml *MessageList) Store() *lib.MessageStore {
 	return ml.store
 }
@@ -209,3 +219,9 @@ func (ml *MessageList) Scroll() {
 	}
 	ml.Invalidate()
 }
+
+func (ml *MessageList) drawEmptyMessage(ctx *ui.Context) {
+	msg := ml.conf.Ui.EmptyMessage
+	ctx.Printf((ctx.Width()/2)-(len(msg)/2), 0,
+		tcell.StyleDefault, "%s", msg)
+}