mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-04-04 12:52:06 -04:00
43 lines
1.1 KiB
Go
43 lines
1.1 KiB
Go
package geolocation
|
|
|
|
import "github.com/AvengeMedia/DankMaterialShell/core/internal/log"
|
|
|
|
func NewClient() Client {
|
|
geoclueClient, err := newGeoClueClient()
|
|
if err != nil {
|
|
log.Warnf("GeoClue2 unavailable: %v", err)
|
|
return newSeededIpClient()
|
|
}
|
|
|
|
loc, _ := geoclueClient.GetLocation()
|
|
if loc.Latitude != 0 || loc.Longitude != 0 {
|
|
log.Info("Using GeoClue2 location")
|
|
return geoclueClient
|
|
}
|
|
|
|
log.Info("GeoClue2 has no fix yet, seeding with IP location")
|
|
ipLoc, err := fetchIPLocation()
|
|
if err != nil {
|
|
log.Warnf("IP location seed failed: %v", err)
|
|
return geoclueClient
|
|
}
|
|
|
|
log.Info("Seeded GeoClue2 with IP location")
|
|
geoclueClient.SeedLocation(Location{Latitude: ipLoc.Latitude, Longitude: ipLoc.Longitude})
|
|
return geoclueClient
|
|
}
|
|
|
|
func newSeededIpClient() *IpClient {
|
|
client := newIpClient()
|
|
ipLoc, err := fetchIPLocation()
|
|
if err != nil {
|
|
log.Warnf("IP location also failed: %v", err)
|
|
return client
|
|
}
|
|
|
|
log.Info("Using IP location")
|
|
client.currLocation.Latitude = ipLoc.Latitude
|
|
client.currLocation.Longitude = ipLoc.Longitude
|
|
return client
|
|
}
|