]> git.giacomolli.uk - onechat/blobdiff - whatsapp_groups.go
Keep test daemon sockets under the path limit
[onechat] / whatsapp_groups.go
index c8d066a510188877584e1849f6a0a2299fef0289..6e9bed3eae9c27c80af78543b5bf4cf15326d939 100644 (file)
@@ -2,13 +2,17 @@ package main
 
 import (
        "context"
 
 import (
        "context"
-       "log"
+       "log/slog"
        "maps"
        "sync"
        "time"
 )
 
 const (
        "maps"
        "sync"
        "time"
 )
 
 const (
+       // whatsappGroupLookupTimeout is the longest time of a read of group
+       // names.
+       whatsappGroupLookupTimeout = 10 * time.Second
+
        // whatsappGroupsRefresh is the shortest time between two reads of the
        // groups from WhatsApp for a group with no name.
        whatsappGroupsRefresh = time.Minute
        // whatsappGroupsRefresh is the shortest time between two reads of the
        // groups from WhatsApp for a group with no name.
        whatsappGroupsRefresh = time.Minute
@@ -23,7 +27,7 @@ const (
 
 // newWhatsAppGroups returns the names of the groups with no names yet. logger
 // gets the failures of a read.
 
 // newWhatsAppGroups returns the names of the groups with no names yet. logger
 // gets the failures of a read.
-func newWhatsAppGroups(logger *log.Logger) *WhatsAppGroups {
+func newWhatsAppGroups(logger *slog.Logger) *WhatsAppGroups {
        return &WhatsAppGroups{
                logger: logger,
                names:  make(map[string]string),
        return &WhatsAppGroups{
                logger: logger,
                names:  make(map[string]string),
@@ -36,7 +40,7 @@ func newWhatsAppGroups(logger *log.Logger) *WhatsAppGroups {
 // read, and readAt the time of the last read that succeeded. The mutex
 // protects all fields after logger.
 type WhatsAppGroups struct {
 // read, and readAt the time of the last read that succeeded. The mutex
 // protects all fields after logger.
 type WhatsAppGroups struct {
-       logger *log.Logger
+       logger *slog.Logger
 
        mutex   sync.Mutex
        names   map[string]string
 
        mutex   sync.Mutex
        names   map[string]string
@@ -49,6 +53,7 @@ type WhatsAppGroups struct {
 // again, at most once in whatsappGroupsRefresh.
 func (g *WhatsAppGroups) name(ctx context.Context, link WhatsAppLink, id string) string {
        g.mutex.Lock()
 // again, at most once in whatsappGroupsRefresh.
 func (g *WhatsAppGroups) name(ctx context.Context, link WhatsAppLink, id string) string {
        g.mutex.Lock()
+
        name, found := g.names[id]
        fresh := time.Since(g.triedAt) < whatsappGroupsRefresh
        g.mutex.Unlock()
        name, found := g.names[id]
        fresh := time.Since(g.triedAt) < whatsappGroupsRefresh
        g.mutex.Unlock()
@@ -57,6 +62,7 @@ func (g *WhatsAppGroups) name(ctx context.Context, link WhatsAppLink, id string)
                g.read(ctx, link)
 
                g.mutex.Lock()
                g.read(ctx, link)
 
                g.mutex.Lock()
+
                name, found = g.names[id]
                g.mutex.Unlock()
        }
                name, found = g.names[id]
                g.mutex.Unlock()
        }
@@ -75,12 +81,12 @@ func (g *WhatsAppGroups) read(ctx context.Context, link WhatsAppLink) bool {
                return false
        }
 
                return false
        }
 
-       ctx, cancel := context.WithTimeout(ctx, whatsappLookupTime)
+       ctx, cancel := context.WithTimeout(ctx, whatsappGroupLookupTimeout)
        defer cancel()
 
        groups, err := link.client.GetJoinedGroups(ctx)
        if err != nil {
        defer cancel()
 
        groups, err := link.client.GetJoinedGroups(ctx)
        if err != nil {
-               g.logger.Printf("group list failed: %s", whatsappRedact(link.own, err.Error()))
+               g.logger.Warn("group list failed", "err", whatsappRedact(link.own, err.Error()))
        }
 
        g.mutex.Lock()
        }
 
        g.mutex.Lock()