From 77dc91ec7f2d13ca3373696a4ff21e61c5798ed1 Mon Sep 17 00:00:00 2001 From: mesut-pehlivan Date: Fri, 22 Jan 2016 10:21:01 +0100 Subject: [PATCH 01/30] Testing gitkraken branch --- www/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/index.html b/www/index.html index be4f3d8..9e2966a 100644 --- a/www/index.html +++ b/www/index.html @@ -53,7 +53,7 @@ From 2001e9d239c79c22a15c3d551bad06f624b76620 Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Sat, 21 May 2016 23:42:33 +0200 Subject: [PATCH 02/30] Create README.md --- README.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..7304662 --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +# doodle3d-connect +The Doodle3D connect system allows users / applications to find their Doolde3D WiFi-Box(es) on the same WiFi network. The benefit over other systems is that this doesn't require an application with Bonjour-like support, it can be used by a website using Javascript. Visit http://connect.doodle3d.com to scan your local network for Doodle3D WiFi-Boxes. + +![Diagram of doodle3d-connect](https://cloud.githubusercontent.com/assets/156066/15450961/519baea0-1fad-11e6-9b58-9ca597db0a55.png) + +#Server +The Doodle3D connect server has an api with 2 methods: + +##list + +Retrieve a list of connected WiFi-Boxes that are on the same remote IP and that signed-in less than an hour ago. The remote IP is the IP adres you're behind on the internet. Usually when you're on a network all devices on that network have the same remote IP. It returns the following information per WiFi-Box: + +id: The unique identifier per box, which is a combination of it's remote IP and local IP. +remoteip: The remote IP of the box. +localip: The local IP of the box. (Web)App's can access WiFi-Boxes behind this IP. +wifiboxid: The human readable identifier, that is usually displayed to the user. +hidden: This is planned feature. When a box is hidden the connect interface can hide the box and have users enter the wifiboxid before it releases the information. +data: Sign-in date. +Current url: http://connect.doodle3d.com/api/list.php +Example url: http://connect.doodle3d.com/api/list.example + +##signin + +Used to sign-in into the connect system. Requires: + +localip: The local IP of the WiFi-Box on the local network. +wifiboxid: A custom human readable name to identify the WiFi-Box. +From the request it will determine the remote IP and the date. This request will also remove sign-ins from more than an hour ago. + +#WiFi-Box +The WiFi-Box will perform a scan for WiFi networks, when a known network is available it will join this network. When no known network is found it will become a access point. This means a fresh WiFi-Box will always become a access point. +When a WiFi network is joined the WiFi-Box will attempt to Sign-in, when this fails it will retry a couple of times. From then on it will attempt a sign-in every 15 minutes. It also attempt a sign-in when the wifibox id is changed. + +The WiFi-Box has a couple of API methods required for the connect system: + +network/alive. A very simple method that doesn't contain any logic or info. It's just something (Web)App's can query to check whether there is something behind a local IP adres. Similar to a ping. + +#(Web)App +(Web)Apps can use the connect system to find WiFi-Boxes on the same network. +They continuely query the list api method to retrieve local WiFi-Boxes information. Because the server can't know their current status the (Wep)App should query the alive api method of the WiFi-Boxes. When it get's a valid response the WiFi-Box can be shown to the user. Besides querying the boxes it retrieves through the list api The Web(App) should also continuesly query the alive method of boxes that are already shown. To make this easier for (Wep)App developers we created a JavaScript library that handles this; ConnectAPI.js. From e1c078dbd016aa36c62585c4296b6ee002eb5c5a Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Sun, 22 May 2016 00:05:04 +0200 Subject: [PATCH 03/30] Update README.md --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 7304662..fc9f234 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,14 @@ # doodle3d-connect The Doodle3D connect system allows users / applications to find their Doolde3D WiFi-Box(es) on the same WiFi network. The benefit over other systems is that this doesn't require an application with Bonjour-like support, it can be used by a website using Javascript. Visit http://connect.doodle3d.com to scan your local network for Doodle3D WiFi-Boxes. +The following image shows a typical doodle3d-connect page. The most common way to get here is: + +1. with an active internet connection visit http://connect.doodle3d.com +2. connect to a Doodle3D-123456 WiFi accesspoint. +3. wait a couple of seconds. Your WiFi-Box should appear in the list. + +![connect.doodle3d.com](https://cloud.githubusercontent.com/assets/156066/15451030/645fd5ae-1fb0-11e6-9521-e2271c1d2bc5.png) + ![Diagram of doodle3d-connect](https://cloud.githubusercontent.com/assets/156066/15450961/519baea0-1fad-11e6-9b58-9ca597db0a55.png) #Server From cef57d117e5910dc3b951318ffe06e92f17cfcc1 Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Sun, 22 May 2016 00:05:55 +0200 Subject: [PATCH 04/30] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index fc9f234..e942899 100644 --- a/README.md +++ b/README.md @@ -9,9 +9,8 @@ The following image shows a typical doodle3d-connect page. The most common way t ![connect.doodle3d.com](https://cloud.githubusercontent.com/assets/156066/15451030/645fd5ae-1fb0-11e6-9521-e2271c1d2bc5.png) -![Diagram of doodle3d-connect](https://cloud.githubusercontent.com/assets/156066/15450961/519baea0-1fad-11e6-9b58-9ca597db0a55.png) - #Server +![Diagram of doodle3d-connect](https://cloud.githubusercontent.com/assets/156066/15450961/519baea0-1fad-11e6-9b58-9ca597db0a55.png) The Doodle3D connect server has an api with 2 methods: ##list From 29e9b773919df6c1ee2a2c0ca21aff309e0e0cd5 Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Sun, 22 May 2016 00:07:24 +0200 Subject: [PATCH 05/30] Update README.md --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index e942899..35bd3e2 100644 --- a/README.md +++ b/README.md @@ -9,11 +9,13 @@ The following image shows a typical doodle3d-connect page. The most common way t ![connect.doodle3d.com](https://cloud.githubusercontent.com/assets/156066/15451030/645fd5ae-1fb0-11e6-9521-e2271c1d2bc5.png) -#Server +#How does it work? ![Diagram of doodle3d-connect](https://cloud.githubusercontent.com/assets/156066/15450961/519baea0-1fad-11e6-9b58-9ca597db0a55.png) + +##Server The Doodle3D connect server has an api with 2 methods: -##list +###list Retrieve a list of connected WiFi-Boxes that are on the same remote IP and that signed-in less than an hour ago. The remote IP is the IP adres you're behind on the internet. Usually when you're on a network all devices on that network have the same remote IP. It returns the following information per WiFi-Box: @@ -26,7 +28,7 @@ data: Sign-in date. Current url: http://connect.doodle3d.com/api/list.php Example url: http://connect.doodle3d.com/api/list.example -##signin +###signin Used to sign-in into the connect system. Requires: @@ -34,7 +36,7 @@ localip: The local IP of the WiFi-Box on the local network. wifiboxid: A custom human readable name to identify the WiFi-Box. From the request it will determine the remote IP and the date. This request will also remove sign-ins from more than an hour ago. -#WiFi-Box +##WiFi-Box The WiFi-Box will perform a scan for WiFi networks, when a known network is available it will join this network. When no known network is found it will become a access point. This means a fresh WiFi-Box will always become a access point. When a WiFi network is joined the WiFi-Box will attempt to Sign-in, when this fails it will retry a couple of times. From then on it will attempt a sign-in every 15 minutes. It also attempt a sign-in when the wifibox id is changed. @@ -42,6 +44,6 @@ The WiFi-Box has a couple of API methods required for the connect system: network/alive. A very simple method that doesn't contain any logic or info. It's just something (Web)App's can query to check whether there is something behind a local IP adres. Similar to a ping. -#(Web)App +##(Web)App (Web)Apps can use the connect system to find WiFi-Boxes on the same network. They continuely query the list api method to retrieve local WiFi-Boxes information. Because the server can't know their current status the (Wep)App should query the alive api method of the WiFi-Boxes. When it get's a valid response the WiFi-Box can be shown to the user. Besides querying the boxes it retrieves through the list api The Web(App) should also continuesly query the alive method of boxes that are already shown. To make this easier for (Wep)App developers we created a JavaScript library that handles this; ConnectAPI.js. From 1aeee5bdd25d7cf48b4e1816179e8a560831f1b0 Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Sun, 22 May 2016 00:10:54 +0200 Subject: [PATCH 06/30] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 35bd3e2..2c2dfbb 100644 --- a/README.md +++ b/README.md @@ -47,3 +47,7 @@ network/alive. A very simple method that doesn't contain any logic or info. It's ##(Web)App (Web)Apps can use the connect system to find WiFi-Boxes on the same network. They continuely query the list api method to retrieve local WiFi-Boxes information. Because the server can't know their current status the (Wep)App should query the alive api method of the WiFi-Boxes. When it get's a valid response the WiFi-Box can be shown to the user. Besides querying the boxes it retrieves through the list api The Web(App) should also continuesly query the alive method of boxes that are already shown. To make this easier for (Wep)App developers we created a JavaScript library that handles this; ConnectAPI.js. + +#Future & Alternatives +* [Network Service Discovery API - doodle3d-client/issues/248](https://github.com/Doodle3D/doodle3d-client/issues/248) +* [Scanning local network - doodle3d-client/issues/250](https://github.com/Doodle3D/doodle3d-client/issues/250) From acee284fb60c13f3b538f5ceb992da5186ffc0d2 Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Thu, 13 Apr 2017 12:08:08 +0200 Subject: [PATCH 07/30] updated instructions and added videos --- less/styles.less | 1 + www/index.html | 110 +++++++++++++++++++++++++++++++++-------------- 2 files changed, 79 insertions(+), 32 deletions(-) diff --git a/less/styles.less b/less/styles.less index 9a0ebc0..69d7c80 100644 --- a/less/styles.less +++ b/less/styles.less @@ -1,6 +1,7 @@ body.ui-mobile-viewport { margin: 0 auto; max-width: 1024px; + /*font-family: 'Abel', sans-serif;*/ } #logo { diff --git a/www/index.html b/www/index.html index 9e2966a..44f3a57 100644 --- a/www/index.html +++ b/www/index.html @@ -3,25 +3,26 @@ Doodle3D Connect + - - + + - + - - - - - + + - - + + + + + @@ -29,16 +30,24 @@
-

