mirror of
https://github.com/therootcompany/golib.git
synced 2026-01-27 23:18:05 +00:00
f: trying to find where the pieces go
This commit is contained in:
parent
592bbffd6d
commit
160e26623b
@ -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
|
||||
}
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
|
||||
@ -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,
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user