fix locating aka call scanNow()

This commit is contained in:
Laura Klünder 2016-12-28 13:46:04 +01:00
parent 229b4d5ac9
commit 7cf59dab23
3 changed files with 54 additions and 31 deletions

View file

@ -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'])

View file

@ -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<c3nav._scan_for.length;i++) {
location_group = $('.location-group[data-name='+c3nav._scan_for[i]+']');
location_group.removeClass('loading');
selected = location_group.find('.locationselect-selected');
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);
}
}
c3nav._scan_for = [];
},
_click_route_from_here: function(e) {
c3nav._click_route_x_here(e, $('.origin-select'));
},
@ -288,4 +306,9 @@ c3nav = {
}
};
function nearby_stations_available() {
c3nav.nearby_stations_available();
}
// mobileclient = { getNearbyStations: function() { return '[{"bssid": "00:00:00:00:00:01", "level": 10}]'; }, scanNow: function() { nearby_stations_available(); } };
$(document).ready(c3nav.init);

View file

@ -1,6 +1,6 @@
{% load i18n %}
<div class="col-md-{% if name == 'location' %}12{% else %}6{% endif %} location-group {{ name }}-select{% if location %} selected{% endif %}{% if active_field == name and map_level %} map{% endif %}">
<div class="form-group{% if search == name and not search_results %} has-error{% endif %}" data-name="{{ name }}">
<div class="col-md-{% if name == 'location' %}12{% else %}6{% endif %} location-group {{ name }}-select{% if location %} selected{% endif %}{% if active_field == name and map_level %} map{% endif %}" data-name="{{ name }}">
<div class="form-group{% if search == name and not search_results %} has-error{% endif %}">
<label for="{{ name }}_input">{{ heading }}</label>
{% if name == 'destination' %}
{% if origin %}