First Commit

This commit is contained in:
2018-11-11 13:18:05 +01:00
commit 0ecbc16bdb
15 changed files with 686 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
package channels
import (
"context"
"encoding/json"
"git.aiterp.net/rpdata/logbot3/internal/api"
"git.aiterp.net/rpdata/logbot3/internal/models"
)
type findResult struct {
Channel models.Channel `json:"channel"`
}
var findGQL = `
query FindChannel($name: String!) {
channel(name: $name) {
name
logged
eventName
locationName
}
}
`
// Find finds a channel by name
func Find(ctx context.Context, name string) (models.Channel, error) {
data, err := api.Global().Query(ctx, findGQL, map[string]interface{}{"name": name}, nil)
if err != nil {
return models.Channel{}, err
}
result := findResult{}
err = json.Unmarshal(data, &result)
if err != nil {
return models.Channel{}, err
}
return result.Channel, nil
}
+40
View File
@@ -0,0 +1,40 @@
package channels
import (
"context"
"encoding/json"
"git.aiterp.net/rpdata/logbot3/internal/api"
"git.aiterp.net/rpdata/logbot3/internal/models"
)
type listLoggedResult struct {
Channels []models.Channel `json:"channels"`
}
var listLoggedGQL = `
query ListLogged {
channels(filter: {logged: true}) {
name
logged
eventName
locationName
}
}
`
// ListLogged gets all open channels
func ListLogged(ctx context.Context) ([]models.Channel, error) {
data, err := api.Global().Query(ctx, listLoggedGQL, nil, nil)
if err != nil {
return nil, err
}
result := listLoggedResult{}
err = json.Unmarshal(data, &result)
if err != nil {
return nil, err
}
return result.Channels, nil
}
+40
View File
@@ -0,0 +1,40 @@
package channels
import (
"context"
"encoding/json"
"git.aiterp.net/rpdata/logbot3/internal/api"
"git.aiterp.net/rpdata/logbot3/internal/models"
)
type setLoggedResult struct {
EditChannel models.Channel `json:"editChannel"`
}
var setLoggedGQL = `
mutation SetChanelLogged($name: String!, $logged: Boolean!) {
editChannel(input: {name: $name, logged: $logged}) {
name
logged
eventName
locationName
}
}
`
// SetLogged sets a channel as logged
func SetLogged(ctx context.Context, name string, logged bool) (models.Channel, error) {
data, err := api.Global().Query(ctx, setLoggedGQL, map[string]interface{}{"name": name, "logged": logged}, []string{"channel.edit"})
if err != nil {
return models.Channel{}, err
}
result := setLoggedResult{}
err = json.Unmarshal(data, &result)
if err != nil {
return models.Channel{}, err
}
return result.EditChannel, nil
}
@@ -0,0 +1,30 @@
package channels
import (
"context"
"time"
"git.aiterp.net/rpdata/logbot3/internal/models"
)
// SubscribeLogged returns a channel that gets all the channel changes.
func SubscribeLogged(ctx context.Context) (<-chan models.Channel, error) {
channels, err := ListLogged(ctx)
if err != nil {
return nil, err
}
output := make(chan models.Channel, len(channels)+8)
for _, channel := range channels {
output <- channel
}
go func() {
for {
time.Sleep(time.Second * 20)
}
}()
return output, nil
}