Skip to content

Commit

Permalink
* Added more URL input options/parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
Clon1998 committed Aug 28, 2021
1 parent 3ac9c67 commit 7f97537
Show file tree
Hide file tree
Showing 8 changed files with 71 additions and 70 deletions.
6 changes: 3 additions & 3 deletions lib/service/KlippyService.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ import 'package:mobileraker/dto/machine/Printer.dart';
import 'package:mobileraker/dto/server/Klipper.dart';
import 'package:rxdart/rxdart.dart';

/**
* Handley Server connections/services
*/
///
/// Handley Server connections/services
///
class KlippyService {
final WebSocketWrapper _webSocket;
final _logger = getLogger('KlippyService');
Expand Down
67 changes: 29 additions & 38 deletions lib/service/PrinterService.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import 'dart:convert';
import 'dart:math';

import 'package:enum_to_string/enum_to_string.dart';
import 'package:flutter/foundation.dart';
import 'package:mobileraker/WebSocket.dart';
import 'package:mobileraker/app/AppSetup.locator.dart';
import 'package:mobileraker/app/AppSetup.logger.dart';
Expand Down Expand Up @@ -63,7 +62,6 @@ class PrinterService {
_fetchPrinter();
}


/// Method Handler for registered in the Websocket wrapper.
/// Handles all incoming messages and maps the correct method to it!
Expand Down Expand Up @@ -132,7 +130,8 @@ class PrinterService {
if (subToPrinterObjects.containsKey(mainObjectType)) {
var method = subToPrinterObjects[mainObjectType];
if (method != null) {
if (split.length > 1) // Multi word objectsType e.g.'temperature_sensor sensor_name'
if (split.length >
1) // Multi word objectsType e.g.'temperature_sensor sensor_name'
method(key, data[key], printer: printer);
else
method(data[key], printer: printer);
Expand All @@ -145,84 +144,79 @@ class PrinterService {
_makeSubscribeRequest(printer);
}

void _updatePartFan(Map<String, dynamic> fanJson, {Printer? printer}) {
printer ??= _latestPrinter;
void _updatePartFan(Map<String, dynamic> fanJson,
{required Printer printer}) {
if (fanJson.containsKey('speed')) printer.printFan.speed = fanJson['speed'];
}

void _updateHeaterFan(String heaterFanName, Map<String, dynamic> fanJson,
{Printer? printer}) {
printer ??= _latestPrinter;
{required Printer printer}) {
List<String> split = heaterFanName.split(" ");
String hName = split.length > 1 ? split.skip(1).join(" ") : split[0];

NamedFan namedFan = printer.fans.firstWhere(
(element) => element.name == hName && element is HeaterFan, orElse: () {
var f = HeaterFan(hName);
printer!.fans.add(f);
printer.fans.add(f);
return f;
});
if (fanJson.containsKey('speed')) namedFan.speed = fanJson['speed'];
}

void _updateControllerFan(String fanName, Map<String, dynamic> fanJson,
{Printer? printer}) {
printer ??= _latestPrinter;
{required Printer printer}) {
List<String> split = fanName.split(" ");
String hName = split.length > 1 ? split.skip(1).join(" ") : split[0];

NamedFan namedFan = printer.fans.firstWhere(
(element) => element.name == hName && element is ControllerFan,
orElse: () {
var f = ControllerFan(hName);
printer!.fans.add(f);
printer.fans.add(f);
return f;
});
if (fanJson.containsKey('speed')) namedFan.speed = fanJson['speed'];
}

void _updateTemperatureFan(String fanName, Map<String, dynamic> fanJson,
{Printer? printer}) {
printer ??= _latestPrinter;
{required Printer printer}) {
List<String> split = fanName.split(" ");
String hName = split.length > 1 ? split.skip(1).join(" ") : split[0];

NamedFan namedFan = printer.fans.firstWhere(
(element) => element.name == hName && element is TemperatureFan,
orElse: () {
var f = TemperatureFan(hName);
printer!.fans.add(f);
printer.fans.add(f);
return f;
});
if (fanJson.containsKey('speed')) namedFan.speed = fanJson['speed'];
}

void _updateGenericFan(String fanName, Map<String, dynamic> fanJson,
{Printer? printer}) {
printer ??= _latestPrinter;
{required Printer printer}) {
List<String> split = fanName.split(" ");
String hName = split.length > 1 ? split.skip(1).join(" ") : split[0];

NamedFan namedFan = printer.fans
.firstWhere((element) => element.name == hName && element is GenericFan,
orElse: () {
var f = GenericFan(hName);
printer!.fans.add(f);
printer.fans.add(f);
return f;
});
if (fanJson.containsKey('speed')) namedFan.speed = fanJson['speed'];
}

void _updateTemperatureSensor(String sensor, Map<String, dynamic> sensorJson,
{Printer? printer}) {
printer ??= _latestPrinter;
{required Printer printer}) {
List<String> split = sensor.split(" ");
String sName = split.length > 1 ? split.skip(1).join(" ") : split[0];

TemperatureSensor tempSensor = printer.temperatureSensors
.firstWhere((element) => element.name == sName, orElse: () {
var t = TemperatureSensor(sName);
printer!.temperatureSensors.add(t);
printer.temperatureSensors.add(t);
return t;
});

Expand All @@ -235,23 +229,21 @@ class PrinterService {
}

void _updateOutputPin(String pin, Map<String, dynamic> pinJson,
{Printer? printer}) {
printer ??= _latestPrinter;
{required Printer printer}) {
List<String> split = pin.split(" ");
String sName = split.length > 1 ? split.skip(1).join(" ") : split[0];

OutputPin output = printer.outputPins
.firstWhere((element) => element.name == sName, orElse: () {
var t = OutputPin(sName);
printer!.outputPins.add(t);
printer.outputPins.add(t);
return t;
});

if (pinJson.containsKey('value')) output.value = pinJson['value'];
}

_updateGCodeMove(Map<String, dynamic> gCodeJson, {Printer? printer}) {
printer ??= _latestPrinter;
_updateGCodeMove(Map<String, dynamic> gCodeJson, {required Printer printer}) {
if (gCodeJson.containsKey('speed_factor'))
printer.gCodeMove.speedFactor = gCodeJson['speed_factor'];
if (gCodeJson.containsKey('speed'))
Expand All @@ -277,8 +269,8 @@ class PrinterService {
}
}

_updateVirtualSd(Map<String, dynamic> virtualSDJson, {Printer? printer}) {
printer ??= _latestPrinter;
_updateVirtualSd(Map<String, dynamic> virtualSDJson,
{required Printer printer}) {
if (virtualSDJson.containsKey('progress'))
printer.virtualSdCard.progress = virtualSDJson['progress'];
if (virtualSDJson.containsKey('is_active'))
Expand All @@ -288,8 +280,8 @@ class PrinterService {
int.tryParse(virtualSDJson['file_position'].toString()) ?? 0;
}

_updatePrintStat(Map<String, dynamic> printStatJson, {Printer? printer}) {
printer ??= _latestPrinter;
_updatePrintStat(Map<String, dynamic> printStatJson,
{required Printer printer}) {
if (printStatJson.containsKey('state'))
printer.print.state =
EnumToString.fromString(PrintState.values, printStatJson['state'])!;
Expand All @@ -307,18 +299,17 @@ class PrinterService {
}
}

_updateConfigFile(Map<String, dynamic> printStatJson, {Printer? printer}) {
printer ??= _latestPrinter;

_updateConfigFile(Map<String, dynamic> printStatJson,
{required Printer printer}) {
if (printStatJson.containsKey('settings'))
printer.configFile = ConfigFile.parse(printStatJson['settings']);
if (printStatJson.containsKey('save_config_pending'))
printer.configFile.saveConfigPending =
printStatJson['save_config_pending'];
}

_updateHeaterBed(Map<String, dynamic> heatedBedJson, {Printer? printer}) {
printer ??= _latestPrinter;
_updateHeaterBed(Map<String, dynamic> heatedBedJson,
{required Printer printer}) {
if (heatedBedJson.containsKey('temperature'))
printer.heaterBed.temperature = heatedBedJson['temperature'];
if (heatedBedJson.containsKey('target'))
Expand All @@ -327,8 +318,8 @@ class PrinterService {
printer.heaterBed.power = heatedBedJson['power'];
}

_updateExtruder(Map<String, dynamic> extruderJson, {Printer? printer}) {
printer ??= _latestPrinter;
_updateExtruder(Map<String, dynamic> extruderJson,
{required Printer printer}) {
if (extruderJson.containsKey('temperature'))
printer.extruder.temperature = extruderJson['temperature'];
if (extruderJson.containsKey('target'))
Expand All @@ -341,8 +332,8 @@ class PrinterService {
printer.extruder.power = extruderJson['power'];
}

_updateToolhead(Map<String, dynamic> toolHeadJson, {Printer? printer}) {
printer ??= _latestPrinter;
_updateToolhead(Map<String, dynamic> toolHeadJson,
{required Printer printer}) {
if (toolHeadJson.containsKey('homed_axes')) {
String hAxes = toolHeadJson['homed_axes'];
Set<PrinterAxis> homed = {};
Expand Down
1 change: 0 additions & 1 deletion lib/ui/bottomsheet/setup_bottom_sheet_ui.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import 'package:mobileraker/enums/BottomSheetType.dart';
import 'package:mobileraker/service/KlippyService.dart';
import 'package:mobileraker/service/MachineService.dart';
import 'package:stacked/stacked.dart';
import 'package:stacked/stacked_annotations.dart';
import 'package:stacked_services/stacked_services.dart';

void setupBottomSheetUi() {
Expand Down
6 changes: 4 additions & 2 deletions lib/ui/views/printers/add/printers_add_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,10 @@ class PrintersAdd extends StatelessWidget {
FormBuilderTextField(
decoration: InputDecoration(
labelText: 'Printer-Address',
hintText: 'Host, IP, or full URL',
helperMaxLines: 2,
helperText: model.wsUrl != null
? 'WS-URL: ${model.wsUrl}'
? 'Resulting WebSocket-URL: ${model.wsUrl}'
: '' //TODO
),
onChanged: model.onUrlEntered,
Expand All @@ -53,7 +55,7 @@ class PrintersAdd extends StatelessWidget {
validator: FormBuilderValidators.compose([
FormBuilderValidators.required(context),
FormBuilderValidators.url(context,
protocols: ['ws', 'wss'])
protocols: ['ws', 'wss', 'http','https'])
]),
),
FormBuilderTextField(
Expand Down
18 changes: 5 additions & 13 deletions lib/ui/views/printers/add/printers_add_viewmodel.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import 'package:mobileraker/app/AppSetup.locator.dart';
import 'package:mobileraker/app/AppSetup.router.dart';
import 'package:mobileraker/dto/machine/PrinterSetting.dart';
import 'package:mobileraker/service/MachineService.dart';
import 'package:mobileraker/util/misc.dart';
import 'package:stacked/stacked.dart';
import 'package:stacked_services/stacked_services.dart';

Expand All @@ -22,7 +23,7 @@ class PrintersAddViewModel extends StreamViewModel<WebSocketState> {

GlobalKey get formKey => _fbKey;

String inputUrl = 'mainsailos.local';
String inputUrl = '';

WebSocketWrapper? _testWebSocket;

Expand Down Expand Up @@ -69,11 +70,7 @@ class PrintersAddViewModel extends StreamViewModel<WebSocketState> {
}

String? get wsUrl {
var printerUrl = inputUrl;
var parse = Uri.tryParse(printerUrl);
return (parse?.hasScheme ?? false)
? printerUrl
: 'ws://$printerUrl/websocket';
return urlToWebsocketUrl(inputUrl);
}

onUrlEntered(value) {
Expand All @@ -86,9 +83,7 @@ class PrintersAddViewModel extends StreamViewModel<WebSocketState> {
var printerName = _fbKey.currentState!.value['printerName'];
var printerAPIKey = _fbKey.currentState!.value['printerApiKey'];
var printerUrl = _fbKey.currentState!.value['printerUrl'];
if (!Uri.parse(printerUrl).hasScheme) {
printerUrl = 'ws://$printerUrl/websocket';
}
printerUrl = urlToWebsocketUrl(printerUrl);
var printerSetting = PrinterSetting(
name: printerName, wsUrl: printerUrl, apiKey: printerAPIKey);
_printerSettingService.addPrinter(printerSetting).then(
Expand All @@ -100,10 +95,7 @@ class PrintersAddViewModel extends StreamViewModel<WebSocketState> {
if (_fbKey.currentState!.saveAndValidate()) {
var printerUrl = _fbKey.currentState!.value['printerUrl'];
var printerAPIKey = _fbKey.currentState!.value['printerApiKey'];
var uri = Uri.parse(printerUrl);
if (!uri.hasScheme) {
printerUrl = 'ws://$printerUrl/websocket';
}
printerUrl = urlToWebsocketUrl(printerUrl);
_testWebSocket?.reset();
_testWebSocket?.stateStream.close();

Expand Down
8 changes: 5 additions & 3 deletions lib/ui/views/printers/edit/printers_edit_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -52,16 +52,18 @@ class PrintersEdit extends ViewModelBuilderWidget<PrintersEditViewModel> {
FormBuilderTextField(
decoration: InputDecoration(
labelText: 'Printer-Address',
hintText: 'Host, IP, or full URL',
helperMaxLines: 2,
helperText: model.wsUrl != null
? 'WS-URL: ${model.wsUrl}'
? 'Resulting WebSocket-URL: ${model.wsUrl}'
: '' //TODO
),
),
onChanged: model.onUrlEntered,
name: 'printerUrl',
initialValue: model.inputUrl,
validator: FormBuilderValidators.compose([
FormBuilderValidators.required(context),
FormBuilderValidators.url(context, protocols: ['ws', 'wss'])
FormBuilderValidators.url(context, protocols: ['ws', 'wss', 'http','https'])
]),
),
FormBuilderTextField(
Expand Down
11 changes: 3 additions & 8 deletions lib/ui/views/printers/edit/printers_edit_viewmodel.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import 'package:mobileraker/dto/machine/PrinterSetting.dart';
import 'package:mobileraker/dto/machine/TemperaturePreset.dart';
import 'package:mobileraker/dto/machine/WebcamSetting.dart';
import 'package:mobileraker/service/MachineService.dart';
import 'package:mobileraker/util/misc.dart';
import 'package:stacked/stacked.dart';
import 'package:stacked_services/stacked_services.dart';

Expand All @@ -29,11 +30,7 @@ class PrintersEditViewModel extends BaseViewModel {
String? get printerApiKey => printerSetting.apiKey;

String? get wsUrl {
var printerUrl = inputUrl;
var parse = Uri.tryParse(printerUrl);
return (parse?.hasScheme ?? false)
? printerUrl
: 'ws://$printerUrl/websocket';
return urlToWebsocketUrl(inputUrl);
}

int get extruderMinTemperature =>
Expand Down Expand Up @@ -132,9 +129,7 @@ class PrintersEditViewModel extends BaseViewModel {
var printerName = _fbKey.currentState!.value['printerName'];
var printerAPIKey = _fbKey.currentState!.value['printerApiKey'];
var printerUrl = _fbKey.currentState!.value['printerUrl'];
if (!Uri.parse(printerUrl).hasScheme) {
printerUrl = 'ws://$printerUrl/websocket';
}
printerUrl = urlToWebsocketUrl(printerUrl);
_saveAllCams();
_saveAllPresets();
printerSetting
Expand Down
24 changes: 22 additions & 2 deletions lib/util/misc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,25 @@ import 'package:mobileraker/app/AppSetup.locator.dart';
import 'package:stacked_services/stacked_services.dart';

void showWIPSnackbar() {
locator<SnackbarService>().showSnackbar(title: 'Dev-Message',message: "WIP!... Not implemented yet.");
}
locator<SnackbarService>().showSnackbar(
title: 'Dev-Message', message: "WIP!... Not implemented yet.");
}

String urlToWebsocketUrl(String enteredURL) {

var parse = Uri.tryParse(enteredURL);
if (parse == null) return enteredURL;
if (!parse.hasScheme)
parse = Uri.tryParse('ws://$enteredURL/websocket');
else if (parse.isScheme('http'))
parse = parse.replace(scheme: 'ws');
else if (parse.isScheme('https')) parse = parse.replace(scheme: 'wss');

return parse.toString();

// var parse = Uri.tryParse(enteredURL);
//
// return (parse?.hasScheme ?? false)
// ? enteredURL
// : 'ws://$enteredURL/websocket';
}

0 comments on commit 7f97537

Please sign in to comment.