makes 3D printing very easy

+ +
+

Let's connect to your Doodle3D WiFi-Box

+

This webpage helps you to find your Doodle3D WiFi-Box on your local network.

+

1) If your WiFi-Box is already connected to your home network it should be listed below.

+

2) If not it might be running it's own WiFi network (for example Doodle3D-123456) you can now connect to by changing your WiFi-settings.

+
+

WiFi-Boxes

-
- +
+ + + @@ -67,18 +76,40 @@

Find WiFi-Box

-

Find your box's WiFi network

-

The Doodle3D WiFi-Box you're looking for is probably running it's own WiFi network. Please open your network settings and connect to a network like Doodle3D-... and return to the WiFi-boxes page (More info).

-

Connect to the same WiFi network

-

Please make sure that you're connected to the same WiFi network the WiFi-Box is connected to.

-

Can't find your WiFi-Box?

-

Please make sure that:

-
    -
  • The box gets power (the big green light should be on).
  • -
  • The box has fully started (the big green light stopped blinking)
  • -
-

You can always connect to it using an ethernet cable (more info).

-

If the problems remains, please E-mail us at help@doodle3d.com

+

Connect to your WiFi-Box for the first time...

+

This video shows you how to connect to your Doodle3D WiFi-Box step by step.

+ + +

How does it work?

+

The WiFi-Box can run in two different modes:
+

  1. It can connect to an existing WiFi network, that's called Client mode.
  2. +
  3. It can also create it's own network which is called AccessPoint mode.
  4. +
+ A new WiFi-Box always starts in AccessPoint mode because it doesn't know your network yet, right?
+ Also when the WiFi-Box can't find or can't connect to your home network it should fall back to AccessPoint mode.
+ If the WiFi-Box is in AccessPoint mode you should be able to see it's WiFi network in your computer/tablet's WiFi-settings.

+ +

How to let the WiFi-Box join your local network?

+ Once you are connected to the WiFi-Box in AccessPoint mode you can help your WiFi-Box join your local network as a 'Client'. This has two advantages: +
    +
  1. The WiFi-Box can download updates and security updates from doodle3d.com
  2. +
  3. You don't have to switch between your home network and the AccessPoint all the time.
  4. +
+

This movie shows how to have the WiFi-Box join your home network and download an update.

+ + +

What's the network cable for?

+

If you really can't or don't want to connect to the WiFi-Box using WiFi you can use the network cable. Connect the WiFi-Box directly to your computer (not to your router) and go back to the connect.doodle3d.com page.

+ +

Need more help?

+

Please read our FAQ for more frequently asked questions.
If you're really stuck feel free to contact us at help@doodle3d.com.
You can also live chat with us during European office hours.

+ +

Go back to connect.doodle3d.com

+ + + +
+ @@ -232,11 +263,26 @@ - + + + + + + \ No newline at end of file From 7ad25514a829f79e530d2a3cd2e96340bbaf9eb7 Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Thu, 13 Apr 2017 12:11:01 +0200 Subject: [PATCH 08/30] typo --- www/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/index.html b/www/index.html index 44f3a57..7a888ea 100644 --- a/www/index.html +++ b/www/index.html @@ -35,7 +35,7 @@

Let's connect to your Doodle3D WiFi-Box

This webpage helps you to find your Doodle3D WiFi-Box on your local network.

1) If your WiFi-Box is already connected to your home network it should be listed below.

-

2) If not it might be running it's own WiFi network (for example Doodle3D-123456) you can now connect to by changing your WiFi-settings.

+

2) If not it might be running its own WiFi network (for example Doodle3D-123456). You can connect to it by changing your WiFi-settings.

From f1267b93cee39156620054fd7d97e6bd3f0d45a8 Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Thu, 20 Apr 2017 10:33:49 +0200 Subject: [PATCH 09/30] fixed link to talkus chat window --- www/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/index.html b/www/index.html index 7a888ea..8ac6d5d 100644 --- a/www/index.html +++ b/www/index.html @@ -102,7 +102,7 @@

If you really can't or don't want to connect to the WiFi-Box using WiFi you can use the network cable. Connect the WiFi-Box directly to your computer (not to your router) and go back to the connect.doodle3d.com page.

Need more help?

-

Please read our FAQ for more frequently asked questions.
If you're really stuck feel free to contact us at help@doodle3d.com.
You can also live chat with us during European office hours.

+

Please read our FAQ for more frequently asked questions.
If you're really stuck feel free to contact us at help@doodle3d.com.
You can also live chat with us during European office hours.

Go back to connect.doodle3d.com

From e9da8a91f04553f1e000d454490f014038e2a899 Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Tue, 16 May 2017 09:55:32 +0200 Subject: [PATCH 10/30] loading and showing settings --- Gruntfile.js | 1 + js/BoxPage.js | 11 +++- js/SettingsPage.js | 129 +++++++++++++++++++++++++++++++++++++++++++ js/api/ConfigAPI.js | 11 ++++ js/api/PrinterAPI.js | 49 ++++++++++++++++ www/index.html | 110 +++++++++++++++++++++++++++++++++++- 6 files changed, 307 insertions(+), 4 deletions(-) create mode 100644 js/SettingsPage.js create mode 100644 js/api/PrinterAPI.js diff --git a/Gruntfile.js b/Gruntfile.js index f9c8786..5c44197 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -99,6 +99,7 @@ module.exports = function(grunt) { NetworkAPI: true, InfoAPI: true, ConfigAPI: true, + PrinterAPI: true, UpdateAPI:true, addToHomescreen: true }, diff --git a/js/BoxPage.js b/js/BoxPage.js index 26bcd6f..02aeb91 100644 --- a/js/BoxPage.js +++ b/js/BoxPage.js @@ -13,6 +13,7 @@ var _intro; var _drawItem; var _updateItem; + var _settingsItem; var _joinNetworkItem; var _defaultItems; @@ -36,6 +37,7 @@ _defaultItems = _list.children(); _drawItem = _list.find("#drawItem"); _updateItem = _list.find("#updateItem"); + _settingsItem = _list.find("#settingsItem"); _joinNetworkItem = _list.find("#joinNetworkItem"); // make sure draw link is opened in same WebApp (added to homescreen) @@ -82,7 +84,7 @@ var introText = ""; if(status === NetworkAPI.STATUS.CONNECTED) { // online //console.log("online"); - _drawItem.find("a").text("Draw"); + _drawItem.find("a").text("Draw / Sketch"); // display the right buttons _defaultItems.toggleClass("ui-screen-hidden",false); @@ -92,13 +94,18 @@ updateLink = d3d.util.replaceURLParameters(updateLink,_boxData); _updateItem.find("a").attr("href",updateLink); + //settingsLink + var settingsLink = _settingsItem.find("a").attr("href"); + settingsLink = d3d.util.replaceURLParameters(settingsLink,_boxData); + _settingsItem.find("a").attr("href",settingsLink); + retrieveUpdateStatus(); } else { // offline //console.log("offline"); introText = "Please connect your WiFi-Box to the internet. You can also use it offline, but then you won't be able to update."; - _drawItem.find("a").text("Draw (offline)"); + _drawItem.find("a").text("Draw / Sketch (offline)"); // display the right buttons _defaultItems.toggleClass("ui-screen-hidden",true); diff --git a/js/SettingsPage.js b/js/SettingsPage.js new file mode 100644 index 0000000..f532a03 --- /dev/null +++ b/js/SettingsPage.js @@ -0,0 +1,129 @@ +/* + * This file is part of the Doodle3D project (http://doodle3d.com). + * + * Copyright (c) 2013, Doodle3D + * This software is licensed under the terms of the GNU GPL v2 or later. + * See file LICENSE.txt or visit http://www.gnu.org/licenses/gpl.html for full license details. + */ + +(function (w) { + var _page; + var _form; + var _statusField; + var _infoField; + var _noRetainCheckbox; + var _includeBetasCheckbox; + var _submitButton; + + var _updateAPI = new UpdateAPI(); + var _configAPI = new ConfigAPI(); + var _printerAPI = new PrinterAPI(); + var _pageData = {}; + var _updateStatus = {}; + + var PAGE_ID = "#settings"; + + var _self = this; + + function updateFields() { + var isHeatedBed = $("#chkBed").prop("checked"); + if (isHeatedBed) { + $("#grpBedTemp").show(); + } else { + $("#grpBedTemp").hide(); + } + } + + $.mobile.document.on( "pageinit", PAGE_ID, function( event, data ) { + console.log(PAGE_ID+":pageinit"); + + _page = $(this); + + $("#divSettings").hide(); + d3d.util.showLoader(); + + $("#chkBed").on("change", function(data) { + updateFields(); + }); + + $("#filamentThickness").on("change", function(data) { + console.log("filamentThickness change",$(this).val()); + }); + + $("#bedTemperature").on("change", function(data) { + console.log("bedTemperature change",$(this).val()); + }); + }); + + $.mobile.document.on( "pagebeforeshow", PAGE_ID, function( event, data ) { + _pageData = d3d.util.getPageParams(PAGE_ID); + + if(_pageData === undefined) { + console.log("ERROR",PAGE_ID,"_pageData undefined"); + $.mobile.changePage("#boxes"); + return; + } + var boxURL = "http://"+_pageData.localip; + + _configAPI.init(boxURL); + _printerAPI.init(boxURL); + + + _configAPI.loadAll(function(successData) { + var printerType = successData["printer.type"]; + var printerStartGCode = successData["printer.startcode"]; + var printerEndGCode = successData["printer.endcode"]; + var heatedBedEnabled = successData["printer.heatedbed"]; + var bedTemperature = successData["printer.bed.temperature"]; + var dimensionsX = successData["printer.dimensions.x"]; + var dimensionsY = successData["printer.dimensions.y"]; + var dimensionsZ = successData["printer.dimensions.z"]; + var filamentThickness = successData["printer.filamentThickness"]; + var nozzleTemperature = successData["printer.temperature"]; + + $('#chkBed').prop('checked', heatedBedEnabled); + $('#chkBed').val('on').flipswitch('refresh'); + $('#bedTemperature').val(bedTemperature); + $('#dimensionsX').val(dimensionsX); + $('#dimensionsY').val(dimensionsY); + $('#dimensionsZ').val(dimensionsZ); + $('#filamentThickness').val(filamentThickness); + $('#startgcode').val(printerStartGCode); + $('#endgcode').val(printerEndGCode); + $('#nozzleTemperature').val(nozzleTemperature); + + _printerAPI.listAll(function(printers) { + console.log(PAGE_ID,'page init',data); + + $("#lstPrinters").empty(); + + for (var id in printers) { + var selected = (id===printerType) ? "selected " : ""; + $("#lstPrinters").append(""); + } + + $("#lstPrinters").selectmenu("refresh", true); + + $("#divSettings").show(); + d3d.util.hideLoader(); + + },function(failData) { //_printerAPI.listAll + console.log(PAGE_ID,'FAIL _printerAPI.listall',data); + $.mobile.changePage("#boxes"); + return; + }); + + },function(failData) { + console.log("FAIL loadPrinterType",failData); + $.mobile.changePage("#boxes"); + return; + }); + + }); + + $.mobile.document.on( "pagebeforehide", PAGE_ID, function( event, data ) { + + }); + +})(window); + diff --git a/js/api/ConfigAPI.js b/js/api/ConfigAPI.js index 3d93a15..612a1b5 100644 --- a/js/api/ConfigAPI.js +++ b/js/api/ConfigAPI.js @@ -61,6 +61,17 @@ function ConfigAPI() { if(failedHandler) failedHandler(); }); }; + + this.loadSetting = function(settingName,completeHandler,failedHandler) { + this.load(settingName+"=",function(successData) { + completeHandler(successData[settingName]); + },failedHandler); + } + + this.loadPrinterType = function(completeHandler,failedHandler) { + this.loadSetting("printer.type",completeHandler,failedHandler); + } + this.save = function(newSettings,completeHandler,failedHandler) { //console.log("ConfigAPI:save"); $.ajax({ diff --git a/js/api/PrinterAPI.js b/js/api/PrinterAPI.js new file mode 100644 index 0000000..cd044ce --- /dev/null +++ b/js/api/PrinterAPI.js @@ -0,0 +1,49 @@ +/* + * This file is part of the Doodle3D project (http://doodle3d.com). + * + * Copyright (c) 2013, Doodle3D + * This software is licensed under the terms of the GNU GPL v2 or later. + * See file LICENSE.txt or visit http://www.gnu.org/licenses/gpl.html for full license details. + */ + +function PrinterAPI() { + + var _apiPath = "/d3dapi"; + var _apiCGIPath = "/cgi-bin"+_apiPath; + var _wifiboxURL; + var _wifiboxCGIBinURL; + + var _timeoutTime = 3000; + + var _configAPI = new ConfigAPI(); // needed for wifiboxid workaround + + var _self = this; + + this.init = function(wifiboxURL) { + console.log("InfoAPI:init"); + + _wifiboxURL = wifiboxURL+_apiPath; + _wifiboxCGIBinURL = wifiboxURL+_apiCGIPath; + _configAPI.init(wifiboxURL); + } + + this.listAll = function(completeHandler,failedHandler) { + console.log("listAll",_wifiboxURL); + + $.ajax({ + url: _wifiboxURL + "/printer/listall", + type: "GET", + dataType: 'json', + timeout: _timeoutTime, + success: function(response){ + if(response.status == "error" || response.status == "fail") { + if(failedHandler) failedHandler(response); + } else { + completeHandler(response.data.printers); + } + } + }).fail(function() { + if(failedHandler) failedHandler(); + }); + }; +} \ No newline at end of file diff --git a/www/index.html b/www/index.html index 8ac6d5d..01b1abc 100644 --- a/www/index.html +++ b/www/index.html @@ -15,6 +15,10 @@ + + + + @@ -22,6 +26,7 @@ + @@ -61,9 +66,11 @@

