@delicity/capacitor-thermal-printer 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DelicityThermalPrinter.podspec +28 -0
- package/LICENSE +21 -0
- package/README.md +649 -0
- package/android/build.gradle +122 -0
- package/android/src/main/AndroidManifest.xml +38 -0
- package/android/src/main/java/com/delicity/thermalprinter/Logger.kt +50 -0
- package/android/src/main/java/com/delicity/thermalprinter/ThermalPrinterEngine.kt +528 -0
- package/android/src/main/java/com/delicity/thermalprinter/ThermalPrinterPlugin.kt +334 -0
- package/android/src/main/java/com/delicity/thermalprinter/adapters/BleAdapter.kt +125 -0
- package/android/src/main/java/com/delicity/thermalprinter/adapters/BrotherAdapter.kt +206 -0
- package/android/src/main/java/com/delicity/thermalprinter/adapters/EpsonAdapter.kt +384 -0
- package/android/src/main/java/com/delicity/thermalprinter/adapters/EscPosAdapter.kt +160 -0
- package/android/src/main/java/com/delicity/thermalprinter/adapters/EscPosCommands.kt +42 -0
- package/android/src/main/java/com/delicity/thermalprinter/adapters/EscPosTextEncoder.kt +138 -0
- package/android/src/main/java/com/delicity/thermalprinter/adapters/PrinterAdapter.kt +95 -0
- package/android/src/main/java/com/delicity/thermalprinter/adapters/RawTcpAdapter.kt +96 -0
- package/android/src/main/java/com/delicity/thermalprinter/adapters/SdkContract.kt +158 -0
- package/android/src/main/java/com/delicity/thermalprinter/adapters/SdkReflect.kt +104 -0
- package/android/src/main/java/com/delicity/thermalprinter/adapters/StarAdapter.kt +322 -0
- package/android/src/main/java/com/delicity/thermalprinter/adapters/UsbAdapter.kt +248 -0
- package/android/src/main/java/com/delicity/thermalprinter/adapters/ZebraAdapter.kt +207 -0
- package/android/src/main/java/com/delicity/thermalprinter/discovery/AdapterPriority.kt +39 -0
- package/android/src/main/java/com/delicity/thermalprinter/discovery/BleScanner.kt +70 -0
- package/android/src/main/java/com/delicity/thermalprinter/discovery/BluetoothClassicScanner.kt +112 -0
- package/android/src/main/java/com/delicity/thermalprinter/discovery/DiscoveryManager.kt +136 -0
- package/android/src/main/java/com/delicity/thermalprinter/discovery/TcpScanner.kt +96 -0
- package/android/src/main/java/com/delicity/thermalprinter/image/ImageCache.kt +88 -0
- package/android/src/main/java/com/delicity/thermalprinter/image/ImageProcessor.kt +220 -0
- package/android/src/main/java/com/delicity/thermalprinter/image/TextRasterizer.kt +99 -0
- package/android/src/main/java/com/delicity/thermalprinter/model/Models.kt +206 -0
- package/android/src/main/java/com/delicity/thermalprinter/model/PrintItem.kt +100 -0
- package/android/src/main/java/com/delicity/thermalprinter/store/PrinterStore.kt +71 -0
- package/android/src/main/java/com/delicity/thermalprinter/transport/BleGattClient.kt +201 -0
- package/android/src/main/java/com/delicity/thermalprinter/transport/BluetoothSppTransport.kt +110 -0
- package/android/src/main/java/com/delicity/thermalprinter/transport/ByteTransport.kt +18 -0
- package/android/src/main/java/com/delicity/thermalprinter/transport/TcpTransport.kt +83 -0
- package/dist/esm/adapters/dedup.d.ts +26 -0
- package/dist/esm/adapters/dedup.js +66 -0
- package/dist/esm/adapters/dedup.js.map +1 -0
- package/dist/esm/adapters/priority.d.ts +29 -0
- package/dist/esm/adapters/priority.js +55 -0
- package/dist/esm/adapters/priority.js.map +1 -0
- package/dist/esm/core/enums.d.ts +61 -0
- package/dist/esm/core/enums.js +25 -0
- package/dist/esm/core/enums.js.map +1 -0
- package/dist/esm/core/errors.d.ts +16 -0
- package/dist/esm/core/errors.js +53 -0
- package/dist/esm/core/errors.js.map +1 -0
- package/dist/esm/core/escpos-text.d.ts +33 -0
- package/dist/esm/core/escpos-text.js +239 -0
- package/dist/esm/core/escpos-text.js.map +1 -0
- package/dist/esm/core/imaging.d.ts +91 -0
- package/dist/esm/core/imaging.js +184 -0
- package/dist/esm/core/imaging.js.map +1 -0
- package/dist/esm/core/models.d.ts +131 -0
- package/dist/esm/core/models.js +2 -0
- package/dist/esm/core/models.js.map +1 -0
- package/dist/esm/core/options.d.ts +154 -0
- package/dist/esm/core/options.js +2 -0
- package/dist/esm/core/options.js.map +1 -0
- package/dist/esm/core/text.d.ts +138 -0
- package/dist/esm/core/text.js +14 -0
- package/dist/esm/core/text.js.map +1 -0
- package/dist/esm/definitions.d.ts +155 -0
- package/dist/esm/definitions.js +2 -0
- package/dist/esm/definitions.js.map +1 -0
- package/dist/esm/index.d.ts +15 -0
- package/dist/esm/index.js +18 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/web.d.ts +63 -0
- package/dist/esm/web.js +112 -0
- package/dist/esm/web.js.map +1 -0
- package/dist/plugin.cjs.js +224 -0
- package/dist/plugin.cjs.js.map +1 -0
- package/dist/plugin.js +227 -0
- package/dist/plugin.js.map +1 -0
- package/ios/Plugin/Adapters/BrotherAdapter.swift +139 -0
- package/ios/Plugin/Adapters/EpsonAdapter.swift +131 -0
- package/ios/Plugin/Adapters/EscPosAdapter.swift +106 -0
- package/ios/Plugin/Adapters/EscPosCommands.swift +32 -0
- package/ios/Plugin/Adapters/EscPosTextEncoder.swift +115 -0
- package/ios/Plugin/Adapters/PrinterAdapter.swift +44 -0
- package/ios/Plugin/Adapters/RawTcpAdapter.swift +70 -0
- package/ios/Plugin/Adapters/StarAdapter.swift +305 -0
- package/ios/Plugin/Adapters/ZebraAdapter.swift +119 -0
- package/ios/Plugin/Discovery/AdapterPriority.swift +21 -0
- package/ios/Plugin/Discovery/BonjourScanner.swift +51 -0
- package/ios/Plugin/Discovery/DiscoveryManager.swift +86 -0
- package/ios/Plugin/Image/ImageCache.swift +73 -0
- package/ios/Plugin/Image/ImageProcessor.swift +168 -0
- package/ios/Plugin/Image/TextRasterizer.swift +81 -0
- package/ios/Plugin/Logger.swift +33 -0
- package/ios/Plugin/Model/Models.swift +174 -0
- package/ios/Plugin/Model/PrintItem.swift +111 -0
- package/ios/Plugin/Store/PrinterStore.swift +51 -0
- package/ios/Plugin/ThermalPrinterEngine.swift +395 -0
- package/ios/Plugin/ThermalPrinterPlugin.m +22 -0
- package/ios/Plugin/ThermalPrinterPlugin.swift +258 -0
- package/ios/Plugin/Transport/TcpTransport.swift +89 -0
- package/package.json +96 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
ext {
|
|
2
|
+
junitVersion = project.hasProperty('junitVersion') ? rootProject.ext.junitVersion : '4.13.2'
|
|
3
|
+
androidxAppCompatVersion = project.hasProperty('androidxAppCompatVersion') ? rootProject.ext.androidxAppCompatVersion : '1.6.1'
|
|
4
|
+
androidxJunitVersion = project.hasProperty('androidxJunitVersion') ? rootProject.ext.androidxJunitVersion : '1.1.5'
|
|
5
|
+
androidxEspressoCoreVersion = project.hasProperty('androidxEspressoCoreVersion') ? rootProject.ext.androidxEspressoCoreVersion : '3.5.1'
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
buildscript {
|
|
9
|
+
repositories {
|
|
10
|
+
google()
|
|
11
|
+
mavenCentral()
|
|
12
|
+
}
|
|
13
|
+
dependencies {
|
|
14
|
+
// Capacitor 7 : AGP 8.7.2 / Gradle 8.11.1 / JDK 21
|
|
15
|
+
classpath 'com.android.tools.build:gradle:8.7.2'
|
|
16
|
+
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:2.0.21"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
apply plugin: 'com.android.library'
|
|
21
|
+
apply plugin: 'kotlin-android'
|
|
22
|
+
apply plugin: 'jacoco'
|
|
23
|
+
|
|
24
|
+
android {
|
|
25
|
+
namespace "com.delicity.thermalprinter"
|
|
26
|
+
compileSdk project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 35
|
|
27
|
+
defaultConfig {
|
|
28
|
+
minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 23
|
|
29
|
+
targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 35
|
|
30
|
+
versionCode 1
|
|
31
|
+
versionName "0.1.0"
|
|
32
|
+
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
|
33
|
+
}
|
|
34
|
+
compileOptions {
|
|
35
|
+
sourceCompatibility JavaVersion.VERSION_21
|
|
36
|
+
targetCompatibility JavaVersion.VERSION_21
|
|
37
|
+
}
|
|
38
|
+
kotlinOptions {
|
|
39
|
+
jvmTarget = '21'
|
|
40
|
+
}
|
|
41
|
+
lintOptions {
|
|
42
|
+
abortOnError false
|
|
43
|
+
}
|
|
44
|
+
buildTypes {
|
|
45
|
+
release {
|
|
46
|
+
minifyEnabled false
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
testOptions {
|
|
50
|
+
unitTests {
|
|
51
|
+
includeAndroidResources = true
|
|
52
|
+
returnDefaultValues = true
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
repositories {
|
|
58
|
+
google()
|
|
59
|
+
mavenCentral()
|
|
60
|
+
flatDir {
|
|
61
|
+
// SDK fabricants livrés en .aar/.jar manuel (Epson ePOS2, Brother, Zebra Link-OS)
|
|
62
|
+
// à déposer dans android/libs/ (binaires NON committés). Voir docs/SDK_INTEGRATION.md
|
|
63
|
+
dirs 'libs'
|
|
64
|
+
}
|
|
65
|
+
// ---- Zebra Link-OS : dépôt Maven PRIVÉ Zebra (credentials requis) ----
|
|
66
|
+
// Décommenter + renseigner zebraCoreId / zebraToken dans gradle.properties pour
|
|
67
|
+
// activer l'auto-download de Zebra. Voir docs/SDK_INTEGRATION.md (§ Zebra).
|
|
68
|
+
// maven {
|
|
69
|
+
// url "https://artifactory-us.zebra.com/artifactory/dmo-mvn-rel/"
|
|
70
|
+
// credentials {
|
|
71
|
+
// username = project.findProperty('zebraCoreId') ?: ''
|
|
72
|
+
// password = project.findProperty('zebraToken') ?: ''
|
|
73
|
+
// }
|
|
74
|
+
// }
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
dependencies {
|
|
78
|
+
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
|
|
79
|
+
implementation project(':capacitor-android')
|
|
80
|
+
implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion"
|
|
81
|
+
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3"
|
|
82
|
+
|
|
83
|
+
// ---- Star StarXpand : SEUL SDK 100% auto-download (Maven Central, sans licence gate) ----
|
|
84
|
+
// L'adapter Star utilise des appels TYPÉS (compilation directe contre ces classes).
|
|
85
|
+
// Pour désactiver Star (réduire la taille), commenter cette ligne ET StarAdapter sera
|
|
86
|
+
// ignoré (isAvailable()=false via réflexion). Version à réactualiser au besoin.
|
|
87
|
+
implementation "com.starmicronics:stario10:1.12.1"
|
|
88
|
+
|
|
89
|
+
// ---- Epson / Brother / Zebra : binaires MANUELS (license-gated, non redistribuables) ----
|
|
90
|
+
// Les adapters correspondants utilisent la RÉFLEXION : le plugin compile/s'installe SANS
|
|
91
|
+
// ces binaires, et chaque adapter s'active automatiquement si le binaire est présent.
|
|
92
|
+
// Déposer les fichiers dans android/libs/ (voir docs/SDK_INTEGRATION.md) :
|
|
93
|
+
// • Epson : ePOS2.jar (portail Epson)
|
|
94
|
+
// • Brother: BrotherPrintLibrary.aar (portail Brother)
|
|
95
|
+
// • Zebra : ZSDK_ANDROID_API.jar (portail Zebra) — ou dépôt Maven privé ci-dessus.
|
|
96
|
+
// Aucune ligne `implementation` n'est requise pour eux : fileTree(libs) ci-dessus suffit
|
|
97
|
+
// à les embarquer dans l'app consommatrice quand ils sont présents.
|
|
98
|
+
|
|
99
|
+
testImplementation "junit:junit:$junitVersion"
|
|
100
|
+
// Tests JVM des adapters SDK (faux SDK sur le classpath de test) + Robolectric
|
|
101
|
+
// pour Context/Bitmap, sans émulateur. Voir docs/TESTING_SDK.md.
|
|
102
|
+
testImplementation "org.robolectric:robolectric:4.13"
|
|
103
|
+
testImplementation "androidx.test:core:1.6.1"
|
|
104
|
+
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3"
|
|
105
|
+
androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion"
|
|
106
|
+
androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion"
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Rapport de couverture des tests unitaires JVM (./gradlew testDebugUnitTest jacocoTestReport)
|
|
110
|
+
tasks.register('jacocoTestReport', JacocoReport) {
|
|
111
|
+
dependsOn 'testDebugUnitTest'
|
|
112
|
+
reports {
|
|
113
|
+
html.required = true
|
|
114
|
+
xml.required = true
|
|
115
|
+
}
|
|
116
|
+
def kotlinClasses = fileTree(dir: "${buildDir}/tmp/kotlin-classes/debug", excludes: [
|
|
117
|
+
'**/model/**', // data classes / JSON mapping
|
|
118
|
+
])
|
|
119
|
+
classDirectories.setFrom(kotlinClasses)
|
|
120
|
+
sourceDirectories.setFrom(files('src/main/java'))
|
|
121
|
+
executionData.setFrom(fileTree(dir: buildDir, includes: ['**/testDebugUnitTest.exec', '**/jacoco/*.exec']))
|
|
122
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
3
|
+
xmlns:tools="http://schemas.android.com/tools">
|
|
4
|
+
|
|
5
|
+
<!-- ============ Bluetooth (Android <= 11 / API <= 30) ============ -->
|
|
6
|
+
<uses-permission android:name="android.permission.BLUETOOTH"
|
|
7
|
+
android:maxSdkVersion="30" />
|
|
8
|
+
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
|
|
9
|
+
android:maxSdkVersion="30" />
|
|
10
|
+
<!-- Le scan BLE exige la localisation jusqu'à Android 11 -->
|
|
11
|
+
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
|
|
12
|
+
android:maxSdkVersion="30" />
|
|
13
|
+
|
|
14
|
+
<!-- ============ Bluetooth (Android 12+ / API 31+) ============ -->
|
|
15
|
+
<!-- usesPermissionFlags=neverForLocation : on déclare ne PAS dériver la
|
|
16
|
+
localisation à partir du scan BT, ce qui évite de demander la localisation. -->
|
|
17
|
+
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
|
|
18
|
+
android:usesPermissionFlags="neverForLocation"
|
|
19
|
+
tools:targetApi="s" />
|
|
20
|
+
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"
|
|
21
|
+
tools:targetApi="s" />
|
|
22
|
+
|
|
23
|
+
<!-- ============ Réseau (Wi-Fi / Ethernet TCP 9100) ============ -->
|
|
24
|
+
<uses-permission android:name="android.permission.INTERNET" />
|
|
25
|
+
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
|
26
|
+
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
|
27
|
+
<!-- mDNS / discovery réseau (multicast) -->
|
|
28
|
+
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
|
|
29
|
+
|
|
30
|
+
<!-- ============ USB host (optionnel) ============ -->
|
|
31
|
+
<uses-feature android:name="android.hardware.usb.host" android:required="false" />
|
|
32
|
+
|
|
33
|
+
<!-- Déclarations de matériel non obligatoire pour ne pas exclure d'appareils -->
|
|
34
|
+
<uses-feature android:name="android.hardware.bluetooth" android:required="false" />
|
|
35
|
+
<uses-feature android:name="android.hardware.bluetooth_le" android:required="false" />
|
|
36
|
+
<uses-feature android:name="android.hardware.wifi" android:required="false" />
|
|
37
|
+
|
|
38
|
+
</manifest>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
package com.delicity.thermalprinter
|
|
2
|
+
|
|
3
|
+
import android.util.Log
|
|
4
|
+
import org.json.JSONArray
|
|
5
|
+
import org.json.JSONObject
|
|
6
|
+
import java.util.ArrayDeque
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Logger circulaire en mémoire + Logcat, pour le diagnostic support client.
|
|
10
|
+
*
|
|
11
|
+
* - garde les N dernières lignes (ring buffer) consultables via getDebugLog(),
|
|
12
|
+
* - chaque ligne est horodatée et catégorisée (discovery/connect/print/status),
|
|
13
|
+
* - jamais de données image brutes (juste tailles/dimensions).
|
|
14
|
+
*
|
|
15
|
+
* L'app peut exposer ces logs dans un écran "Diagnostic imprimante" et les
|
|
16
|
+
* joindre à un ticket de support.
|
|
17
|
+
*/
|
|
18
|
+
object Logger {
|
|
19
|
+
private const val TAG = "ThermalPrinter"
|
|
20
|
+
private const val MAX_LINES = 500
|
|
21
|
+
private val ring = ArrayDeque<JSONObject>(MAX_LINES)
|
|
22
|
+
@Volatile var verbose: Boolean = false
|
|
23
|
+
|
|
24
|
+
@Synchronized
|
|
25
|
+
fun log(category: String, message: String, data: Map<String, Any?>? = null) {
|
|
26
|
+
val entry = JSONObject()
|
|
27
|
+
.put("ts", System.currentTimeMillis())
|
|
28
|
+
.put("category", category)
|
|
29
|
+
.put("message", message)
|
|
30
|
+
data?.forEach { (k, v) -> entry.put(k, v ?: JSONObject.NULL) }
|
|
31
|
+
if (ring.size >= MAX_LINES) ring.pollFirst()
|
|
32
|
+
ring.addLast(entry)
|
|
33
|
+
if (verbose) Log.d(TAG, "[$category] $message ${data ?: ""}")
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
fun error(category: String, message: String, t: Throwable? = null) {
|
|
37
|
+
log(category, message, mapOf("error" to (t?.message ?: "")))
|
|
38
|
+
Log.e(TAG, "[$category] $message", t)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@Synchronized
|
|
42
|
+
fun snapshot(): JSONArray {
|
|
43
|
+
val arr = JSONArray()
|
|
44
|
+
ring.forEach { arr.put(it) }
|
|
45
|
+
return arr
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
@Synchronized
|
|
49
|
+
fun clear() = ring.clear()
|
|
50
|
+
}
|