simplify send message bg helper
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
@@ -2,6 +2,7 @@ package helpers
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sync"
|
||||
@@ -16,11 +17,37 @@ const maxRetriesPerServer = 3
|
||||
const defaultSendTimeout = 3600 * 24 // seconds, used when job.Timeout is 0
|
||||
const defaultPostTimeout = 200
|
||||
|
||||
// WriteSendJob enqueues a SendJob from the main Flutter isolate.
|
||||
// It is a thin wrapper over client.PushSendJob and is safe to call
|
||||
// concurrently with ProcessSendQueues.
|
||||
func WriteSendJob(storagePath string, job *client.SendJob) error {
|
||||
return client.PushSendJob(storagePath, job)
|
||||
// CreateUserMessageAndSendJob is the single entry point for sending a message.
|
||||
// It creates and stores the user message, serialises the packed form to
|
||||
// storagePath/outbox/{dbFile}_{dbId}, and enqueues a SendJob in
|
||||
// storagePath/queues/{peerUid}.
|
||||
func CreateUserMessageAndSendJob(storagePath, message, peerUid, replyToUid string, filelist []string, servers []client.Server, timeout int) error {
|
||||
packedMsg, dbFile, dbId, errTxt, err := CreateAndStoreUserMessage(message, peerUid, replyToUid, filelist)
|
||||
if err != nil {
|
||||
return fmt.Errorf("%s: %w", errTxt, err)
|
||||
}
|
||||
|
||||
data, err := proto.Marshal(packedMsg)
|
||||
if err != nil {
|
||||
return fmt.Errorf("CreateUserMessageAndSendJob: proto.Marshal: %w", err)
|
||||
}
|
||||
|
||||
outboxDir := filepath.Join(storagePath, "outbox")
|
||||
if err := os.MkdirAll(outboxDir, 0700); err != nil {
|
||||
return fmt.Errorf("CreateUserMessageAndSendJob: MkdirAll: %w", err)
|
||||
}
|
||||
|
||||
outboxFile := filepath.Join(outboxDir, fmt.Sprintf("%s_%d", dbFile, dbId))
|
||||
if err := os.WriteFile(outboxFile, data, 0600); err != nil {
|
||||
return fmt.Errorf("CreateUserMessageAndSendJob: WriteFile: %w", err)
|
||||
}
|
||||
|
||||
return client.PushSendJob(storagePath, &client.SendJob{
|
||||
Queue: peerUid,
|
||||
File: outboxFile,
|
||||
Servers: servers,
|
||||
Timeout: timeout,
|
||||
})
|
||||
}
|
||||
|
||||
// ProcessSendQueues discovers every queue DB file under storagePath/queues/
|
||||
|
||||
Reference in New Issue
Block a user