mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
Added SpaceX Module
This commit is contained in:
parent
c1f9c910e1
commit
ce0151becc
@ -47,6 +47,7 @@ import (
|
||||
"github.com/wtfutil/wtf/modules/resourceusage"
|
||||
"github.com/wtfutil/wtf/modules/rollbar"
|
||||
"github.com/wtfutil/wtf/modules/security"
|
||||
"github.com/wtfutil/wtf/modules/spacex"
|
||||
"github.com/wtfutil/wtf/modules/spotify"
|
||||
"github.com/wtfutil/wtf/modules/spotifyweb"
|
||||
"github.com/wtfutil/wtf/modules/status"
|
||||
@ -227,6 +228,9 @@ func MakeWidget(
|
||||
case "security":
|
||||
settings := security.NewSettingsFromYAML(moduleName, moduleConfig, config)
|
||||
widget = security.NewWidget(app, settings)
|
||||
case "spacex":
|
||||
settings := spacex.NewSettingsFromYAML(moduleName, moduleConfig, config)
|
||||
widget = spacex.NewWidget(app, settings)
|
||||
case "spotify":
|
||||
settings := spotify.NewSettingsFromYAML(moduleName, moduleConfig, config)
|
||||
widget = spotify.NewWidget(app, pages, settings)
|
||||
|
50
modules/spacex/client.go
Normal file
50
modules/spacex/client.go
Normal file
@ -0,0 +1,50 @@
|
||||
package spacex
|
||||
|
||||
import (
|
||||
"github.com/wtfutil/wtf/utils"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
const (
|
||||
spacexLaunchAPI = "https://api.spacexdata.com/v3/launches/next"
|
||||
)
|
||||
|
||||
type Launch struct {
|
||||
FlightNumber int `json:"flight_number"`
|
||||
MissionName string `json:"mission_name"`
|
||||
LaunchDate int64 `json:"launch_date_unix"`
|
||||
IsTentative bool `json:"tentative"`
|
||||
Rocket Rocket `json:"rocket"`
|
||||
LaunchSite LaunchSite `json:"launch_site"`
|
||||
Links Links `json:"links"`
|
||||
Details string `json:"details"`
|
||||
}
|
||||
|
||||
type LaunchSite struct {
|
||||
Name string `json:"site_name_long"`
|
||||
}
|
||||
|
||||
type Rocket struct {
|
||||
Name string `json:"rocket_name"`
|
||||
}
|
||||
|
||||
type Links struct {
|
||||
RedditLink string `json:"reddit_campaign"`
|
||||
YouTubeLink string `json:"video_link"`
|
||||
}
|
||||
|
||||
func NextLaunch() (*Launch, error) {
|
||||
resp, err := http.Get(spacexLaunchAPI)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer func() { _ = resp.Body.Close() }()
|
||||
|
||||
var data Launch
|
||||
err = utils.ParseJSON(&data, resp.Body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &data, nil
|
||||
}
|
22
modules/spacex/settings.go
Normal file
22
modules/spacex/settings.go
Normal file
@ -0,0 +1,22 @@
|
||||
package spacex
|
||||
|
||||
import (
|
||||
"github.com/olebedev/config"
|
||||
"github.com/wtfutil/wtf/cfg"
|
||||
)
|
||||
|
||||
const (
|
||||
defaultFocusable = false
|
||||
)
|
||||
|
||||
type Settings struct {
|
||||
common *cfg.Common
|
||||
}
|
||||
|
||||
func NewSettingsFromYAML(name string, ymlConfig *config.Config, globalConfig *config.Config) *Settings {
|
||||
spacex := ymlConfig.UString("spacex")
|
||||
settings := Settings{
|
||||
common: cfg.NewCommonSettingsFromModule(name, spacex, defaultFocusable, ymlConfig, globalConfig),
|
||||
}
|
||||
return &settings
|
||||
}
|
71
modules/spacex/widget.go
Normal file
71
modules/spacex/widget.go
Normal file
@ -0,0 +1,71 @@
|
||||
package spacex
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/rivo/tview"
|
||||
"github.com/wtfutil/wtf/view"
|
||||
"github.com/wtfutil/wtf/wtf"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Widget struct {
|
||||
view.TextWidget
|
||||
settings *Settings
|
||||
err error
|
||||
launch Launch
|
||||
}
|
||||
|
||||
func NewWidget(app *tview.Application, settings *Settings) *Widget {
|
||||
widget := &Widget{
|
||||
TextWidget: view.NewTextWidget(app, settings.common),
|
||||
settings: settings,
|
||||
}
|
||||
return widget
|
||||
}
|
||||
|
||||
func (widget *Widget) Refresh() {
|
||||
if widget.Disabled() {
|
||||
return
|
||||
}
|
||||
widget.Redraw(widget.content)
|
||||
}
|
||||
|
||||
func (widget *Widget) Render() {
|
||||
widget.Redraw(widget.content)
|
||||
}
|
||||
|
||||
func (widget *Widget) content() (string, string, bool) {
|
||||
var title = "Next SpaceX 🚀"
|
||||
if widget.CommonSettings().Title != "" {
|
||||
title = widget.CommonSettings().Title
|
||||
}
|
||||
|
||||
launch, err := NextLaunch()
|
||||
var str string
|
||||
if err != nil {
|
||||
handleError(widget, err)
|
||||
} else {
|
||||
|
||||
str = fmt.Sprintf("[%s]Mission[white]\n", widget.settings.common.Colors.Subheading)
|
||||
str += fmt.Sprintf("%s: %s\n", "Name", launch.MissionName)
|
||||
str += fmt.Sprintf("%s: %s\n", "Date", wtf.UnixTime(launch.LaunchDate).Format(time.RFC822))
|
||||
str += fmt.Sprintf("%s: %s\n", "Site", launch.LaunchSite.Name)
|
||||
str += "\n"
|
||||
|
||||
str += fmt.Sprintf("[%s]Links[white]\n", widget.settings.common.Colors.Subheading)
|
||||
str += fmt.Sprintf("%s: %s\n", "YouTube", launch.Links.YouTubeLink)
|
||||
str += fmt.Sprintf("%s: %s\n", "Reddit", launch.Links.RedditLink)
|
||||
|
||||
if widget.CommonSettings().Height >= 2 {
|
||||
str += "\n"
|
||||
str += fmt.Sprintf("[%s]Details[white]\n", widget.settings.common.Colors.Subheading)
|
||||
str += fmt.Sprintf("%s: %s\n", "RocketName", launch.Rocket.Name)
|
||||
str += fmt.Sprintf("%s: %s\n", "Details", launch.Details)
|
||||
}
|
||||
}
|
||||
return title, str, true
|
||||
}
|
||||
|
||||
func handleError(widget *Widget, err error) {
|
||||
widget.err = err
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user