cheogram-www

created pr with cheogram-www/sqlite-driver.1 on 2026-11-09T20:08:52Z · by 3c31bc8c
commented on 2026-11-09T20:08:53Z · by 3c31bc8c
Changes are available at https://tangled.org/mrry.band/cheogram-www on branch sqlite-driver.
cmds
checkout latest patchset:
ssh pr.pico.sh pull cheogram-www:sqlite-driver | git am -3
checkout specific patchset revision:
ssh pr.pico.sh pull cheogram-www:sqlite-driver [rev] | git am -3
add changes to patch request:
git format-patch main --stdout | ssh pr.pico.sh cheogram-www:sqlite-driver
add comment to patch request:
ssh pr.pico.sh comment cheogram-www:sqlite-driver "lgtm!"
+1 -0 package.json #
......@@ -22,6 +22,7 @@
2222 "@sqlite.org/sqlite-wasm": "^3.54.1-build1",
2323 "@tauri-apps/api": "^2.12.4",
2424 "@tauri-apps/plugin-notification": "^2.8.0",
25+ "@tauri-apps/plugin-sql": "^2.6.0",
2526 "@types/react": "<= 18.2.0",
2627 "@types/react-dom": "<= 18.2.0",
2728 "borogove": "^0.0.1",
+785 -5 src-tauri/Cargo.lock #
......@@ -32,6 +32,12 @@ dependencies = [
3232 "alloc-no-stdlib",
3333 ]
3434
35+[[package]]
36+name = "allocator-api2"
37+version = "0.2.21"
38+source = "registry+https://github.com/rust-lang/crates.io-index"
39+checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
40+
3541 [[package]]
3642 name = "android_log-sys"
3743 version = "0.3.2"
......@@ -64,6 +70,12 @@ version = "1.0.104"
6470 source = "registry+https://github.com/rust-lang/crates.io-index"
6571 checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470"
6672
73+[[package]]
74+name = "arrayvec"
75+version = "0.7.8"
76+source = "registry+https://github.com/rust-lang/crates.io-index"
77+checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56"
78+
6779 [[package]]
6880 name = "async-broadcast"
6981 version = "0.7.2"
......@@ -230,6 +242,15 @@ dependencies = [
230242 "system-deps",
231243 ]
232244
245+[[package]]
246+name = "atoi"
247+version = "2.0.0"
248+source = "registry+https://github.com/rust-lang/crates.io-index"
249+checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528"
250+dependencies = [
251+ "num-traits",
252+]
253+
233254 [[package]]
234255 name = "atomic-waker"
235256 version = "1.1.2"
......@@ -283,6 +304,12 @@ version = "0.23.1"
283304 source = "registry+https://github.com/rust-lang/crates.io-index"
284305 checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5"
285306
307+[[package]]
308+name = "base64ct"
309+version = "1.8.3"
310+source = "registry+https://github.com/rust-lang/crates.io-index"
311+checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06"
312+
286313 [[package]]
287314 name = "bit-set"
288315 version = "0.8.0"
......@@ -344,6 +371,30 @@ dependencies = [
344371 "piper",
345372 ]
346373
374+[[package]]
375+name = "borsh"
376+version = "1.8.1"
377+source = "registry+https://github.com/rust-lang/crates.io-index"
378+checksum = "553c5d846a6ba5150c65e3b1b8ec073bcf1abc20f9b7220de384a4443ea4e20a"
379+dependencies = [
380+ "borsh-derive",
381+ "bytes",
382+ "cfg_aliases",
383+]
384+
385+[[package]]
386+name = "borsh-derive"
387+version = "1.8.1"
388+source = "registry+https://github.com/rust-lang/crates.io-index"
389+checksum = "12cdfe656708a01f89b451a7d36466e6fe6c414de0aa18fc54f864f6f9ca9f56"
390+dependencies = [
391+ "once_cell",
392+ "proc-macro-crate 3.5.0",
393+ "proc-macro2",
394+ "quote",
395+ "syn 3.0.10",
396+]
397+
347398 [[package]]
348399 name = "brotli"
349400 version = "9.1.1"
......@@ -551,6 +602,7 @@ dependencies = [
551602 "tauri-plugin-log",
552603 "tauri-plugin-notification",
553604 "tauri-plugin-opener",
605+ "tauri-plugin-sql",
554606 "tempfile",
555607 "tokio",
556608 "uuid",
......@@ -614,6 +666,12 @@ dependencies = [
614666 "crossbeam-utils",
615667 ]
616668
669+[[package]]
670+name = "const-oid"
671+version = "0.9.6"
672+source = "registry+https://github.com/rust-lang/crates.io-index"
673+checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
674+
617675 [[package]]
618676 name = "cookie"
619677 version = "0.18.2"
......@@ -682,6 +740,21 @@ dependencies = [
682740 "libc",
683741 ]
684742
743+[[package]]
744+name = "crc"
745+version = "3.4.0"
746+source = "registry+https://github.com/rust-lang/crates.io-index"
747+checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d"
748+dependencies = [
749+ "crc-catalog",
750+]
751+
752+[[package]]
753+name = "crc-catalog"
754+version = "2.5.0"
755+source = "registry+https://github.com/rust-lang/crates.io-index"
756+checksum = "217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853"
757+
685758 [[package]]
686759 name = "crc32fast"
687760 version = "1.5.4"
......@@ -715,6 +788,15 @@ dependencies = [
715788 "crossbeam-utils",
716789 ]
717790
791+[[package]]
792+name = "crossbeam-queue"
793+version = "0.3.14"
794+source = "registry+https://github.com/rust-lang/crates.io-index"
795+checksum = "03e8bd762f7479489c70ed6c768ddca99d7296857de437a68dcb2a94365b3fae"
796+dependencies = [
797+ "crossbeam-utils",
798+]
799+
718800 [[package]]
719801 name = "crossbeam-utils"
720802 version = "0.8.23"
......@@ -811,6 +893,17 @@ dependencies = [
811893 "windows-sys 0.61.2",
812894 ]
813895
896+[[package]]
897+name = "der"
898+version = "0.7.10"
899+source = "registry+https://github.com/rust-lang/crates.io-index"
900+checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
901+dependencies = [
902+ "const-oid",
903+ "pem-rfc7468",
904+ "zeroize",
905+]
906+
814907 [[package]]
815908 name = "deranged"
816909 version = "0.5.9"
......@@ -854,7 +947,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
854947 checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
855948 dependencies = [
856949 "block-buffer",
950+ "const-oid",
857951 "crypto-common",
952+ "subtle",
858953 ]
859954
860955 [[package]]
......@@ -932,13 +1027,19 @@ checksum = "fac5fca71e65e94cc718a6e2af65d6e0f9c6027751c2aa562fbb5087fda639bc"
9321027 dependencies = [
9331028 "bit-set",
9341029 "cssparser",
935- "foldhash",
1030+ "foldhash 0.2.0",
9361031 "html5ever",
9371032 "precomputed-hash",
9381033 "selectors",
9391034 "tendril",
9401035 ]
9411036
1037+[[package]]
1038+name = "dotenvy"
1039+version = "0.15.7"
1040+source = "registry+https://github.com/rust-lang/crates.io-index"
1041+checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
1042+
9421043 [[package]]
9431044 name = "dpi"
9441045 version = "0.1.2"
......@@ -975,6 +1076,15 @@ version = "1.0.20"
9751076 source = "registry+https://github.com/rust-lang/crates.io-index"
9761077 checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
9771078
1079+[[package]]
1080+name = "either"
1081+version = "1.19.0"
1082+source = "registry+https://github.com/rust-lang/crates.io-index"
1083+checksum = "0e9c71c2167ca323c882b99918929403426e2373ea17242ff5653e0d5e1058be"
1084+dependencies = [
1085+ "serde",
1086+]
1087+
9781088 [[package]]
9791089 name = "embed-resource"
9801090 version = "3.0.12"
......@@ -1071,6 +1181,17 @@ dependencies = [
10711181 "windows-sys 0.61.2",
10721182 ]
10731183
1184+[[package]]
1185+name = "etcetera"
1186+version = "0.8.0"
1187+source = "registry+https://github.com/rust-lang/crates.io-index"
1188+checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943"
1189+dependencies = [
1190+ "cfg-if",
1191+ "home",
1192+ "windows-sys 0.48.0",
1193+]
1194+
10741195 [[package]]
10751196 name = "event-listener"
10761197 version = "5.4.2"
......@@ -1097,7 +1218,7 @@ version = "0.17.0"
10971218 source = "registry+https://github.com/rust-lang/crates.io-index"
10981219 checksum = "ef975e30683b2d965054bb0a836f8973857c4ebf6acf274fe46617cd285060d8"
10991220 dependencies = [
1100- "foldhash",
1221+ "foldhash 0.2.0",
11011222 "libm",
11021223 "portable-atomic",
11031224 "siphasher",
......@@ -1154,12 +1275,29 @@ dependencies = [
11541275 "zlib-rs",
11551276 ]
11561277
1278+[[package]]
1279+name = "flume"
1280+version = "0.11.1"
1281+source = "registry+https://github.com/rust-lang/crates.io-index"
1282+checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095"
1283+dependencies = [
1284+ "futures-core",
1285+ "futures-sink",
1286+ "spin",
1287+]
1288+
11571289 [[package]]
11581290 name = "fnv"
11591291 version = "1.0.7"
11601292 source = "registry+https://github.com/rust-lang/crates.io-index"
11611293 checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
11621294
1295+[[package]]
1296+name = "foldhash"
1297+version = "0.1.5"
1298+source = "registry+https://github.com/rust-lang/crates.io-index"
1299+checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
1300+
11631301 [[package]]
11641302 name = "foldhash"
11651303 version = "0.2.0"
......@@ -1250,6 +1388,17 @@ dependencies = [
12501388 "futures-util",
12511389 ]
12521390
1391+[[package]]
1392+name = "futures-intrusive"
1393+version = "0.5.0"
1394+source = "registry+https://github.com/rust-lang/crates.io-index"
1395+checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f"
1396+dependencies = [
1397+ "futures-core",
1398+ "lock_api",
1399+ "parking_lot",
1400+]
1401+
12531402 [[package]]
12541403 name = "futures-io"
12551404 version = "0.3.34"
......@@ -1611,12 +1760,32 @@ version = "0.12.3"
16111760 source = "registry+https://github.com/rust-lang/crates.io-index"
16121761 checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
16131762
1763+[[package]]
1764+name = "hashbrown"
1765+version = "0.15.5"
1766+source = "registry+https://github.com/rust-lang/crates.io-index"
1767+checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
1768+dependencies = [
1769+ "allocator-api2",
1770+ "equivalent",
1771+ "foldhash 0.1.5",
1772+]
1773+
16141774 [[package]]
16151775 name = "hashbrown"
16161776 version = "0.17.1"
16171777 source = "registry+https://github.com/rust-lang/crates.io-index"
16181778 checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
16191779
1780+[[package]]
1781+name = "hashlink"
1782+version = "0.10.0"
1783+source = "registry+https://github.com/rust-lang/crates.io-index"
1784+checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1"
1785+dependencies = [
1786+ "hashbrown 0.15.5",
1787+]
1788+
16201789 [[package]]
16211790 name = "heck"
16221791 version = "0.4.1"
......@@ -1690,6 +1859,33 @@ dependencies = [
16901859 "tracing",
16911860 ]
16921861
1862+[[package]]
1863+name = "hkdf"
1864+version = "0.12.4"
1865+source = "registry+https://github.com/rust-lang/crates.io-index"
1866+checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7"
1867+dependencies = [
1868+ "hmac",
1869+]
1870+
1871+[[package]]
1872+name = "hmac"
1873+version = "0.12.1"
1874+source = "registry+https://github.com/rust-lang/crates.io-index"
1875+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
1876+dependencies = [
1877+ "digest",
1878+]
1879+
1880+[[package]]
1881+name = "home"
1882+version = "0.5.12"
1883+source = "registry+https://github.com/rust-lang/crates.io-index"
1884+checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d"
1885+dependencies = [
1886+ "windows-sys 0.61.2",
1887+]
1888+
16931889 [[package]]
16941890 name = "html5ever"
16951891 version = "0.39.0"
......@@ -2219,6 +2415,15 @@ dependencies = [
22192415 "serde",
22202416 ]
22212417
2418+[[package]]
2419+name = "lazy_static"
2420+version = "1.5.1"
2421+source = "registry+https://github.com/rust-lang/crates.io-index"
2422+checksum = "20870f649af7073d53e38067b2a84312175d56ea15217e1b15bc83506ec50afb"
2423+dependencies = [
2424+ "spin",
2425+]
2426+
22222427 [[package]]
22232428 name = "libappindicator"
22242429 version = "0.9.0"
......@@ -2280,7 +2485,21 @@ version = "0.1.25"
22802485 source = "registry+https://github.com/rust-lang/crates.io-index"
22812486 checksum = "61ff90caf6077a803a240f62fdbe88645a890bbca49ef8174c3cb0404362171d"
22822487 dependencies = [
2488+ "bitflags 2.13.2",
22832489 "libc",
2490+ "plain",
2491+ "redox_syscall 0.9.5",
2492+]
2493+
2494+[[package]]
2495+name = "libsqlite3-sys"
2496+version = "0.30.1"
2497+source = "registry+https://github.com/rust-lang/crates.io-index"
2498+checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149"
2499+dependencies = [
2500+ "cc",
2501+ "pkg-config",
2502+ "vcpkg",
22842503 ]
22852504
22862505 [[package]]
......@@ -2341,6 +2560,16 @@ dependencies = [
23412560 "web_atoms",
23422561 ]
23432562
2563+[[package]]
2564+name = "md-5"
2565+version = "0.10.6"
2566+source = "registry+https://github.com/rust-lang/crates.io-index"
2567+checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
2568+dependencies = [
2569+ "cfg-if",
2570+ "digest",
2571+]
2572+
23442573 [[package]]
23452574 name = "memchr"
23462575 version = "2.8.3"
......@@ -2486,12 +2715,47 @@ dependencies = [
24862715 "zbus 6.2.1",
24872716 ]
24882717
2718+[[package]]
2719+name = "num-bigint-dig"
2720+version = "0.8.6"
2721+source = "registry+https://github.com/rust-lang/crates.io-index"
2722+checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7"
2723+dependencies = [
2724+ "lazy_static",
2725+ "libm",
2726+ "num-integer",
2727+ "num-iter",
2728+ "num-traits",
2729+ "rand 0.8.8",
2730+ "smallvec",
2731+ "zeroize",
2732+]
2733+
24892734 [[package]]
24902735 name = "num-conv"
24912736 version = "0.2.2"
24922737 source = "registry+https://github.com/rust-lang/crates.io-index"
24932738 checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441"
24942739
2740+[[package]]
2741+name = "num-integer"
2742+version = "0.1.47"
2743+source = "registry+https://github.com/rust-lang/crates.io-index"
2744+checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b"
2745+dependencies = [
2746+ "num-traits",
2747+]
2748+
2749+[[package]]
2750+name = "num-iter"
2751+version = "0.1.46"
2752+source = "registry+https://github.com/rust-lang/crates.io-index"
2753+checksum = "c92800bd69a1eac91786bcfe9da64a897eb72911b8dc3095decbd07429e8048b"
2754+dependencies = [
2755+ "num-integer",
2756+ "num-traits",
2757+]
2758+
24952759 [[package]]
24962760 name = "num-traits"
24972761 version = "0.2.19"
......@@ -2499,6 +2763,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
24992763 checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
25002764 dependencies = [
25012765 "autocfg",
2766+ "libm",
25022767 ]
25032768
25042769 [[package]]
......@@ -2821,11 +3086,20 @@ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
28213086 dependencies = [
28223087 "cfg-if",
28233088 "libc",
2824- "redox_syscall",
3089+ "redox_syscall 0.5.18",
28253090 "smallvec",
28263091 "windows-link",
28273092 ]
28283093
3094+[[package]]
3095+name = "pem-rfc7468"
3096+version = "0.7.0"
3097+source = "registry+https://github.com/rust-lang/crates.io-index"
3098+checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
3099+dependencies = [
3100+ "base64ct",
3101+]
3102+
28293103 [[package]]
28303104 name = "percent-encoding"
28313105 version = "2.3.2"
......@@ -2902,12 +3176,39 @@ dependencies = [
29023176 "futures-io",
29033177 ]
29043178
3179+[[package]]
3180+name = "pkcs1"
3181+version = "0.7.5"
3182+source = "registry+https://github.com/rust-lang/crates.io-index"
3183+checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"
3184+dependencies = [
3185+ "der",
3186+ "pkcs8",
3187+ "spki",
3188+]
3189+
3190+[[package]]
3191+name = "pkcs8"
3192+version = "0.10.2"
3193+source = "registry+https://github.com/rust-lang/crates.io-index"
3194+checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
3195+dependencies = [
3196+ "der",
3197+ "spki",
3198+]
3199+
29053200 [[package]]
29063201 name = "pkg-config"
29073202 version = "0.3.34"
29083203 source = "registry+https://github.com/rust-lang/crates.io-index"
29093204 checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548"
29103205
3206+[[package]]
3207+name = "plain"
3208+version = "0.2.3"
3209+source = "registry+https://github.com/rust-lang/crates.io-index"
3210+checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
3211+
29113212 [[package]]
29123213 name = "plist"
29133214 version = "1.10.3"
......@@ -3143,13 +3444,24 @@ version = "6.0.0"
31433444 source = "registry+https://github.com/rust-lang/crates.io-index"
31443445 checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
31453446
3447+[[package]]
3448+name = "rand"
3449+version = "0.8.8"
3450+source = "registry+https://github.com/rust-lang/crates.io-index"
3451+checksum = "e058c7de0b26af77780c769414d6257830bb240f3c38477dbc2c16e5f54d6d4c"
3452+dependencies = [
3453+ "libc",
3454+ "rand_chacha 0.3.1",
3455+ "rand_core 0.6.4",
3456+]
3457+
31463458 [[package]]
31473459 name = "rand"
31483460 version = "0.9.5"
31493461 source = "registry+https://github.com/rust-lang/crates.io-index"
31503462 checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41"
31513463 dependencies = [
3152- "rand_chacha",
3464+ "rand_chacha 0.9.0",
31533465 "rand_core 0.9.5",
31543466 ]
31553467
......@@ -3164,6 +3476,16 @@ dependencies = [
31643476 "rand_core 0.10.1",
31653477 ]
31663478
3479+[[package]]
3480+name = "rand_chacha"
3481+version = "0.3.1"
3482+source = "registry+https://github.com/rust-lang/crates.io-index"
3483+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
3484+dependencies = [
3485+ "ppv-lite86",
3486+ "rand_core 0.6.4",
3487+]
3488+
31673489 [[package]]
31683490 name = "rand_chacha"
31693491 version = "0.9.0"
......@@ -3174,6 +3496,15 @@ dependencies = [
31743496 "rand_core 0.9.5",
31753497 ]
31763498
3499+[[package]]
3500+name = "rand_core"
3501+version = "0.6.4"
3502+source = "registry+https://github.com/rust-lang/crates.io-index"
3503+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
3504+dependencies = [
3505+ "getrandom 0.2.17",
3506+]
3507+
31773508 [[package]]
31783509 name = "rand_core"
31793510 version = "0.9.5"
......@@ -3213,6 +3544,15 @@ dependencies = [
32133544 "bitflags 2.13.2",
32143545 ]
32153546
3547+[[package]]
3548+name = "redox_syscall"
3549+version = "0.9.5"
3550+source = "registry+https://github.com/rust-lang/crates.io-index"
3551+checksum = "580c875845b41ecb1564ad1ae4703044cef774145e3d7a94dc2b3fa7c97868fd"
3552+dependencies = [
3553+ "bitflags 2.13.2",
3554+]
3555+
32163556 [[package]]
32173557 name = "redox_users"
32183558 version = "0.5.3"
......@@ -3331,6 +3671,43 @@ dependencies = [
33313671 "windows-sys 0.52.0",
33323672 ]
33333673
3674+[[package]]
3675+name = "rsa"
3676+version = "0.9.10"
3677+source = "registry+https://github.com/rust-lang/crates.io-index"
3678+checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d"
3679+dependencies = [
3680+ "const-oid",
3681+ "digest",
3682+ "num-bigint-dig",
3683+ "num-integer",
3684+ "num-traits",
3685+ "pkcs1",
3686+ "pkcs8",
3687+ "rand_core 0.6.4",
3688+ "signature",
3689+ "spki",
3690+ "subtle",
3691+ "zeroize",
3692+]
3693+
3694+[[package]]
3695+name = "rust_decimal"
3696+version = "1.43.0"
3697+source = "registry+https://github.com/rust-lang/crates.io-index"
3698+checksum = "7653272e75dcac41dc199fbea6f5797633994fafd339943c06c9af16bf29cd3a"
3699+dependencies = [
3700+ "arrayvec",
3701+ "borsh",
3702+ "bytes",
3703+ "num-traits",
3704+ "rand 0.8.8",
3705+ "rand 0.9.5",
3706+ "serde",
3707+ "serde_json",
3708+ "wasm-bindgen",
3709+]
3710+
33343711 [[package]]
33353712 name = "rustc-hash"
33363713 version = "2.1.3"
......@@ -3442,6 +3819,12 @@ version = "1.0.23"
34423819 source = "registry+https://github.com/rust-lang/crates.io-index"
34433820 checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f"
34443821
3822+[[package]]
3823+name = "ryu"
3824+version = "1.0.23"
3825+source = "registry+https://github.com/rust-lang/crates.io-index"
3826+checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
3827+
34453828 [[package]]
34463829 name = "same-file"
34473830 version = "1.0.6"
......@@ -3673,6 +4056,18 @@ dependencies = [
36734056 "serde_core",
36744057 ]
36754058
4059+[[package]]
4060+name = "serde_urlencoded"
4061+version = "0.7.1"
4062+source = "registry+https://github.com/rust-lang/crates.io-index"
4063+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
4064+dependencies = [
4065+ "form_urlencoded",
4066+ "itoa",
4067+ "ryu",
4068+ "serde",
4069+]
4070+
36764071 [[package]]
36774072 name = "serde_with"
36784073 version = "3.24.0"
......@@ -3775,6 +4170,16 @@ dependencies = [
37754170 "libc",
37764171 ]
37774172
4173+[[package]]
4174+name = "signature"
4175+version = "2.2.0"
4176+source = "registry+https://github.com/rust-lang/crates.io-index"
4177+checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
4178+dependencies = [
4179+ "digest",
4180+ "rand_core 0.6.4",
4181+]
4182+
37784183 [[package]]
37794184 name = "simd-adler32"
37804185 version = "0.3.10"
......@@ -3814,6 +4219,9 @@ name = "smallvec"
38144219 version = "1.16.5"
38154220 source = "registry+https://github.com/rust-lang/crates.io-index"
38164221 checksum = "149309498a5f7334b12ddae0cad8aba81ce785fe91755068867e017cf98fee46"
4222+dependencies = [
4223+ "serde",
4224+]
38174225
38184226 [[package]]
38194227 name = "socket2"
......@@ -3840,7 +4248,7 @@ dependencies = [
38404248 "objc2-foundation",
38414249 "objc2-quartz-core",
38424250 "raw-window-handle",
3843- "redox_syscall",
4251+ "redox_syscall 0.5.18",
38444252 "tracing",
38454253 "wasm-bindgen",
38464254 "web-sys",
......@@ -3873,6 +4281,224 @@ dependencies = [
38734281 "system-deps",
38744282 ]
38754283
4284+[[package]]
4285+name = "spin"
4286+version = "0.9.9"
4287+source = "registry+https://github.com/rust-lang/crates.io-index"
4288+checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e"
4289+dependencies = [
4290+ "lock_api",
4291+]
4292+
4293+[[package]]
4294+name = "spki"
4295+version = "0.7.3"
4296+source = "registry+https://github.com/rust-lang/crates.io-index"
4297+checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
4298+dependencies = [
4299+ "base64ct",
4300+ "der",
4301+]
4302+
4303+[[package]]
4304+name = "sqlx"
4305+version = "0.8.6"
4306+source = "registry+https://github.com/rust-lang/crates.io-index"
4307+checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc"
4308+dependencies = [
4309+ "sqlx-core",
4310+ "sqlx-macros",
4311+ "sqlx-mysql",
4312+ "sqlx-postgres",
4313+ "sqlx-sqlite",
4314+]
4315+
4316+[[package]]
4317+name = "sqlx-core"
4318+version = "0.8.6"
4319+source = "registry+https://github.com/rust-lang/crates.io-index"
4320+checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6"
4321+dependencies = [
4322+ "base64 0.22.1",
4323+ "bytes",
4324+ "crc",
4325+ "crossbeam-queue",
4326+ "either",
4327+ "event-listener",
4328+ "futures-core",
4329+ "futures-intrusive",
4330+ "futures-io",
4331+ "futures-util",
4332+ "hashbrown 0.15.5",
4333+ "hashlink",
4334+ "indexmap 2.14.2",
4335+ "log",
4336+ "memchr",
4337+ "once_cell",
4338+ "percent-encoding",
4339+ "rust_decimal",
4340+ "serde",
4341+ "serde_json",
4342+ "sha2",
4343+ "smallvec",
4344+ "thiserror 2.0.21",
4345+ "time",
4346+ "tokio",
4347+ "tokio-stream",
4348+ "tracing",
4349+ "url",
4350+ "uuid",
4351+]
4352+
4353+[[package]]
4354+name = "sqlx-macros"
4355+version = "0.8.6"
4356+source = "registry+https://github.com/rust-lang/crates.io-index"
4357+checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d"
4358+dependencies = [
4359+ "proc-macro2",
4360+ "quote",
4361+ "sqlx-core",
4362+ "sqlx-macros-core",
4363+ "syn 2.0.119",
4364+]
4365+
4366+[[package]]
4367+name = "sqlx-macros-core"
4368+version = "0.8.6"
4369+source = "registry+https://github.com/rust-lang/crates.io-index"
4370+checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b"
4371+dependencies = [
4372+ "dotenvy",
4373+ "either",
4374+ "heck 0.5.0",
4375+ "hex",
4376+ "once_cell",
4377+ "proc-macro2",
4378+ "quote",
4379+ "serde",
4380+ "serde_json",
4381+ "sha2",
4382+ "sqlx-core",
4383+ "sqlx-mysql",
4384+ "sqlx-postgres",
4385+ "sqlx-sqlite",
4386+ "syn 2.0.119",
4387+ "tokio",
4388+ "url",
4389+]
4390+
4391+[[package]]
4392+name = "sqlx-mysql"
4393+version = "0.8.6"
4394+source = "registry+https://github.com/rust-lang/crates.io-index"
4395+checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526"
4396+dependencies = [
4397+ "atoi",
4398+ "base64 0.22.1",
4399+ "bitflags 2.13.2",
4400+ "byteorder",
4401+ "bytes",
4402+ "crc",
4403+ "digest",
4404+ "dotenvy",
4405+ "either",
4406+ "futures-channel",
4407+ "futures-core",
4408+ "futures-io",
4409+ "futures-util",
4410+ "generic-array",
4411+ "hex",
4412+ "hkdf",
4413+ "hmac",
4414+ "itoa",
4415+ "log",
4416+ "md-5",
4417+ "memchr",
4418+ "once_cell",
4419+ "percent-encoding",
4420+ "rand 0.8.8",
4421+ "rsa",
4422+ "rust_decimal",
4423+ "serde",
4424+ "sha1",
4425+ "sha2",
4426+ "smallvec",
4427+ "sqlx-core",
4428+ "stringprep",
4429+ "thiserror 2.0.21",
4430+ "time",
4431+ "tracing",
4432+ "uuid",
4433+ "whoami",
4434+]
4435+
4436+[[package]]
4437+name = "sqlx-postgres"
4438+version = "0.8.6"
4439+source = "registry+https://github.com/rust-lang/crates.io-index"
4440+checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46"
4441+dependencies = [
4442+ "atoi",
4443+ "base64 0.22.1",
4444+ "bitflags 2.13.2",
4445+ "byteorder",
4446+ "crc",
4447+ "dotenvy",
4448+ "etcetera",
4449+ "futures-channel",
4450+ "futures-core",
4451+ "futures-util",
4452+ "hex",
4453+ "hkdf",
4454+ "hmac",
4455+ "home",
4456+ "itoa",
4457+ "log",
4458+ "md-5",
4459+ "memchr",
4460+ "once_cell",
4461+ "rand 0.8.8",
4462+ "rust_decimal",
4463+ "serde",
4464+ "serde_json",
4465+ "sha2",
4466+ "smallvec",
4467+ "sqlx-core",
4468+ "stringprep",
4469+ "thiserror 2.0.21",
4470+ "time",
4471+ "tracing",
4472+ "uuid",
4473+ "whoami",
4474+]
4475+
4476+[[package]]
4477+name = "sqlx-sqlite"
4478+version = "0.8.6"
4479+source = "registry+https://github.com/rust-lang/crates.io-index"
4480+checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea"
4481+dependencies = [
4482+ "atoi",
4483+ "flume",
4484+ "futures-channel",
4485+ "futures-core",
4486+ "futures-executor",
4487+ "futures-intrusive",
4488+ "futures-util",
4489+ "libsqlite3-sys",
4490+ "log",
4491+ "percent-encoding",
4492+ "serde",
4493+ "serde_urlencoded",
4494+ "sqlx-core",
4495+ "thiserror 2.0.21",
4496+ "time",
4497+ "tracing",
4498+ "url",
4499+ "uuid",
4500+]
4501+
38764502 [[package]]
38774503 name = "stable_deref_trait"
38784504 version = "1.2.1"
......@@ -3909,6 +4535,17 @@ dependencies = [
39094535 "quote",
39104536 ]
39114537
4538+[[package]]
4539+name = "stringprep"
4540+version = "0.1.5"
4541+source = "registry+https://github.com/rust-lang/crates.io-index"
4542+checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1"
4543+dependencies = [
4544+ "unicode-bidi",
4545+ "unicode-normalization",
4546+ "unicode-properties",
4547+]
4548+
39124549 [[package]]
39134550 name = "strsim"
39144551 version = "0.11.1"
......@@ -4253,6 +4890,27 @@ dependencies = [
42534890 "zbus 5.19.0",
42544891 ]
42554892
4893+[[package]]
4894+name = "tauri-plugin-sql"
4895+version = "2.6.0"
4896+source = "registry+https://github.com/rust-lang/crates.io-index"
4897+checksum = "ed265036ad01e492a6bf6ae269267dd37dae4419ac0a80dbd93d275c763bb32d"
4898+dependencies = [
4899+ "futures-core",
4900+ "indexmap 2.14.2",
4901+ "log",
4902+ "rust_decimal",
4903+ "serde",
4904+ "serde_json",
4905+ "sqlx",
4906+ "tauri",
4907+ "tauri-plugin",
4908+ "thiserror 2.0.21",
4909+ "time",
4910+ "tokio",
4911+ "uuid",
4912+]
4913+
42564914 [[package]]
42574915 name = "tauri-runtime"
42584916 version = "2.12.2"
......@@ -4510,6 +5168,17 @@ dependencies = [
45105168 "tokio",
45115169 ]
45125170
5171+[[package]]
5172+name = "tokio-stream"
5173+version = "0.1.19"
5174+source = "registry+https://github.com/rust-lang/crates.io-index"
5175+checksum = "a3d06f0b082ba57c26b79407372e57cf2a1e28124f78e9479fe80322cf53420b"
5176+dependencies = [
5177+ "futures-core",
5178+ "pin-project-lite",
5179+ "tokio",
5180+]
5181+
45135182 [[package]]
45145183 name = "tokio-util"
45155184 version = "0.7.20"
......@@ -4699,6 +5368,7 @@ version = "0.1.44"
46995368 source = "registry+https://github.com/rust-lang/crates.io-index"
47005369 checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
47015370 dependencies = [
5371+ "log",
47025372 "pin-project-lite",
47035373 "tracing-attributes",
47045374 "tracing-core",
......@@ -4775,12 +5445,33 @@ dependencies = [
47755445 "windows-sys 0.61.2",
47765446 ]
47775447
5448+[[package]]
5449+name = "unicode-bidi"
5450+version = "0.3.18"
5451+source = "registry+https://github.com/rust-lang/crates.io-index"
5452+checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5"
5453+
47785454 [[package]]
47795455 name = "unicode-ident"
47805456 version = "1.0.27"
47815457 source = "registry+https://github.com/rust-lang/crates.io-index"
47825458 checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563"
47835459
5460+[[package]]
5461+name = "unicode-normalization"
5462+version = "0.1.26"
5463+source = "registry+https://github.com/rust-lang/crates.io-index"
5464+checksum = "75cd3fb03d5288b3ba9a1ee103ac7e9cbb59f0b03d64f8ddfcc04dd42758a85d"
5465+dependencies = [
5466+ "tinyvec",
5467+]
5468+
5469+[[package]]
5470+name = "unicode-properties"
5471+version = "0.1.5"
5472+source = "registry+https://github.com/rust-lang/crates.io-index"
5473+checksum = "993ad287eb20e8ba755312801cfe1413e0f25d604075863acaddca10b04c1833"
5474+
47845475 [[package]]
47855476 name = "unicode-segmentation"
47865477 version = "1.13.3"
......@@ -4845,6 +5536,12 @@ dependencies = [
48455536 "wasm-bindgen",
48465537 ]
48475538
5539+[[package]]
5540+name = "vcpkg"
5541+version = "0.2.15"
5542+source = "registry+https://github.com/rust-lang/crates.io-index"
5543+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
5544+
48485545 [[package]]
48495546 name = "version-compare"
48505547 version = "0.2.1"
......@@ -4911,6 +5608,12 @@ dependencies = [
49115608 "wit-bindgen",
49125609 ]
49135610
5611+[[package]]
5612+name = "wasite"
5613+version = "0.1.0"
5614+source = "registry+https://github.com/rust-lang/crates.io-index"
5615+checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b"
5616+
49145617 [[package]]
49155618 name = "wasm-bindgen"
49165619 version = "0.2.130"
......@@ -4919,6 +5622,7 @@ checksum = "a0181c14ddd6c7b8b0b0132a5f1ea2f32be0d893cd3ea97b6e3b28886b8a3d1c"
49195622 dependencies = [
49205623 "cfg-if",
49215624 "rustversion",
5625+ "serde",
49225626 "wasm-bindgen-macro",
49235627 "wasm-bindgen-shared",
49245628 ]
......@@ -5140,6 +5844,16 @@ dependencies = [
51405844 "windows-core",
51415845 ]
51425846
5847+[[package]]
5848+name = "whoami"
5849+version = "1.6.1"
5850+source = "registry+https://github.com/rust-lang/crates.io-index"
5851+checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d"
5852+dependencies = [
5853+ "libredox",
5854+ "wasite",
5855+]
5856+
51435857 [[package]]
51445858 name = "widestring"
51455859 version = "1.2.1"
......@@ -5314,6 +6028,15 @@ dependencies = [
53146028 "windows-targets 0.42.2",
53156029 ]
53166030
6031+[[package]]
6032+name = "windows-sys"
6033+version = "0.48.0"
6034+source = "registry+https://github.com/rust-lang/crates.io-index"
6035+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
6036+dependencies = [
6037+ "windows-targets 0.48.5",
6038+]
6039+
53176040 [[package]]
53186041 name = "windows-sys"
53196042 version = "0.52.0"
......@@ -5347,6 +6070,21 @@ dependencies = [
53476070 "windows_x86_64_msvc 0.42.2",
53486071 ]
53496072
6073+[[package]]
6074+name = "windows-targets"
6075+version = "0.48.5"
6076+source = "registry+https://github.com/rust-lang/crates.io-index"
6077+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
6078+dependencies = [
6079+ "windows_aarch64_gnullvm 0.48.5",
6080+ "windows_aarch64_msvc 0.48.5",
6081+ "windows_i686_gnu 0.48.5",
6082+ "windows_i686_msvc 0.48.5",
6083+ "windows_x86_64_gnu 0.48.5",
6084+ "windows_x86_64_gnullvm 0.48.5",
6085+ "windows_x86_64_msvc 0.48.5",
6086+]
6087+
53506088 [[package]]
53516089 name = "windows-targets"
53526090 version = "0.52.6"
......@@ -5387,6 +6125,12 @@ version = "0.42.2"
53876125 source = "registry+https://github.com/rust-lang/crates.io-index"
53886126 checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
53896127
6128+[[package]]
6129+name = "windows_aarch64_gnullvm"
6130+version = "0.48.5"
6131+source = "registry+https://github.com/rust-lang/crates.io-index"
6132+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
6133+
53906134 [[package]]
53916135 name = "windows_aarch64_gnullvm"
53926136 version = "0.52.6"
......@@ -5399,6 +6143,12 @@ version = "0.42.2"
53996143 source = "registry+https://github.com/rust-lang/crates.io-index"
54006144 checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
54016145
6146+[[package]]
6147+name = "windows_aarch64_msvc"
6148+version = "0.48.5"
6149+source = "registry+https://github.com/rust-lang/crates.io-index"
6150+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
6151+
54026152 [[package]]
54036153 name = "windows_aarch64_msvc"
54046154 version = "0.52.6"
......@@ -5411,6 +6161,12 @@ version = "0.42.2"
54116161 source = "registry+https://github.com/rust-lang/crates.io-index"
54126162 checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
54136163
6164+[[package]]
6165+name = "windows_i686_gnu"
6166+version = "0.48.5"
6167+source = "registry+https://github.com/rust-lang/crates.io-index"
6168+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
6169+
54146170 [[package]]
54156171 name = "windows_i686_gnu"
54166172 version = "0.52.6"
......@@ -5429,6 +6185,12 @@ version = "0.42.2"
54296185 source = "registry+https://github.com/rust-lang/crates.io-index"
54306186 checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
54316187
6188+[[package]]
6189+name = "windows_i686_msvc"
6190+version = "0.48.5"
6191+source = "registry+https://github.com/rust-lang/crates.io-index"
6192+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
6193+
54326194 [[package]]
54336195 name = "windows_i686_msvc"
54346196 version = "0.52.6"
......@@ -5441,6 +6203,12 @@ version = "0.42.2"
54416203 source = "registry+https://github.com/rust-lang/crates.io-index"
54426204 checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
54436205
6206+[[package]]
6207+name = "windows_x86_64_gnu"
6208+version = "0.48.5"
6209+source = "registry+https://github.com/rust-lang/crates.io-index"
6210+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
6211+
54446212 [[package]]
54456213 name = "windows_x86_64_gnu"
54466214 version = "0.52.6"
......@@ -5453,6 +6221,12 @@ version = "0.42.2"
54536221 source = "registry+https://github.com/rust-lang/crates.io-index"
54546222 checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
54556223
6224+[[package]]
6225+name = "windows_x86_64_gnullvm"
6226+version = "0.48.5"
6227+source = "registry+https://github.com/rust-lang/crates.io-index"
6228+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
6229+
54566230 [[package]]
54576231 name = "windows_x86_64_gnullvm"
54586232 version = "0.52.6"
......@@ -5465,6 +6239,12 @@ version = "0.42.2"
54656239 source = "registry+https://github.com/rust-lang/crates.io-index"
54666240 checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
54676241
6242+[[package]]
6243+name = "windows_x86_64_msvc"
6244+version = "0.48.5"
6245+source = "registry+https://github.com/rust-lang/crates.io-index"
6246+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
6247+
54686248 [[package]]
54696249 name = "windows_x86_64_msvc"
54706250 version = "0.52.6"
+1 -0 src-tauri/Cargo.toml #
......@@ -31,6 +31,7 @@ sha1 = "0.10"
3131 sha2 = "0.10"
3232 uuid = { version = "1", features = ["v4"] }
3333 tauri-plugin-notification = "2.8"
34+tauri-plugin-sql = { version = "2.6", features = ["sqlite"] }
3435 infer = "0.22.0"
3536 tempfile = "3.27.0"
3637
+9 -1 src-tauri/capabilities/default.json #
......@@ -3,5 +3,13 @@
33 "identifier": "default",
44 "description": "enables the default permissions",
55 "windows": ["main"],
6- "permissions": ["core:default", "opener:default", "notification:default", "core:window:allow-show", "core:window:allow-unminimize", "core:window:allow-set-focus"]
6+ "permissions": [
7+ "core:default",
8+ "opener:default",
9+ "notification:default",
10+ "sql:default",
11+ "core:window:allow-show",
12+ "core:window:allow-unminimize",
13+ "core:window:allow-set-focus"
14+ ]
715 }
+2 -0 src-tauri/src/lib.rs #
......@@ -10,6 +10,7 @@ pub fn run() {
1010 tauri::Builder::default()
1111 .plugin(tauri_plugin_opener::init())
1212 .plugin(tauri_plugin_notification::init())
13+ .plugin(tauri_plugin_sql::Builder::default().build())
1314 .manage(XmppState::default())
1415 .invoke_handler(tauri::generate_handler![
1516 media::begin_media,
......@@ -23,6 +24,7 @@ pub fn run() {
2324 ])
2425 .register_asynchronous_uri_scheme_protocol("tauri", media::protocol)
2526 .setup(|app| {
27+ std::fs::create_dir_all(app.path().app_data_dir()?)?;
2628 app.manage(media::MediaCache::new(
2729 app.path().app_cache_dir()?.join("media"),
2830 )?);
+11 -1 src/App.tsx #
......@@ -21,6 +21,7 @@ import { SettingsContext, SettingsData } from "./components/Settings";
2121 import { Call } from "./components/Call";
2222 import { LoginRequest } from "./components/LoginRequest";
2323 import { mediaStore } from "./media-store";
24+import { SqliteDriverTauri } from "./sqlite-driver-tauri";
2425
2526 Sentry.init({
2627 dsn: "https://ec9ae5aef68e4035937d4c5943c4156c@app.glitchtip.com/7125",
......@@ -39,7 +40,16 @@ Sentry.init({
3940
4041 const idbp = await borogove.persistence.IDB("snikket", mediaStore, null, stem);
4142 let persistence = null;
42-if (typeof navigator.storage?.getDirectory === "function" && (webkit || ios)) {
43+if (isTauri()) {
44+ persistence = new borogoveSqlite(
45+ "db.sqlite3",
46+ mediaStore,
47+ (file, migrate) => new SqliteDriverTauri(file, migrate),
48+ );
49+} else if (
50+ typeof navigator.storage?.getDirectory === "function" &&
51+ (webkit || ios)
52+) {
4353 persistence = new borogoveSqlite("snikket.sqlite3", mediaStore);
4454 mediaStore.setKV(idbp); // Use IDB for media KV for now because we can't use opfs-sahpool from service worker
4555 } else {
+34 -0 src/sqlite-driver-tauri.test.ts #
......@@ -0,0 +1,34 @@
1+// @vitest-environment jsdom
2+import { clearMocks, mockIPC } from "@tauri-apps/api/mocks";
3+import { afterEach, expect, it } from "vitest";
4+import { SqliteDriverTauri } from "./sqlite-driver-tauri";
5+
6+afterEach(clearMocks);
7+
8+it("converts BLOB byte arrays into ArrayBuffers", async () => {
9+ const data = [0, 128, 255];
10+ mockIPC((command) => {
11+ switch (command) {
12+ case "plugin:path|resolve_directory":
13+ return "/app/data";
14+ case "plugin:path|join":
15+ return "/app/data/test.db";
16+ case "plugin:sql|load":
17+ return "sqlite:/app/data/test.db";
18+ case "plugin:sql|select":
19+ return [{ data, empty: [], name: "test", count: 3, absent: null }];
20+ default:
21+ throw new Error(`Unexpected IPC command: ${command}`);
22+ }
23+ });
24+ const driver = new SqliteDriverTauri("test.db", async () => {});
25+ const [row] = await driver.exec("SELECT * FROM kv");
26+
27+ expect(row).toEqual({
28+ data: new Uint8Array(data).buffer,
29+ empty: new ArrayBuffer(0),
30+ name: "test",
31+ count: 3,
32+ absent: null,
33+ });
34+});
+46 -0 src/sqlite-driver-tauri.ts #
......@@ -0,0 +1,46 @@
1+import Database from "@tauri-apps/plugin-sql";
2+import { appDataDir, join } from "@tauri-apps/api/path";
3+import { borogove_persistence_Sqlite as Sqlite } from "borogove/sqlite-wasm";
4+
5+type Query = { sql: string; params?: unknown[] };
6+type Row = Record<string, unknown>;
7+
8+export class SqliteDriverTauri {
9+ private readonly db: Promise<Database>;
10+
11+ constructor(
12+ dbfile: string,
13+ migrate: (exec: (sql: string[]) => Promise<Row[]>) => Promise<unknown>,
14+ ) {
15+ this.db = appDataDir().then(async (directory) => {
16+ const path = await join(directory, dbfile);
17+ const db = await Database.load(`sqlite:${path}`);
18+ await migrate((sql) =>
19+ this.execute(
20+ db,
21+ sql.map((sql) => ({ sql })),
22+ ),
23+ );
24+ return db;
25+ });
26+ }
27+
28+ private async execute(db: Database, qs: Query[]): Promise<Row[]> {
29+ const sql = qs.map((q) => Sqlite.prepare(q)).join(";");
30+ const rows = await db.select<Row[]>(sql);
31+ for (const row of rows) {
32+ for (const key of Object.keys(row)) {
33+ if (Array.isArray(row[key])) row[key] = new Uint8Array(row[key]).buffer;
34+ }
35+ }
36+ return rows;
37+ }
38+
39+ async execMany(qs: Query[]) {
40+ return this.execute(await this.db, qs);
41+ }
42+
43+ exec(sql: Query["sql"], params?: Query["params"]) {
44+ return this.execMany([{ sql, params }]);
45+ }
46+}
Back to top