This repository has been archived on 2024-09-16. You can view files and clone it, but cannot push or open issues or pull requests.
niimblue-nightly/niimblue/src/lib/PrinterConnector.svelte

111 lines
3.5 KiB
Svelte
Raw Normal View History

2024-07-19 12:44:11 +03:00
<script lang="ts">
2024-08-01 01:00:02 +03:00
import { SoundSettingsItemType, type RfidInfo } from "@mmote/niimbluelib";
import { printerClient, connectedPrinterName, connectionState, initClient, heartbeatData, printerInfo, printerMeta } from "../stores";
2024-07-19 12:44:11 +03:00
import type { ConnectionType } from "../types";
import FaIcon from "./FaIcon.svelte";
let connectionType: ConnectionType = "bluetooth";
2024-07-25 00:00:01 +03:00
let rfidInfo: RfidInfo|undefined = undefined;
2024-07-22 00:00:01 +03:00
2024-07-19 12:44:11 +03:00
const onConnectClicked = async () => {
initClient(connectionType);
connectionState.set("connecting");
try {
await $printerClient.connect();
} catch (e) {
connectionState.set("disconnected");
alert(e);
}
};
const onDisconnectClicked = () => {
$printerClient.disconnect();
};
const getRfidInfo = async () => {
2024-07-25 00:00:01 +03:00
rfidInfo = await $printerClient.abstraction.rfidInfo();
2024-07-19 12:44:11 +03:00
};
2024-07-22 00:00:01 +03:00
const startHeartbeat = async () => {
$printerClient.startHeartbeat();
2024-07-19 12:44:11 +03:00
};
2024-07-22 00:00:01 +03:00
const stopHeartbeat = async () => {
$printerClient.stopHeartbeat();
2024-07-19 12:44:11 +03:00
};
2024-07-30 01:00:01 +03:00
const soundOn = async () => {
await $printerClient.abstraction.setSoundEnabled(SoundSettingsItemType.BluetoothConnectionSound, true);
await $printerClient.abstraction.setSoundEnabled(SoundSettingsItemType.PowerSound, true);
};
const soundOff = async () => {
await $printerClient.abstraction.setSoundEnabled(SoundSettingsItemType.BluetoothConnectionSound, false);
await $printerClient.abstraction.setSoundEnabled(SoundSettingsItemType.PowerSound, false);
};
2024-08-03 01:00:01 +03:00
const fetchInfo = async () => {
await $printerClient.fetchPrinterInfo()
};
2024-07-19 12:44:11 +03:00
</script>
<div class="input-group flex-nowrap justify-content-end">
{#if $connectionState === "connected"}
<button class="btn btn-secondary" data-bs-toggle="dropdown" data-bs-auto-close="outside"
><FaIcon icon="gear" />
</button>
<div class="dropdown-menu p-1">
2024-07-28 00:00:01 +03:00
<div>
2024-08-01 01:00:02 +03:00
Model metadata:
<pre>{JSON.stringify($printerMeta, null, 1)}</pre>
2024-07-28 00:00:01 +03:00
</div>
2024-07-22 00:00:01 +03:00
<div>
2024-07-23 00:00:01 +03:00
Printer info:
2024-08-01 01:00:02 +03:00
<pre>{JSON.stringify($printerInfo, null, 1)}</pre>
2024-07-22 00:00:01 +03:00
</div>
2024-07-25 00:00:01 +03:00
2024-07-28 00:00:01 +03:00
<div>
Rfid info:
<pre>{JSON.stringify(rfidInfo || {}, null, 1)}</pre>
</div>
2024-07-25 00:00:01 +03:00
<div>
Heartbeat data:
<pre>{JSON.stringify($heartbeatData, null, 1)}</pre>
</div>
2024-07-28 00:00:01 +03:00
2024-07-25 00:00:01 +03:00
<div>
2024-07-28 00:00:01 +03:00
Tests
2024-07-25 00:00:01 +03:00
</div>
2024-07-30 01:00:01 +03:00
2024-07-28 00:00:01 +03:00
<button class="btn btn-sm btn-primary" on:click={getRfidInfo}>Rfid</button>
<button class="btn btn-sm btn-primary" on:click={startHeartbeat}>Heartbeat on</button>
<button class="btn btn-sm btn-primary" on:click={stopHeartbeat}>Heartbeat off</button>
2024-07-30 01:00:01 +03:00
<button class="btn btn-sm btn-primary" on:click={soundOn}>Sound on</button>
<button class="btn btn-sm btn-primary" on:click={soundOff}>Sound off</button>
2024-08-03 01:00:01 +03:00
<button class="btn btn-sm btn-primary" on:click={fetchInfo}>Fetch info again</button>
2024-07-19 12:44:11 +03:00
</div>
2024-08-04 01:00:02 +03:00
<span class="input-group-text">{$printerMeta?.model ?? $connectedPrinterName}</span>
2024-07-19 12:44:11 +03:00
{:else}
<select class="form-select" disabled={$connectionState === "connecting"} bind:value={connectionType}>
<option value="bluetooth">Bluetooth</option>
2024-08-02 01:00:02 +03:00
<option value="serial">Serial</option>
2024-07-19 12:44:11 +03:00
</select>
{/if}
{#if $connectionState !== "connected"}
<button class="btn btn-primary" disabled={$connectionState === "connecting"} on:click={onConnectClicked}>
<FaIcon icon="plug" />
</button>
{/if}
{#if $connectionState === "connected"}
<button class="btn btn-danger" on:click={onDisconnectClicked}>
<FaIcon icon="plug-circle-xmark" />
</button>
{/if}
</div>
<style>
</style>