diff --git a/src/c3nav/mapdata/api.py b/src/c3nav/mapdata/api.py index 9333d3fd..dce08724 100644 --- a/src/c3nav/mapdata/api.py +++ b/src/c3nav/mapdata/api.py @@ -208,7 +208,7 @@ class LocationViewSet(ViewSet): def wifilocate(self, request): stations = json.loads(request.POST['stations'])[:200] if not stations: - return Response({}) + return Response({'location': None}) bssids = get_bssid_areas_cached() stations = sorted(stations, key=lambda l: l['level']) diff --git a/src/c3nav/site/static/site/js/c3nav.js b/src/c3nav/site/static/site/js/c3nav.js index e4a9d5cf..5bbc2a44 100644 --- a/src/c3nav/site/static/site/js/c3nav.js +++ b/src/c3nav/site/static/site/js/c3nav.js @@ -127,36 +127,9 @@ c3nav = { var location_title = location_group.find('.title').text(); c3nav.qr_modal.find('strong').text(window.location.origin+'/l/'+location_id+'/'); c3nav.qr_modal.find('img').attr('src', '/qr/'+location_id+'.png'); - c3nav.qr_modal.data('title', location_title) + c3nav.qr_modal.data('title', location_title); c3nav.qr_modal.show(); }, - _locationselect_click_locate: function(e) { - e.preventDefault(); - var location_group = $(this).closest('.location-group'); - location_group.addClass('selected').addClass('loading'); - var selected = location_group.find('.locationselect-selected'); - selected.find('.title').text(''); - selected.find('.subtitle').text(''); - selected.find('.id-field').val(''); - - $.ajax({ - type: "POST", - url: '/api/locations/wifilocate/', - data: { stations: mobileclient.getNearbyStations() }, - dataType: 'json', - success: function(data) { - location_group.removeClass('loading'); - var location = data.location; - if (location === null) { - location_group.addClass('error').removeClass('selected'); - } else { - selected.find('.id-field').val(location.id); - selected.find('.title').text(location.title); - selected.find('.subtitle').text(location.subtitle); - } - } - }); - }, _locationselect_activate_map: function(e) { e.preventDefault(); var location_group = $(this).closest('.location-group'); @@ -208,6 +181,51 @@ c3nav = { $('.location-group:visible:not(.selected) .locationselect-input .tt-input').first().focus(); }, + + _last_scan: 0, + _scan_for: [], + _scan_now: function() { + if (c3nav._last_scan < (new Date().getTime() / 1000 - 3000)) { + c3nav._last_scan = new Date().getTime() / 1000; + mobileclient.scanNow(); + } else { + nearby_stations_available(); + } + }, + _locationselect_click_locate: function(e) { + e.preventDefault(); + var location_group = $(this).closest('.location-group'); + location_group.addClass('loading').addClass('selected'); + c3nav._scan_for.push(location_group.attr('data-name')); + c3nav._scan_now(); + }, + nearby_stations_available: function() { + $.ajax({ + type: "POST", + url: '/api/locations/wifilocate/', + data: { stations: mobileclient.getNearbyStations() }, + dataType: 'json', + success: c3nav._wifilocate_callback + }); + }, + _wifilocate_callback: function(data) { + var location_group, selected; + var location = data.location; + for(var i=0;i -