f: trying to find where the pieces go

This commit is contained in:
AJ ONeal 2026-01-25 01:52:35 -07:00
parent 592bbffd6d
commit 160e26623b
No known key found for this signature in database
3 changed files with 52 additions and 31 deletions

View File

@ -15,6 +15,7 @@ import (
"github.com/therootcompany/golib/net/smsgw"
"github.com/therootcompany/golib/net/smsgw/androidsmsgateway"
"github.com/therootcompany/golib/net/smsgw/smscsv"
"github.com/therootcompany/golib/net/smsgw/smstmpl"
)
type MainConfig struct {
@ -143,6 +144,12 @@ func main() {
}
fmt.Fprintf(os.Stderr, "Info: list of %d messages\n", len(messages))
messages, err = smstmpl.RenderAll(messages)
if err != nil {
fmt.Fprintf(os.Stderr, "\n%sError%s: %v\n", textErr, textReset, err)
os.Exit(1)
}
if now.After(cfg.endTime) || now.Equal(cfg.endTime) {
fmt.Fprintf(os.Stderr, "%sWarning%s: Too late now. %sWaiting until tomorrow%s:\n", textWarn, textReset, textWarn, textReset)
@ -232,9 +239,9 @@ func main() {
fmt.Fprintf(os.Stderr, "\n")
fmt.Fprintf(os.Stderr, "Info: This is what a %ssample message%s from list look like:\n", textInfo, textReset)
fmt.Fprintf(os.Stderr, "\n")
fmt.Fprintf(os.Stderr, " To: %s (%s)\n", messages[0].Number, messages[0].Name)
fmt.Fprintf(os.Stderr, " %s%s%s\n", textTmpl, messages[0].Template, textReset)
fmt.Fprintf(os.Stderr, " %s%s%s\n", textInfo, messages[0].Text, textReset)
fmt.Fprintf(os.Stderr, " To: %s (%s)\n", messages[0].Number, messages[0].Name())
fmt.Fprintf(os.Stderr, " %s%s%s\n", textTmpl, messages[0].Template(), textReset)
fmt.Fprintf(os.Stderr, " %s%s%s\n", textInfo, messages[0].Text(), textReset)
fmt.Fprintf(os.Stderr, "\n")
if !cfg.confirmed && !cfg.dryRun {
@ -283,16 +290,16 @@ func main() {
fmt.Fprintf(os.Stderr, "# Send to %s (%s) %s-%s\n", message.Number[:2], message.Number[2:5], message.Number[5:8], message.Number[8:])
if cfg.printCurl {
curl := sender.CurlString(message.Number, message.Text)
curl := sender.CurlString(message.Number, message.Text())
fmt.Println(curl)
} else {
fmt.Fprintf(os.Stderr, "%s\n", message.Text)
fmt.Fprintf(os.Stderr, "%s\n", message.Text())
}
if cfg.dryRun {
continue
}
if err := sender.Send(message.Number, message.Text); err != nil {
if err := sender.Send(message.Number, message.Text()); err != nil {
fmt.Fprintf(os.Stderr, "%sError%s: %v\n", textErr, textReset, err)
continue
}

View File

@ -5,6 +5,8 @@ import (
"io"
"slices"
"strings"
"github.com/therootcompany/golib/net/smsgw"
)
type Reader interface {
@ -27,11 +29,27 @@ type Message struct {
header []string
indices map[string]int
fields []string
Name string
name string
Number string
Template string
template string
Vars map[string]string
Text string
text string
}
func (m Message) Name() string {
return m.name
}
func (m Message) Template() string {
return m.template
}
func (m Message) Text() string {
return m.text
}
func (m *Message) SetText(text string) {
m.text = text
}
func (m Message) Size() int {
@ -104,12 +122,24 @@ func ReadOrIgnoreAll(csvr Reader) (messages []Message, warns []CSVWarn, err erro
message := Message{
// Index: rowIndex,
Name: strings.TrimSpace(rec[FIELD_NAME]),
name: strings.TrimSpace(rec[FIELD_NAME]),
Number: strings.TrimSpace(rec[FIELD_PHONE]),
Template: strings.TrimSpace(rec[FIELD_MESSAGE]),
template: strings.TrimSpace(rec[FIELD_MESSAGE]),
Vars: vars,
}
message.Number = smsgw.StripFormatting(message.Number)
message.Number, err = smsgw.PrefixUS10Digit(message.Number)
if err != nil {
warns = append(warns, CSVWarn{
Index: rowIndex,
Code: "PhoneInvalid",
Message: fmt.Sprintf("ignoring row %d (%s): %s", rowIndex, message.Name(), err.Error()),
// Record: rec,
})
continue
}
messages = append(messages, message)
}

View File

@ -7,46 +7,30 @@ import (
"slices"
"strings"
"github.com/therootcompany/golib/net/smsgw"
"github.com/therootcompany/golib/net/smsgw/smscsv"
)
var reUnmatchedVars = regexp.MustCompile(`(\{[^}]+\})`)
func RenderAll(messages []smscsv.Message) ([]smscsv.Message, error) {
var err error
var warns []smscsv.CSVWarn
for i, message := range messages {
rowIndex := i + 1
message.Text = ReplaceVar(message.Template, "Name", message.Name)
message.SetText(ReplaceVar(message.Template(), "Name", message.Name()))
keyIter := maps.Keys(message.Vars)
keys := slices.Sorted(keyIter)
for _, key := range keys {
val := message.Vars[key]
message.Text = ReplaceVar(message.Text, key, val)
message.SetText(ReplaceVar(message.Text(), key, val))
}
message.Number = smsgw.StripFormatting(message.Number)
message.Number, err = smsgw.PrefixUS10Digit(message.Number)
if err != nil {
warns = append(warns, smscsv.CSVWarn{
Index: rowIndex,
Code: "PhoneInvalid",
Message: fmt.Sprintf("ignoring row %d (%s): %s", rowIndex, message.Name, err.Error()),
// Record: rec,
})
continue
}
if tmpls := reUnmatchedVars.FindAllString(message.Text, -1); len(tmpls) != 0 {
if tmpls := reUnmatchedVars.FindAllString(message.Text(), -1); len(tmpls) != 0 {
return nil, &smscsv.CSVWarn{
Index: rowIndex,
Code: "UnmatchedVars",
Message: fmt.Sprintf(
"failing due to row %d (%s): leftover template variable(s): %s",
rowIndex, message.Name, strings.Join(tmpls, " "),
rowIndex, message.Name(), strings.Join(tmpls, " "),
),
// Record: rec,
}