summary refs log tree commit diff stats
path: root/worker
diff options
context:
space:
mode:
Diffstat (limited to 'worker')
-rw-r--r--worker/imap/worker.go6
-rw-r--r--worker/worker.go20
2 files changed, 20 insertions, 6 deletions
diff --git a/worker/imap/worker.go b/worker/imap/worker.go
index a095e60..97cd4b0 100644
--- a/worker/imap/worker.go
+++ b/worker/imap/worker.go
@@ -34,11 +34,11 @@ func (w *IMAPWorker) PostAction(msg types.WorkerMessage) {
 func (w *IMAPWorker) handleMessage(_msg types.WorkerMessage) {
 	switch msg := _msg.(type) {
 	case types.Ping:
-		w.messages <- &types.Ack{
+		w.messages <- types.Ack{
 			Message: types.RespondTo(msg),
 		}
 	default:
-		w.messages <- &types.Unsupported{
+		w.messages <- types.Unsupported{
 			Message: types.RespondTo(_msg),
 		}
 	}
@@ -49,7 +49,7 @@ func (w *IMAPWorker) Run() {
 	for {
 		select {
 		case msg := <-w.actions:
-			fmt.Printf("<= %T: %+v\n", msg, msg)
+			fmt.Printf("<= %T\n", msg)
 			w.handleMessage(msg)
 		default:
 			// no-op
diff --git a/worker/worker.go b/worker/worker.go
index 1f9f04c..a504790 100644
--- a/worker/worker.go
+++ b/worker/worker.go
@@ -3,6 +3,9 @@ package worker
 import (
 	"git.sr.ht/~sircmpwn/aerc2/worker/imap"
 	"git.sr.ht/~sircmpwn/aerc2/worker/types"
+
+	"fmt"
+	"net/url"
 )
 
 type Worker interface {
@@ -12,7 +15,18 @@ type Worker interface {
 }
 
 // Guesses the appropriate worker type based on the given source string
-func NewWorker(source string) Worker {
-	// TODO: Do this properly
-	return imap.NewIMAPWorker()
+func NewWorker(source string) (Worker, error) {
+	var (
+		u   *url.URL
+		err error
+	)
+	if u, err = url.Parse(source); err != nil {
+		return nil, err
+	}
+	switch u.Scheme {
+	case "imap":
+	case "imaps":
+		return imap.NewIMAPWorker(), nil
+	}
+	return nil, fmt.Errorf("Unknown backend %s", u.Scheme)
 }