Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
266ccb5f98 | ||
|
|
1cc082083c |
39
main.go
39
main.go
@@ -9,6 +9,7 @@ import (
|
|||||||
"local/truckstop/config"
|
"local/truckstop/config"
|
||||||
"local/truckstop/message"
|
"local/truckstop/message"
|
||||||
"log"
|
"log"
|
||||||
|
"net/url"
|
||||||
"regexp"
|
"regexp"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -87,38 +88,52 @@ func matrixrecv() error {
|
|||||||
}()
|
}()
|
||||||
func() {
|
func() {
|
||||||
log.Printf("looking for states")
|
log.Printf("looking for states")
|
||||||
|
db := config.Get().DB()
|
||||||
states := map[string]map[config.State]struct{}{}
|
states := map[string]map[config.State]struct{}{}
|
||||||
for _, msg := range messages {
|
for _, msg := range messages {
|
||||||
|
key := fmt.Sprintf("states_%d", msg.Timestamp.Unix())
|
||||||
if !strings.HasPrefix(msg.Content, "!state") {
|
if !strings.HasPrefix(msg.Content, "!state") {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if _, ok := states[msg.Sender]; ok {
|
if _, ok := states[msg.Sender]; ok {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
states[msg.Sender] = map[config.State]struct{}{}
|
if _, err := db.Get(key); err == storage.ErrNotFound {
|
||||||
for _, state := range parseOutStates([]byte(msg.Content)) {
|
states[msg.Sender] = map[config.State]struct{}{}
|
||||||
states[msg.Sender][state] = struct{}{}
|
for _, state := range parseOutStates([]byte(msg.Content)) {
|
||||||
|
states[msg.Sender][state] = struct{}{}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := db.Set(key, []byte{'k'}); err != nil {
|
||||||
|
log.Printf("failed to mark state gathered @%s: %v", key, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
setNewStates(states)
|
setNewStates(states)
|
||||||
}()
|
}()
|
||||||
func() {
|
func() {
|
||||||
log.Printf("looking for pauses")
|
log.Printf("looking for pauses")
|
||||||
|
db := config.Get().DB()
|
||||||
pauses := map[string]time.Time{}
|
pauses := map[string]time.Time{}
|
||||||
for _, msg := range messages {
|
for _, msg := range messages {
|
||||||
|
key := fmt.Sprintf("pauses_%d", msg.Timestamp.Unix())
|
||||||
if !strings.HasPrefix(msg.Content, "!available ") {
|
if !strings.HasPrefix(msg.Content, "!available ") {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if _, ok := pauses[msg.Sender]; ok {
|
if _, ok := pauses[msg.Sender]; ok {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
t, err := time.ParseInLocation(
|
if _, err := db.Get(key); err == storage.ErrNotFound {
|
||||||
"2006-01-02",
|
t, err := time.ParseInLocation(
|
||||||
strings.TrimSpace(strings.TrimPrefix(msg.Content, "!available ")),
|
"2006-01-02",
|
||||||
time.Local,
|
strings.TrimSpace(strings.TrimPrefix(msg.Content, "!available ")),
|
||||||
)
|
time.Local,
|
||||||
if err == nil {
|
)
|
||||||
pauses[msg.Sender] = t
|
if err == nil {
|
||||||
|
pauses[msg.Sender] = t
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := db.Set(key, []byte{'k'}); err != nil {
|
||||||
|
log.Printf("failed to mark state gathered @%s: %v", key, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
setNewPauses(pauses)
|
setNewPauses(pauses)
|
||||||
@@ -311,7 +326,7 @@ func sendJob(job broker.Job) error {
|
|||||||
}
|
}
|
||||||
maps := config.Get().Maps
|
maps := config.Get().Maps
|
||||||
if maps.Pickup {
|
if maps.Pickup {
|
||||||
pickup := fmt.Sprintf("%s,%s", job.Pickup.City, job.Pickup.State)
|
pickup := fmt.Sprintf("%s,%s", url.QueryEscape(job.Pickup.City), job.Pickup.State)
|
||||||
uri := fmt.Sprintf(maps.URIFormat, pickup, pickup)
|
uri := fmt.Sprintf(maps.URIFormat, pickup, pickup)
|
||||||
log.Printf("sending pickup image: %s", uri)
|
log.Printf("sending pickup image: %s", uri)
|
||||||
if err := sender.SendImage(uri); err != nil {
|
if err := sender.SendImage(uri); err != nil {
|
||||||
@@ -319,7 +334,7 @@ func sendJob(job broker.Job) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if maps.Dropoff {
|
if maps.Dropoff {
|
||||||
dropoff := fmt.Sprintf("%s,%s", job.Dropoff.City, job.Dropoff.State)
|
dropoff := fmt.Sprintf("%s,%s", url.QueryEscape(job.Dropoff.City), job.Dropoff.State)
|
||||||
uri := fmt.Sprintf(maps.URIFormat, dropoff, dropoff)
|
uri := fmt.Sprintf(maps.URIFormat, dropoff, dropoff)
|
||||||
log.Printf("sending dropoff image: %s", uri)
|
log.Printf("sending dropoff image: %s", uri)
|
||||||
if err := sender.SendImage(uri); err != nil {
|
if err := sender.SendImage(uri); err != nil {
|
||||||
|
|||||||
@@ -119,6 +119,11 @@ func (m Matrix) SendImage(uri string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if response.StatusCode != http.StatusOK {
|
||||||
|
b, _ := ioutil.ReadAll(response.Body)
|
||||||
|
response.Body.Close()
|
||||||
|
return fmt.Errorf("failed to get %s: (%d) %s", uri, response.StatusCode, b)
|
||||||
|
}
|
||||||
b, err := ioutil.ReadAll(response.Body)
|
b, err := ioutil.ReadAll(response.Body)
|
||||||
response.Body.Close()
|
response.Body.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user