Go/Qt desktop application for Tesla vehicles
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

132 lines
2.7 KiB

package main
import (
"fmt"
"strconv"
"strings"
"time"
"github.com/therecipe/qt/widgets"
)
func enableClimate(i int) {
temp, err := strconv.ParseFloat(window.ClimateSettingSpinbox.Text(), 64)
if err != nil {
showDialogue(true, "Unable to parse temp setting\n%+v", err)
}
if guiSettings.GuiTemperatureUnits == "F" {
temp = (temp - 32) * 5 / 9
}
if i == 0 {
vehicle.StopAirConditioning()
} else {
vehicle.SetTemperature(temp, temp)
vehicle.StartAirConditioning()
}
go setValues()
}
func lockDoors(b bool) {
if b {
vehicle.UnlockDoors()
} else {
vehicle.LockDoors()
}
go setValues()
}
func enableCharging(b bool) {
if b {
vehicle.StopCharging()
} else {
vehicle.StartCharging()
}
go setValues()
}
func honkHorn(c bool) {
err := vehicle.HonkHorn()
if err != nil {
showDialogue(true, "There was an error honking the horn\n%+v", err)
fmt.Printf("%+v\n", err)
}
go setValues()
}
func flash(c bool) {
err := vehicle.FlashLights()
if err != nil {
showDialogue(true, "There was an error flashing the lights\n%+v", err)
fmt.Printf("%+v\n", err)
}
go setValues()
}
func openTrunk(c bool) {
err := vehicle.OpenTrunk("rear")
if err != nil {
showDialogue(true, "There was an error opening your trunk\n%+v", err)
fmt.Printf("%+v\n", err)
}
go setValues()
}
func openFrunk(c bool) {
err := vehicle.OpenTrunk("front")
if err != nil {
showDialogue(true, "There was an error opening your frunk\n%+v", err)
fmt.Printf("%+v\n", err)
}
go setValues()
}
func showDialogue(recover bool, msg string, a ...interface{}) {
popup = true
if !recover {
window.Close()
}
dialogue := widgets.NewQDialog(nil, 0)
centralWidget := widgets.NewQWidget(dialogue, 0)
actionHBox := widgets.NewQHBoxLayout()
formLayout := widgets.NewQFormLayout(nil)
contBtn := widgets.NewQPushButton(nil)
quitBtn := widgets.NewQPushButton(nil)
message := widgets.NewQLabel(nil, 0)
dialogue.SetWindowTitle("TeslaGo Alert")
dialogue.SetMinimumWidth(255)
dialogue.SetMinimumHeight(50 + (20 * (1 + strings.Count(msg, "\n"))))
contBtn.SetText("Continue")
quitBtn.SetText("Quit")
message.SetText(fmt.Sprintf(msg, a...))
message.SetWordWrap(true)
contBtn.ConnectClicked(func(checked bool) {
window.Show()
popup = false
dialogue.Close()
go setValues()
})
quitBtn.ConnectClicked(func(checked bool) {
mainApp.Quit()
})
if recover {
actionHBox.AddWidget(contBtn, 0, 0)
}
actionHBox.AddWidget(quitBtn, 0, 0)
formLayout.AddRow5(message)
formLayout.AddRow6(actionHBox)
centralWidget.SetLayout(formLayout)
dialogue.Show()
}
func formatDuration(d time.Duration) string {
d = d.Round(time.Minute)
h := d / time.Hour
d -= h * time.Hour
m := d / time.Minute
return fmt.Sprintf("%02dh%02dm", h, m)
}