diff --git a/src/modules/api/location.cr b/src/modules/api/location.cr index 48bb1ea..0185fc1 100644 --- a/src/modules/api/location.cr +++ b/src/modules/api/location.cr @@ -1,23 +1,27 @@ 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 + callback = ->(object : GObject::Object | Nil, result : Gio::AsyncResult) { + @@client = Geoclue::Simple.new_finish(result) + puts "location callback" + } + + Geoclue::Simple.new( + "space.quietfeathers.Wince", + Geoclue::AccuracyLevel::Street, + nil, + callback, + nil + ) end # returns latlon if available, otherwise empty array def find_location - if !@@fiber.dead? - return [] of Float64 - end - if @@client.nil? - @@client = @@channel.receive + return [] of Float64 end location = @@client.try do |c|