summaryrefslogtreecommitdiff
path: root/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/geolocation/client.go
blob: 5b441215da243f45becc22e3e460965c1f82b86d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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
}