Skip to content

Commit

Permalink
* Added edit menu
Browse files Browse the repository at this point in the history
* Added ability to add webcams (For now only the first one will work)
  • Loading branch information
Clon1998 committed Aug 5, 2021
1 parent 5dd3486 commit 1063f06
Show file tree
Hide file tree
Showing 14 changed files with 384 additions and 37 deletions.
4 changes: 4 additions & 0 deletions lib/app/AppSetup.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,15 @@ import 'package:hive_flutter/hive_flutter.dart';
import 'package:logger/logger.dart';
import 'package:mobileraker/WebSocket.dart';
import 'package:mobileraker/dto/machine/PrinterSetting.dart';
import 'package:mobileraker/dto/machine/WebcamSetting.dart';
import 'package:mobileraker/service/KlippyService.dart';
import 'package:mobileraker/service/PrinterService.dart';
import 'package:mobileraker/service/PrinterSettingsService.dart';
import 'package:mobileraker/service/SelectedMachineService.dart';
import 'package:mobileraker/ui/dialog/editForm/editForm_view.dart';
import 'package:mobileraker/ui/overview/overview_view.dart';
import 'package:mobileraker/ui/printers/add/printers_add_view.dart';
import 'package:mobileraker/ui/printers/edit/printers_edit_view.dart';
import 'package:mobileraker/ui/printers/printers_view.dart';
import 'package:mobileraker/ui/setting/setting_view.dart';
import 'package:mobileraker/ui/test_view.dart';
Expand All @@ -28,6 +30,7 @@ import 'AppSetup.locator.dart';
CupertinoRoute(page: SettingView),
CupertinoRoute(page: Printers),
MaterialRoute(page: PrintersAdd),
MaterialRoute(page: PrintersEdit),
], dependencies: [
LazySingleton(classType: NavigationService),
LazySingleton(classType: SnackbarService),
Expand All @@ -49,6 +52,7 @@ registerPrinters() async {
openBoxes() async {
await Hive.initFlutter();
Hive.registerAdapter(PrinterSettingAdapter());
Hive.registerAdapter(WebcamSettingAdapter());
// Hive.deleteBoxFromDisk('printers');
await Future.wait([
Hive.openBox<PrinterSetting>('printers'),
Expand Down
13 changes: 7 additions & 6 deletions lib/dto/machine/PrinterSetting.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:hive/hive.dart';
import 'package:mobileraker/WebSocket.dart';
import 'package:mobileraker/dto/machine/WebcamSetting.dart';
import 'package:mobileraker/service/KlippyService.dart';
import 'package:mobileraker/service/PrinterService.dart';
import 'package:uuid/uuid.dart';
Expand All @@ -14,30 +15,29 @@ class PrinterSetting extends HiveObject {
String wsUrl;
@HiveField(2)
String uuid = Uuid().v4();
@HiveField(3)
List<WebcamSetting> cams = List.empty(growable: true);

WebSocketWrapper? _webSocket;

WebSocketWrapper get websocket {
if (_webSocket == null)
_webSocket =
WebSocketWrapper(wsUrl, Duration(seconds: 5));
_webSocket = WebSocketWrapper(wsUrl, Duration(seconds: 5));

return _webSocket!;
}

PrinterService? _printerService;

PrinterService get printerService {
if (_printerService == null)
_printerService = PrinterService(websocket);
if (_printerService == null) _printerService = PrinterService(websocket);
return _printerService!;
}

KlippyService? _klippyService;

KlippyService get klippyService {
if (_klippyService == null)
_klippyService = KlippyService(websocket);
if (_klippyService == null) _klippyService = KlippyService(websocket);
return _klippyService!;
}

Expand All @@ -48,6 +48,7 @@ class PrinterSetting extends HiveObject {
await super.delete();
_printerService?.printerStream.close();
_klippyService?.klipperStream.close();
_webSocket?.reset();
_webSocket?.stateStream.close();
return;
}
Expand Down
25 changes: 25 additions & 0 deletions lib/dto/machine/WebcamSetting.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import 'package:hive_flutter/hive_flutter.dart';
import 'package:uuid/uuid.dart';

part 'WebcamSetting.g.dart';

@HiveType(typeId: 2)
class WebcamSetting {
@HiveField(0)
String name;
@HiveField(1)
String uuid = Uuid().v4();
@HiveField(2)
String url;
@HiveField(3)
bool flipHorizontal = false;
@HiveField(4)
bool flipVertical = false;

WebcamSetting(this.name, this.url);

@override
String toString() {
return 'WebcamSetting{name: $name, uuid: $uuid, url: $url, flipHorizontal: $flipHorizontal, flipVertical: $flipVertical}';
}
}
2 changes: 1 addition & 1 deletion lib/service/PrinterService.dart
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ class PrinterService {
if (virtualSDJson.containsKey('is_active'))
printer.virtualSdCard.isActive = virtualSDJson['is_active'];
if (virtualSDJson.containsKey('file_position'))
printer.virtualSdCard.filePosition = virtualSDJson['file_position'];
printer.virtualSdCard.filePosition = int.parse(virtualSDJson['file_position'].toString());
}

_updatePrintStat(Map<String, dynamic> printStatJson, {Printer? printer}) {
Expand Down
5 changes: 5 additions & 0 deletions lib/ui/drawer/nav_drawer_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ class NavigationDrawerWidget extends StatelessWidget {
padding: EdgeInsets.symmetric(horizontal: 00),
child: Column(
children: [
// Divider(),
// ExpansionTile(title: const Text('Change Printer', style: TextStyle(color: Colors.white),),
// children: [],
// ),
// Divider(),
buildMenuItem(
model,
text: 'Overview',
Expand Down
23 changes: 14 additions & 9 deletions lib/ui/overview/overview_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,10 @@ class OverView extends StatelessWidget {
return ViewModelBuilder<OverViewModel>.reactive(
builder: (context, model, child) => Scaffold(
appBar: AppBar(
title: Text(model.title, overflow: TextOverflow.fade,),
title: Text(
model.title,
overflow: TextOverflow.fade,
),
actions: <Widget>[
IconButton(
icon: Icon(Icons.radio_button_on,
Expand Down Expand Up @@ -367,13 +370,15 @@ class CamCard extends ViewModelWidget<OverViewModel> {
),
Padding(
padding: const EdgeInsets.fromLTRB(8, 8, 8, 15),
child: Transform(
alignment: Alignment.center,
transform: matrix4,
child: Mjpeg(
isLive: true,
stream: model.webCamUrl,
))),
child: (model.webCamUrl == null)
? Center(child: Text('You will have to add a cam first!'))
: Transform(
alignment: Alignment.center,
transform: matrix4,
child: Mjpeg(
isLive: true,
stream: model.webCamUrl!,
))),
],
),
);
Expand Down Expand Up @@ -417,7 +422,7 @@ class HeaterCard extends ViewModelWidget<OverViewModel> {
title: Text('Heaters'),
),
Padding(
padding: const EdgeInsets.fromLTRB(0, 0, 0, 15),
padding: const EdgeInsets.only(top: 15),
child: Table(
border: TableBorder(
horizontalInside: BorderSide(
Expand Down
20 changes: 15 additions & 5 deletions lib/ui/overview/overview_viewmodel.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import 'package:mobileraker/app/AppSetup.locator.dart';
import 'package:mobileraker/app/AppSetup.router.dart';
import 'package:mobileraker/dto/machine/Printer.dart';
import 'package:mobileraker/dto/machine/PrinterSetting.dart';
import 'package:mobileraker/dto/machine/WebcamSetting.dart';
import 'package:mobileraker/dto/server/Klipper.dart';
import 'package:mobileraker/service/KlippyService.dart';
import 'package:mobileraker/service/PrinterService.dart';
Expand Down Expand Up @@ -56,12 +57,21 @@ class OverViewModel extends MultipleStreamViewModel {
_selectedMachineService.selectedPrinter.hasValue;

String get title =>
'${_selectedMachineService.selectedPrinter.valueOrNull?.name??'Printer'} - Dashboard';
'${_selectedMachineService.selectedPrinter.valueOrNull?.name ?? 'Printer'} - Dashboard';

String get webCamUrl => 'http://192.168.178.135/webcam/?action=stream'; //TODO
WebcamSetting? _camHack() {
if (_printerSetting != null && _printerSetting!.cams.isNotEmpty) {
return _printerSetting?.cams.first;
}
return null;
}

String? get webCamUrl {
return _camHack()?.url;
}

double get webCamYSwap {
var vertical = Settings.getValue('webcam.swap-vertical', false);
var vertical = _camHack()?.flipVertical?? false;

if (vertical)
return pi;
Expand All @@ -70,9 +80,9 @@ class OverViewModel extends MultipleStreamViewModel {
}

double get webCamXSwap {
var vertical = Settings.getValue('webcam.swap-horizontal', false);
var horizontal = _camHack()?.flipVertical?? false;

if (vertical)
if (horizontal)
return pi;
else
return 0;
Expand Down
2 changes: 1 addition & 1 deletion lib/ui/printers/add/printers_add_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ class PrintersAdd extends StatelessWidget {
Text('Result: ${model.wsResult}'),
Spacer(flex: 30),
ElevatedButton(
onPressed: (model.dataReady && model.data != WebSocketState.connecting)? model.onTestConnectionTap:null,
onPressed: (model.data != WebSocketState.connecting)? model.onTestConnectionTap:null,
child: Text('Test'))
],
),
Expand Down
9 changes: 3 additions & 6 deletions lib/ui/printers/add/printers_add_viewmodel.dart
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,9 @@ class PrintersAddViewModel extends StreamViewModel<WebSocketState> {

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

onUrlEntered(value) {
Expand All @@ -79,7 +77,6 @@ class PrintersAddViewModel extends StreamViewModel<WebSocketState> {
printerUrl = 'ws://$printerUrl/websocket';
}
var printerSetting = PrinterSetting(printerName, printerUrl);
print('$printerUrl');
_printerSettingService
.addPrinter(printerSetting)
.then((value) => _navigationService.popUntil((route) {
Expand Down
5 changes: 3 additions & 2 deletions lib/ui/printers/components/printers_slidable_viewmodel.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'package:flutter/widgets.dart';
import 'package:flutter_slidable/flutter_slidable.dart';
import 'package:hive/hive.dart';
import 'package:mobileraker/app/AppSetup.locator.dart';
import 'package:mobileraker/app/AppSetup.router.dart';
import 'package:mobileraker/dto/machine/Printer.dart';
import 'package:mobileraker/dto/machine/PrinterSetting.dart';
import 'package:mobileraker/dto/server/Klipper.dart';
Expand All @@ -16,7 +17,7 @@ const String _SelectedPrinterStreamKey = 'selectedPrinter';
const String _ServerStreamKey = 'server';

class PrintersSlidableViewModel extends MultipleStreamViewModel {
final _snackbarService = locator<SnackbarService>();
final _navigationService = locator<NavigationService>();
final _printerSettingsService = locator<PrinterSettingsService>();
final _selectedMachineService = locator<SelectedMachineService>();

Expand All @@ -37,7 +38,7 @@ class PrintersSlidableViewModel extends MultipleStreamViewModel {
}

onEditTap() {
_snackbarService.showSnackbar(message: "WIP!... Not yet implemented.");
_navigationService.navigateTo(Routes.printersEdit, arguments: PrintersEditArguments(printerSetting: _printerSetting));
}

onSetActiveTap() {
Expand Down
Loading

0 comments on commit 1063f06

Please sign in to comment.