@simplysm/capacitor-plugin-usb-storage 13.0.100 → 14.0.4
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 +73 -43
- package/android/build.gradle +1 -0
- package/android/src/main/java/kr/co/simplysm/capacitor/usbstorage/UsbStoragePlugin.kt +269 -0
- package/dist/UsbStorage.d.ts +19 -19
- package/dist/UsbStorage.js +59 -57
- package/dist/UsbStorage.js.map +1 -6
- package/dist/UsbStoragePlugin.js +2 -1
- package/dist/UsbStoragePlugin.js.map +1 -6
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -6
- package/dist/web/UsbStorageWeb.d.ts +3 -3
- package/dist/web/UsbStorageWeb.js +72 -75
- package/dist/web/UsbStorageWeb.js.map +1 -6
- package/dist/web/VirtualUsbStorage.js +36 -39
- package/dist/web/VirtualUsbStorage.js.map +1 -6
- package/package.json +8 -8
- package/src/UsbStorage.ts +19 -19
- package/src/index.ts +1 -1
- package/src/web/UsbStorageWeb.ts +3 -3
- package/android/src/main/java/kr/co/simplysm/capacitor/usbstorage/UsbStoragePlugin.java +0 -278
package/dist/index.js.map
CHANGED
|
@@ -22,7 +22,7 @@ export declare class UsbStorageWeb extends WebPlugin implements UsbStoragePlugin
|
|
|
22
22
|
data: string | null;
|
|
23
23
|
}>;
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
25
|
+
* 가상 USB 장치를 추가합니다. (테스트/개발용)
|
|
26
26
|
*/
|
|
27
27
|
addVirtualDevice(device: {
|
|
28
28
|
vendorId: number;
|
|
@@ -32,11 +32,11 @@ export declare class UsbStorageWeb extends WebPlugin implements UsbStoragePlugin
|
|
|
32
32
|
productName: string;
|
|
33
33
|
}): Promise<void>;
|
|
34
34
|
/**
|
|
35
|
-
*
|
|
35
|
+
* 가상 USB 장치에 파일을 추가합니다. (테스트/개발용)
|
|
36
36
|
*/
|
|
37
37
|
addVirtualFile(filter: UsbDeviceFilter, filePath: string, data: Uint8Array): Promise<void>;
|
|
38
38
|
/**
|
|
39
|
-
*
|
|
39
|
+
* 가상 USB 장치에 디렉토리를 추가합니다. (테스트/개발용)
|
|
40
40
|
*/
|
|
41
41
|
addVirtualDirectory(filter: UsbDeviceFilter, dirPath: string): Promise<void>;
|
|
42
42
|
}
|
|
@@ -1,83 +1,80 @@
|
|
|
1
1
|
import { WebPlugin } from "@capacitor/core";
|
|
2
2
|
import { VirtualUsbStorage } from "./VirtualUsbStorage.js";
|
|
3
3
|
import { bytes } from "@simplysm/core-common";
|
|
4
|
-
class UsbStorageWeb extends WebPlugin {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
async requestPermissions(_options) {
|
|
19
|
-
return Promise.resolve({ granted: true });
|
|
20
|
-
}
|
|
21
|
-
async checkPermissions(_options) {
|
|
22
|
-
return Promise.resolve({ granted: true });
|
|
23
|
-
}
|
|
24
|
-
async readdir(options) {
|
|
25
|
-
const deviceKey = `${options.vendorId}:${options.productId}`;
|
|
26
|
-
const devices = await this._storage.getDevices();
|
|
27
|
-
const deviceExists = devices.some((d) => d.key === deviceKey);
|
|
28
|
-
if (!deviceExists) {
|
|
29
|
-
return { files: [] };
|
|
4
|
+
export class UsbStorageWeb extends WebPlugin {
|
|
5
|
+
_storage = new VirtualUsbStorage();
|
|
6
|
+
async getDevices() {
|
|
7
|
+
const devices = await this._storage.getDevices();
|
|
8
|
+
return {
|
|
9
|
+
devices: devices.map((d) => ({
|
|
10
|
+
deviceName: d.deviceName,
|
|
11
|
+
manufacturerName: d.manufacturerName,
|
|
12
|
+
productName: d.productName,
|
|
13
|
+
vendorId: d.vendorId,
|
|
14
|
+
productId: d.productId,
|
|
15
|
+
})),
|
|
16
|
+
};
|
|
30
17
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return { files: [] };
|
|
18
|
+
async requestPermissions(_options) {
|
|
19
|
+
return Promise.resolve({ granted: true });
|
|
34
20
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
async readFile(options) {
|
|
39
|
-
const deviceKey = `${options.vendorId}:${options.productId}`;
|
|
40
|
-
const devices = await this._storage.getDevices();
|
|
41
|
-
const deviceExists = devices.some((d) => d.key === deviceKey);
|
|
42
|
-
if (!deviceExists) {
|
|
43
|
-
return { data: null };
|
|
21
|
+
async checkPermissions(_options) {
|
|
22
|
+
return Promise.resolve({ granted: true });
|
|
44
23
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
24
|
+
async readdir(options) {
|
|
25
|
+
const deviceKey = `${options.vendorId}:${options.productId}`;
|
|
26
|
+
const devices = await this._storage.getDevices();
|
|
27
|
+
const deviceExists = devices.some((d) => d.key === deviceKey);
|
|
28
|
+
if (!deviceExists) {
|
|
29
|
+
return { files: [] };
|
|
30
|
+
}
|
|
31
|
+
const entry = await this._storage.getEntry(deviceKey, options.path);
|
|
32
|
+
if (!entry || entry.kind !== "dir") {
|
|
33
|
+
return { files: [] };
|
|
34
|
+
}
|
|
35
|
+
const children = await this._storage.listChildren(deviceKey, options.path);
|
|
36
|
+
return { files: children };
|
|
37
|
+
}
|
|
38
|
+
async readFile(options) {
|
|
39
|
+
const deviceKey = `${options.vendorId}:${options.productId}`;
|
|
40
|
+
const devices = await this._storage.getDevices();
|
|
41
|
+
const deviceExists = devices.some((d) => d.key === deviceKey);
|
|
42
|
+
if (!deviceExists) {
|
|
43
|
+
return { data: null };
|
|
44
|
+
}
|
|
45
|
+
const entry = await this._storage.getEntry(deviceKey, options.path);
|
|
46
|
+
if (!entry || entry.kind !== "file" || entry.dataBase64 == null) {
|
|
47
|
+
return { data: null };
|
|
48
|
+
}
|
|
49
|
+
return { data: entry.dataBase64 };
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 가상 USB 장치를 추가합니다. (테스트/개발용)
|
|
53
|
+
*/
|
|
54
|
+
async addVirtualDevice(device) {
|
|
55
|
+
await this._storage.addDevice(device);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 가상 USB 장치에 파일을 추가합니다. (테스트/개발용)
|
|
59
|
+
*/
|
|
60
|
+
async addVirtualFile(filter, filePath, data) {
|
|
61
|
+
const deviceKey = `${filter.vendorId}:${filter.productId}`;
|
|
62
|
+
const idx = filePath.lastIndexOf("/");
|
|
63
|
+
const dir = idx === -1 ? "/" : filePath.substring(0, idx) || "/";
|
|
64
|
+
await this._storage.ensureDir(deviceKey, dir);
|
|
65
|
+
await this._storage.putEntry({
|
|
66
|
+
deviceKey,
|
|
67
|
+
path: filePath,
|
|
68
|
+
kind: "file",
|
|
69
|
+
dataBase64: bytes.toBase64(data),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 가상 USB 장치에 디렉토리를 추가합니다. (테스트/개발용)
|
|
74
|
+
*/
|
|
75
|
+
async addVirtualDirectory(filter, dirPath) {
|
|
76
|
+
const deviceKey = `${filter.vendorId}:${filter.productId}`;
|
|
77
|
+
await this._storage.ensureDir(deviceKey, dirPath);
|
|
48
78
|
}
|
|
49
|
-
return { data: entry.dataBase64 };
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Add a virtual USB device. (For testing/development)
|
|
53
|
-
*/
|
|
54
|
-
async addVirtualDevice(device) {
|
|
55
|
-
await this._storage.addDevice(device);
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Add a file to a virtual USB device. (For testing/development)
|
|
59
|
-
*/
|
|
60
|
-
async addVirtualFile(filter, filePath, data) {
|
|
61
|
-
const deviceKey = `${filter.vendorId}:${filter.productId}`;
|
|
62
|
-
const idx = filePath.lastIndexOf("/");
|
|
63
|
-
const dir = idx === -1 ? "/" : filePath.substring(0, idx) || "/";
|
|
64
|
-
await this._storage.ensureDir(deviceKey, dir);
|
|
65
|
-
await this._storage.putEntry({
|
|
66
|
-
deviceKey,
|
|
67
|
-
path: filePath,
|
|
68
|
-
kind: "file",
|
|
69
|
-
dataBase64: bytes.toBase64(data)
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Add a directory to a virtual USB device. (For testing/development)
|
|
74
|
-
*/
|
|
75
|
-
async addVirtualDirectory(filter, dirPath) {
|
|
76
|
-
const deviceKey = `${filter.vendorId}:${filter.productId}`;
|
|
77
|
-
await this._storage.ensureDir(deviceKey, dirPath);
|
|
78
|
-
}
|
|
79
79
|
}
|
|
80
|
-
|
|
81
|
-
UsbStorageWeb
|
|
82
|
-
};
|
|
83
|
-
//# sourceMappingURL=UsbStorageWeb.js.map
|
|
80
|
+
//# sourceMappingURL=UsbStorageWeb.js.map
|
|
@@ -1,6 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/web/UsbStorageWeb.ts"],
|
|
4
|
-
"mappings": "AAAA,SAAS,iBAAiB;AAO1B,SAAS,yBAAyB;AAClC,SAAS,aAAa;AAEf,MAAM,sBAAsB,UAAsC;AAAA,EACtD,WAAW,IAAI,kBAAkB;AAAA,EAElD,MAAM,aAAoD;AACxD,UAAM,UAAU,MAAM,KAAK,SAAS,WAAW;AAC/C,WAAO;AAAA,MACL,SAAS,QAAQ,IAAI,CAAC,OAAO;AAAA,QAC3B,YAAY,EAAE;AAAA,QACd,kBAAkB,EAAE;AAAA,QACpB,aAAa,EAAE;AAAA,QACf,UAAU,EAAE;AAAA,QACZ,WAAW,EAAE;AAAA,MACf,EAAE;AAAA,IACJ;AAAA,EACF;AAAA,EAEA,MAAM,mBAAmB,UAA0D;AACjF,WAAO,QAAQ,QAAQ,EAAE,SAAS,KAAK,CAAC;AAAA,EAC1C;AAAA,EAEA,MAAM,iBAAiB,UAA0D;AAC/E,WAAO,QAAQ,QAAQ,EAAE,SAAS,KAAK,CAAC;AAAA,EAC1C;AAAA,EAEA,MAAM,QAAQ,SAAgF;AAC5F,UAAM,YAAY,GAAG,QAAQ,QAAQ,IAAI,QAAQ,SAAS;AAC1D,UAAM,UAAU,MAAM,KAAK,SAAS,WAAW;AAC/C,UAAM,eAAe,QAAQ,KAAK,CAAC,MAAM,EAAE,QAAQ,SAAS;AAC5D,QAAI,CAAC,cAAc;AACjB,aAAO,EAAE,OAAO,CAAC,EAAE;AAAA,IACrB;AACA,UAAM,QAAQ,MAAM,KAAK,SAAS,SAAS,WAAW,QAAQ,IAAI;AAClE,QAAI,CAAC,SAAS,MAAM,SAAS,OAAO;AAClC,aAAO,EAAE,OAAO,CAAC,EAAE;AAAA,IACrB;AACA,UAAM,WAAW,MAAM,KAAK,SAAS,aAAa,WAAW,QAAQ,IAAI;AACzE,WAAO,EAAE,OAAO,SAAS;AAAA,EAC3B;AAAA,EAEA,MAAM,SAAS,SAA+E;AAC5F,UAAM,YAAY,GAAG,QAAQ,QAAQ,IAAI,QAAQ,SAAS;AAC1D,UAAM,UAAU,MAAM,KAAK,SAAS,WAAW;AAC/C,UAAM,eAAe,QAAQ,KAAK,CAAC,MAAM,EAAE,QAAQ,SAAS;AAC5D,QAAI,CAAC,cAAc;AACjB,aAAO,EAAE,MAAM,KAAK;AAAA,IACtB;AACA,UAAM,QAAQ,MAAM,KAAK,SAAS,SAAS,WAAW,QAAQ,IAAI;AAClE,QAAI,CAAC,SAAS,MAAM,SAAS,UAAU,MAAM,cAAc,MAAM;AAC/D,aAAO,EAAE,MAAM,KAAK;AAAA,IACtB;AACA,WAAO,EAAE,MAAM,MAAM,WAAW;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB,QAML;AAChB,UAAM,KAAK,SAAS,UAAU,MAAM;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eACJ,QACA,UACA,MACe;AACf,UAAM,YAAY,GAAG,OAAO,QAAQ,IAAI,OAAO,SAAS;AACxD,UAAM,MAAM,SAAS,YAAY,GAAG;AACpC,UAAM,MAAM,QAAQ,KAAK,MAAM,SAAS,UAAU,GAAG,GAAG,KAAK;AAC7D,UAAM,KAAK,SAAS,UAAU,WAAW,GAAG;AAC5C,UAAM,KAAK,SAAS,SAAS;AAAA,MAC3B;AAAA,MACA,MAAM;AAAA,MACN,MAAM;AAAA,MACN,YAAY,MAAM,SAAS,IAAI;AAAA,IACjC,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAoB,QAAyB,SAAgC;AACjF,UAAM,YAAY,GAAG,OAAO,QAAQ,IAAI,OAAO,SAAS;AACxD,UAAM,KAAK,SAAS,UAAU,WAAW,OAAO;AAAA,EAClD;AACF;",
|
|
5
|
-
"names": []
|
|
6
|
-
}
|
|
1
|
+
{"version":3,"file":"UsbStorageWeb.js","sourceRoot":"","sources":["..\\..\\src\\web\\UsbStorageWeb.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,41 +1,38 @@
|
|
|
1
1
|
import { IndexedDbStore, IndexedDbVirtualFs } from "@simplysm/core-browser";
|
|
2
|
-
class VirtualUsbStorage {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
2
|
+
export class VirtualUsbStorage {
|
|
3
|
+
_DEVICES_STORE = "devices";
|
|
4
|
+
_FILES_STORE = "files";
|
|
5
|
+
_db;
|
|
6
|
+
_vfs;
|
|
7
|
+
constructor() {
|
|
8
|
+
this._db = new IndexedDbStore("capacitor_usb_virtual_storage", 1, [
|
|
9
|
+
{ name: this._DEVICES_STORE, keyPath: "key" },
|
|
10
|
+
{ name: this._FILES_STORE, keyPath: "fullKey" },
|
|
11
|
+
]);
|
|
12
|
+
this._vfs = new IndexedDbVirtualFs(this._db, this._FILES_STORE, "fullKey");
|
|
13
|
+
}
|
|
14
|
+
async addDevice(device) {
|
|
15
|
+
const key = `${device.vendorId}:${device.productId}`;
|
|
16
|
+
const entry = { ...device, key };
|
|
17
|
+
return this._db.put(this._DEVICES_STORE, entry);
|
|
18
|
+
}
|
|
19
|
+
async getDevices() {
|
|
20
|
+
return this._db.getAll(this._DEVICES_STORE);
|
|
21
|
+
}
|
|
22
|
+
async getEntry(deviceKey, path) {
|
|
23
|
+
const fullKey = `${deviceKey}:${path}`;
|
|
24
|
+
return this._vfs.getEntry(fullKey);
|
|
25
|
+
}
|
|
26
|
+
async putEntry(entry) {
|
|
27
|
+
const fullKey = `${entry.deviceKey}:${entry.path}`;
|
|
28
|
+
return this._vfs.putEntry(fullKey, entry.kind, entry.dataBase64);
|
|
29
|
+
}
|
|
30
|
+
async listChildren(deviceKey, dirPath) {
|
|
31
|
+
const prefix = `${deviceKey}:${dirPath === "/" ? "/" : dirPath + "/"}`;
|
|
32
|
+
return this._vfs.listChildren(prefix);
|
|
33
|
+
}
|
|
34
|
+
async ensureDir(deviceKey, dirPath) {
|
|
35
|
+
return this._vfs.ensureDir((path) => `${deviceKey}:${path}`, dirPath);
|
|
36
|
+
}
|
|
37
37
|
}
|
|
38
|
-
|
|
39
|
-
VirtualUsbStorage
|
|
40
|
-
};
|
|
41
|
-
//# sourceMappingURL=VirtualUsbStorage.js.map
|
|
38
|
+
//# sourceMappingURL=VirtualUsbStorage.js.map
|
|
@@ -1,6 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/web/VirtualUsbStorage.ts"],
|
|
4
|
-
"mappings": "AACA,SAAS,gBAAgB,0BAA0B;AAW5C,MAAM,kBAAkB;AAAA,EACZ,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EAEjB,cAAc;AACZ,SAAK,MAAM,IAAI,eAAe,iCAAiC,GAAG;AAAA,MAChE,EAAE,MAAM,KAAK,gBAAgB,SAAS,MAAM;AAAA,MAC5C,EAAE,MAAM,KAAK,cAAc,SAAS,UAAU;AAAA,IAChD,CAAC;AACD,SAAK,OAAO,IAAI,mBAAmB,KAAK,KAAK,KAAK,cAAc,SAAS;AAAA,EAC3E;AAAA,EAEA,MAAM,UAAU,QAAmD;AACjE,UAAM,MAAM,GAAG,OAAO,QAAQ,IAAI,OAAO,SAAS;AAClD,UAAM,QAAuB,EAAE,GAAG,QAAQ,IAAI;AAC9C,WAAO,KAAK,IAAI,IAAI,KAAK,gBAAgB,KAAK;AAAA,EAChD;AAAA,EAEA,MAAM,aAAuC;AAC3C,WAAO,KAAK,IAAI,OAAsB,KAAK,cAAc;AAAA,EAC3D;AAAA,EAEA,MAAM,SAAS,WAAmB,MAAmD;AACnF,UAAM,UAAU,GAAG,SAAS,IAAI,IAAI;AACpC,WAAO,KAAK,KAAK,SAAS,OAAO;AAAA,EACnC;AAAA,EAEA,MAAM,SAAS,OAAsG;AACnH,UAAM,UAAU,GAAG,MAAM,SAAS,IAAI,MAAM,IAAI;AAChD,WAAO,KAAK,KAAK,SAAS,SAAS,MAAM,MAAM,MAAM,UAAU;AAAA,EACjE;AAAA,EAEA,MAAM,aACJ,WACA,SACmD;AACnD,UAAM,SAAS,GAAG,SAAS,IAAI,YAAY,MAAM,MAAM,UAAU,GAAG;AACpE,WAAO,KAAK,KAAK,aAAa,MAAM;AAAA,EACtC;AAAA,EAEA,MAAM,UAAU,WAAmB,SAAgC;AACjE,WAAO,KAAK,KAAK,UAAU,CAAC,SAAS,GAAG,SAAS,IAAI,IAAI,IAAI,OAAO;AAAA,EACtE;AACF;",
|
|
5
|
-
"names": []
|
|
6
|
-
}
|
|
1
|
+
{"version":3,"file":"VirtualUsbStorage.js","sourceRoot":"","sources":["..\\..\\src\\web\\VirtualUsbStorage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAW5E,MAAM,OAAO,iBAAiB;IACX,cAAc,GAAG,SAAS,CAAC;IAC3B,YAAY,GAAG,OAAO,CAAC;IACvB,GAAG,CAAiB;IACpB,IAAI,CAAqB;IAE1C;QACE,IAAI,CAAC,GAAG,GAAG,IAAI,cAAc,CAAC,+BAA+B,EAAE,CAAC,EAAE;YAChE,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE;YAC7C,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE;SAChD,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAkC;QAChD,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrD,MAAM,KAAK,GAAkB,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAgB,IAAI,CAAC,cAAc,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAiB,EAAE,IAAY;QAC5C,MAAM,OAAO,GAAG,GAAG,SAAS,IAAI,IAAI,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAqF;QAClG,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,SAAiB,EACjB,OAAe;QAEf,MAAM,MAAM,GAAG,GAAG,SAAS,IAAI,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC;QACvE,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,SAAiB,EAAE,OAAe;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,SAAS,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/capacitor-plugin-usb-storage",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
5
|
-
"author": "
|
|
6
|
-
"license": "
|
|
3
|
+
"version": "14.0.4",
|
|
4
|
+
"description": "심플리즘 패키지 - Capacitor USB 저장소 플러그인",
|
|
5
|
+
"author": "심플리즘",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
9
|
"url": "https://github.com/kslhunter/simplysm.git",
|
|
@@ -18,14 +18,14 @@
|
|
|
18
18
|
"android"
|
|
19
19
|
],
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@simplysm/core-
|
|
22
|
-
"@simplysm/core-
|
|
21
|
+
"@simplysm/core-common": "14.0.4",
|
|
22
|
+
"@simplysm/core-browser": "14.0.4"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@capacitor/core": "^7.6.
|
|
25
|
+
"@capacitor/core": "^7.6.1"
|
|
26
26
|
},
|
|
27
27
|
"peerDependencies": {
|
|
28
|
-
"@capacitor/core": "^7
|
|
28
|
+
"@capacitor/core": "^7"
|
|
29
29
|
},
|
|
30
30
|
"capacitor": {
|
|
31
31
|
"android": {
|
package/src/UsbStorage.ts
CHANGED
|
@@ -16,14 +16,14 @@ const usbStoragePlugin = registerPlugin<UsbStoragePlugin>("UsbStorage", {
|
|
|
16
16
|
});
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
20
|
-
* - Android: USB Mass Storage
|
|
21
|
-
* - Browser: IndexedDB
|
|
19
|
+
* USB 저장 장치 접근 플러그인
|
|
20
|
+
* - Android: libaums 라이브러리를 통한 USB Mass Storage 접근
|
|
21
|
+
* - Browser: IndexedDB 기반 가상 USB 저장소 에뮬레이션
|
|
22
22
|
*/
|
|
23
23
|
export abstract class UsbStorage {
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
26
|
-
* @returns
|
|
25
|
+
* 연결된 USB 장치 목록 조회
|
|
26
|
+
* @returns 연결된 USB 장치 정보 배열
|
|
27
27
|
*/
|
|
28
28
|
static async getDevices(): Promise<UsbDeviceInfo[]> {
|
|
29
29
|
const result = await usbStoragePlugin.getDevices();
|
|
@@ -31,9 +31,9 @@ export abstract class UsbStorage {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
/**
|
|
34
|
-
*
|
|
35
|
-
* @param filter
|
|
36
|
-
* @returns
|
|
34
|
+
* USB 장치 접근 권한 요청
|
|
35
|
+
* @param filter 권한을 요청할 USB 장치의 vendorId 및 productId
|
|
36
|
+
* @returns 권한 승인 여부
|
|
37
37
|
*/
|
|
38
38
|
static async requestPermissions(filter: UsbDeviceFilter): Promise<boolean> {
|
|
39
39
|
const result = await usbStoragePlugin.requestPermissions(filter);
|
|
@@ -41,9 +41,9 @@ export abstract class UsbStorage {
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
/**
|
|
44
|
-
*
|
|
45
|
-
* @param filter
|
|
46
|
-
* @returns
|
|
44
|
+
* USB 장치 접근 권한 확인
|
|
45
|
+
* @param filter 권한을 확인할 USB 장치의 vendorId 및 productId
|
|
46
|
+
* @returns 권한 보유 여부
|
|
47
47
|
*/
|
|
48
48
|
static async checkPermissions(filter: UsbDeviceFilter): Promise<boolean> {
|
|
49
49
|
const result = await usbStoragePlugin.checkPermissions(filter);
|
|
@@ -51,10 +51,10 @@ export abstract class UsbStorage {
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
/**
|
|
54
|
-
*
|
|
55
|
-
* @param filter
|
|
56
|
-
* @param dirPath
|
|
57
|
-
* @returns
|
|
54
|
+
* USB 저장 장치에서 디렉토리 내용 읽기
|
|
55
|
+
* @param filter 대상 USB 장치의 vendorId 및 productId
|
|
56
|
+
* @param dirPath 읽을 디렉토리 경로
|
|
57
|
+
* @returns 디렉토리 내 파일/폴더 정보 배열
|
|
58
58
|
*/
|
|
59
59
|
static async readdir(filter: UsbDeviceFilter, dirPath: string): Promise<UsbFileInfo[]> {
|
|
60
60
|
const result = await usbStoragePlugin.readdir({ ...filter, path: dirPath });
|
|
@@ -62,10 +62,10 @@ export abstract class UsbStorage {
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
/**
|
|
65
|
-
*
|
|
66
|
-
* @param filter
|
|
67
|
-
* @param filePath
|
|
68
|
-
* @returns
|
|
65
|
+
* USB 저장 장치에서 파일 읽기
|
|
66
|
+
* @param filter 대상 USB 장치의 vendorId 및 productId
|
|
67
|
+
* @param filePath 읽을 파일 경로
|
|
68
|
+
* @returns 파일 데이터를 포함하는 Bytes, 또는 undefined
|
|
69
69
|
*/
|
|
70
70
|
static async readFile(filter: UsbDeviceFilter, filePath: string): Promise<Bytes | undefined> {
|
|
71
71
|
const result = await usbStoragePlugin.readFile({ ...filter, path: filePath });
|
package/src/index.ts
CHANGED
package/src/web/UsbStorageWeb.ts
CHANGED
|
@@ -62,7 +62,7 @@ export class UsbStorageWeb extends WebPlugin implements UsbStoragePlugin {
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
/**
|
|
65
|
-
*
|
|
65
|
+
* 가상 USB 장치를 추가합니다. (테스트/개발용)
|
|
66
66
|
*/
|
|
67
67
|
async addVirtualDevice(device: {
|
|
68
68
|
vendorId: number;
|
|
@@ -75,7 +75,7 @@ export class UsbStorageWeb extends WebPlugin implements UsbStoragePlugin {
|
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
/**
|
|
78
|
-
*
|
|
78
|
+
* 가상 USB 장치에 파일을 추가합니다. (테스트/개발용)
|
|
79
79
|
*/
|
|
80
80
|
async addVirtualFile(
|
|
81
81
|
filter: UsbDeviceFilter,
|
|
@@ -95,7 +95,7 @@ export class UsbStorageWeb extends WebPlugin implements UsbStoragePlugin {
|
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
/**
|
|
98
|
-
*
|
|
98
|
+
* 가상 USB 장치에 디렉토리를 추가합니다. (테스트/개발용)
|
|
99
99
|
*/
|
|
100
100
|
async addVirtualDirectory(filter: UsbDeviceFilter, dirPath: string): Promise<void> {
|
|
101
101
|
const deviceKey = `${filter.vendorId}:${filter.productId}`;
|