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"
|
||||||
"github.com/therootcompany/golib/net/smsgw/androidsmsgateway"
|
"github.com/therootcompany/golib/net/smsgw/androidsmsgateway"
|
||||||
"github.com/therootcompany/golib/net/smsgw/smscsv"
|
"github.com/therootcompany/golib/net/smsgw/smscsv"
|
||||||
|
"github.com/therootcompany/golib/net/smsgw/smstmpl"
|
||||||
)
|
)
|
||||||
|
|
||||||
type MainConfig struct {
|
type MainConfig struct {
|
||||||
@ -143,6 +144,12 @@ func main() {
|
|||||||
}
|
}
|
||||||
fmt.Fprintf(os.Stderr, "Info: list of %d messages\n", len(messages))
|
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) {
|
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)
|
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, "\n")
|
||||||
fmt.Fprintf(os.Stderr, "Info: This is what a %ssample message%s from list look like:\n", textInfo, textReset)
|
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, "\n")
|
||||||
fmt.Fprintf(os.Stderr, " To: %s (%s)\n", messages[0].Number, messages[0].Name)
|
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", textTmpl, messages[0].Template(), textReset)
|
||||||
fmt.Fprintf(os.Stderr, " %s%s%s\n", textInfo, messages[0].Text, textReset)
|
fmt.Fprintf(os.Stderr, " %s%s%s\n", textInfo, messages[0].Text(), textReset)
|
||||||
fmt.Fprintf(os.Stderr, "\n")
|
fmt.Fprintf(os.Stderr, "\n")
|
||||||
|
|
||||||
if !cfg.confirmed && !cfg.dryRun {
|
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:])
|
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 {
|
if cfg.printCurl {
|
||||||
curl := sender.CurlString(message.Number, message.Text)
|
curl := sender.CurlString(message.Number, message.Text())
|
||||||
fmt.Println(curl)
|
fmt.Println(curl)
|
||||||
} else {
|
} else {
|
||||||
fmt.Fprintf(os.Stderr, "%s\n", message.Text)
|
fmt.Fprintf(os.Stderr, "%s\n", message.Text())
|
||||||
}
|
}
|
||||||
if cfg.dryRun {
|
if cfg.dryRun {
|
||||||
continue
|
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)
|
fmt.Fprintf(os.Stderr, "%sError%s: %v\n", textErr, textReset, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,6 +5,8 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"slices"
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/therootcompany/golib/net/smsgw"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Reader interface {
|
type Reader interface {
|
||||||
@ -27,11 +29,27 @@ type Message struct {
|
|||||||
header []string
|
header []string
|
||||||
indices map[string]int
|
indices map[string]int
|
||||||
fields []string
|
fields []string
|
||||||
Name string
|
name string
|
||||||
Number string
|
Number string
|
||||||
Template string
|
template string
|
||||||
Vars map[string]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 {
|
func (m Message) Size() int {
|
||||||
@ -104,12 +122,24 @@ func ReadOrIgnoreAll(csvr Reader) (messages []Message, warns []CSVWarn, err erro
|
|||||||
|
|
||||||
message := Message{
|
message := Message{
|
||||||
// Index: rowIndex,
|
// Index: rowIndex,
|
||||||
Name: strings.TrimSpace(rec[FIELD_NAME]),
|
name: strings.TrimSpace(rec[FIELD_NAME]),
|
||||||
Number: strings.TrimSpace(rec[FIELD_PHONE]),
|
Number: strings.TrimSpace(rec[FIELD_PHONE]),
|
||||||
Template: strings.TrimSpace(rec[FIELD_MESSAGE]),
|
template: strings.TrimSpace(rec[FIELD_MESSAGE]),
|
||||||
Vars: vars,
|
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)
|
messages = append(messages, message)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -7,46 +7,30 @@ import (
|
|||||||
"slices"
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/therootcompany/golib/net/smsgw"
|
|
||||||
"github.com/therootcompany/golib/net/smsgw/smscsv"
|
"github.com/therootcompany/golib/net/smsgw/smscsv"
|
||||||
)
|
)
|
||||||
|
|
||||||
var reUnmatchedVars = regexp.MustCompile(`(\{[^}]+\})`)
|
var reUnmatchedVars = regexp.MustCompile(`(\{[^}]+\})`)
|
||||||
|
|
||||||
func RenderAll(messages []smscsv.Message) ([]smscsv.Message, error) {
|
func RenderAll(messages []smscsv.Message) ([]smscsv.Message, error) {
|
||||||
var err error
|
|
||||||
var warns []smscsv.CSVWarn
|
|
||||||
|
|
||||||
for i, message := range messages {
|
for i, message := range messages {
|
||||||
rowIndex := i + 1
|
rowIndex := i + 1
|
||||||
|
|
||||||
message.Text = ReplaceVar(message.Template, "Name", message.Name)
|
message.SetText(ReplaceVar(message.Template(), "Name", message.Name()))
|
||||||
keyIter := maps.Keys(message.Vars)
|
keyIter := maps.Keys(message.Vars)
|
||||||
keys := slices.Sorted(keyIter)
|
keys := slices.Sorted(keyIter)
|
||||||
for _, key := range keys {
|
for _, key := range keys {
|
||||||
val := message.Vars[key]
|
val := message.Vars[key]
|
||||||
message.Text = ReplaceVar(message.Text, key, val)
|
message.SetText(ReplaceVar(message.Text(), key, val))
|
||||||
}
|
}
|
||||||
|
|
||||||
message.Number = smsgw.StripFormatting(message.Number)
|
if tmpls := reUnmatchedVars.FindAllString(message.Text(), -1); len(tmpls) != 0 {
|
||||||
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 {
|
|
||||||
return nil, &smscsv.CSVWarn{
|
return nil, &smscsv.CSVWarn{
|
||||||
Index: rowIndex,
|
Index: rowIndex,
|
||||||
Code: "UnmatchedVars",
|
Code: "UnmatchedVars",
|
||||||
Message: fmt.Sprintf(
|
Message: fmt.Sprintf(
|
||||||
"failing due to row %d (%s): leftover template variable(s): %s",
|
"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,
|
// Record: rec,
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user