Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions spec/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,45 @@ paths:
401:
$ref: "#/components/responses/Unauthorized"

/api/v1/ready:
get:
summary: Get printer ready state
description: Returns whether the printer is marked as ready for remote printing
responses:
200:
description: OK
content:
application/json:
schema:
type: object
properties:
ready:
type: boolean
description: Whether the printer is ready for remote printing
example: true
required:
- ready
401:
$ref: "#/components/responses/Unauthorized"
put:
summary: Set printer as ready
description: Marks the printer as ready for remote printing (e.g., for Prusa Connect jobs)
responses:
204:
description: No Content - Printer is now ready
401:
$ref: "#/components/responses/Unauthorized"
409:
$ref: "#/components/responses/Conflict"
delete:
summary: Unset printer ready state
description: Unmarks the printer as ready for remote printing
responses:
204:
description: No Content - Printer is no longer ready
401:
$ref: "#/components/responses/Unauthorized"

/api/v1/transfer:
get:
summary: transfer info
Expand Down
10 changes: 8 additions & 2 deletions src/locales/source/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -280,5 +280,11 @@
"conn.error_status": "Error",
"conn.printer.not-supported": "",
"msg.outdated-os.message": "Your PrusaLink is running on an outdated Raspberry Pi OS. Follow <a href='https://help.prusa3d.com/guide/_221744#222170'>this guide to flash the latest version</a>. This will reset PrusaLink",
"msg.outdated-os.title": "Raspberry Pi OS is out-of-date"
}
"msg.outdated-os.title": "Raspberry Pi OS is out-of-date",
"ready.title": "Ready State",
"ready.state": "Ready for remote printing",
"ready.set": "Ready",
"ready.not-set": "Not Ready",
"btn.ready.set": "Set Ready",
"btn.ready.unset": "Unset Ready"
}
36 changes: 36 additions & 0 deletions src/printer/components/readyActions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
// This file is part of the Prusa Link Web
// Copyright (C) 2021 Prusa Research a.s. - www.prusa3d.com
// SPDX-License-Identifier: GPL-3.0-or-later

import { getJson } from "../../auth";
import { handleError } from "./errors";

/**
* Get printer ready state.
*/
export const getReadyState = () => {
return getJson("/api/v1/ready")
.then((response) => response.data)
.catch((result) => {
handleError(result);
return { ready: false };
});
}

/**
* Set printer as ready.
*/
export const setReady = () => {
return getJson("/api/v1/ready", {
method: "PUT",
}).catch((result) => handleError(result));
}

/**
* Unset printer ready state.
*/
export const unsetReady = () => {
return getJson("/api/v1/ready", {
method: "DELETE",
}).catch((result) => handleError(result));
}
35 changes: 35 additions & 0 deletions src/printer/components/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {
editUser,
getSerialNumber,
} from "./settingsActions";
import { getReadyState, setReady, unsetReady } from "./readyActions";
import { handleError } from "./errors";
import { success, warning } from "./toast";
import { modal } from "./modal";
Expand All @@ -35,6 +36,7 @@ const load = (context) => {
initSettings();
if (process.env.WITH_SERIAL) initSerialSettings();
if (process.env.WITH_API_KEY_SETTING) initApiKey();
if (process.env.WITH_READY_STATE) initReadyState();
logsModule?.load();
context.updateConnection();
};
Expand Down Expand Up @@ -529,3 +531,36 @@ const waitForSysupgrade = (version) => {
}

export default { load, update };

function initReadyState() {
const toggleBtn = document.getElementById("ready-toggle");
const stateText = document.getElementById("ready-state");

if (!toggleBtn || !stateText) {
return;
}

const updateReadyState = () => {
getReadyState().then((data) => {
const isReady = data.ready;
stateText.innerText = isReady ? translate("ready.set") : translate("ready.not-set");
toggleBtn.querySelector("p").innerText = translate(isReady ? "btn.ready.unset" : "btn.ready.set");
});
};

toggleBtn.addEventListener("click", () => {
getReadyState().then((data) => {
const isReady = data.ready;
const action = isReady ? unsetReady() : setReady();
action
.then(() => {
updateReadyState();
displaySuccess();
})
.catch((result) => handleError(result));
});
});

// Initial state
updateReadyState();
}
8 changes: 8 additions & 0 deletions templates/pages/settings.html
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,13 @@
%}

<!-- prettier-ignore -->
{%
set section_ready = [
{text: 'ready state', label: 'ready.state', id: 'ready-state', type: 'text', editable: false, spacer: true,
button: {id: 'ready-toggle', text: 'set ready', label: 'btn.ready.set', disabled: false} }
]
%}

{%
set section_printer = [
{text: 'printer name', label: 'printer.name', id: 'printer-name', type: 'text', editable: true, spacer: true },
Expand Down Expand Up @@ -112,6 +119,7 @@
{'text': 'system version', 'label': 'sys-version.title', 'settings': [], 'id': 'sys-version', 'condition': env.WITH_SYSTEM_VERSION },
{'text': 'updates', 'label': 'updates.title', 'settings': section_updates, 'condition': env.WITH_SYSTEM_UPDATES },
{'text': 'connection', 'label': 'conn.title', 'settings': section_connection, 'condition': env.WITH_CONNECTION },
{'text': 'ready', 'label': 'ready.title', 'settings': section_ready, 'condition': env.WITH_READY_STATE },
{'text': 'printer', 'label': 'printer.title', 'settings': section_printer, 'condition': env.WITH_PRINTER_SETTINGS },
{'text': 'user', 'label': 'user.title', 'settings': section_user, 'condition': env.WITH_USER_SETTINGS },
{'text': 'serial number', 'label': 'serial.label', 'settings': section_serial, 'condition': env.WITH_SERIAL },
Expand Down
1 change: 1 addition & 0 deletions webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ module.exports = (env, args) => {
WITH_TELEMETRY_MATERIAL: withDefault(env["WITH_TELEMETRY_MATERIAL"], false),
WITH_API_KEY_AUTH: withDefault(env["WITH_API_KEY_AUTH"], false),
WITH_CAMERAS: withDefault(env["WITH_CAMERAS"], false),
WITH_READY_STATE: withDefault(env["WITH_READY_STATE"], true),
WITH_API_KEY_SETTING: withDefault(env["WITH_API_KEY_SETTING"], false),
WITH_NAME_SORTING_DEFAULT: withDefault(env["WITH_NAME_SORTING_DEFAULT"], false),
WITH_SYSTEM_UPDATES: withDefault(env["WITH_SYSTEM_UPDATES"], false),
Expand Down