@@ -263,6 +270,105 @@ +
+ +
+ Back +

Settings

+ +
+
+ + + + Save settings + + + + + + + + +
+ +

Printer settings

+
+ + +
+ +
+ +      +      +
+ +
+ + +
+ +
+ +
+
+
+
+
+
+
+ +
+

Material settings

+ +
+ + +
+ +
+ + +
+
+ + +
+

GCODE settings

+
+ + +
+ +
+ + +
+ +
+

Help

+ + The following texts are replaced: +
+
{printingTemp}
Printing temperature
+
{printingBedTemp}
Printing bed temperature
+
{preheatTemp}
Preheat temperature
+
{preheatBedTemp}
Preheat bed temperature
+
{printerType}
Printer type
+
{if heatedBed}
Enable line if printer has heated bed
+
+
+
+
+ +
+
+ - + + - - - + From aa72ab757655d91fc5c237b009320d9b160840d6 Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Tue, 23 May 2017 13:00:47 +0200 Subject: [PATCH 16/30] rollback to http instead of https --- www/index.html | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/www/index.html b/www/index.html index 66f0c7e..5321890 100644 --- a/www/index.html +++ b/www/index.html @@ -14,12 +14,19 @@ - - + + + + + + + - + + + @@ -286,8 +293,8 @@ --> -      -      + +
From 5be5be9f40378f9e66d4ca2895508ec4ddd5c399 Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Tue, 11 Jul 2017 17:16:38 +0200 Subject: [PATCH 17/30] added icons --- www/img/icons/blank.png | Bin 0 -> 1102 bytes www/img/icons/gcode.png | Bin 0 -> 3786 bytes www/img/icons/material/rainbow.jpg | Bin 0 -> 19945 bytes www/img/icons/material/white.jpg | Bin 0 -> 27944 bytes www/img/icons/printers/doodle_dream.png | Bin 0 -> 16456 bytes www/img/icons/printers/list.txt | 52 ++++++++++++++++++ www/img/icons/printers/renkforce_rf100.png | Bin 0 -> 21366 bytes www/img/icons/printers/ultimaker.png | Bin 0 -> 26231 bytes www/img/icons/printers/ultimaker2.png | Bin 0 -> 18596 bytes www/img/icons/printers/ultimaker2go.png | Bin 0 -> 25023 bytes .../printers/ultimaker_original_plus.png | Bin 0 -> 26231 bytes www/img/icons/white.jpg | Bin 0 -> 27944 bytes www/img/icons/wifibox.jpg | Bin 0 -> 27472 bytes 13 files changed, 52 insertions(+) create mode 100644 www/img/icons/blank.png create mode 100644 www/img/icons/gcode.png create mode 100644 www/img/icons/material/rainbow.jpg create mode 100644 www/img/icons/material/white.jpg create mode 100644 www/img/icons/printers/doodle_dream.png create mode 100644 www/img/icons/printers/list.txt create mode 100644 www/img/icons/printers/renkforce_rf100.png create mode 100644 www/img/icons/printers/ultimaker.png create mode 100644 www/img/icons/printers/ultimaker2.png create mode 100644 www/img/icons/printers/ultimaker2go.png create mode 100644 www/img/icons/printers/ultimaker_original_plus.png create mode 100644 www/img/icons/white.jpg create mode 100755 www/img/icons/wifibox.jpg diff --git a/www/img/icons/blank.png b/www/img/icons/blank.png new file mode 100644 index 0000000000000000000000000000000000000000..4e5fc604f3bacb9efda84c921b18ce32f262bc57 GIT binary patch literal 1102 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 literal 0 HcmV?d00001 diff --git a/www/img/icons/material/rainbow.jpg b/www/img/icons/material/rainbow.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba1166e553bc4ce0729df7320a303f716faefc3c GIT binary patch literal 19945 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%0Afp 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 literal 0 HcmV?d00001 diff --git a/www/img/icons/material/white.jpg b/www/img/icons/material/white.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ef65dde011a9fb8aac4096bdff25f4872fa1094 GIT binary patch literal 27944 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 PDyo4%6b*n6_oM&Wg%zp1 literal 0 HcmV?d00001 diff --git a/www/img/icons/printers/doodle_dream.png b/www/img/icons/printers/doodle_dream.png new file mode 100644 index 0000000000000000000000000000000000000000..7dec73ce1c89f138eba8deecaec3d768dfc5dd2f GIT binary patch literal 16456 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

