Compare commits
68
Commits
6e1eb9b9a5
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
743fc021f6 | ||
|
|
24c5d3e1f2 | ||
|
|
de72fa5e3e | ||
|
|
a8ff604873 | ||
|
|
00aa5a8526 | ||
|
|
d497b68bb7 | ||
|
|
432a34540d | ||
|
|
09ac478ae3 | ||
|
|
923540934e | ||
|
|
30120dacb2 | ||
|
|
f0b237d2a2 | ||
|
|
c72613bd76 | ||
|
|
cd139ab7c7 | ||
|
|
6f9ac2f9e3 | ||
|
|
0bf140dff2 | ||
|
|
9787d1619e | ||
|
|
c5904331d3 | ||
|
|
6553e7ead7 | ||
|
|
beb7264180 | ||
|
|
84d630dd38 | ||
|
|
d41a34ab1d | ||
|
|
55a36875c8 | ||
|
|
32562daf27 | ||
|
|
98ae6c5e28 | ||
|
|
6cd1a44b19 | ||
|
|
a4cb3a1ede | ||
|
|
1754b6a812 | ||
|
|
13d99a25c2 | ||
|
|
028cb90bff | ||
|
|
14215a615e | ||
|
|
3354416f6b | ||
|
|
6fe02acd86 | ||
|
|
a1efac9fd1 | ||
|
|
0617c1eb83 | ||
|
|
0359652b9c | ||
|
|
05d845521f | ||
|
|
8c9bc8b53c | ||
|
|
9acba79ec4 | ||
|
|
eab4ea5567 | ||
|
|
f2dcab4ca4 | ||
|
|
2777aaea84 | ||
|
|
f881c09475 | ||
|
|
c195d2bc99 | ||
|
|
f98cd2169a | ||
|
|
d0843a9518 | ||
|
|
2185c6e6fb | ||
|
|
16e8128f5a | ||
|
|
0a411e3112 | ||
|
|
f40b309886 | ||
|
|
20bc8a4307 | ||
|
|
238ab0703a | ||
|
|
3cede80578 | ||
|
|
0ef8f9b89e | ||
|
|
4c0a3c1efa | ||
|
|
8cdfa1a2ce | ||
|
|
00aecd37e8 | ||
|
|
77f0aefe88 | ||
|
|
830a2e908a | ||
|
|
b13110616c | ||
|
|
e77cb835eb | ||
|
|
3de38cbe31 | ||
|
|
bb116775c4 | ||
|
|
982656b71a | ||
|
|
424c0f7049 | ||
|
|
c72c86c984 | ||
|
|
8bdb1fcd27 | ||
|
|
b7ceeccb52 | ||
|
|
44cc5a3fb3 |
No files matched your search
@@ -0,0 +1,5 @@
|
||||
[registry]
|
||||
default = "gitea"
|
||||
|
||||
[registries.gitea]
|
||||
index = "sparse+https://git.segubi.com/api/packages/segubi/cargo/"
|
||||
@@ -0,0 +1,67 @@
|
||||
name: Penerbitan Plugin
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: ["main"]
|
||||
types: ["opened", "synchronize"]
|
||||
|
||||
jobs:
|
||||
persiapan:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
organisasi: ${{ steps.var.outputs.organisasi }}
|
||||
steps:
|
||||
- name: Persiapan variabel
|
||||
id: var
|
||||
run: |
|
||||
echo "organisasi=$(echo '${{ gitea.repository }}' | cut -d'/' -f1)" \
|
||||
>> $GITEA_OUTPUT
|
||||
|
||||
penerbitan:
|
||||
runs-on: ubuntu-latest
|
||||
needs: persiapan
|
||||
steps:
|
||||
- name: Unduh paket untuk membangun citra
|
||||
run: |
|
||||
apt update -y
|
||||
sudo apt install -y libwebkit2gtk-4.1-dev \
|
||||
build-essential \
|
||||
curl \
|
||||
wget \
|
||||
file \
|
||||
libxdo-dev \
|
||||
libssl-dev \
|
||||
libayatana-appindicator3-dev \
|
||||
librsvg2-dev \
|
||||
libudev-dev
|
||||
apt clean -y
|
||||
|
||||
- name: Unduh program
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Unduh Rust
|
||||
uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||
with:
|
||||
toolchain: stable
|
||||
rustflags: "-A warnings"
|
||||
|
||||
- name: Penerbitan peti Cargo
|
||||
run: |
|
||||
cargo publish
|
||||
env:
|
||||
CARGO_REGISTRIES_GITEA_TOKEN: Bearer ${{ secrets.KUNCI_PENERBITAN }}
|
||||
|
||||
- name: Unduh pnpm
|
||||
uses: pnpm/setup@v2
|
||||
with:
|
||||
version: 11
|
||||
|
||||
- name: Penerbitan paket NPM
|
||||
run: |
|
||||
pnpm i
|
||||
npm config set @${{ needs.persiapan.outputs.organisasi }}:registry=https://${{ vars.ALAMAT_GITEA }}/api/packages/${{ needs.persiapan.outputs.organisasi }}/npm/
|
||||
npm config set -- '//${{ vars.ALAMAT_GITEA }}/api/packages/${{ needs.persiapan.outputs.organisasi }}/npm/:_authToken' "${{ secrets.KUNCI_PENERBITAN }}"
|
||||
npm publish
|
||||
rm -rf pnpm-lock.yaml .pnpm-store/
|
||||
+13
-5
@@ -1,10 +1,10 @@
|
||||
[package]
|
||||
name = "tauri-plugin-bluclas"
|
||||
version = "0.1.0"
|
||||
version = "0.1.23"
|
||||
authors = [ "Rizky Denianto" ]
|
||||
description = ""
|
||||
description = "Program sederhana untuk interaksi dengan bluetooth classic"
|
||||
edition = "2024"
|
||||
rust-version = "1.94.1"
|
||||
rust-version = "1.98.0"
|
||||
exclude = ["/examples", "/dist-js", "/guest-js", "/node_modules"]
|
||||
links = "tauri-plugin-bluclas"
|
||||
|
||||
@@ -17,10 +17,18 @@ incremental = false
|
||||
strip = "symbols"
|
||||
debug = false
|
||||
|
||||
[package.metadata.platforms.support]
|
||||
windows = { level = "full" }
|
||||
linux = { level = "full" }
|
||||
macos = { level = "none" }
|
||||
android = { level = "full" }
|
||||
ios = { level = "none" }
|
||||
|
||||
[dependencies]
|
||||
tauri = { version = "2.10.3" }
|
||||
tauri = { version = "2.11.5" }
|
||||
serde = "1.0"
|
||||
thiserror = "2"
|
||||
serialport = "4.10.1"
|
||||
|
||||
[build-dependencies]
|
||||
tauri-plugin = { version = "2.5.4", features = ["build"] }
|
||||
tauri-plugin = { version = "2.6.3", features = ["build"] }
|
||||
@@ -1 +1,3 @@
|
||||
# Tauri Plugin bluclas
|
||||
|
||||
Program sederhana untuk interaksi dengan bluetooth classic
|
||||
@@ -1,3 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
|
||||
</manifest>
|
||||
@@ -27,27 +27,41 @@ class KirimArgs {
|
||||
@TauriPlugin(
|
||||
permissions = [
|
||||
Permission(
|
||||
strings = [Manifest.permission.BLUETOOTH_CONNECT],
|
||||
alias = "bluetoothConnect"
|
||||
strings = [
|
||||
Manifest.permission.BLUETOOTH_SCAN,
|
||||
Manifest.permission.BLUETOOTH_CONNECT,
|
||||
Manifest.permission.BLUETOOTH_ADVERTISE
|
||||
],
|
||||
alias = "bluetooth"
|
||||
)
|
||||
]
|
||||
)
|
||||
class BluclasPlugin(private val activity: Activity) : Plugin(activity) {
|
||||
private val uuidSpp: UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")
|
||||
private val uuid: UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")
|
||||
|
||||
private val adapter: BluetoothAdapter? = this.activity.getSystemService(BluetoothManager::class.java).getAdapter()
|
||||
private var soket: BluetoothSocket? = null
|
||||
private var keluaran: OutputStream? = null
|
||||
private val bluetoothAdapter: BluetoothAdapter? = this.activity.getSystemService(BluetoothManager::class.java).getAdapter()
|
||||
private var bluetoothSocket: BluetoothSocket? = null
|
||||
private var outputStream: OutputStream? = null
|
||||
|
||||
@Command
|
||||
override fun checkPermissions(invoke: Invoke) {
|
||||
super.checkPermissions(invoke)
|
||||
}
|
||||
|
||||
@Command
|
||||
override fun requestPermissions(invoke: Invoke) {
|
||||
super.requestPermissions(invoke)
|
||||
}
|
||||
|
||||
@Command
|
||||
fun daftarPerangkat(invoke: Invoke) {
|
||||
if (adapter == null) {
|
||||
if (bluetoothAdapter == null) {
|
||||
invoke.reject("Bluetooth tidak didukung")
|
||||
return
|
||||
}
|
||||
|
||||
val daftarRes = JSArray()
|
||||
adapter.bondedDevices.map { i ->
|
||||
bluetoothAdapter.bondedDevices.map { i ->
|
||||
val res = JSObject()
|
||||
res.put("nama", i.name ?: "Unknown")
|
||||
res.put("alamat", i.address)
|
||||
@@ -60,32 +74,37 @@ class BluclasPlugin(private val activity: Activity) : Plugin(activity) {
|
||||
}
|
||||
|
||||
fun menghubungkanKoneksi(alamat: String) {
|
||||
val perangkat: BluetoothDevice = adapter!!.getRemoteDevice(alamat)
|
||||
soket = perangkat.createInsecureRfcommSocketToServiceRecord(uuidSpp)
|
||||
soket!!.connect()
|
||||
keluaran = soket!!.outputStream
|
||||
val bluetoothDevice: BluetoothDevice = bluetoothAdapter!!.getRemoteDevice(alamat)
|
||||
bluetoothSocket = bluetoothDevice.createInsecureRfcommSocketToServiceRecord(uuid)
|
||||
bluetoothSocket!!.connect()
|
||||
outputStream = bluetoothSocket!!.outputStream
|
||||
}
|
||||
|
||||
fun memutusKoneksi() {
|
||||
keluaran?.close()
|
||||
keluaran = null
|
||||
soket?.close()
|
||||
soket = null
|
||||
outputStream?.close()
|
||||
outputStream = null
|
||||
bluetoothSocket?.close()
|
||||
bluetoothSocket = null
|
||||
}
|
||||
|
||||
@Command
|
||||
fun kirim(invoke: Invoke) {
|
||||
val args = invoke.parseArgs(KirimArgs::class.java)
|
||||
val alamat = args.alamat
|
||||
if (alamat.isNullOrEmpty()) {
|
||||
invoke.resolve()
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
menghubungkanKoneksi(args.alamat ?: "")
|
||||
menghubungkanKoneksi(alamat)
|
||||
|
||||
if (keluaran == null) {
|
||||
if (outputStream == null) {
|
||||
throw Exception("Tidak ada perangkat yang terhubung")
|
||||
}
|
||||
|
||||
keluaran!!.write(args.data)
|
||||
keluaran!!.flush()
|
||||
outputStream!!.write(args.data)
|
||||
outputStream!!.flush()
|
||||
|
||||
} catch (e: Exception) {
|
||||
memutusKoneksi()
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
const COMMANDS: &[&str] = &["ping"];
|
||||
const COMMANDS: &[&str] = &[
|
||||
"check_permissions",
|
||||
"request_permissions",
|
||||
"daftar_perangkat",
|
||||
"kirim",
|
||||
];
|
||||
|
||||
fn main() {
|
||||
tauri_plugin::Builder::new(COMMANDS)
|
||||
.android_path("android")
|
||||
.ios_path("ios")
|
||||
.build();
|
||||
tauri_plugin::Builder::new(COMMANDS)
|
||||
.android_path("android")
|
||||
.ios_path("ios")
|
||||
.build();
|
||||
}
|
||||
+40
-7
@@ -1,9 +1,42 @@
|
||||
import { invoke } from '@tauri-apps/api/core'
|
||||
import {
|
||||
checkPermissions as checkPermissions_,
|
||||
invoke,
|
||||
PermissionState,
|
||||
requestPermissions as requestPermissions_,
|
||||
} from "@tauri-apps/api/core";
|
||||
|
||||
export async function ping(value: string): Promise<string | null> {
|
||||
return await invoke<{value?: string}>('plugin:bluclas|ping', {
|
||||
payload: {
|
||||
value,
|
||||
},
|
||||
}).then((r) => (r.value ? r.value : null));
|
||||
export async function checkPermissions(): Promise<PermissionState> {
|
||||
return await checkPermissions_<{ bluetooth: PermissionState }>(
|
||||
"bluclas",
|
||||
).then((e) => e.bluetooth);
|
||||
}
|
||||
|
||||
export async function requestPermissions(): Promise<PermissionState> {
|
||||
return await requestPermissions_<{ bluetooth: PermissionState }>(
|
||||
"bluclas",
|
||||
).then((e) => e.bluetooth);
|
||||
}
|
||||
|
||||
export type SDaftarPerangkatBlueclasResponDaftarPerangkat = {
|
||||
nama: string;
|
||||
alamat: string;
|
||||
};
|
||||
|
||||
export type SBlueclasResponDaftarPerangkat = {
|
||||
data: SDaftarPerangkatBlueclasResponDaftarPerangkat[];
|
||||
};
|
||||
|
||||
export async function daftarPerangkat(): Promise<SBlueclasResponDaftarPerangkat> {
|
||||
return await invoke<SBlueclasResponDaftarPerangkat>(
|
||||
"plugin:bluclas|daftar_perangkat",
|
||||
).then((res: SBlueclasResponDaftarPerangkat) => res);
|
||||
}
|
||||
|
||||
export type SBlueclasMuatanKirim = {
|
||||
alamat: string;
|
||||
data: number[];
|
||||
};
|
||||
|
||||
export async function kirim(muatan: SBlueclasMuatanKirim): Promise<null> {
|
||||
return await invoke<null>("plugin:bluclas|kirim", { muatan: muatan });
|
||||
}
|
||||
+8
-8
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "tauri-plugin-bluclas-api",
|
||||
"version": "0.1.0",
|
||||
"name": "@segubi/tauri-plugin-bluclas-api",
|
||||
"version": "0.1.23",
|
||||
"author": "Rizky Denianto",
|
||||
"description": "",
|
||||
"description": "Program sederhana untuk interaksi dengan bluetooth classic",
|
||||
"type": "module",
|
||||
"types": "./dist-js/index.d.ts",
|
||||
"main": "./dist-js/index.cjs",
|
||||
@@ -22,12 +22,12 @@
|
||||
"pretest": "pnpm build"
|
||||
},
|
||||
"dependencies": {
|
||||
"@tauri-apps/api": "^2.0.0"
|
||||
"@tauri-apps/api": "^2.11.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@rollup/plugin-typescript": "^12.0.0",
|
||||
"rollup": "^4.9.6",
|
||||
"typescript": "^5.3.3",
|
||||
"tslib": "^2.6.2"
|
||||
"@rollup/plugin-typescript": "^12.3.0",
|
||||
"rollup": "^4.63.2",
|
||||
"typescript": "^6.0.3",
|
||||
"tslib": "^2.8.1"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
# Automatically generated - DO NOT EDIT!
|
||||
|
||||
"$schema" = "../../schemas/schema.json"
|
||||
|
||||
[[permission]]
|
||||
identifier = "allow-check-permissions"
|
||||
description = "Enables the check_permissions command without any pre-configured scope."
|
||||
commands.allow = ["check_permissions"]
|
||||
|
||||
[[permission]]
|
||||
identifier = "deny-check-permissions"
|
||||
description = "Denies the check_permissions command without any pre-configured scope."
|
||||
commands.deny = ["check_permissions"]
|
||||
@@ -0,0 +1,13 @@
|
||||
# Automatically generated - DO NOT EDIT!
|
||||
|
||||
"$schema" = "../../schemas/schema.json"
|
||||
|
||||
[[permission]]
|
||||
identifier = "allow-daftar-perangkat"
|
||||
description = "Enables the daftar_perangkat command without any pre-configured scope."
|
||||
commands.allow = ["daftar_perangkat"]
|
||||
|
||||
[[permission]]
|
||||
identifier = "deny-daftar-perangkat"
|
||||
description = "Denies the daftar_perangkat command without any pre-configured scope."
|
||||
commands.deny = ["daftar_perangkat"]
|
||||
@@ -0,0 +1,13 @@
|
||||
# Automatically generated - DO NOT EDIT!
|
||||
|
||||
"$schema" = "../../schemas/schema.json"
|
||||
|
||||
[[permission]]
|
||||
identifier = "allow-kirim"
|
||||
description = "Enables the kirim command without any pre-configured scope."
|
||||
commands.allow = ["kirim"]
|
||||
|
||||
[[permission]]
|
||||
identifier = "deny-kirim"
|
||||
description = "Denies the kirim command without any pre-configured scope."
|
||||
commands.deny = ["kirim"]
|
||||
@@ -1,13 +0,0 @@
|
||||
# Automatically generated - DO NOT EDIT!
|
||||
|
||||
"$schema" = "../../schemas/schema.json"
|
||||
|
||||
[[permission]]
|
||||
identifier = "allow-ping"
|
||||
description = "Enables the ping command without any pre-configured scope."
|
||||
commands.allow = ["ping"]
|
||||
|
||||
[[permission]]
|
||||
identifier = "deny-ping"
|
||||
description = "Denies the ping command without any pre-configured scope."
|
||||
commands.deny = ["ping"]
|
||||
@@ -0,0 +1,13 @@
|
||||
# Automatically generated - DO NOT EDIT!
|
||||
|
||||
"$schema" = "../../schemas/schema.json"
|
||||
|
||||
[[permission]]
|
||||
identifier = "allow-request-permissions"
|
||||
description = "Enables the request_permissions command without any pre-configured scope."
|
||||
commands.allow = ["request_permissions"]
|
||||
|
||||
[[permission]]
|
||||
identifier = "deny-request-permissions"
|
||||
description = "Denies the request_permissions command without any pre-configured scope."
|
||||
commands.deny = ["request_permissions"]
|
||||
@@ -4,7 +4,10 @@ Default permissions for the plugin
|
||||
|
||||
#### This default permission set includes the following:
|
||||
|
||||
- `allow-ping`
|
||||
- `allow-check-permissions`
|
||||
- `allow-request-permissions`
|
||||
- `allow-daftar-perangkat`
|
||||
- `allow-kirim`
|
||||
|
||||
## Permission Table
|
||||
|
||||
@@ -18,12 +21,12 @@ Default permissions for the plugin
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
`bluclas:allow-ping`
|
||||
`bluclas:allow-check-permissions`
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
Enables the ping command without any pre-configured scope.
|
||||
Enables the check_permissions command without any pre-configured scope.
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
@@ -31,12 +34,90 @@ Enables the ping command without any pre-configured scope.
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
`bluclas:deny-ping`
|
||||
`bluclas:deny-check-permissions`
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
Denies the ping command without any pre-configured scope.
|
||||
Denies the check_permissions command without any pre-configured scope.
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
`bluclas:allow-daftar-perangkat`
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
Enables the daftar_perangkat command without any pre-configured scope.
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
`bluclas:deny-daftar-perangkat`
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
Denies the daftar_perangkat command without any pre-configured scope.
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
`bluclas:allow-kirim`
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
Enables the kirim command without any pre-configured scope.
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
`bluclas:deny-kirim`
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
Denies the kirim command without any pre-configured scope.
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
`bluclas:allow-request-permissions`
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
Enables the request_permissions command without any pre-configured scope.
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
`bluclas:deny-request-permissions`
|
||||
|
||||
</td>
|
||||
<td>
|
||||
|
||||
Denies the request_permissions command without any pre-configured scope.
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
[default]
|
||||
description = "Default permissions for the plugin"
|
||||
permissions = ["allow-ping"]
|
||||
permissions = [
|
||||
"allow-check-permissions",
|
||||
"allow-request-permissions",
|
||||
"allow-daftar-perangkat",
|
||||
"allow-kirim"
|
||||
]
|
||||
@@ -295,22 +295,58 @@
|
||||
"type": "string",
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Enables the ping command without any pre-configured scope.",
|
||||
"description": "Enables the check_permissions command without any pre-configured scope.",
|
||||
"type": "string",
|
||||
"const": "allow-ping",
|
||||
"markdownDescription": "Enables the ping command without any pre-configured scope."
|
||||
"const": "allow-check-permissions",
|
||||
"markdownDescription": "Enables the check_permissions command without any pre-configured scope."
|
||||
},
|
||||
{
|
||||
"description": "Denies the ping command without any pre-configured scope.",
|
||||
"description": "Denies the check_permissions command without any pre-configured scope.",
|
||||
"type": "string",
|
||||
"const": "deny-ping",
|
||||
"markdownDescription": "Denies the ping command without any pre-configured scope."
|
||||
"const": "deny-check-permissions",
|
||||
"markdownDescription": "Denies the check_permissions command without any pre-configured scope."
|
||||
},
|
||||
{
|
||||
"description": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-ping`",
|
||||
"description": "Enables the daftar_perangkat command without any pre-configured scope.",
|
||||
"type": "string",
|
||||
"const": "allow-daftar-perangkat",
|
||||
"markdownDescription": "Enables the daftar_perangkat command without any pre-configured scope."
|
||||
},
|
||||
{
|
||||
"description": "Denies the daftar_perangkat command without any pre-configured scope.",
|
||||
"type": "string",
|
||||
"const": "deny-daftar-perangkat",
|
||||
"markdownDescription": "Denies the daftar_perangkat command without any pre-configured scope."
|
||||
},
|
||||
{
|
||||
"description": "Enables the kirim command without any pre-configured scope.",
|
||||
"type": "string",
|
||||
"const": "allow-kirim",
|
||||
"markdownDescription": "Enables the kirim command without any pre-configured scope."
|
||||
},
|
||||
{
|
||||
"description": "Denies the kirim command without any pre-configured scope.",
|
||||
"type": "string",
|
||||
"const": "deny-kirim",
|
||||
"markdownDescription": "Denies the kirim command without any pre-configured scope."
|
||||
},
|
||||
{
|
||||
"description": "Enables the request_permissions command without any pre-configured scope.",
|
||||
"type": "string",
|
||||
"const": "allow-request-permissions",
|
||||
"markdownDescription": "Enables the request_permissions command without any pre-configured scope."
|
||||
},
|
||||
{
|
||||
"description": "Denies the request_permissions command without any pre-configured scope.",
|
||||
"type": "string",
|
||||
"const": "deny-request-permissions",
|
||||
"markdownDescription": "Denies the request_permissions command without any pre-configured scope."
|
||||
},
|
||||
{
|
||||
"description": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-check-permissions`\n- `allow-request-permissions`\n- `allow-daftar-perangkat`\n- `allow-kirim`",
|
||||
"type": "string",
|
||||
"const": "default",
|
||||
"markdownDescription": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-ping`"
|
||||
"markdownDescription": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-check-permissions`\n- `allow-request-permissions`\n- `allow-daftar-perangkat`\n- `allow-kirim`"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+2
-1
@@ -20,7 +20,8 @@ export default {
|
||||
plugins: [
|
||||
typescript({
|
||||
declaration: true,
|
||||
declarationDir: dirname(pkg.exports.import)
|
||||
declarationDir: dirname(pkg.exports.import),
|
||||
rootDir: 'guest-js'
|
||||
})
|
||||
],
|
||||
external: [
|
||||
|
||||
+2
-2
@@ -14,7 +14,7 @@ pub(crate) async fn daftar_perangkat<R: Runtime>(
|
||||
#[command]
|
||||
pub(crate) async fn kirim<R: Runtime>(
|
||||
app: AppHandle<R>,
|
||||
payload: SBlueclasMuatanKirim,
|
||||
muatan: SBlueclasMuatanKirim,
|
||||
) -> Result<()> {
|
||||
return app.bluclas().kirim(payload);
|
||||
return app.bluclas().kirim(muatan);
|
||||
}
|
||||
+22
-2
@@ -1,3 +1,5 @@
|
||||
use std::{mem, time::Duration};
|
||||
|
||||
use serde::de::DeserializeOwned;
|
||||
use tauri::{AppHandle, Runtime, plugin::PluginApi};
|
||||
|
||||
@@ -15,10 +17,28 @@ pub struct Bluclas<R: Runtime>(AppHandle<R>);
|
||||
|
||||
impl<R: Runtime> Bluclas<R> {
|
||||
pub fn daftar_perangkat(&self) -> crate::Result<SBlueclasResponDaftarPerangkat> {
|
||||
return Ok(SBlueclasResponDaftarPerangkat { data: vec![] });
|
||||
let port = serialport::available_ports().unwrap_or(Vec::new());
|
||||
let mut daftar_res: Vec<SDaftarPerangkatBlueclasResponDaftarPerangkat> = Vec::new();
|
||||
for i in port {
|
||||
let res = SDaftarPerangkatBlueclasResponDaftarPerangkat {
|
||||
nama: i.port_name.clone(),
|
||||
alamat: i.port_name,
|
||||
};
|
||||
daftar_res.push(res);
|
||||
}
|
||||
return Ok(SBlueclasResponDaftarPerangkat { data: daftar_res });
|
||||
}
|
||||
|
||||
pub fn kirim(&self, _: SBlueclasMuatanKirim) -> crate::Result<()> {
|
||||
pub fn kirim(&self, muatan: SBlueclasMuatanKirim) -> crate::Result<()> {
|
||||
let mut pencetak = match serialport::new(&muatan.alamat, 9600)
|
||||
.timeout(Duration::from_secs(4))
|
||||
.open()
|
||||
{
|
||||
Ok(it) => it,
|
||||
Err(_) => return Ok(()),
|
||||
};
|
||||
pencetak.write(&muatan.data).unwrap();
|
||||
mem::drop(pencetak);
|
||||
return Ok(());
|
||||
}
|
||||
}
|
||||
+4
-7
@@ -1,10 +1,8 @@
|
||||
use tauri::{
|
||||
plugin::{Builder, TauriPlugin},
|
||||
Manager, Runtime,
|
||||
plugin::{Builder, TauriPlugin},
|
||||
};
|
||||
|
||||
pub use models::*;
|
||||
|
||||
#[cfg(desktop)]
|
||||
mod desktop;
|
||||
#[cfg(mobile)]
|
||||
@@ -21,6 +19,8 @@ use desktop::Bluclas;
|
||||
#[cfg(mobile)]
|
||||
use mobile::Bluclas;
|
||||
|
||||
use crate::commands::{daftar_perangkat, kirim};
|
||||
|
||||
/// Extensions to [`tauri::App`], [`tauri::AppHandle`] and [`tauri::Window`] to access the bluclas APIs.
|
||||
pub trait BluclasExt<R: Runtime> {
|
||||
fn bluclas(&self) -> &Bluclas<R>;
|
||||
@@ -35,10 +35,7 @@ impl<R: Runtime, T: Manager<R>> crate::BluclasExt<R> for T {
|
||||
/// Initializes the plugin.
|
||||
pub fn init<R: Runtime>() -> TauriPlugin<R> {
|
||||
Builder::new("bluclas")
|
||||
.invoke_handler(tauri::generate_handler![
|
||||
commands::daftar_perangkat,
|
||||
commands::kirim
|
||||
])
|
||||
.invoke_handler(tauri::generate_handler![daftar_perangkat, kirim])
|
||||
.setup(|app, api| {
|
||||
#[cfg(mobile)]
|
||||
let bluclas = mobile::init(app, api)?;
|
||||
|
||||
+2
-2
@@ -32,10 +32,10 @@ impl<R: Runtime> Bluclas<R> {
|
||||
.map_err(Into::into);
|
||||
}
|
||||
|
||||
pub fn kirim(&self, payload: SBlueclasMuatanKirim) -> crate::Result<()> {
|
||||
pub fn kirim(&self, muatan: SBlueclasMuatanKirim) -> crate::Result<()> {
|
||||
return self
|
||||
.0
|
||||
.run_mobile_plugin("kirim", payload)
|
||||
.run_mobile_plugin("kirim", muatan)
|
||||
.map_err(Into::into);
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -1,19 +1,19 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
|
||||
#[derive(Deserialize, Serialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct SDaftarPerangkatBlueclasResponDaftarPerangkat {
|
||||
pub nama: String,
|
||||
pub alamat: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
|
||||
#[derive(Deserialize, Serialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct SBlueclasResponDaftarPerangkat {
|
||||
pub data: Vec<SDaftarPerangkatBlueclasResponDaftarPerangkat>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize)]
|
||||
#[derive(Deserialize, Serialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct SBlueclasMuatanKirim {
|
||||
pub alamat: String,
|
||||
|
||||
Reference in new issue
Block a user