@rdlabo/capacitor-brotherprint 6.2.0-2 → 6.3.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/README.md CHANGED
@@ -2,17 +2,19 @@
2
2
 
3
3
  Capacitor Brother Print is a native Brother Print SDK implementation for iOS & Android. Support These models.
4
4
 
5
+ **This plugin is still in the RC (release candidate) phase.**
6
+
5
7
  ## Supported models
6
8
 
7
9
  Each product link is an Amazon affiliate link. If you choose to make a purchase through these links, it would be greatly appreciated and **would help** support development costs. Thank you!
8
10
 
9
11
  | Product | Model | iOS/WiFi | iOS/BT | iOS/BLE | Android/USB | Android/WiFi | Android/BT | Android/BLE |
10
12
  | ------------------------------------- | ------------ | -------- | ------ | ------- | ----------- | ------------ | ---------- | ----------- |
11
- | QL-810W | QL_810W | ✗ | ✗ | ✗ | | ✗ | ✗ | ✗ |
12
- | [QL-820NWB](https://amzn.to/3BXQ1aj) | QL_820NWB | ◯ | | ✗ | | ◯ | △ | ✗ |
13
- | [QL-820NWBc](https://amzn.to/4fjhUIe) | QL_820NWB | ◯ | ※1 | ✗ | ✗ | ◯ | ◯ | ✗ |
13
+ | QL-810W | QL_810W | ✗ | ✗ | ✗ | - | ✗ | ✗ | ✗ |
14
+ | [QL-820NWB](https://amzn.to/3BXQ1aj) | QL_820NWB | ◯ | ※1 | ✗ | - | ◯ | △ | ✗ |
15
+ | [QL-820NWBc](https://amzn.to/4fjhUIe) | QL_820NWB | ◯ | ※2 | ✗ | ✗ | ◯ | ◯ | ✗ |
14
16
  | [TD-2320D](https://amzn.to/48EFCN3) | TD_2320D_203 | ✗ | ✗ | ✗ | △ | ✗ | ✗ | ✗ |
15
- | [TD-2350D](https://amzn.to/48ma6TK) | TD_2350D_203 | | △ | △ | | | | △ |
17
+ | [TD-2350D](https://amzn.to/48ma6TK) | TD_2350D_300 | | △ | △ | - | | | △ |
16
18
 
17
19
  Amazon Affiliate Links: **https://amzn.to/3AiiOFT**
18
20
 
@@ -22,20 +24,19 @@ Amazon Affiliate Links: **https://amzn.to/3AiiOFT**
22
24
  | --- | -------------------------- |
23
25
  | ◯ | Supported and tested |
24
26
  | △ | Implemented but not tested |
25
- | | Not supported |
27
+ | - | Plugin is not supported |
28
+ | ✗ | Device is not supported |
26
29
  | BT | Bluetooth |
27
30
  | BLE | Bluetooth Low Energy |
28
31
 
29
- ※1 The iOS/BT implementation for the QL-820NWBc is in place, but it’s uncertain if it functions correctly. It’s unclear whether this is an implementation issue, as Brother’s official app also doesn’t work well.
30
-
31
- ### Note
32
+ ※1 Due to low Bluetooth version, connection is not possible with iOS. Ref: https://okbizcs.okwave.jp/brother/qa/q9932082.html
32
33
 
33
- iOS `BRLMQLPrintSettingsLabelSize.dieCutW29H90` may work as `BRLMQLPrintSettingsLabelSize.dieCutW29H42`.
34
+ ※2 The iOS/BT implementation for the QL-820NWBc is in place, but it’s uncertain if it functions correctly. It’s unclear whether this is an implementation issue, as Brother’s official app also doesn’t work well.
34
35
 
35
36
  ## How to install
36
37
 
37
38
  ```
38
- % npm install @rdlabo/capacitor-brotherprint@next
39
+ % npm install @rdlabo/capacitor-brotherprint
39
40
  ```
40
41
 
41
42
  ## Initialize the Brother SDK
@@ -231,10 +232,10 @@ export class BrotherComponent implements OnInit, OnDestroy {
231
232
  * [`search(...)`](#search)
232
233
  * [`cancelSearchWiFiPrinter()`](#cancelsearchwifiprinter)
233
234
  * [`cancelSearchBluetoothPrinter()`](#cancelsearchbluetoothprinter)
234
- * [`addListener(BrotherPrintEventsEnum.onPrinterAvailable, ...)`](#addlistenerbrotherprinteventsenumonprinteravailable)
235
- * [`addListener(BrotherPrintEventsEnum.onPrint, ...)`](#addlistenerbrotherprinteventsenumonprint)
236
- * [`addListener(BrotherPrintEventsEnum.onPrintFailedCommunication, ...)`](#addlistenerbrotherprinteventsenumonprintfailedcommunication)
237
- * [`addListener(BrotherPrintEventsEnum.onPrintError, ...)`](#addlistenerbrotherprinteventsenumonprinterror)
235
+ * [`addListener(BrotherPrintEventsEnum.onPrinterAvailable, ...)`](#addlistenerbrotherprinteventsenumonprinteravailable-)
236
+ * [`addListener(BrotherPrintEventsEnum.onPrint, ...)`](#addlistenerbrotherprinteventsenumonprint-)
237
+ * [`addListener(BrotherPrintEventsEnum.onPrintFailedCommunication, ...)`](#addlistenerbrotherprinteventsenumonprintfailedcommunication-)
238
+ * [`addListener(BrotherPrintEventsEnum.onPrintError, ...)`](#addlistenerbrotherprinteventsenumonprinterror-)
238
239
  * [Interfaces](#interfaces)
239
240
  * [Type Aliases](#type-aliases)
240
241
  * [Enums](#enums)
@@ -300,6 +301,8 @@ Basically, it times out, so there is no need to use it. Use it when you want to
300
301
  addListener(eventName: BrotherPrintEventsEnum.onPrinterAvailable, listenerFunc: (printers: BRLMChannelResult) => void) => Promise<PluginListenerHandle>
301
302
  ```
302
303
 
304
+ Find the printer that can connected to the device.
305
+
303
306
  | Param | Type |
304
307
  | ------------------ | -------------------------------------------------------------------------------------------- |
305
308
  | **`eventName`** | <code><a href="#brotherprinteventsenum">BrotherPrintEventsEnum.onPrinterAvailable</a></code> |
@@ -316,6 +319,8 @@ addListener(eventName: BrotherPrintEventsEnum.onPrinterAvailable, listenerFunc:
316
319
  addListener(eventName: BrotherPrintEventsEnum.onPrint, listenerFunc: () => void) => Promise<PluginListenerHandle>
317
320
  ```
318
321
 
322
+ Success Print Event
323
+
319
324
  | Param | Type |
320
325
  | ------------------ | --------------------------------------------------------------------------------- |
321
326
  | **`eventName`** | <code><a href="#brotherprinteventsenum">BrotherPrintEventsEnum.onPrint</a></code> |
@@ -332,6 +337,9 @@ addListener(eventName: BrotherPrintEventsEnum.onPrint, listenerFunc: () => void)
332
337
  addListener(eventName: BrotherPrintEventsEnum.onPrintFailedCommunication, listenerFunc: (info: ErrorInfo) => void) => Promise<PluginListenerHandle>
333
338
  ```
334
339
 
340
+ Failed to connect to the printer.
341
+ ex: Bluetooth is off, Printer is off, etc.
342
+
335
343
  | Param | Type |
336
344
  | ------------------ | ---------------------------------------------------------------------------------------------------- |
337
345
  | **`eventName`** | <code><a href="#brotherprinteventsenum">BrotherPrintEventsEnum.onPrintFailedCommunication</a></code> |
@@ -348,6 +356,8 @@ addListener(eventName: BrotherPrintEventsEnum.onPrintFailedCommunication, listen
348
356
  addListener(eventName: BrotherPrintEventsEnum.onPrintError, listenerFunc: (info: ErrorInfo) => void) => Promise<PluginListenerHandle>
349
357
  ```
350
358
 
359
+ Failed to print.
360
+
351
361
  | Param | Type |
352
362
  | ------------------ | -------------------------------------------------------------------------------------- |
353
363
  | **`eventName`** | <code><a href="#brotherprinteventsenum">BrotherPrintEventsEnum.onPrintError</a></code> |
@@ -373,7 +383,7 @@ addListener(eventName: BrotherPrintEventsEnum.onPrintError, listenerFunc: (info:
373
383
 
374
384
  #### BRLMPrintOptions
375
385
 
376
- <code>{ encodedImage: string; /** * Should use enum <a href="#brlmprinterlabelname">BRLMPrinterLabelName</a> */ labelName: <a href="#brlmprinterlabelname">BRLMPrinterLabelName</a>; /** * Should use enum <a href="#brlmprintermodelname">BRLMPrinterModelName</a> */ modelName: <a href="#brlmprintermodelname">BRLMPrinterModelName</a>; } & <a href="#partial">Partial</a>&lt;<a href="#brlmchannelresult">BRLMChannelResult</a>&gt; & <a href="#brlmprintersettings">BRLMPrinterSettings</a></code>
386
+ <code>{ encodedImage: string; /** * Should use enum <a href="#brlmprintermodelname">BRLMPrinterModelName</a> */ modelName: <a href="#brlmprintermodelname">BRLMPrinterModelName</a>; } & <a href="#partial">Partial</a>&lt;<a href="#brlmchannelresult">BRLMChannelResult</a>&gt; & (<a href="#brlmprinterqlmodelsettings">BRLMPrinterQLModelSettings</a> | <a href="#brlmprintertdmodelsettings">BRLMPrinterTDModelSettings</a>)</code>
377
387
 
378
388
 
379
389
  #### Partial
@@ -385,14 +395,19 @@ Make all properties in T optional
385
395
 
386
396
  #### BRLMChannelResult
387
397
 
388
- <code>{ port: 'wifi' | 'bluetooth' | 'bluetoothLowEnergy'; modelName: string; serialNumber: string; macAddress: string; nodeName: string; location: string; ipAddress: string; }</code>
398
+ <code>{ port: 'usb' | 'wifi' | 'bluetooth' | 'bluetoothLowEnergy'; modelName: string; serialNumber: string; macAddress: string; nodeName: string; location: string; /** * This need to connect to the printer. * wifi: IP Address * bluetooth: macAddress * bluetoothLowEnergy: modelName for bluetoothLowEnergy */ channelInfo: string; }</code>
399
+
400
+
401
+ #### BRLMPrinterQLModelSettings
402
+
403
+ <code>{ /** * Should use enum <a href="#brlmprinterlabelname">BRLMPrinterLabelName</a> */ labelName: <a href="#brlmprinterlabelname">BRLMPrinterLabelName</a>; } & <a href="#brlmprintersettings">BRLMPrinterSettings</a></code>
389
404
 
390
405
 
391
406
  #### BRLMPrinterSettings
392
407
 
393
408
  These are optional. If these are not set, default values are assigned by the printer.
394
409
 
395
- <code>{ /** * The number of copies you print. */ numberOfCopies?: <a href="#brlmprinternumberofcopies">BRLMPrinterNumberOfCopies</a>; /** * Whether the auto-cut is enabled or not. If true, your printer cut the paper each page. */ autoCut?: <a href="#brlmprinterautocuttype">BRLMPrinterAutoCutType</a>; /** * A scale mode that specifies how your data is scaled in a print area of your printer. */ scaleMode?: <a href="#brlmprinterscalemode">BRLMPrinterScaleMode</a>; /** * A scale value. This is effective when ScaleMode is ScaleValue. */ scaleValue?: <a href="#brlmprinterscalevaluetype">BRLMPrinterScaleValueType</a>; /** * A way to rasterize your data. */ halftone?: <a href="#brlmprinterhalftone">BRLMPrinterHalftone</a>; /** * A threshold value. This is effective when the Halftone is Threshold. */ halftoneThreshold?: <a href="#brlmprinterhalftonethresholdtype">BRLMPrinterHalftoneThresholdType</a>; /** * An image rotation that specifies the angle in which your data is placed in the print area. Rotation direction is clockwise. */ imageRotation?: <a href="#brlmprinterimagerotation">BRLMPrinterImageRotation</a>; /** * A vertical alignment that specifies how your data is placed in the printable area. */ verticalAlignment?: <a href="#brlmprinterverticalalignment">BRLMPrinterVerticalAlignment</a>; /** * A horizontal alignment that specifies how your data is placed in the printable area. */ horizontalAlignment?: <a href="#brlmprinterhorizontalalignment">BRLMPrinterHorizontalAlignment</a>; /** * A compress mode that specifies how to compress your data. * note: This is ios only. */ compressMode?: <a href="#brlmprintercompressmode">BRLMPrinterCompressMode</a>; /** * A priority that is print speed or print quality. Whether or not this has an effect is depend on your printer. */ printQuality?: <a href="#brlmprinterprintquality">BRLMPrinterPrintQuality</a>; /** * A priority that is print speed or print quality. Whether or not this has an effect is depend on your printer. * note: This is ios only. */ resolution?: <a href="#brlmprinterprintresolution">BRLMPrinterPrintResolution</a>; }</code>
410
+ <code>{ /** * The number of copies you print. */ numberOfCopies?: <a href="#brlmprinternumberofcopies">BRLMPrinterNumberOfCopies</a>; /** * Whether the auto-cut is enabled or not. If true, your printer cut the paper each page. */ autoCut?: <a href="#brlmprinterautocuttype">BRLMPrinterAutoCutType</a>; /** * A scale mode that specifies how your data is scaled in a print area of your printer. */ scaleMode?: <a href="#brlmprinterscalemode">BRLMPrinterScaleMode</a>; /** * A scale value. This is effective when ScaleMode is ScaleValue. */ scaleValue?: <a href="#brlmprinterscalevaluetype">BRLMPrinterScaleValueType</a>; /** * A way to rasterize your data. */ halftone?: <a href="#brlmprinterhalftone">BRLMPrinterHalftone</a>; /** * A threshold value. This is effective when the Halftone is Threshold. */ halftoneThreshold?: <a href="#brlmprinterhalftonethresholdtype">BRLMPrinterHalftoneThresholdType</a>; /** * An image rotation that specifies the angle in which your data is placed in the print area. Rotation direction is clockwise. */ imageRotation?: <a href="#brlmprinterimagerotation">BRLMPrinterImageRotation</a>; /** * A vertical alignment that specifies how your data is placed in the printable area. */ verticalAlignment?: <a href="#brlmprinterverticalalignment">BRLMPrinterVerticalAlignment</a>; /** * A horizontal alignment that specifies how your data is placed in the printable area. */ horizontalAlignment?: <a href="#brlmprinterhorizontalalignment">BRLMPrinterHorizontalAlignment</a>; /** * A compress mode that specifies how to compress your data. * note: This is ios only. */ compressMode?: <a href="#brlmprintercompressmode">BRLMPrinterCompressMode</a>; /** * A priority that is print speed or print quality. Whether or not this has an effect is depend on your printer. */ printQuality?: <a href="#brlmprinterprintquality">BRLMPrinterPrintQuality</a>; }</code>
396
411
 
397
412
 
398
413
  #### BRLMPrinterNumberOfCopies
@@ -415,9 +430,14 @@ These are optional. If these are not set, default values are assigned by the pri
415
430
  <code>number</code>
416
431
 
417
432
 
433
+ #### BRLMPrinterTDModelSettings
434
+
435
+ <code>{ /** * Should use enum <a href="#brkmprintercustompapertype">BRKMPrinterCustomPaperType</a> */ paperType: <a href="#brkmprintercustompapertype">BRKMPrinterCustomPaperType</a>; /** * The width of the label. For example, the RD-U04J1 is 60.0 wide. */ tapeWidth: number; /** * The length of the label. For example, the RD-U04J1 is 60.0 wide. */ tapeLength: number; /** * It is the difference between a sticker and a mount. * For example, the RD-U04J1 is `1.0, 2.0, 1.0, 2.0` */ marginTop: number; marginRight: number; marginBottom: number; marginLeft: number; /** * The spacing between seals. For example, the RD-U04J1 is 0.2. */ gapLength: number; paperMarkPosition: number; paperMarkLength: number; /** * Should use enum <a href="#brkmprintercustompaperunit">BRKMPrinterCustomPaperUnit</a>. * For example, the RD-U04J1 is mm. */ paperUnit: <a href="#brkmprintercustompaperunit">BRKMPrinterCustomPaperUnit</a>; }</code>
436
+
437
+
418
438
  #### BRLMSearchOption
419
439
 
420
- <code>{ port: 'wifi' | 'bluetooth' | 'bluetoothLowEnergy'; /** * searchDuration is the time to end search for devices. * default is 15 seconds. * use only port is 'wifi' or 'bluetoothLowEnergy'. */ searchDuration: number; }</code>
440
+ <code>{ /** * 'usb' is android only, and now developing. */ port: 'usb' | 'wifi' | 'bluetooth' | 'bluetoothLowEnergy'; /** * searchDuration is the time to end search for devices. * default is 15 seconds. * use only port is 'wifi' or 'bluetoothLowEnergy'. */ searchDuration: number; }</code>
421
441
 
422
442
 
423
443
  #### ErrorInfo
@@ -428,6 +448,17 @@ These are optional. If these are not set, default values are assigned by the pri
428
448
  ### Enums
429
449
 
430
450
 
451
+ #### BRLMPrinterModelName
452
+
453
+ | Members | Value |
454
+ | ------------------ | --------------------------- |
455
+ | **`QL_810W`** | <code>'QL_810W'</code> |
456
+ | **`QL_820NWB`** | <code>'QL_820NWB'</code> |
457
+ | **`TD_2320D_203`** | <code>'TD_2320D_203'</code> |
458
+ | **`TD_2030AD`** | <code>'TD_2030AD'</code> |
459
+ | **`TD_2350D_300`** | <code>'TD_2350D_300'</code> |
460
+
461
+
431
462
  #### BRLMPrinterLabelName
432
463
 
433
464
  | Members | Value |
@@ -458,17 +489,6 @@ These are optional. If these are not set, default values are assigned by the pri
458
489
  | **`W62H75`** | <code>'W62H75'</code> |
459
490
 
460
491
 
461
- #### BRLMPrinterModelName
462
-
463
- | Members | Value |
464
- | ------------------ | --------------------------- |
465
- | **`QL_810W`** | <code>'QL_810W'</code> |
466
- | **`QL_820NWB`** | <code>'QL_820NWB'</code> |
467
- | **`TD_2320D_203`** | <code>'TD_2320D_203'</code> |
468
- | **`TD_2030AD`** | <code>'TD_2030AD'</code> |
469
- | **`TD_2350D_203`** | <code>'TD_2350D_203'</code> |
470
-
471
-
472
492
  #### BRLMPrinterScaleMode
473
493
 
474
494
  | Members | Value |
@@ -533,13 +553,21 @@ These are optional. If these are not set, default values are assigned by the pri
533
553
  | **`Fast`** | <code>'Fast'</code> |
534
554
 
535
555
 
536
- #### BRLMPrinterPrintResolution
556
+ #### BRKMPrinterCustomPaperType
537
557
 
538
- | Members | Value |
539
- | ------------ | --------------------- |
540
- | **`Low`** | <code>'Low'</code> |
541
- | **`Normal`** | <code>'Normal'</code> |
542
- | **`High`** | <code>'High'</code> |
558
+ | Members | Value |
559
+ | ------------------- | ---------------------------- |
560
+ | **`rollPaper`** | <code>'rollPaper'</code> |
561
+ | **`dieCutPaper`** | <code>'dieCutPaper'</code> |
562
+ | **`markRollPaper`** | <code>'markRollPaper'</code> |
563
+
564
+
565
+ #### BRKMPrinterCustomPaperUnit
566
+
567
+ | Members | Value |
568
+ | ---------- | ------------------- |
569
+ | **`mm`** | <code>'mm'</code> |
570
+ | **`inch`** | <code>'inch'</code> |
543
571
 
544
572
 
545
573
  #### BrotherPrintEventsEnum
@@ -1,17 +1,2 @@
1
-
2
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
- >
4
-
5
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
6
-
7
- <!-- For Wi-Fi -->
8
- <uses-permission android:name="android.permission.INTERNET" />
9
-
10
- <!-- For Bluetooth -->
11
- <uses-permission android:name="android.permission.BLUETOOTH" />
12
- <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
13
-
14
- <!-- For Bluetooth Low Energy -->
15
- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
16
- </manifest>
17
-
1
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
2
+ </manifest>
@@ -1,22 +1,28 @@
1
1
  package jp.rdlabo.capacitor.plugin.brotherprint
2
2
 
3
+ import android.Manifest
4
+ import android.bluetooth.BluetoothAdapter
3
5
  import android.bluetooth.BluetoothManager
4
6
  import android.content.Context
5
7
  import android.graphics.BitmapFactory
8
+ import android.hardware.usb.UsbManager
6
9
  import android.util.Base64
7
10
  import android.util.Log
8
- import com.brother.ptouch.sdk.LabelInfo
9
- import com.brother.ptouch.sdk.Printer
10
- import com.brother.ptouch.sdk.PrinterInfo
11
11
  import com.brother.sdk.lmprinter.BLESearchOption
12
12
  import com.brother.sdk.lmprinter.Channel
13
13
  import com.brother.sdk.lmprinter.NetworkSearchOption
14
+ import com.brother.sdk.lmprinter.OpenChannelError
15
+ import com.brother.sdk.lmprinter.PrintError
16
+ import com.brother.sdk.lmprinter.PrinterDriverGenerator
17
+ import com.brother.sdk.lmprinter.PrinterModel
14
18
  import com.brother.sdk.lmprinter.PrinterSearcher
15
19
  import com.brother.sdk.lmprinter.PrinterSearcher.cancelNetworkSearch
20
+ import com.brother.sdk.lmprinter.setting.PrintSettings
21
+ import com.brother.sdk.lmprinter.setting.QLPrintSettings
22
+ import com.brother.sdk.lmprinter.setting.TDPrintSettings
16
23
  import com.getcapacitor.JSObject
17
- import com.getcapacitor.Plugin
18
- import android.Manifest;
19
24
  import com.getcapacitor.PermissionState
25
+ import com.getcapacitor.Plugin
20
26
  import com.getcapacitor.PluginCall
21
27
  import com.getcapacitor.PluginMethod
22
28
  import com.getcapacitor.annotation.CapacitorPlugin
@@ -25,6 +31,7 @@ import com.getcapacitor.annotation.PermissionCallback
25
31
  import jp.rdlabo.capacitor.plugin.brotherprint.models.BrotherPrintEvent
26
32
  import jp.rdlabo.capacitor.plugin.brotherprint.models.BrotherPrintSettings
27
33
 
34
+
28
35
  @CapacitorPlugin(
29
36
  name = "BrotherPrint",
30
37
  permissions = [
@@ -64,96 +71,86 @@ class BrotherPrint : Plugin() {
64
71
  val decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.size)
65
72
 
66
73
  val port: String? = call.getString("port", "wifi")
67
- val localName: String? = call.getString("localName", "")
68
- val ipAddress: String? = call.getString("ipAddress", "")
69
- val serialNumber: String? = call.getString("serialNumber", "")
70
- val macAddress: String? = call.getString("macAddress", "")
74
+ val channelInfo: String? = call.getString("channelInfo", "")
75
+ // val localName: String? = call.getString("localName", "")
76
+ // val serialNumber: String? = call.getString("serialNumber", "")
77
+ // val macAddress: String? = call.getString("macAddress", "")
71
78
 
72
- val printer = Printer()
73
- val settings = BrotherPrintSettings().initialize(call, printer)
79
+ lateinit var settings: PrintSettings;
80
+ val modelName = call.getString("modelName", "QL_820NWB")!!
81
+ val printerModel = PrinterModel.entries.find { it.name == modelName }
74
82
 
75
- val labelName = LabelInfo.QL700.entries.find { it.name == call.getString("labelName", "W62") }
76
- val printerModel = PrinterInfo.Model.entries.find { it.name == call.getString("modelName", "QL_820NWB") }
77
- settings.labelNameIndex = labelName!!.ordinal;
78
- settings.printerModel = printerModel;
79
-
80
- if (port == "usb") {
81
- settings.port = PrinterInfo.Port.USB
82
- } else if (port == "wifi") {
83
- settings.port = PrinterInfo.Port.NET
84
- } else if (port == "bluetooth") {
85
- val manager =
86
- bridge.context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
87
- printer.setBluetooth(manager.adapter)
88
- settings.port = PrinterInfo.Port.BLUETOOTH
89
- settings.macAddress = serialNumber
83
+ if (printerModel != null && modelName.startsWith("QL")) {
84
+ settings = QLPrintSettings(printerModel);
85
+ settings = BrotherPrintSettings().modelQLSettings(call, settings)
86
+ settings.workPath = bridge.context.cacheDir.path;
87
+ } else if (printerModel != null && modelName.startsWith("TD")) {
88
+ settings = TDPrintSettings(printerModel)
89
+ settings = BrotherPrintSettings().modelTDSettings(call, settings)
90
+ settings.workPath = bridge.context.cacheDir.path;
90
91
  } else {
91
- val manager =
92
- bridge.context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
93
- printer.setBluetooth(manager.adapter)
94
- settings.port = PrinterInfo.Port.BLE
92
+ call.reject("Error - modelName:$modelName is not supported")
93
+ return;
95
94
  }
96
95
 
97
- settings.ipAddress = ipAddress
98
- settings.macAddress = macAddress
99
- settings.localName = localName
100
- settings.workPath = bridge.context.cacheDir.path
101
-
102
- Log.d("brother", settings.toString())
96
+ Thread {
97
+ val channel: Channel = when (port) {
98
+ "usb" -> Channel.newUsbChannel(bridge.context.getSystemService(Context.USB_SERVICE) as UsbManager)
99
+ "wifi" -> Channel.newWifiChannel(channelInfo)
100
+ "bluetooth" -> Channel.newBluetoothChannel(channelInfo, getBluetoothAdapter(bridge.context))
101
+ "bluetoothLowEnergy" -> Channel.newBluetoothLowEnergyChannel(
102
+ channelInfo, bridge.context, getBluetoothAdapter(bridge.context)
103
+ )
104
+ else -> {
105
+ call.reject("Error - port:$port is not supported")
106
+ return@Thread
107
+ }
108
+ }
103
109
 
104
- val setPrinter = printer.setPrinterInfo(settings)
110
+ val result = PrinterDriverGenerator.openChannel(channel)
111
+ if (result.error.code != OpenChannelError.ErrorCode.NoError) {
112
+ this.notifyListeners(BrotherPrintEvent.onPrintFailedCommunication.webEventName,
113
+ JSObject().put("code", result.error.code)
114
+ .put("message", result.error.code.toString())
115
+ )
116
+ call.reject("Error - openChannel: " + result.error.code.toString())
117
+ return@Thread
118
+ }
105
119
 
106
- if (!setPrinter) {
107
- val setResult = Printer.getResult()
108
- notifyListeners(
109
- BrotherPrintEvent.onPrintError.webEventName,
110
- JSObject().put("code", setResult.errorCode)
111
- .put("message", setResult.toString())
112
- )
113
- }
120
+ val printerDriver = result.driver
114
121
 
115
- try {
116
- Log.d(logTag, "Start Printer Thread")
117
- Thread {
118
- if (printer.startCommunication()) {
119
- val result = printer.printImage(decodedByte)
120
- if (result.errorCode == PrinterInfo.ErrorCode.ERROR_NONE) {
121
- notifyListeners(
122
- BrotherPrintEvent.onPrint.webEventName,
123
- JSObject().put("code", result.errorCode)
124
- .put("message", result.toString())
125
- )
126
- } else {
127
- Log.d("TAG", "ERROR - " + result.errorCode)
128
- notifyListeners(
129
- BrotherPrintEvent.onPrintError.webEventName,
130
- JSObject().put("code", result.errorCode)
131
- .put("message", result.toString())
132
- )
133
- }
122
+ val printError: PrintError = printerDriver.printImage(decodedByte, settings)
134
123
 
135
- printer.endCommunication()
136
- } else {
137
- notifyListeners(
138
- BrotherPrintEvent.onPrintFailedCommunication.webEventName,
139
- JSObject().put("code", "0")
140
- )
141
- }
124
+ if (printError.code != PrintError.ErrorCode.NoError) {
125
+ printerDriver.closeChannel()
126
+ notifyListeners(
127
+ BrotherPrintEvent.onPrintError.webEventName,
128
+ JSObject().put("code", printError.code)
129
+ .put("message", result.error.code.toString())
130
+ )
131
+ call.reject("Error - Print Image: " + result.error.code.toString())
132
+ return@Thread
142
133
  }
143
- .start()
144
- call.resolve()
145
- } catch (e: Exception) {
134
+
135
+ printerDriver.closeChannel()
136
+
146
137
  notifyListeners(
147
- BrotherPrintEvent.onPrintFailedCommunication.webEventName, JSObject().put("code", 0)
148
- .put("message", e.localizedMessage)
138
+ BrotherPrintEvent.onPrint.webEventName,
139
+ JSObject()
149
140
  )
150
- call.reject(e.localizedMessage, e)
151
- }
141
+ call.resolve()
142
+ }.start()
143
+ }
144
+
145
+ private fun getBluetoothAdapter(context: Context): BluetoothAdapter? {
146
+ val manager = context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
147
+ return manager.adapter
152
148
  }
153
149
 
154
150
  @PluginMethod
155
151
  fun search(call: PluginCall) {
156
152
  when(call.getString("port", "wifi")) {
153
+ "usb" -> this.searchUsbPrinter(call)
157
154
  "wifi" -> this.searchWiFiPrinter(call)
158
155
  "bluetooth" -> this.checkBLEChannel(call)
159
156
  "bluetoothLowEnergy" -> this.searchBLEPrinter(call)
@@ -161,6 +158,36 @@ class BrotherPrint : Plugin() {
161
158
  }
162
159
  }
163
160
 
161
+ private fun searchUsbPrinter(call: PluginCall) {
162
+ Log.d("brother", "searchUsbPrinter")
163
+ Thread {
164
+ val result = PrinterSearcher.startUSBSearch(bridge.context)
165
+
166
+ when (result.error.code) {
167
+ com.brother.sdk.lmprinter.PrinterSearchError.ErrorCode.NoError -> {
168
+ }
169
+ com.brother.sdk.lmprinter.PrinterSearchError.ErrorCode.NotPermitted -> {
170
+ // TODO: has error
171
+ }
172
+ com.brother.sdk.lmprinter.PrinterSearchError.ErrorCode.Canceled,
173
+ com.brother.sdk.lmprinter.PrinterSearchError.ErrorCode.InterfaceInactive,
174
+ com.brother.sdk.lmprinter.PrinterSearchError.ErrorCode.InterfaceUnsupported,
175
+ com.brother.sdk.lmprinter.PrinterSearchError.ErrorCode.AlreadySearching,
176
+ com.brother.sdk.lmprinter.PrinterSearchError.ErrorCode.UnknownError -> {
177
+ }
178
+ null -> {}
179
+ }
180
+
181
+ for (channel in result.channels){
182
+ this.notifyListeners(
183
+ BrotherPrintEvent.onPrinterAvailable.webEventName,
184
+ this.chanelToPrinter("usb", channel)
185
+ );
186
+ }
187
+ }.start()
188
+ call.resolve();
189
+ }
190
+
164
191
  private fun searchWiFiPrinter(call: PluginCall) {
165
192
  Log.d("brother", "searchWiFiPrinter")
166
193
  Thread {
@@ -185,7 +212,7 @@ class BrotherPrint : Plugin() {
185
212
 
186
213
  private fun checkBLEChannel(call: PluginCall) {
187
214
  if (!isBluetoothPermissionGranted()) {
188
- requestAllPermissions(call, "permissionCallback");
215
+ requestPermissionForAlias("bluetooth", call, "permissionCallback");
189
216
  } else {
190
217
  Log.d("brother", "checkBLEChannel")
191
218
  Thread {
@@ -200,7 +227,10 @@ class BrotherPrint : Plugin() {
200
227
 
201
228
  private fun searchBLEPrinter(call: PluginCall) {
202
229
  if (!isBluetoothPermissionGranted()) {
203
- requestAllPermissions(call, "permissionCallback");
230
+ requestPermissionForAlias("bluetooth", call, "permissionCallback");
231
+ return;
232
+ } else if (!isLocationPermissionGranted()) {
233
+ requestPermissionForAlias("location", call, "permissionCallback");
204
234
  return;
205
235
  } else {
206
236
  Log.d("brother", "searchBLEPrinter")
@@ -226,12 +256,13 @@ class BrotherPrint : Plugin() {
226
256
  }
227
257
 
228
258
  private fun chanelToPrinter(port: String, channel: Channel): JSObject? {
259
+ Log.d("brother", channel.toString());
229
260
  val modelName = channel.extraInfo[Channel.ExtraInfoKey.ModelName] ?: ""
230
261
  val serialNumber = channel.extraInfo[Channel.ExtraInfoKey.SerialNubmer] ?: ""
231
262
  val macAddress = channel.extraInfo[Channel.ExtraInfoKey.MACAddress] ?: ""
232
263
  val nodeName = channel.extraInfo[Channel.ExtraInfoKey.NodeName] ?: ""
233
264
  val location = channel.extraInfo[Channel.ExtraInfoKey.Location] ?: ""
234
- val ipAddress = channel.channelInfo
265
+ val channelInfo = channel.channelInfo
235
266
 
236
267
  return JSObject()
237
268
  .put("port", port)
@@ -240,22 +271,24 @@ class BrotherPrint : Plugin() {
240
271
  .put("macAddress", macAddress)
241
272
  .put("nodeName", nodeName)
242
273
  .put("location", location)
243
- .put("ipAddress", ipAddress)
274
+ .put("channelInfo", channelInfo)
244
275
  }
245
276
 
246
277
  @PluginMethod
247
- fun cancelSearchWiFiPrinter(call: PluginCall?) {
278
+ fun cancelSearchWiFiPrinter(call: PluginCall) {
248
279
  Thread {
249
280
  this.cancelRoutineWiFi?.invoke()
250
281
  this.cancelRoutineWiFi = null
282
+ call.resolve()
251
283
  }.start()
252
284
  }
253
285
 
254
286
  @PluginMethod
255
- fun cancelSearchBluetoothPrinter(call: PluginCall?) {
287
+ fun cancelSearchBluetoothPrinter(call: PluginCall) {
256
288
  Thread {
257
289
  this.cancelRoutineBluetooth?.invoke()
258
290
  this.cancelRoutineBluetooth = null
291
+ call.resolve()
259
292
  }.start()
260
293
  }
261
294
 
@@ -272,8 +305,7 @@ class BrotherPrint : Plugin() {
272
305
  return
273
306
  }
274
307
  when (call.methodName) {
275
- "checkBLEChannel" -> checkBLEChannel(call)
276
- "searchBLEPrinter" -> searchBLEPrinter(call)
308
+ "search" -> this.search(call)
277
309
  }
278
310
  }
279
311