!=p8o}reKsYW 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

    Uks)QgFh3pq(jh-L(=zkssLS->Kv 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

      Uks)QgFh3pq(jh-L(=zkssLS->Kv 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 PDyo4%6b*n6_oM&Wg%zp1 literal 0 HcmV?d00001 diff --git a/www/img/icons/wifibox.jpg b/www/img/icons/wifibox.jpg new file mode 100755 index 0000000000000000000000000000000000000000..d9d6ebcfc8f472d47ef9d3a74ceaf2d7673c2e67 GIT binary patch literal 27472 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 Date: Tue, 11 Jul 2017 17:17:06 +0200 Subject: [PATCH 18/30] added #print page and needed API interfaces --- Gruntfile.js | 1 + js/BoxPage.js | 22 ++++- js/PrintPage.js | 210 +++++++++++++++++++++++++++++++++++++++++++ js/api/InfoAPI.js | 18 ++++ js/api/PrinterAPI.js | 67 ++++++++++++++ js/api/ServerAPI.js | 82 +++++++++++++++++ js/main.js | 38 +++++++- less/styles.less | 15 +++- www/index.html | 55 +++++++++++- 9 files changed, 498 insertions(+), 10 deletions(-) create mode 100644 js/PrintPage.js create mode 100644 js/api/ServerAPI.js diff --git a/Gruntfile.js b/Gruntfile.js index 5c44197..7492534 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -101,6 +101,7 @@ module.exports = function(grunt) { ConfigAPI: true, PrinterAPI: true, UpdateAPI:true, + ServerAPI:true, addToHomescreen: true }, browser: true, diff --git a/js/BoxPage.js b/js/BoxPage.js index 1f336d6..1b4890c 100644 --- a/js/BoxPage.js +++ b/js/BoxPage.js @@ -118,11 +118,25 @@ _intro.text(introText); _intro.toggleClass("ui-screen-hidden",(introText === "")); + //printLink + var _printItem = _list.find("#printItem"); + var printLink = _printItem.find("a").attr("href"); + printLink = d3d.util.replaceURLParameters(printLink,_boxData); + _printItem.find("a").attr("href",printLink); + + + + if (d3d && d3d.pageParams && d3d.pageParams.uuid) { + _drawItem.hide(); + _printItem.show(); + } + + //settingsLink - var settingsLink = _settingsItem.find("a").attr("href"); - settingsLink = d3d.util.replaceURLParameters(settingsLink,_boxData); - _settingsItem.find("a").attr("href",settingsLink); - _settingsItem.toggleClass("ui-screen-hidden",false); + // var settingsLink = _settingsItem.find("a").attr("href"); + // settingsLink = d3d.util.replaceURLParameters(settingsLink,_boxData); + // _settingsItem.find("a").attr("href",settingsLink); + // _settingsItem.toggleClass("ui-screen-hidden",false); // ToDo: update footer with network info diff --git a/js/PrintPage.js b/js/PrintPage.js new file mode 100644 index 0000000..6108a23 --- /dev/null +++ b/js/PrintPage.js @@ -0,0 +1,210 @@ +/* + * This file is part of the Doodle3D project (http://doodle3d.com). + * + * Copyright (c) 2013-2017, Doodle3D + * This software is licensed under the terms of the GNU GPL v2 or later. + * See file LICENSE.txt or visit http://www.gnu.org/licenses/gpl.html for full license details. + */ + + (function (w) { + + var _serverAPI = new ServerAPI(); + var _connectAPI = new ConnectAPI(); + var _infoAPI = new InfoAPI(); + var _networkAPI = new NetworkAPI(); + var _printerAPI = new PrinterAPI(); + var _configAPI = new ConfigAPI(); + var PAGE_ID = "#print"; + var _pageData = {}; + var _self = this; + var _wifiboxSettings; + var _slicerSettings; + + $.mobile.document.on("pagebeforeshow", PAGE_ID, function( event, data ) { + _pageData = d3d.util.getPageParams(PAGE_ID); + + if(_pageData === undefined) { + console.log("ERROR",PAGE_ID,"_pageData undefined"); + $.mobile.changePage("#boxes"); + return; + } + var boxURL = "http://"+_pageData.localip; + + //disabled by default + $("#btnPrint").button().on("click", print); + $("#btnPrint").button('disable'); + + loadGCodeInfoFromServer(d3d.pageParams.uuid); + + _connectAPI.list(function(successData) { + console.log("_connectAPI.list success",successData); + $("#lstBoxes").empty(); + $("#lstBoxes").append($("")); + } + $("#lstBoxes").append($("")); + + $("#lstBoxes").selectmenu("refresh", true); + + if (_pageData.localip) { + onSelectWiFiBox(_pageData.localip); + } + + }, function(failData) { + console.log("_connectAPI.list failData",failData); + }); + + $("#lstBoxes").on("change", function(data) { + var ip = $(this).val(); + console.log("lstBoxes change",ip); + onSelectWiFiBox(ip); + }); + + }); + + $.mobile.document.on( "pagebeforehide", PAGE_ID, function( event, data ) { + _connectAPI.stop(); + }); + + function onSelectWiFiBox(ip) { + $("#infoWiFiBox").text(""); + + if (!ip) { + $("#btnPrint").button('disable'); + return; + } + else if (ip==="other") { + // redirect + $.mobile.changePage("#boxes"); + } else { + var boxURL = "http://"+ip; + _infoAPI.init(boxURL); + _networkAPI.init(boxURL); + _printerAPI.init(boxURL); + _configAPI.init(boxURL); + + _networkAPI.status(function(successData) { + console.log("network status",successData); + // $("#lstPrint li.boxItem p").text( + var netInfo = successData.statusMessage + " (" + successData.ssid + " @ " + successData.localip + ")"; + + _infoAPI.getStatus(function(successData) { + console.log(successData); + var state = successData.state; + if (state==="idle") { + state="ready"; + $("#btnPrint").button('enable'); + } + + var info = netInfo + " - Printer status: "; + info += ""+state+""; + $("#infoWiFiBox").html(info); + }, function(failData) { + console.log(failData); + $("#infoWiFiBox").html("failed to retrieve printer status from WiFi-Box"); + }); + + + }, function(failData) { + console.log("_networkAPI status failed",failData); + $("#infoWiFiBox").html("failed to retrieve network status from WiFi-Box"); + }); + + } + } + + function print() { + + _configAPI.loadAll(function(successData) { + _wifiboxSettings = successData; + var slicerPrinterType = _slicerSettings.type; + var wifiboxPrinterType = _wifiboxSettings["printer.type"]; + + if (slicerPrinterType!==wifiboxPrinterType) { + var override = window.confirm("The GCODE file was sliced for '"+slicerPrinterType+"'.\n"+ + "Your WiFi-Box is currently configured for '"+wifiboxPrinterType+"'\n\n"+ + "Do you want to override the settings on your WiFi-Box with the new settings from the slicer?"); + + if (override) { + // + _configAPI.savePrinterType(slicerPrinterType,function(successData) { + console.log(successData); + window.alert(successData.validation["printer.type"] + " (printer.type)"); + },function(failData) { + window.alert("Could not save printer type '",slicerPrinterType,"')' to WiFi-Box"); + }); + } + } + }); + + if (true) { + return; + } + + //var startcode = _configAPI.subsituteVariables(_wifiboxSettings["printer.startcode"],_wifiboxSettings); + //var endcode = _configAPI.subsituteVariables(_wifiboxSettings["printer.endcode"],_wifiboxSettings); + + var data = { + "id": d3d.pageParams.uuid, + // "start_code": startcode, + // "end_code": endcode + }; + + //console.log("fetchPrint",d3d.pageParams.uuid,data); + _printerAPI.fetch(data,function(successData) { + console.log("fetchPrint success",successData); + + var url = d3d.util.replaceURLParameters("#control",_pageData); + $.mobile.changePage(url); + + },function(failData) { + console.log("fetchPrint fail",failData); + window.alert("Problem: " + failData.msg); + }); + } + + function clearInfo() { + $("#infoFile").text("..."); + $("#infoPrinter").text("..."); + $("#infoMaterial").html("..."); + $("#iconPrinter").attr('src','img/icons/blank.png'); + } + + function loadGCodeInfoFromServer(uuid) { + _serverAPI.init("https://gcodeserver.doodle3d.com"); + + _serverAPI.getInfo(uuid, function(successData) { + console.log("getInfo success",successData); + var filesize = d3d.util.formatBytes(successData["bytes"]); + + _serverAPI.fetchHeader(d3d.pageParams.uuid,function(successData) { + console.log("_serverAPI fetchHeader success",successData); + var header = successData; + _slicerSettings = header; //copy header json data into _slicerSettings + var printerId = header.type; + + $("#infoFile").text(header.name + " (" + filesize + ")"); + $("#infoPrinter").text(printerId); + $("#infoMaterial").html(header.filamentThickness + "mm @ " + header.temperature + "°C"); + $("#iconPrinter").attr('src','img/icons/printers/'+printerId+'.png'); + + }, function(failData) { + console.log("_serverAPI fetchHeader fail",failData); + clearInfo(); + }); + + + },function(failData) { + clearInfo(); + }); + + } + + +})(window); diff --git a/js/api/InfoAPI.js b/js/api/InfoAPI.js index 474b764..fd299e2 100644 --- a/js/api/InfoAPI.js +++ b/js/api/InfoAPI.js @@ -58,4 +58,22 @@ function InfoAPI() { if(failedHandler) failedHandler(); }); }; + + this.getStatus = function(completeHandler,failedHandler) { + $.ajax({ + url: _wifiboxURL + "/info/status", + type: "GET", + dataType: 'json', + timeout: _timeoutTime, + success: function(response){ + if (response.status == "error" || response.status == "fail") { + if (failedHandler) failedHandler(response); + } else { + if (completeHandler) completeHandler(response.data); + } + } + }).fail(function() { + if (failedHandler) failedHandler(); + }); + }; } \ No newline at end of file diff --git a/js/api/PrinterAPI.js b/js/api/PrinterAPI.js index cd044ce..8e1f6c5 100644 --- a/js/api/PrinterAPI.js +++ b/js/api/PrinterAPI.js @@ -46,4 +46,71 @@ function PrinterAPI() { if(failedHandler) failedHandler(); }); }; + + this.fetch = function(data, completeHandler,failedHandler) { + console.log("fetch",_wifiboxURL,data); + + $.ajax({ + url: _wifiboxURL + "/printer/fetch", + type: "POST", + dataType: 'json', + data: data, + timeout: _timeoutTime, + success: function(response){ + console.log("printerAPI.fetch response=",response); + if(response.status == "error" || response.status == "fail") { + if (failedHandler) failedHandler(response); + } else { + if (completeHandler) completeHandler(response.data); + } + } + }).fail(function() { + if(failedHandler) failedHandler(); + }); + }; + + this.print = function(data, completeHandler,failedHandler) { + // data = { "gcode": gcode, "first": first, "start": start }, + console.log("print",_wifiboxURL,data); + + $.ajax({ + url: _wifiboxURL + "/printer/print", + type: "POST", + dataType: 'json', + data: data, + timeout: _timeoutTime, + success: function(response){ + console.log("printerAPI.print response=",response); + if(response.status == "error" || response.status == "fail") { + if (failedHandler) failedHandler(response); + } else { + if (completeHandler) completeHandler(response.data); + } + } + }).fail(function() { + if (failedHandler) failedHandler(); + }); + }; + + this.stop = function(data, completeHandler, failedHandler) { + console.log("stop",_wifiboxURL,data); + + $.ajax({ + url: _wifiboxURL + "/printer/stop", + type: "POST", + dataType: 'json', + data: data, + timeout: _timeoutTime, + success: function(response){ + console.log("printerAPI.stop response=",response); + if(response.status == "error" || response.status == "fail") { + if (failedHandler) failedHandler(response); + } else { + if (completeHandler) completeHandler(response.data); + } + } + }).fail(function() { + if (failedHandler) failedHandler(); + }); + }; } \ No newline at end of file diff --git a/js/api/ServerAPI.js b/js/api/ServerAPI.js new file mode 100644 index 0000000..bc6cbe7 --- /dev/null +++ b/js/api/ServerAPI.js @@ -0,0 +1,82 @@ +/* + * This file is part of the Doodle3D project (http://doodle3d.com). + * + * Copyright (c) 2013, Doodle3D + * This software is licensed under the terms of the GNU GPL v2 or later. + * See file LICENSE.txt or visit http://www.gnu.org/licenses/gpl.html for full license details. + */ + +function ServerAPI() { + var _apiURL = ""; + var _timeoutTime = 6000; + + this.init = function(url) { + _apiURL = url; + } + + this.getInfo = function(uuid, completeHandler, failedHandler) { + console.log("ServerAPI:getInfo"); + + $.ajax({ + url: _apiURL + "/info/" + uuid, + type: "GET", + dataType: 'json', + timeout: _timeoutTime, + cache: false, + success: function(response) { + if (completeHandler) completeHandler(response); + } + }).fail(function(response) { + if (failedHandler) failedHandler(response.responseJSON); + }); + }; + + this.fetch = function(uuid, chunk, completeHandler, failedHandler) { + console.log("ServerAPI:fetch",uuid,chunk); + + if (!uuid) { + console.log("Server.fetch failed: no uuid"); + if (failedHandler) failedHandler(); + return; + } + + if (!chunk) { + chunk = 0; + } + + $.ajax({ + url: _apiURL + "/fetch/" + uuid + "/" + chunk, + type: "GET", + dataType: 'text', //no json but text + timeout: _timeoutTime, + cache: false, + success: function(response) { + if (completeHandler) completeHandler(response); + } + }).fail(function(response) { + console.log("ServerAPI:fetch fail response:",response); + if (failedHandler) failedHandler(response.responseJSON); + }); + }; + + this.fetchHeader = function(uuid,completeHandler,failedHandler) { + this.fetch(uuid,0,function(successData) { + console.log("_serverAPI fetchHeader"); + if (successData) { + var items = successData.split("\n"); + try { + var headerText = items[0].substr(1); + var headerJSON = JSON.parse(headerText); + // console.log("fetchHeader",headerJSON) + if (completeHandler) completeHandler(headerJSON); + } catch (e) { + console.log("fetchHeader failed to parse JSON",e); + if (failedHandler) failedHandler(); + } + } + }, function(failData) { + console.log("_serverAPI fetchHeader failed",failData); + }); + }; + +} \ No newline at end of file diff --git a/js/main.js b/js/main.js index 62b3d36..efb0b21 100644 --- a/js/main.js +++ b/js/main.js @@ -97,8 +97,29 @@ d3d.util = { if (!("autofocus" in document.createElement("input"))) { var target = form.find("input[autofocus]:visible"); target.focus(); - } - } + } + }, + + getQueryParam:function(param) { + var result = window.location.search.match(new RegExp("(\\?|&)" + param + "(\\[\\])?=([^&]*)")); + return result ? result[3] : false; + }, + + formatBytes:function(a,b) { + if (0===a) { + return "0 Bytes"; + } else { + var c=1e3,d=b||2,e=["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"]; + var f=Math.floor(Math.log(a)/Math.log(c)); + return parseFloat((a/Math.pow(c,f)).toFixed(d))+" "+e[f]; + } + }, + + formatPercentage:function(cur,total) { + console.log("formatPercentage",cur,total); + return Math.round(cur/total*100) + "%"; + }, + }; (function (w) { @@ -106,6 +127,9 @@ d3d.util = { // only pagecontainer events contain url's // we parse the parameters and store them in a global object d3d.pageParams = {}; + d3d.pageParams.uuid = d3d.util.getQueryParam("uuid"); + console.log(d3d.pageParams.uuid); + $.mobile.document.on( "pagebeforechange", function( event, data ) { if (typeof data.toPage !== "string") { return; } var url = d3d.util.parseURL(data.toPage); @@ -119,4 +143,14 @@ d3d.util = { // make sure that the parameters are not removed from the visible url event.preventDefault(); }); + + if (d3d.pageParams.uuid) { //connect was opened with printlink + var localip = localStorage.getItem("localip"); + var url = "?uuid="+d3d.pageParams.uuid+"#print"; + if (localip) { + url += "?localip=" + localip; + } + location.href = url; + } + })(window); \ No newline at end of file diff --git a/less/styles.less b/less/styles.less index 69d7c80..819998f 100644 --- a/less/styles.less +++ b/less/styles.less @@ -210,4 +210,17 @@ html head + body .ui-body-a.ui-focus { .ath-container:before { color: #F18DB1; } -} \ No newline at end of file +} + +#infoWiFiBox .idle, #infoWiFiBox .ready { + color: #5fba7d; +} + +#infoWiFiBox .disconnected, #infoWiFiBox .connecting, #infoWiFiBox .stopping, #infoWiFiBox .error { + color: red; +} + +#infoWiFiBox .printing { + color: #93CAF4; +} + diff --git a/www/index.html b/www/index.html index 5321890..ef908c6 100644 --- a/www/index.html +++ b/www/index.html @@ -22,6 +22,7 @@ + @@ -66,8 +67,9 @@

+
+ +
+ Back +

Print

+ +
+
+

Let's 3D-print your model by sending it to your printer over WiFi. Please check the settings below and press Print.

+ + +
    + +
  • + +

    File to print

    +

    ...

    +
  • + +
  • + +

    3D-Printer

    +

    ...

    +
  • + +
  • + +

    Material

    +

    ...

    +
  • + +
+ + Please select your Doodle3D WiFi-Box: +
    +
  • + + +

    ...

    +
  • +
+ + +
+
+
@@ -377,8 +426,8 @@ From 11fe4fbb16841ae50f78ae546880b34380fd866d Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Tue, 11 Jul 2017 17:18:18 +0200 Subject: [PATCH 19/30] enabled talkus --- www/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/index.html b/www/index.html index ef908c6..f783e12 100644 --- a/www/index.html +++ b/www/index.html @@ -426,8 +426,8 @@ From 68708d16cd247418d87c751afa7b5aac22bfe802 Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Wed, 12 Jul 2017 11:37:03 +0200 Subject: [PATCH 20/30] added upload to connect-dev script --- upload.sh | 2 ++ 1 file changed, 2 insertions(+) create mode 100755 upload.sh diff --git a/upload.sh b/upload.sh new file mode 100755 index 0000000..2daa35b --- /dev/null +++ b/upload.sh @@ -0,0 +1,2 @@ +#!/bin/bash +rsync -av www/ doodle3d.com:/domains/doodle3d.com/connect-dev/ From 581fff07a7b71e80f6fe1b0d0539f037be395bb4 Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Wed, 12 Jul 2017 11:37:31 +0200 Subject: [PATCH 21/30] improved savePrinterType and added substituteVariables --- js/api/ConfigAPI.js | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/js/api/ConfigAPI.js b/js/api/ConfigAPI.js index bb78559..c55b49c 100644 --- a/js/api/ConfigAPI.js +++ b/js/api/ConfigAPI.js @@ -96,7 +96,15 @@ function ConfigAPI() { this.savePrinterType = function(printerType,completeHandler,failedHandler) { var settings = {"printer.type": printerType}; - this.save(settings,completeHandler,failedHandler); + this.save(settings,function(successData) { + if (successData.validation["printer.type"]==="ok") { + if (completeHandler) completeHandler(successData); + } else { + if (failedHandler) failedHandler(successData); //passing successData because it contains valiation error + } + },function(failData) { + if (failedHandler) failedHandler(failData); + }); }; this.resetAll = function(completeHandler,failedHandler) { @@ -117,4 +125,33 @@ function ConfigAPI() { if(failedHandler) failedHandler(); }); }; + + this.subsituteVariables = function(gcode,settings) { + //,temperature,bedTemperature,preheatTemperature,preheatBedTemperature + var temperature = settings["printer.temperature"]; + var bedTemperature = settings["printer.bed.temperature"]; + var preheatTemperature = settings["printer.heatup.temperature"]; + var preheatBedTemperature = settings["printer.heatup.bed.temperature"]; + var printerType = settings["printer.type"]; + var heatedbed = settings["printer.heatedbed"]; + + switch (printerType) { + case "makerbot_replicator2": printerType = "r2"; break; + case "makerbot_replicator2x": printerType = "r2x"; break; + case "makerbot_thingomatic": printerType = "t6"; break; + case "makerbot_generic": printerType = "r2"; break; + case "wanhao_duplicator4": printerType = "r2x"; break; + case "_3Dison_plus": printerType = "r2"; break; + } + var heatedBedReplacement = (heatedbed)? "" : ";"; + + gcode = gcode.replace(/{printingTemp}/gi ,temperature); + gcode = gcode.replace(/{printingBedTemp}/gi ,bedTemperature); + gcode = gcode.replace(/{preheatTemp}/gi ,preheatTemperature); + gcode = gcode.replace(/{preheatBedTemp}/gi ,preheatBedTemperature); + gcode = gcode.replace(/{printerType}/gi ,printerType); + gcode = gcode.replace(/{if heatedBed}/gi ,heatedBedReplacement); + + return gcode; + } } \ No newline at end of file From 10b6a41578ba8afe2ff530960d62a2658ebe2c8f Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Wed, 12 Jul 2017 11:38:55 +0200 Subject: [PATCH 22/30] update 'connecting to' message --- js/ConnectingToNetworkPage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/ConnectingToNetworkPage.js b/js/ConnectingToNetworkPage.js index b25c61d..bc44696 100644 --- a/js/ConnectingToNetworkPage.js +++ b/js/ConnectingToNetworkPage.js @@ -103,7 +103,7 @@ var actionText = ""; switch(data.status) { case NetworkAPI.STATUS.CONNECTING: - statusText = "Connecting to "+_pageData.ssid+"..."; + statusText = "WiFi-Box is now trying to connect to "+_pageData.ssid+"..."; //actionText = "Please reconnect yourself to "+_pageData.ssid+". Once you are connected return to this page."; actionText = "Please reconnect yourself to "+_pageData.ssid+". Once you are connected return to this page."; _actionField.attr("class","notice"); From 3362c03136f6833dd029622fe7ba2f731ed3461d Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Wed, 12 Jul 2017 11:39:26 +0200 Subject: [PATCH 23/30] print page getting ready --- js/PrintPage.js | 139 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 92 insertions(+), 47 deletions(-) diff --git a/js/PrintPage.js b/js/PrintPage.js index 6108a23..3f1d6e2 100644 --- a/js/PrintPage.js +++ b/js/PrintPage.js @@ -39,12 +39,16 @@ _connectAPI.list(function(successData) { console.log("_connectAPI.list success",successData); $("#lstBoxes").empty(); - $("#lstBoxes").append($("")); + var selectedItem; for (var i in successData) { var box = successData[i]; var selected = (box.localip===_pageData.localip) ? "selected " : ""; + if (selected) { + selectedItem = _pageData.localip; + } $("#lstBoxes").append($("")); } @@ -52,8 +56,8 @@ $("#lstBoxes").selectmenu("refresh", true); - if (_pageData.localip) { - onSelectWiFiBox(_pageData.localip); + if (selectedItem) { + onSelectWiFiBox(selectedItem); } }, function(failData) { @@ -119,56 +123,96 @@ } } - function print() { - + function checkPrinterTypeMatch(completeHandler, failedHandler) { _configAPI.loadAll(function(successData) { _wifiboxSettings = successData; - var slicerPrinterType = _slicerSettings.type; - var wifiboxPrinterType = _wifiboxSettings["printer.type"]; - if (slicerPrinterType!==wifiboxPrinterType) { - var override = window.confirm("The GCODE file was sliced for '"+slicerPrinterType+"'.\n"+ - "Your WiFi-Box is currently configured for '"+wifiboxPrinterType+"'\n\n"+ - "Do you want to override the settings on your WiFi-Box with the new settings from the slicer?"); - - if (override) { - // - _configAPI.savePrinterType(slicerPrinterType,function(successData) { - console.log(successData); - window.alert(successData.validation["printer.type"] + " (printer.type)"); - },function(failData) { - window.alert("Could not save printer type '",slicerPrinterType,"')' to WiFi-Box"); - }); + var data = { + slicerPrinterType: _slicerSettings.printer.type, + wifiboxPrinterType: _wifiboxSettings["printer.type"] + }; + + if (data.slicerPrinterType === data.wifiboxPrinterType) { + if (completeHandler) { + completeHandler(data); + } + } else { + if (failedHandler) { + failedHandler(data); } } }); - - if (true) { - return; - } - - //var startcode = _configAPI.subsituteVariables(_wifiboxSettings["printer.startcode"],_wifiboxSettings); - //var endcode = _configAPI.subsituteVariables(_wifiboxSettings["printer.endcode"],_wifiboxSettings); - - var data = { - "id": d3d.pageParams.uuid, - // "start_code": startcode, - // "end_code": endcode - }; - - //console.log("fetchPrint",d3d.pageParams.uuid,data); - _printerAPI.fetch(data,function(successData) { - console.log("fetchPrint success",successData); - - var url = d3d.util.replaceURLParameters("#control",_pageData); - $.mobile.changePage(url); - - },function(failData) { - console.log("fetchPrint fail",failData); - window.alert("Problem: " + failData.msg); - }); } + function forcePrinterTypeMatch(completeHandler, failedHandler) { + + checkPrinterTypeMatch(function(successData) { + completeHandler({msg:"slicerPrinterType matches wifiboxPrinterType"}); + + }, function(failData) { + + var override = window.confirm("The GCODE file was sliced for '"+failData.slicerPrinterType+"'.\n"+ + "Your WiFi-Box is currently configured for '"+failData.wifiboxPrinterType+"'\n\n"+ + "Do you want to override the settings on your WiFi-Box with the new settings from the slicer?"); + + if (override) { + _configAPI.savePrinterType(failData.slicerPrinterType, function(successData) { + + //reload settings from WiFi-Box with new printerType to get the right start & end gcode + _configAPI.loadAll(function(successData) { + _wifiboxSettings = successData; + completeHandler({msg:"printer.type successfully updated and _wifiboxSettings successfully reloaded"}); + + }, function(failData) { + failedHandler({msg:"reload config failed"}); + }); + + }, function(failData) { + failedHandler({msg:"saving failed printer.type failed",details:failData}); + }); + } else { + failedHandler({msg:"Please use the settings from Slicer."}); + } + }); + + } + + function print() { + console.log("print"); + + forcePrinterTypeMatch(function(successData) { + console.log("successfully made sure printerType and config is up to date",successData); + + var startcode = _configAPI.subsituteVariables(_wifiboxSettings["printer.startcode"],_wifiboxSettings); + var endcode = _configAPI.subsituteVariables(_wifiboxSettings["printer.endcode"],_wifiboxSettings); + + var data = { + "id": d3d.pageParams.uuid, + "start_code": startcode, + "end_code": endcode + }; + + //console.log("fetchPrint",d3d.pageParams.uuid,data); + _printerAPI.fetch(data,function(successData) { + console.log("fetchPrint success",successData); + + var url = d3d.util.replaceURLParameters("#control",_pageData); + $.mobile.changePage(url); + + },function(failData) { + console.log("fetchPrint fail",failData); + window.alert("Problem: " + failData.msg); + }); + + + + },function(failData) { + window.alert("Sorry, the print can not be started because the settings don't match between the Slicer and the WiFi-Box.\n\nDetails: " + failData.msg); + }); + + + } + function clearInfo() { $("#infoFile").text("..."); $("#infoPrinter").text("..."); @@ -187,10 +231,11 @@ console.log("_serverAPI fetchHeader success",successData); var header = successData; _slicerSettings = header; //copy header json data into _slicerSettings - var printerId = header.type; + var printerId = header.printer.type; + var printerTitle = header.printer.title; $("#infoFile").text(header.name + " (" + filesize + ")"); - $("#infoPrinter").text(printerId); + $("#infoPrinter").text(printerTitle); $("#infoMaterial").html(header.filamentThickness + "mm @ " + header.temperature + "°C"); $("#iconPrinter").attr('src','img/icons/printers/'+printerId+'.png'); From 5e2556eacd312a3dc30ef68576b89fdd34ff15d3 Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Wed, 12 Jul 2017 11:41:46 +0200 Subject: [PATCH 24/30] adding control page --- www/index.html | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/www/index.html b/www/index.html index f783e12..89aaf89 100644 --- a/www/index.html +++ b/www/index.html @@ -98,7 +98,7 @@
  • - +

    3D-Printer

    ...

  • @@ -116,7 +116,7 @@
  • -

    ...

    +

  • @@ -124,6 +124,29 @@
    +
    + +
    + Back +

    Control

    +
    + +
    + +
    loading...
    + + + + +
    +
    From 994d0e8ebb05f862887077214ec3c596d856e304 Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Thu, 13 Jul 2017 15:34:30 +0200 Subject: [PATCH 25/30] improving control/status page --- js/BoxPage.js | 8 +- js/ControlPage.js | 270 +++++++++++++++++++++++++++++++++++++++++++ js/PrintPage.js | 36 +++++- js/api/ConnectAPI.js | 4 +- js/main.js | 2 +- less/styles.less | 3 + www/index.html | 39 +++++-- 7 files changed, 343 insertions(+), 19 deletions(-) create mode 100644 js/ControlPage.js diff --git a/js/BoxPage.js b/js/BoxPage.js index 1b4890c..687d3a4 100644 --- a/js/BoxPage.js +++ b/js/BoxPage.js @@ -15,6 +15,7 @@ var _updateItem; var _settingsItem; var _joinNetworkItem; + var _printItem; var _defaultItems; var _networkStatus; @@ -39,11 +40,13 @@ _updateItem = _list.find("#updateItem"); _settingsItem = _list.find("#settingsItem"); _joinNetworkItem = _list.find("#joinNetworkItem"); + _printItem = _list.find("#printItem"); // make sure draw link is opened in same WebApp (added to homescreen) // and it doesn't start a browser $.stayInWebApp("#box #drawItem a",true); - }); + }); + $.mobile.document.on( "pagebeforeshow", PAGE_ID, function( event, data ) { console.log("Box page pagebeforeshow"); _boxData = d3d.util.getPageParams(PAGE_ID); @@ -54,6 +57,8 @@ var boxURL = "http://"+_boxData.localip; //console.log(" _boxData: ",_boxData); + _printItem.hide(); + _title.text(_boxData.wifiboxid); var drawLink = (_boxData.link)? _boxData.link : boxURL; @@ -119,7 +124,6 @@ _intro.toggleClass("ui-screen-hidden",(introText === "")); //printLink - var _printItem = _list.find("#printItem"); var printLink = _printItem.find("a").attr("href"); printLink = d3d.util.replaceURLParameters(printLink,_boxData); _printItem.find("a").attr("href",printLink); diff --git a/js/ControlPage.js b/js/ControlPage.js new file mode 100644 index 0000000..deb634e --- /dev/null +++ b/js/ControlPage.js @@ -0,0 +1,270 @@ +/* + * This file is part of the Doodle3D project (http://doodle3d.com). + * + * Copyright (c) 2013-2017, Doodle3D + * This software is licensed under the terms of the GNU GPL v2 or later. + * See file LICENSE.txt or visit http://www.gnu.org/licenses/gpl.html for full license details. + */ + +(function (w) { + var _page; + var _form; + var _statusField; + var _infoField; + var _noRetainCheckbox; + var _includeBetasCheckbox; + var _submitButton; + var _settings; + + var _updateAPI = new UpdateAPI(); + var _configAPI = new ConfigAPI(); + var _printerAPI = new PrinterAPI(); + var _serverAPI = new ServerAPI(); + var _infoAPI = new InfoAPI(); + var _pageData = {}; + var _updateStatus = {}; + var _title; + var endCode; + + var PAGE_ID = "#control"; + + var timerObject = { + interval_id : null + }; + + var _self = this; + + $.mobile.document.on( "pageinit", PAGE_ID, function( event, data ) { + console.log(PAGE_ID+":pageinit"); + + _page = $(this); + _title = _page.find(".ui-title"); + + d3d.util.showLoader(); + + $("#grpStatusAndControl").hide(); + $("#btnStop").hide(); + $("#btnNewPrint").hide(); + + + + //$("#btnSend").on("click", function(data) { + // // console.log("test",$("#gcode").val()); + + // _configAPI.loadAll(function(successData) { + // _settings = successData; + + // var gcode = _configAPI.subsituteVariables($("#gcode").val(),_settings); + + // console.log("btnPrint subsituteVariables: ",gcode); + + // $(this).hide(); + // _printerAPI.print({ + // gcode: gcode, + // start: true, + // first: true + // },function(successData) { + // console.log("btnSend success"); + // },function(failData) { + // console.log("btnSend fail"); + // }); + // }); + + //}); + + _pageData = d3d.util.getPageParams(PAGE_ID); + + // console.log(_pageData); + + if(_pageData === undefined) { + console.log("ERROR",PAGE_ID,"_pageData undefined"); + $.mobile.changePage("#boxes"); + return; + } + + var backUrl = d3d.util.replaceURLParameters("#print",_pageData); + $("#btnControlBack").attr("href",backUrl); + +/* + $("#btnCooldown").button().on("click", function(data) { + _printerAPI.print({ + gcode: "M104 S20", + start: true, + first: true + }); + }); + + $("#btnHeatup").button().on("click", function(data) { + _printerAPI.print({ + gcode: "M104 S180", + start: true, + first: true + }); + }); + + $("#btnHome").button().on("click", function(data) { + _printerAPI.print({ + gcode: "G28", + start: true, + first: true + }); + }); +*/ + $("#btnStop").on("click", function(data) { + if (!window.confirm("Are you sure you want to stop the current print?")) { + return; + } + + $(this).hide(); + + if (!_settings) { + console.log("Error: _settings undefined"); + return; + } + + var endcode = _configAPI.subsituteVariables(_settings["printer.endcode"],_settings); + + _printerAPI.stop({gcode:endcode}, function(successData) { + console.log("btnStop success",successData); + refreshStatus(); + },function(failData) { + console.log("btnStop fail",failData); + window.alert("Problem: " + failData.msg); + }); + + }); + + + }); + + function refreshStatus() { + d3d.util.showLoader(); + + _infoAPI.getStatus(function(successData) { + $("#grpStatusAndControl").show(); + + var state = successData.state; + if (state==="idle") { + state="ready"; + } + + if (state==="disconnected" || state==="connecting") { + $("#infoState").show(); + $("#infoState").text("Printer " + state + "..."); + $("#grpStatusAndControl").hide(); + } else { + $("#infoState").hide(); + $("#grpStatusAndControl").show(); + $("#infoNozzleTemperature").html(successData.hotend + " / " + successData.hotend_target + " °C"); + $("#infoPrinterStatus").text(state); + + if (_settings && _settings["printer.heatedbed"]) { + $("#liBedTemperature").show(); + $("#infoBedTemperature").html(successData.bed + " / " + successData.bed_target + " °C"); + } else { + $("#liBedTemperature").hide(); + } + } + + if (successData.state==="printing") { + $("#liPrintingProgress").show(); + // console.log('printing',d3d.util.formatPercentage(successData.current_line,successData.total_lines)); + $("#infoPrintingProgress").text(d3d.util.formatPercentage(successData.current_line,successData.total_lines)); + + var uuid = successData.current_print; + + //request filename only once + if ($("#infoPrintingFile").text()==="") { + _serverAPI.fetchHeader(uuid,function(successData) { + $("#liPrintingFile").show(); + $("#infoPrintingFile").text(successData.name); + },function(failData) { + $("#liPrintingFile").hide(); + }); + } + + $("#btnStop").show(); + // console.log('printing'); + } else { + // console.log('not printing'); + $("#btnStop").hide(); + $("#liPrintingProgress").hide(); + $("#liPrintingFile").hide(); + } + + if (state==="ready") { + + if (d3d && d3d.pageParams && d3d.pageParams.uuid) { + console.log("show button btnNewPrint"); + var url = d3d.util.replaceURLParameters("#print",_pageData); + // $("#btnNewPrint").attr("href",url); + // $("#btnNewPrint").show(); + } + + } else { + // $("#grpCustomGCODE").hide(); + } + + // console.log("getStatus success",successData); + d3d.util.hideLoader(); + + },function(failData) { + console.log("getStatus fail",failData); + $("#grpStatusAndControl").hide(); + d3d.util.hideLoader(); + }); + } + + $.mobile.document.on("pagebeforeshow", PAGE_ID, function( event, data ) { + _pageData = d3d.util.getPageParams(PAGE_ID); + + if(_pageData === undefined) { + console.log("ERROR",PAGE_ID,"_pageData undefined"); + $.mobile.changePage("#boxes"); + return; + } + var boxURL = "http://"+_pageData.localip; + + // _title.text("Control 3D-printer on " + _pageData.wifiboxid); + + _configAPI.init(boxURL); + _printerAPI.init(boxURL); + _infoAPI.init(boxURL); + _serverAPI.init("https://gcodeserver.doodle3d.com"); + + _configAPI.loadAll(function(successData) { + _settings = successData; + + console.log("_configAPI.loadAll success",_settings); + + // $("#infoWiFiBox").text(_settings.) + + },function(failData) { + console.log("_configAPI.loadAll failed"); + }); + + + _infoAPI.getInfo(function(successData) { + $("span#infoWiFiBox").text(successData.wifiboxid); + },function(failData) { + + }); + + // refreshSettings(); + + refreshStatus(); + + timerObject.interval_id = setInterval(function() {refreshStatus(); }, 3000); + }); + + $.mobile.document.on('pagehide', PAGE_ID, function(){ + clearInterval(timerObject.interval_id); + }); + + $.mobile.document.on( "pagebeforehide", PAGE_ID, function( event, data ) { + console.log("pagebeforehide"); + }); + + +})(window); + diff --git a/js/PrintPage.js b/js/PrintPage.js index 3f1d6e2..ae9862a 100644 --- a/js/PrintPage.js +++ b/js/PrintPage.js @@ -28,6 +28,13 @@ $.mobile.changePage("#boxes"); return; } + + if (!d3d || !d3d.pageParams || !d3d.pageParams.uuid) { + console.log("ERROR",PAGE_ID,"d3d.pageParams no uuid"); + $.mobile.changePage("#boxes"); + return; + } + var boxURL = "http://"+_pageData.localip; //disabled by default @@ -67,6 +74,7 @@ $("#lstBoxes").on("change", function(data) { var ip = $(this).val(); console.log("lstBoxes change",ip); + onSelectWiFiBox(ip); }); @@ -93,6 +101,8 @@ _printerAPI.init(boxURL); _configAPI.init(boxURL); + var localip = localStorage.setItem("localip",ip); + _networkAPI.status(function(successData) { console.log("network status",successData); // $("#lstPrint li.boxItem p").text( @@ -106,8 +116,10 @@ $("#btnPrint").button('enable'); } + _pageData.localip = ip; //update pageData to reflect the selected WiFi-Box without reloading the page + var url = d3d.util.replaceURLParameters("#control",_pageData); var info = netInfo + " - Printer status: "; - info += ""+state+""; + info += ""+state+""; $("#infoWiFiBox").html(info); }, function(failData) { console.log(failData); @@ -171,7 +183,7 @@ failedHandler({msg:"saving failed printer.type failed",details:failData}); }); } else { - failedHandler({msg:"Please use the settings from Slicer."}); + failedHandler({msg:""}); } }); @@ -192,19 +204,25 @@ "end_code": endcode }; + $("#btnPrint").button('disable'); + d3d.util.showLoader(); + //console.log("fetchPrint",d3d.pageParams.uuid,data); _printerAPI.fetch(data,function(successData) { console.log("fetchPrint success",successData); - var url = d3d.util.replaceURLParameters("#control",_pageData); - $.mobile.changePage(url); + + setTimeout(function() { + var url = d3d.util.replaceURLParameters("#control",_pageData); + $.mobile.changePage(url); + },3000); },function(failData) { console.log("fetchPrint fail",failData); window.alert("Problem: " + failData.msg); }); - + },function(failData) { window.alert("Sorry, the print can not be started because the settings don't match between the Slicer and the WiFi-Box.\n\nDetails: " + failData.msg); @@ -240,13 +258,19 @@ $("#iconPrinter").attr('src','img/icons/printers/'+printerId+'.png'); }, function(failData) { - console.log("_serverAPI fetchHeader fail",failData); + console.log("_serverAPI.fetchHeader fail",failData); clearInfo(); }); },function(failData) { clearInfo(); + console.log("_serverAPI.getInfo fail",failData); + setTimeout(function() { + console.log("_serverAPI.getInfo: now try again",uuid); + loadGCodeInfoFromServer(uuid); + },3000); + }); } diff --git a/js/api/ConnectAPI.js b/js/api/ConnectAPI.js index a81ce58..aefaa20 100644 --- a/js/api/ConnectAPI.js +++ b/js/api/ConnectAPI.js @@ -56,9 +56,9 @@ function ConnectAPI() { completeHandler(response.data); } } - }).fail(function() { + }).fail(function(failData) { //console.log("ConnectAPI:list failed"); - if(failedHandler) failedHandler(); + if(failedHandler) failedHandler(failData); if(_self.listFailed) {_self.listFailed(); } }); }; diff --git a/js/main.js b/js/main.js index efb0b21..f5dd110 100644 --- a/js/main.js +++ b/js/main.js @@ -116,7 +116,7 @@ d3d.util = { }, formatPercentage:function(cur,total) { - console.log("formatPercentage",cur,total); + // console.log("formatPercentage",cur,total); return Math.round(cur/total*100) + "%"; }, diff --git a/less/styles.less b/less/styles.less index 819998f..1f7de93 100644 --- a/less/styles.less +++ b/less/styles.less @@ -214,13 +214,16 @@ html head + body .ui-body-a.ui-focus { #infoWiFiBox .idle, #infoWiFiBox .ready { color: #5fba7d; + font-weight: normal; } #infoWiFiBox .disconnected, #infoWiFiBox .connecting, #infoWiFiBox .stopping, #infoWiFiBox .error { color: red; + font-weight: normal; } #infoWiFiBox .printing { color: #93CAF4; + font-weight: normal; } diff --git a/www/index.html b/www/index.html index 89aaf89..54d20c0 100644 --- a/www/index.html +++ b/www/index.html @@ -21,8 +21,8 @@ - - + + @@ -80,7 +80,7 @@
    - Back

    Print

    @@ -127,9 +127,9 @@
    - Back -

    Control

    +

    Status

    @@ -138,13 +138,36 @@
    + +
    From 882057e3004a58db2a55ae7c7d6524aefa5e50f2 Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Thu, 13 Jul 2017 17:52:15 +0200 Subject: [PATCH 26/30] disconnected and connecting state info --- js/ControlPage.js | 20 +++++++++++++++++--- js/PrintPage.js | 3 ++- www/index.html | 14 ++++++++++++-- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/js/ControlPage.js b/js/ControlPage.js index deb634e..d35f7e5 100644 --- a/js/ControlPage.js +++ b/js/ControlPage.js @@ -15,7 +15,7 @@ var _includeBetasCheckbox; var _submitButton; var _settings; - + var _updateAPI = new UpdateAPI(); var _configAPI = new ConfigAPI(); var _printerAPI = new PrinterAPI(); @@ -46,7 +46,8 @@ $("#btnStop").hide(); $("#btnNewPrint").hide(); - + $("#infoDisconnected").hide(); + $("#infoConnecting").hide(); //$("#btnSend").on("click", function(data) { // // console.log("test",$("#gcode").val()); @@ -141,6 +142,7 @@ d3d.util.showLoader(); _infoAPI.getStatus(function(successData) { + $("#grpStatusAndControl").show(); var state = successData.state; @@ -152,7 +154,19 @@ $("#infoState").show(); $("#infoState").text("Printer " + state + "..."); $("#grpStatusAndControl").hide(); + + if (state==="connecting") { + $("#infoConnecting").show(); + $("#infoDisconnected").hide(); + } else if (state==="disconnected") { + $("#infoConnecting").hide(); + $("#infoDisconnected").show(); + } + } else { + $("#infoDisconnected").hide(); + $("#infoConnecting").hide(); + $("#infoState").hide(); $("#grpStatusAndControl").show(); $("#infoNozzleTemperature").html(successData.hotend + " / " + successData.hotend_target + " °C"); @@ -247,7 +261,7 @@ _infoAPI.getInfo(function(successData) { $("span#infoWiFiBox").text(successData.wifiboxid); },function(failData) { - + }); // refreshSettings(); diff --git a/js/PrintPage.js b/js/PrintPage.js index ae9862a..14a369a 100644 --- a/js/PrintPage.js +++ b/js/PrintPage.js @@ -69,6 +69,8 @@ }, function(failData) { console.log("_connectAPI.list failData",failData); + $("#infoWiFiBox").html("failed to retrieve list with local WiFi-Box'es"); + }); $("#lstBoxes").on("change", function(data) { @@ -211,7 +213,6 @@ _printerAPI.fetch(data,function(successData) { console.log("fetchPrint success",successData); - setTimeout(function() { var url = d3d.util.replaceURLParameters("#control",_pageData); $.mobile.changePage(url); diff --git a/www/index.html b/www/index.html index 54d20c0..4fbb166 100644 --- a/www/index.html +++ b/www/index.html @@ -108,8 +108,7 @@

    Material

    ...

    - - + Please select your Doodle3D WiFi-Box:
      @@ -136,6 +135,17 @@
      loading...
      +
      +

      Please make sure the WiFi-Box is connected to your 3D-printer using a USB cable.

      +
      + +
      +

      This can take a while, 20 seconds or so...

      + +

      If it takes too long please try to restart your WiFi-Box. Also make sure the WiFi-Box is running the latest firmware.

      +

      If you think you're really stuck, please chat with us to see if we can help.

      +
      +
      • From e228f1ec428a602d193e53d8336a988491c34721 Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Thu, 13 Jul 2017 18:04:12 +0200 Subject: [PATCH 27/30] added printer title to status page --- js/ControlPage.js | 3 +++ www/index.html | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/js/ControlPage.js b/js/ControlPage.js index d35f7e5..5e1a2e2 100644 --- a/js/ControlPage.js +++ b/js/ControlPage.js @@ -190,8 +190,11 @@ //request filename only once if ($("#infoPrintingFile").text()==="") { _serverAPI.fetchHeader(uuid,function(successData) { + console.log("infoPrintingFile fetchHeader",successData); $("#liPrintingFile").show(); + $("#liPrinterType").show(); $("#infoPrintingFile").text(successData.name); + $("#infoPrinterType").text(successData.printer.title); },function(failData) { $("#liPrintingFile").hide(); }); diff --git a/www/index.html b/www/index.html index 4fbb166..2c1c82b 100644 --- a/www/index.html +++ b/www/index.html @@ -152,6 +152,10 @@ WiFi-Box
      • +
      • + Printer + +
      • Status From 73f6699ccf7854208023f90dcd657aeac36756a3 Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Thu, 13 Jul 2017 18:20:23 +0200 Subject: [PATCH 28/30] add link to IP address (sketch) from printing page --- js/PrintPage.js | 2 +- less/styles.less | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/js/PrintPage.js b/js/PrintPage.js index 14a369a..5312a53 100644 --- a/js/PrintPage.js +++ b/js/PrintPage.js @@ -108,7 +108,7 @@ _networkAPI.status(function(successData) { console.log("network status",successData); // $("#lstPrint li.boxItem p").text( - var netInfo = successData.statusMessage + " (" + successData.ssid + " @ " + successData.localip + ")"; + var netInfo = successData.statusMessage + " (" + successData.ssid + " @ "+successData.localip+")"; _infoAPI.getStatus(function(successData) { console.log(successData); diff --git a/less/styles.less b/less/styles.less index 1f7de93..81dbd6f 100644 --- a/less/styles.less +++ b/less/styles.less @@ -212,18 +212,18 @@ html head + body .ui-body-a.ui-focus { } } +#infoWiFiBox a { + font-weight: normal; +} #infoWiFiBox .idle, #infoWiFiBox .ready { color: #5fba7d; - font-weight: normal; } #infoWiFiBox .disconnected, #infoWiFiBox .connecting, #infoWiFiBox .stopping, #infoWiFiBox .error { color: red; - font-weight: normal; } #infoWiFiBox .printing { - color: #93CAF4; - font-weight: normal; + /*color: #93CAF4;*/ } From 3b7abc297730c0a804999a5b38bf936b292fcf7d Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Thu, 13 Jul 2017 18:27:13 +0200 Subject: [PATCH 29/30] show printer.type from config (overridden by server.fetchHeader when printing) --- js/ControlPage.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/js/ControlPage.js b/js/ControlPage.js index 5e1a2e2..6f03c3b 100644 --- a/js/ControlPage.js +++ b/js/ControlPage.js @@ -254,6 +254,9 @@ console.log("_configAPI.loadAll success",_settings); + $("span#infoPrinterType").text(successData["printer.type"]); + + // $("#infoWiFiBox").text(_settings.) },function(failData) { From 9803d05b88e62205424656f1bf3329620fdce578 Mon Sep 17 00:00:00 2001 From: Rick Companje Date: Thu, 13 Jul 2017 18:52:13 +0200 Subject: [PATCH 30/30] release to connect.doodle3d.com --- js/ControlPage.js | 18 ++++++++++++------ js/PrintPage.js | 1 - upload.sh | 2 +- www/index.html | 6 +++--- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/js/ControlPage.js b/js/ControlPage.js index 6f03c3b..bdf080e 100644 --- a/js/ControlPage.js +++ b/js/ControlPage.js @@ -158,6 +158,12 @@ if (state==="connecting") { $("#infoConnecting").show(); $("#infoDisconnected").hide(); + + //update firmware link + var url = d3d.util.replaceURLParameters("#update",_pageData); + $("#linkConnectingFirmware").attr("href",url); + + } else if (state==="disconnected") { $("#infoConnecting").hide(); $("#infoDisconnected").show(); @@ -211,12 +217,12 @@ if (state==="ready") { - if (d3d && d3d.pageParams && d3d.pageParams.uuid) { - console.log("show button btnNewPrint"); - var url = d3d.util.replaceURLParameters("#print",_pageData); - // $("#btnNewPrint").attr("href",url); - // $("#btnNewPrint").show(); - } + //if (d3d && d3d.pageParams && d3d.pageParams.uuid) { + //console.log("show button btnNewPrint"); + //var url = d3d.util.replaceURLParameters("#print",_pageData); + //$("#btnNewPrint").attr("href",url); + //$("#btnNewPrint").show(); + //} } else { // $("#grpCustomGCODE").hide(); diff --git a/js/PrintPage.js b/js/PrintPage.js index 5312a53..9993eb6 100644 --- a/js/PrintPage.js +++ b/js/PrintPage.js @@ -70,7 +70,6 @@ }, function(failData) { console.log("_connectAPI.list failData",failData); $("#infoWiFiBox").html("failed to retrieve list with local WiFi-Box'es"); - }); $("#lstBoxes").on("change", function(data) { diff --git a/upload.sh b/upload.sh index 2daa35b..6216d60 100755 --- a/upload.sh +++ b/upload.sh @@ -1,2 +1,2 @@ #!/bin/bash -rsync -av www/ doodle3d.com:/domains/doodle3d.com/connect-dev/ +rsync -av www/ doodle3d.com:/domains/doodle3d.com/connect diff --git a/www/index.html b/www/index.html index 2c1c82b..1bc69e5 100644 --- a/www/index.html +++ b/www/index.html @@ -21,8 +21,8 @@ - - + + @@ -142,7 +142,7 @@

        This can take a while, 20 seconds or so...

        -

        If it takes too long please try to restart your WiFi-Box. Also make sure the WiFi-Box is running the latest firmware.

        +

        If it takes too long please try to restart your WiFi-Box. Also make sure the WiFi-Box is running the latest firmware.

        If you think you're really stuck, please chat with us to see if we can help.