28 lines
630 B
Crystal
28 lines
630 B
Crystal
module Wince::Location
|
|
extend self
|
|
|
|
@@channel = Channel(Geoclue::Simple).new(1)
|
|
@@client : Geoclue::Simple? = nil
|
|
@@fiber : Fiber = spawn setup_client
|
|
|
|
def setup_client
|
|
@@channel.send Geoclue::Simple.new_sync("space.quietfeathers.Wince", Geoclue::AccuracyLevel::Street, nil)
|
|
Fiber.yield
|
|
end
|
|
|
|
# returns latlon if available, otherwise empty array
|
|
def find_location
|
|
if !@@fiber.dead?
|
|
return [] of Float64
|
|
end
|
|
|
|
if @@client.nil?
|
|
@@client = @@channel.receive
|
|
end
|
|
|
|
location = @@client.try do |c|
|
|
[c.location.latitude, c.location.longitude]
|
|
end || [] of Float64
|
|
end
|
|
end
|