forked from Elara6331/itd
		
	Add update weather command to itctl
This commit is contained in:
		
							
								
								
									
										17
									
								
								api/weather.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								api/weather.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | package api | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"go.arsenm.dev/itd/internal/types" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // UpdateWeather sends the update weather signal, | ||||||
|  | // immediately sending current weather data | ||||||
|  | func (c *Client) UpdateWeather() error { | ||||||
|  | 	_, err := c.request(types.Request{ | ||||||
|  | 		Type: types.ReqTypeWeatherUpdate, | ||||||
|  | 	}) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
| @@ -26,6 +26,7 @@ import ( | |||||||
| 	_ "go.arsenm.dev/itd/cmd/itctl/set" | 	_ "go.arsenm.dev/itd/cmd/itctl/set" | ||||||
| 	_ "go.arsenm.dev/itd/cmd/itctl/watch" | 	_ "go.arsenm.dev/itd/cmd/itctl/watch" | ||||||
| 	_ "go.arsenm.dev/itd/cmd/itctl/filesystem" | 	_ "go.arsenm.dev/itd/cmd/itctl/filesystem" | ||||||
|  | 	_ "go.arsenm.dev/itd/cmd/itctl/update" | ||||||
|  |  | ||||||
| 	"os" | 	"os" | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										44
									
								
								cmd/itctl/update/time.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								cmd/itctl/update/time.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | |||||||
|  | /* | ||||||
|  |  *	itd uses bluetooth low energy to communicate with InfiniTime devices | ||||||
|  |  *	Copyright (C) 2021 Arsen Musayelyan | ||||||
|  |  * | ||||||
|  |  *	This program is free software: you can redistribute it and/or modify | ||||||
|  |  *	it under the terms of the GNU General Public License as published by | ||||||
|  |  *	the Free Software Foundation, either version 3 of the License, or | ||||||
|  |  *	(at your option) any later version. | ||||||
|  |  * | ||||||
|  |  *	This program is distributed in the hope that it will be useful, | ||||||
|  |  *	but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  *	GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  *	You should have received a copy of the GNU General Public License | ||||||
|  |  *	along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | package update | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/rs/zerolog/log" | ||||||
|  | 	"github.com/spf13/cobra" | ||||||
|  | 	"github.com/spf13/viper" | ||||||
|  | 	"go.arsenm.dev/itd/api" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // weatherCmd represents the time command | ||||||
|  | var weatherCmd = &cobra.Command{ | ||||||
|  | 	Use:   `weather`, | ||||||
|  | 	Short: "Force an immediate update of weather data", | ||||||
|  | 	Run: func(cmd *cobra.Command, args []string) { | ||||||
|  | 		client := viper.Get("client").(*api.Client) | ||||||
|  |  | ||||||
|  | 		err := client.UpdateWeather() | ||||||
|  | 		if err != nil { | ||||||
|  | 			log.Fatal().Err(err).Msg("Error updating weather") | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	updateCmd.AddCommand(weatherCmd) | ||||||
|  | } | ||||||
							
								
								
									
										35
									
								
								cmd/itctl/update/update.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								cmd/itctl/update/update.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | |||||||
|  | /* | ||||||
|  |  *	itd uses bluetooth low energy to communicate with InfiniTime devices | ||||||
|  |  *	Copyright (C) 2021 Arsen Musayelyan | ||||||
|  |  * | ||||||
|  |  *	This program is free software: you can redistribute it and/or modify | ||||||
|  |  *	it under the terms of the GNU General Public License as published by | ||||||
|  |  *	the Free Software Foundation, either version 3 of the License, or | ||||||
|  |  *	(at your option) any later version. | ||||||
|  |  * | ||||||
|  |  *	This program is distributed in the hope that it will be useful, | ||||||
|  |  *	but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  *	GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  *	You should have received a copy of the GNU General Public License | ||||||
|  |  *	along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | package update | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/spf13/cobra" | ||||||
|  | 	"go.arsenm.dev/itd/cmd/itctl/root" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // updateCmd represents the update command | ||||||
|  | var updateCmd = &cobra.Command{ | ||||||
|  | 	Use:   "update", | ||||||
|  | 	Short: "Update information on InfiniTime", | ||||||
|  | 	Aliases: []string{"upd"}, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	root.RootCmd.AddCommand(updateCmd) | ||||||
|  | } | ||||||
| @@ -21,6 +21,7 @@ const ( | |||||||
| 	ReqTypeWatchStepCount | 	ReqTypeWatchStepCount | ||||||
| 	ReqTypeCancel | 	ReqTypeCancel | ||||||
| 	ReqTypeFS | 	ReqTypeFS | ||||||
|  | 	ReqTypeWeatherUpdate | ||||||
| ) | ) | ||||||
|  |  | ||||||
| const ( | const ( | ||||||
|   | |||||||
| @@ -642,6 +642,10 @@ func handleConnection(conn net.Conn, dev *infinitime.Device, fs *blefs.FS) { | |||||||
| 					}, | 					}, | ||||||
| 				}) | 				}) | ||||||
| 			} | 			} | ||||||
|  | 		case types.ReqTypeWeatherUpdate: | ||||||
|  | 			// Send weather update signal | ||||||
|  | 			sendWeatherCh <- struct{}{} | ||||||
|  | 			json.NewEncoder(conn).Encode(types.Response{Type: req.Type}) | ||||||
| 		case types.ReqTypeCancel: | 		case types.ReqTypeCancel: | ||||||
| 			if req.Data == nil { | 			if req.Data == nil { | ||||||
| 				connErr(conn, req.Type, nil, "No data provided. Cancel request requires request ID string as data.") | 				connErr(conn, req.Type, nil, "No data provided. Cancel request requires request ID string as data.") | ||||||
|   | |||||||
| @@ -75,6 +75,7 @@ func initWeather(dev *infinitime.Device) error { | |||||||
|  |  | ||||||
| 	go func() { | 	go func() { | ||||||
| 		for { | 		for { | ||||||
|  | 			fmt.Println("weather update") | ||||||
| 			// Attempt to get weather | 			// Attempt to get weather | ||||||
| 			data, err := getWeather(lat, lon) | 			data, err := getWeather(lat, lon) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| @@ -165,12 +166,14 @@ func initWeather(dev *infinitime.Device) error { | |||||||
| 				log.Error().Err(err).Msg("Error adding pressure event") | 				log.Error().Err(err).Msg("Error adding pressure event") | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
|  | 			// Reset timer to 1 hour | ||||||
|  | 			timer.Stop() | ||||||
| 			timer.Reset(time.Hour) | 			timer.Reset(time.Hour) | ||||||
|  |  | ||||||
|  | 			// Wait for timer to fire or manual update signal | ||||||
| 			select { | 			select { | ||||||
| 			case <-timer.C: | 			case <-timer.C: | ||||||
| 				timer.Stop() |  | ||||||
| 			case <-sendWeatherCh: | 			case <-sendWeatherCh: | ||||||
| 				timer.Stop() |  | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	}() | 	}() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user