fixed Wi-Fi measurements editor
This commit is contained in:
parent
30d16c4cc9
commit
ca03ea78fd
2 changed files with 29 additions and 15 deletions
|
@ -16,6 +16,7 @@ from django.forms.widgets import HiddenInput
|
||||||
from django.utils.translation import get_language
|
from django.utils.translation import get_language
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from shapely.geometry.geo import mapping
|
from shapely.geometry.geo import mapping
|
||||||
|
from pydantic import ValidationError as PydanticValidationError
|
||||||
|
|
||||||
from c3nav.editor.models import ChangeSet, ChangeSetUpdate
|
from c3nav.editor.models import ChangeSet, ChangeSetUpdate
|
||||||
from c3nav.mapdata.fields import GeometryField
|
from c3nav.mapdata.fields import GeometryField
|
||||||
|
@ -221,9 +222,6 @@ class EditorFormBase(I18nModelFormMixin, ModelForm):
|
||||||
if 'to_node' in self.fields:
|
if 'to_node' in self.fields:
|
||||||
self.fields['to_node'].widget = HiddenInput()
|
self.fields['to_node'].widget = HiddenInput()
|
||||||
|
|
||||||
if 'data' in self.fields and 'data' in self.initial:
|
|
||||||
self.initial['data'] = json.dumps(self.initial['data'])
|
|
||||||
|
|
||||||
self.is_json = is_json
|
self.is_json = is_json
|
||||||
self.missing_fields = tuple((name, field) for name, field in self.fields.items()
|
self.missing_fields = tuple((name, field) for name, field in self.fields.items()
|
||||||
if name not in self.data and not field.required)
|
if name not in self.data and not field.required)
|
||||||
|
@ -260,17 +258,28 @@ class EditorFormBase(I18nModelFormMixin, ModelForm):
|
||||||
)
|
)
|
||||||
|
|
||||||
def clean_data(self):
|
def clean_data(self):
|
||||||
try:
|
if not isinstance(self.cleaned_data['data'], list):
|
||||||
data = json.loads(self.cleaned_data['data'])
|
|
||||||
except json.JSONDecodeError:
|
|
||||||
raise ValidationError(_('Invalid JSON.'))
|
|
||||||
|
|
||||||
if not isinstance(data, list):
|
|
||||||
raise ValidationError(_('Scan data is not a list.'))
|
raise ValidationError(_('Scan data is not a list.'))
|
||||||
|
|
||||||
for item in data:
|
data = list()
|
||||||
# todo: catch pydantic validation error
|
for scan in self.cleaned_data['data']:
|
||||||
|
scan: list[dict]
|
||||||
|
scan_data = list()
|
||||||
|
for item in scan:
|
||||||
|
# The app might return results without an SSID, we ignore those
|
||||||
|
if not item.get('ssid', ''):
|
||||||
|
continue
|
||||||
|
# App version < 4.2.4 use level instead fo rssi
|
||||||
|
if 'level' in item:
|
||||||
|
item['rssi'] = item['level']
|
||||||
|
del item['level']
|
||||||
|
try:
|
||||||
LocateRequestPeerSchema.model_validate(item)
|
LocateRequestPeerSchema.model_validate(item)
|
||||||
|
except PydanticValidationError as e:
|
||||||
|
raise ValidationError(str(e))
|
||||||
|
scan_data.append(item)
|
||||||
|
data.append(scan_data)
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
|
|
|
@ -1299,17 +1299,22 @@ editor = {
|
||||||
$table.find('tr').addClass('old');
|
$table.find('tr').addClass('old');
|
||||||
for (i=0; i < data.length; i++) {
|
for (i=0; i < data.length; i++) {
|
||||||
item = data[i];
|
item = data[i];
|
||||||
|
// App version < 4.2.4 use level instead fo rssi
|
||||||
|
if (item.level !== undefined) {
|
||||||
|
item.rssi = item.level;
|
||||||
|
delete item.level
|
||||||
|
}
|
||||||
apid = 'ap-'+item.bssid.replace(/:/g, '-');
|
apid = 'ap-'+item.bssid.replace(/:/g, '-');
|
||||||
line = $table.find('tr.'+apid);
|
line = $table.find('tr.'+apid);
|
||||||
color = Math.max(0, Math.min(50, item.level+80));
|
color = Math.max(0, Math.min(50, item.rssi+80));
|
||||||
color = 'rgb('+String(250-color*5)+', '+String(color*4)+', 0)';
|
color = 'rgb('+String(250-color*5)+', '+String(color*4)+', 0)';
|
||||||
if (line.length) {
|
if (line.length) {
|
||||||
line.removeClass('old').find(':last-child').text(item.level).css('color', color);
|
line.removeClass('old').find(':last-child').text(item.rssi).css('color', color);
|
||||||
} else {
|
} else {
|
||||||
line = $('<tr>').addClass(apid);
|
line = $('<tr>').addClass(apid);
|
||||||
line.append($('<td>').text(item.bssid));
|
line.append($('<td>').text(item.bssid));
|
||||||
line.append($('<td>').text(item.ssid));
|
line.append($('<td>').text(item.ssid));
|
||||||
line.append($('<td>').text(item.level).css('color', color));
|
line.append($('<td>').text(item.rssi).css('color', color));
|
||||||
$table.append(line);
|
$table.append(line);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue