summaryrefslogtreecommitdiff
path: root/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/geolocation/client.go
diff options
context:
space:
mode:
Diffstat (limited to 'raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/geolocation/client.go')
-rw-r--r--raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/geolocation/client.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/geolocation/client.go b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/geolocation/client.go
new file mode 100644
index 0000000..5b44121
--- /dev/null
+++ b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/geolocation/client.go
@@ -0,0 +1,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
+}