From bc9bde1885b0b699aca1ffa42f6457f4e8d39124 Mon Sep 17 00:00:00 2001 From: b5 Date: Tue, 14 May 2024 00:43:20 -0400 Subject: [PATCH 1/2] WIP --- pastebin/Cargo.toml | 8 + pastebin/src/main.rs | 3 + watchdir/Cargo.toml | 15 ++ watchdir/src/.iroh/blobs/blobs.db | Bin 0 -> 1589248 bytes watchdir/src/.iroh/docs.redb | Bin 0 -> 1589248 bytes watchdir/src/.iroh/keypair | 7 + watchdir/src/.iroh/peers.postcard | Bin 0 -> 150 bytes watchdir/src/main.rs | 245 ++++++++++++++++++++++++++++++ 8 files changed, 278 insertions(+) create mode 100644 pastebin/Cargo.toml create mode 100644 pastebin/src/main.rs create mode 100644 watchdir/Cargo.toml create mode 100644 watchdir/src/.iroh/blobs/blobs.db create mode 100644 watchdir/src/.iroh/docs.redb create mode 100644 watchdir/src/.iroh/keypair create mode 100644 watchdir/src/.iroh/peers.postcard create mode 100644 watchdir/src/main.rs diff --git a/pastebin/Cargo.toml b/pastebin/Cargo.toml new file mode 100644 index 0000000..e84afe0 --- /dev/null +++ b/pastebin/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "pastebin" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/pastebin/src/main.rs b/pastebin/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/pastebin/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/watchdir/Cargo.toml b/watchdir/Cargo.toml new file mode 100644 index 0000000..2a0596e --- /dev/null +++ b/watchdir/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "iroh-watchdir" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +anyhow = "1.0.83" +bytes = "1.6.0" +crossbeam-channel = "0.5.12" +futures = "0.3.30" +iroh = "0.16.2" +notify = "6.1.1" +tokio = "1.37.0" diff --git a/watchdir/src/.iroh/blobs/blobs.db b/watchdir/src/.iroh/blobs/blobs.db new file mode 100644 index 0000000000000000000000000000000000000000..3996a1a57a83caafe9859347d57ef05cccc28b11 GIT binary patch literal 1589248 zcmeF)2Ut_dqc-qRRK!)m-aR5>5DW-{7!au8Q&H^L3s})zd+!x{ zZ=j-xWfgnF-h1JjIY}UZu6y_HcmHMIJccBv%$fO3pA%3i5r@|^T~*oCki+4aaX2H% z3;TxrG%%n)=;t3l3=K3#)X*MMA#Bac<6SnJ7M5>N`;Noqv&KI@wZxt}+E2GX#LEV8 zt@}@nY}5M9v;(Vkm*1$}Z#DB;mG^_bwj0BlI&d04*o9o5eN@u!Z^jibn7O1+hc>gU z-gzEyy!vOauRZ;TFB`ObJZ#ie+O~ce^!2pFIrZZCx<5PtJ0Ji72tWV=5P$##AOHaf zKmY>&MgnyDys)|nhtA*WeE*AyA;+b%5hrA-5hvxW5y$eS5hvBam~*NknMqeM<}@%f z=D3&}bMna3zM3&dMxJxXb1iuuAkRGVEFjM>1b}k=~B&vbCx`7khr*zXBYD9L!M&tj3v*ZEub{ zOXu|rdHRrNM-vXG3yC+~_N`F!psNzP_u5TmUN{~t{*Z=_tKmY;|fWUve0KL~y zc;i1l8At#GAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1R(G?2^e!Y9ELnwlcx*$;AU*VF(mK5X~R#^ zd#}4BJwdl$w+*ilfWSXTfWtB24FBgO7b%4R1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZafje*dqEGlyfq`TDQAIIar;2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX?}-zK2@jzSpuZi1M6L4o|&4aMJ4Ff4xmS1-s(;ov(4e-#hsK>z{}fB*y_ z009U<00Izz00jPn1axZ*9%OC7hb%CVUwtTEV<7*3r0#bjev~8*IT637@FN{;hX4d1 z009X6_X_C75cXv3(3%V&$gPQ@aYKsUdz}FN52-O`&}rZm0{=V#+D6nN&j#d;2YJ;A z&|k#Xy~pc6Q=q79kohO0UpC16^q(nGoNArTeBwg?W`S-Gow)1X|EpegaSI{wqTf}} z#e)tAbnpM_t1fIe5-we%(1k<(OhVCn-L}%Nx^r#GdGx(*e~R9F-8K>&rv`a?=8D+{O+U`MZTfN1ZKJQcxX>InYD_l#!Gj);2LvDh0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_@J|si;Z*sjBo*m|00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_0D+$f 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 zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly 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 z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009EOMj&PAq^Y447D}nF<&%c?-$(tp9gp>M{@S5Gd?&VFN6wAguM_xnXSv_F{W^hP lcb5B&+piP&b!WNXxcxeTUw4-K?bo@5x-T{Y1a3m${{i@i>6rik literal 0 HcmV?d00001 diff --git a/watchdir/src/.iroh/keypair b/watchdir/src/.iroh/keypair new file mode 100644 index 0000000..24bbd1b --- /dev/null +++ b/watchdir/src/.iroh/keypair @@ -0,0 +1,7 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW +QyNTUxOQAAACDrTh4ZE+pAgHz4L6uo5iQAkTziBU6tZAVJJu/lG4bbAwAAAIjuDB6V7gwe +lQAAAAtzc2gtZWQyNTUxOQAAACDrTh4ZE+pAgHz4L6uo5iQAkTziBU6tZAVJJu/lG4bbAw +AAAEC5Hd1ge70iFWPQ4Qq0MeiMwkB055gqcFDuUWD3T3aMJutOHhkT6kCAfPgvq6jmJACR +POIFTq1kBUkm7+UbhtsDAAAAAAECAwQF +-----END OPENSSH PRIVATE KEY----- diff --git a/watchdir/src/.iroh/peers.postcard b/watchdir/src/.iroh/peers.postcard new file mode 100644 index 0000000000000000000000000000000000000000..a2dee79305de80e926cc270696cd7c3f8e8960d9 GIT binary patch literal 150 zcmZR)r_mKRhyOus_jdo%h}=0la(<<(eAk_+Re7X2T4&ioM&*o>l7eC@ef`qnR6|`u zy`t2d#7e!)qWlcKywsBN{Gx0G literal 0 HcmV?d00001 diff --git a/watchdir/src/main.rs b/watchdir/src/main.rs new file mode 100644 index 0000000..9a377fc --- /dev/null +++ b/watchdir/src/main.rs @@ -0,0 +1,245 @@ +use anyhow::Result; +use futures::{ + // channel::mpsc::channel, + SinkExt, + StreamExt, + TryStreamExt, +}; +use iroh::{docs::DocTicket, util::path}; +use notify::{ + poll::ScanEvent, Config, Event, PollWatcher, RecommendedWatcher, RecursiveMode, Watcher, +}; +use std::{ + path::{Component, Path}, + str::FromStr, + sync::mpsc::channel, +}; + +/// Async, futures channel based event watching +#[tokio::main] +async fn main() -> Result<()> { + let path = std::env::args() + .nth(1) + .expect("Argument 1 needs to be a path"); + + let mut doc_ticket = None; + if let Some(ticket) = std::env::args().nth(2) { + let ticket = iroh::docs::DocTicket::from_str(ticket.as_str())?; + doc_ticket = Some(ticket); + } + println!("watching {}", path); + + let path = std::path::PathBuf::from(&path); + let iroh_path = path.join(".iroh"); + let node = iroh::node::Node::persistent(iroh_path) + .await? + .spawn() + .await?; + + let doc = open_or_create_document(&node, doc_ticket).await?; + let author = node.authors.create().await?; + + tokio::spawn(async_watch(path, doc, author)).await??; + + Ok(()) +} + +async fn open_or_create_document( + node: &iroh::client::MemIroh, + ticket: Option, +) -> anyhow::Result { + let doc = match ticket { + Some(ticket) => { + println!("importing ticket: {:?}", ticket); + node.docs.import(ticket).await? + } + None => { + let doc = node.docs.create().await?; + let ticket = doc + .share( + iroh::client::docs::ShareMode::Write, + iroh::base::node_addr::AddrInfoOptions::Relay, + ) + .await?; + println!( + "created new doc {:?} write ticket:\n{:?}", + doc.id(), + ticket.to_string() + ); + doc + } + }; + Ok(doc) +} + +enum Message { + Event(notify::Result), + Scan(ScanEvent), +} + +async fn async_watcher() -> notify::Result<(PollWatcher, std::sync::mpsc::Receiver)> { + // let (tx, rx) = tokio::sync::mpsc::channel(1000); + let (tx, rx) = channel(); + + let tx_2 = tx.clone(); + let tx_3 = tx.clone(); + // use the pollwatcher and set a callback for the scanning events + let watcher = PollWatcher::with_initial_scan( + move |watch_event| { + let tx_2 = tx_2.clone(); + // tx_2.blocking_send(Message::Event(watch_event)).unwrap(); + tokio::task::spawn(async move { + println!("watch_event: {:?}", &watch_event); + tx_2.send(Message::Event(watch_event)).unwrap(); + }); + }, + Config::default(), + move |scan_event| { + // tx_3.blocking_send(Message::Scan(scan_event)); + let tx_3 = tx_3.clone(); + println!("scan_event: {:?}", &scan_event); + tokio::task::spawn(async move { + if let Err(err) = tx_3.send(Message::Scan(scan_event)) { + println!("send error: {:?}", err); + } + }); + }, + )?; + + // let (tx, rx) = std::sync::mpsc::channel(); + // let (mut tx, rx) = tokio::sync::mpsc::channel(1); + + // let tx_c = tx.clone(); + // // use the pollwatcher and set a callback for the scanning events + // let mut watcher = PollWatcher::with_initial_scan( + // move |watch_event| { + // (|| async { + // tx_c.send(Message::Event(watch_event)).await.unwrap(); + // }); + // // tokio::task::spawn_blocking(move || async { + // // tx_c.send(Message::Event(watch_event)).await.unwrap(); + // // }); + // }, + // Config::default(), + // move |scan_event| { + // tokio::task::block_in_place(|| async { + // tx.send(Message::Scan(scan_event)).await.unwrap(); + // }); + // }, + // )?; + + // // Automatically select the best implementation for your platform. + // // You can also access each implementation directly e.g. INotifyWatcher. + // let watcher = RecommendedWatcher::new( + // move |res| { + // futures::executor::block_on(async { + // tx.send(res).await.unwrap(); + // }) + // }, + // Config::default(), + // )?; + + Ok((watcher, rx)) +} + +// fn block_on, T>(rt: &tokio::runtime::Handle, fut: F) -> T { +// tokio::task::block_in_place(move || match tokio::runtime::Handle::try_current() { +// Ok(handle) => handle.block_on(fut), +// Err(_) => rt.block_on(fut), +// }) +// } + +async fn async_watch>( + path: P, + doc: iroh::client::MemDoc, + author: iroh::docs::AuthorId, +) -> anyhow::Result<()> { + let (mut watcher, mut rx) = async_watcher().await?; + + // Add a path to be watched. All files and directories at that path and + // below will be monitored for changes. + watcher.watch(path.as_ref(), RecursiveMode::Recursive)?; + + while let res = rx.recv()? { + match res { + Message::Event(Ok(event)) => { + println!("event: {:?}", event); + for path in event.paths { + let path = path.canonicalize()?; + + if path.is_file() { + // let key = canonicalized_path_to_bytes(&path, true)?; + let key = bytes::Bytes::from(path.display().to_string()); + doc.import_file(author, key, &path, true) + .await? + .finish() + .await?; + } + } + } + Message::Event(Err(e)) => { + println!("watch error: {:?}", e); + } + Message::Scan(event) => { + println!("scan: {:?}", event); + let path = event?.canonicalize()?; + if path.is_file() { + // let key = canonicalized_path_to_bytes(&path, true)?; + let key = bytes::Bytes::from(path.display().to_string()); + doc.import_file(author, key, &path, true) + .await? + .finish() + .await?; + } + } + } + } + + Ok(()) +} + +/// This function converts an already canonicalized path to a string. +/// +/// If `must_be_relative` is true, the function will fail if any component of the path is +/// `Component::RootDir` +/// +/// This function will also fail if the path is non canonical, i.e. contains +/// `..` or `.`, or if the path components contain any windows or unix path +/// separators. +pub fn canonicalized_path_to_bytes( + path: impl AsRef, + must_be_relative: bool, +) -> anyhow::Result { + let mut path_str = String::new(); + let parts = path + .as_ref() + .components() + .filter_map(|c| match c { + Component::Normal(x) => { + let c = match x.to_str() { + Some(c) => c, + None => return Some(Err(anyhow::anyhow!("invalid character in path"))), + }; + + if !c.contains('/') && !c.contains('\\') { + Some(Ok(c)) + } else { + Some(Err(anyhow::anyhow!("invalid path component {:?}", c))) + } + } + Component::RootDir => { + if must_be_relative { + Some(Err(anyhow::anyhow!("invalid path component {:?}", c))) + } else { + path_str.push('/'); + None + } + } + _ => Some(Err(anyhow::anyhow!("invalid path component {:?}", c))), + }) + .collect::>>()?; + let parts = parts.join("/"); + path_str.push_str(&parts); + let path_bytes = bytes::Bytes::from(path_str); + Ok(path_bytes) +} From c4d518beac48c4b2e96e41e896a97bf73da42280 Mon Sep 17 00:00:00 2001 From: b5 Date: Tue, 14 May 2024 16:42:03 -0400 Subject: [PATCH 2/2] WIP: reconcile and update pattern in sync.rs --- watchdir/Cargo.toml | 4 + watchdir/src/.iroh/blobs/blobs.db | Bin 1589248 -> 0 bytes watchdir/src/.iroh/docs.redb | Bin 1589248 -> 0 bytes watchdir/src/.iroh/keypair | 7 - watchdir/src/.iroh/peers.postcard | Bin 150 -> 0 bytes watchdir/src/main.rs | 194 +------------------- watchdir/src/sync.rs | 295 ++++++++++++++++++++++++++++++ 7 files changed, 306 insertions(+), 194 deletions(-) delete mode 100644 watchdir/src/.iroh/blobs/blobs.db delete mode 100644 watchdir/src/.iroh/docs.redb delete mode 100644 watchdir/src/.iroh/keypair delete mode 100644 watchdir/src/.iroh/peers.postcard create mode 100644 watchdir/src/sync.rs diff --git a/watchdir/Cargo.toml b/watchdir/Cargo.toml index 2a0596e..c4bee3a 100644 --- a/watchdir/Cargo.toml +++ b/watchdir/Cargo.toml @@ -11,5 +11,9 @@ bytes = "1.6.0" crossbeam-channel = "0.5.12" futures = "0.3.30" iroh = "0.16.2" +jwalk = "0.8.1" notify = "6.1.1" tokio = "1.37.0" + +[dev-dependencies] +tempfile = "3.10.1" diff --git a/watchdir/src/.iroh/blobs/blobs.db b/watchdir/src/.iroh/blobs/blobs.db deleted file mode 100644 index 3996a1a57a83caafe9859347d57ef05cccc28b11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1589248 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 zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_@J|si;Z*sjBo*m|00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_0D+$f 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 zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly 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 z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009EOMj&PAq^Y447D}nF<&%c?-$(tp9gp>M{@S5Gd?&VFN6wAguM_xnXSv_F{W^hP lcb5B&+piP&b!WNXxcxeTUw4-K?bo@5x-T{Y1a3m${{i@i>6rik diff --git a/watchdir/src/.iroh/keypair b/watchdir/src/.iroh/keypair deleted file mode 100644 index 24bbd1b..0000000 --- a/watchdir/src/.iroh/keypair +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW -QyNTUxOQAAACDrTh4ZE+pAgHz4L6uo5iQAkTziBU6tZAVJJu/lG4bbAwAAAIjuDB6V7gwe -lQAAAAtzc2gtZWQyNTUxOQAAACDrTh4ZE+pAgHz4L6uo5iQAkTziBU6tZAVJJu/lG4bbAw -AAAEC5Hd1ge70iFWPQ4Qq0MeiMwkB055gqcFDuUWD3T3aMJutOHhkT6kCAfPgvq6jmJACR -POIFTq1kBUkm7+UbhtsDAAAAAAECAwQF ------END OPENSSH PRIVATE KEY----- diff --git a/watchdir/src/.iroh/peers.postcard b/watchdir/src/.iroh/peers.postcard deleted file mode 100644 index a2dee79305de80e926cc270696cd7c3f8e8960d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150 zcmZR)r_mKRhyOus_jdo%h}=0la(<<(eAk_+Re7X2T4&ioM&*o>l7eC@ef`qnR6|`u zy`t2d#7e!)qWlcKywsBN{Gx0G diff --git a/watchdir/src/main.rs b/watchdir/src/main.rs index 9a377fc..6fa137a 100644 --- a/watchdir/src/main.rs +++ b/watchdir/src/main.rs @@ -1,19 +1,11 @@ +use std::str::FromStr; + use anyhow::Result; -use futures::{ - // channel::mpsc::channel, - SinkExt, - StreamExt, - TryStreamExt, -}; -use iroh::{docs::DocTicket, util::path}; -use notify::{ - poll::ScanEvent, Config, Event, PollWatcher, RecommendedWatcher, RecursiveMode, Watcher, -}; -use std::{ - path::{Component, Path}, - str::FromStr, - sync::mpsc::channel, -}; +use iroh::docs::DocTicket; + +mod sync; + +use crate::sync::async_watch; /// Async, futures channel based event watching #[tokio::main] @@ -71,175 +63,3 @@ async fn open_or_create_document( }; Ok(doc) } - -enum Message { - Event(notify::Result), - Scan(ScanEvent), -} - -async fn async_watcher() -> notify::Result<(PollWatcher, std::sync::mpsc::Receiver)> { - // let (tx, rx) = tokio::sync::mpsc::channel(1000); - let (tx, rx) = channel(); - - let tx_2 = tx.clone(); - let tx_3 = tx.clone(); - // use the pollwatcher and set a callback for the scanning events - let watcher = PollWatcher::with_initial_scan( - move |watch_event| { - let tx_2 = tx_2.clone(); - // tx_2.blocking_send(Message::Event(watch_event)).unwrap(); - tokio::task::spawn(async move { - println!("watch_event: {:?}", &watch_event); - tx_2.send(Message::Event(watch_event)).unwrap(); - }); - }, - Config::default(), - move |scan_event| { - // tx_3.blocking_send(Message::Scan(scan_event)); - let tx_3 = tx_3.clone(); - println!("scan_event: {:?}", &scan_event); - tokio::task::spawn(async move { - if let Err(err) = tx_3.send(Message::Scan(scan_event)) { - println!("send error: {:?}", err); - } - }); - }, - )?; - - // let (tx, rx) = std::sync::mpsc::channel(); - // let (mut tx, rx) = tokio::sync::mpsc::channel(1); - - // let tx_c = tx.clone(); - // // use the pollwatcher and set a callback for the scanning events - // let mut watcher = PollWatcher::with_initial_scan( - // move |watch_event| { - // (|| async { - // tx_c.send(Message::Event(watch_event)).await.unwrap(); - // }); - // // tokio::task::spawn_blocking(move || async { - // // tx_c.send(Message::Event(watch_event)).await.unwrap(); - // // }); - // }, - // Config::default(), - // move |scan_event| { - // tokio::task::block_in_place(|| async { - // tx.send(Message::Scan(scan_event)).await.unwrap(); - // }); - // }, - // )?; - - // // Automatically select the best implementation for your platform. - // // You can also access each implementation directly e.g. INotifyWatcher. - // let watcher = RecommendedWatcher::new( - // move |res| { - // futures::executor::block_on(async { - // tx.send(res).await.unwrap(); - // }) - // }, - // Config::default(), - // )?; - - Ok((watcher, rx)) -} - -// fn block_on, T>(rt: &tokio::runtime::Handle, fut: F) -> T { -// tokio::task::block_in_place(move || match tokio::runtime::Handle::try_current() { -// Ok(handle) => handle.block_on(fut), -// Err(_) => rt.block_on(fut), -// }) -// } - -async fn async_watch>( - path: P, - doc: iroh::client::MemDoc, - author: iroh::docs::AuthorId, -) -> anyhow::Result<()> { - let (mut watcher, mut rx) = async_watcher().await?; - - // Add a path to be watched. All files and directories at that path and - // below will be monitored for changes. - watcher.watch(path.as_ref(), RecursiveMode::Recursive)?; - - while let res = rx.recv()? { - match res { - Message::Event(Ok(event)) => { - println!("event: {:?}", event); - for path in event.paths { - let path = path.canonicalize()?; - - if path.is_file() { - // let key = canonicalized_path_to_bytes(&path, true)?; - let key = bytes::Bytes::from(path.display().to_string()); - doc.import_file(author, key, &path, true) - .await? - .finish() - .await?; - } - } - } - Message::Event(Err(e)) => { - println!("watch error: {:?}", e); - } - Message::Scan(event) => { - println!("scan: {:?}", event); - let path = event?.canonicalize()?; - if path.is_file() { - // let key = canonicalized_path_to_bytes(&path, true)?; - let key = bytes::Bytes::from(path.display().to_string()); - doc.import_file(author, key, &path, true) - .await? - .finish() - .await?; - } - } - } - } - - Ok(()) -} - -/// This function converts an already canonicalized path to a string. -/// -/// If `must_be_relative` is true, the function will fail if any component of the path is -/// `Component::RootDir` -/// -/// This function will also fail if the path is non canonical, i.e. contains -/// `..` or `.`, or if the path components contain any windows or unix path -/// separators. -pub fn canonicalized_path_to_bytes( - path: impl AsRef, - must_be_relative: bool, -) -> anyhow::Result { - let mut path_str = String::new(); - let parts = path - .as_ref() - .components() - .filter_map(|c| match c { - Component::Normal(x) => { - let c = match x.to_str() { - Some(c) => c, - None => return Some(Err(anyhow::anyhow!("invalid character in path"))), - }; - - if !c.contains('/') && !c.contains('\\') { - Some(Ok(c)) - } else { - Some(Err(anyhow::anyhow!("invalid path component {:?}", c))) - } - } - Component::RootDir => { - if must_be_relative { - Some(Err(anyhow::anyhow!("invalid path component {:?}", c))) - } else { - path_str.push('/'); - None - } - } - _ => Some(Err(anyhow::anyhow!("invalid path component {:?}", c))), - }) - .collect::>>()?; - let parts = parts.join("/"); - path_str.push_str(&parts); - let path_bytes = bytes::Bytes::from(path_str); - Ok(path_bytes) -} diff --git a/watchdir/src/sync.rs b/watchdir/src/sync.rs new file mode 100644 index 0000000..aae193d --- /dev/null +++ b/watchdir/src/sync.rs @@ -0,0 +1,295 @@ +use std::{ + path::{Component, Path, PathBuf}, + sync::mpsc::channel, +}; + +use anyhow::Result; +use futures::StreamExt; +use iroh::docs::AuthorId; +use iroh::{client::MemDoc as Doc, docs::store::Query}; +use jwalk::WalkDir; +use notify::{Config, Event, FsEventWatcher, RecommendedWatcher, RecursiveMode, Watcher}; + +// reconcile performs a full, one-time sync of the filesystem with the doc +async fn reconcile(doc: Doc, base_path: &str, author: AuthorId) -> Result<()> { + // walk the filesystem + for entry in WalkDir::new(base_path).sort(true) { + let path = entry?.path(); + if path.is_file() { + let relative = path.strip_prefix(base_path)?; + let key = canonicalized_path_to_bytes(relative, true)?; + + let query = Query::single_latest_per_key() + .key_exact(key.clone()) + .build(); + match doc.get_one(query).await? { + Some(_) => { + // doc.update_file(path).await?; + // TODO - compare hashes and update if necessary + } + None => { + // doc.create_file(path).await?; + let abs_path = path.canonicalize()?; + doc.import_file(author, key, &abs_path, true) + .await? + .finish() + .await?; + } + } + } + } + + // walk the document + let query = Query::single_latest_per_key().build(); + let mut res = doc.get_many(query).await?; + while let Some(entry) = res.next().await { + let entry = entry?; + let key = String::from_utf8_lossy(entry.key()).to_string(); + let path = PathBuf::from(base_path).join(key); + // TODO - add an empty entry check + if !path.exists() { + // doc.delete(key).await?; + doc.export_file(entry, path, iroh::blobs::store::ExportMode::TryReference) + .await?; + } + } + + Ok(()) +} + +// update applies incremental changes to the doc from the filesystem +pub(crate) async fn update(_doc: Doc, _event: Event) -> Result<()> { + todo!("update"); + // let mut doc = Doc::from(doc); + // let mut path = path; + // let mut events = watchdir::watch(path.clone()).await?; + // while let Some(event) = events.next().await { + // match event { + // watchdir::Event::Create(path) => { + // let path = path.strip_prefix(&path).unwrap(); + // let path = path.to_str().unwrap(); + // doc.create(path).await?; + // } + // watchdir::Event::Delete(path) => { + // let path = path.strip_prefix(&path).unwrap(); + // let path = path.to_str().unwrap(); + // doc.delete(path).await?; + // } + // watchdir::Event::Modify(path) => { + // let path = path.strip_prefix(&path).unwrap(); + // let path = path.to_str().unwrap(); + // doc.modify(path).await?; + // } + // watchdir::Event::Rename(old, new) => { + // let old = old.strip_prefix(&path).unwrap(); + // let old = old.to_str().unwrap(); + // let new = new.strip_prefix(&path).unwrap(); + // let new = new.to_str().unwrap(); + // doc.rename(old, new).await?; + // } + // } + // } + // Ok(()) +} + +async fn async_watcher() -> Result<( + FsEventWatcher, + std::sync::mpsc::Receiver>, +)> { + // let (tx, rx) = tokio::sync::mpsc::channel(1000); + let (tx, rx) = channel(); + let tx_2 = tx.clone(); + // // use the pollwatcher and set a callback for the scanning events + // let watcher = PollWatcher::with_initial_scan( + // move |watch_event| { + // let tx_2 = tx_2.clone(); + // // tx_2.blocking_send(Message::Event(watch_event)).unwrap(); + // tokio::task::spawn(async move { + // println!("watch_event: {:?}", &watch_event); + // tx_2.send(Message::Event(watch_event)).unwrap(); + // }); + // }, + // Config::default(), + // move |scan_event| { + // // tx_3.blocking_send(Message::Scan(scan_event)); + // let tx_3 = tx_3.clone(); + // println!("scan_event: {:?}", &scan_event); + // tokio::task::spawn(async move { + // if let Err(err) = tx_3.send(Message::Scan(scan_event)) { + // println!("send error: {:?}", err); + // } + // }); + // }, + // )?; + + // let (tx, rx) = std::sync::mpsc::channel(); + // let (mut tx, rx) = tokio::sync::mpsc::channel(1); + + // let tx_c = tx.clone(); + // // use the pollwatcher and set a callback for the scanning events + // let mut watcher = PollWatcher::with_initial_scan( + // move |watch_event| { + // (|| async { + // tx_c.send(Message::Event(watch_event)).await.unwrap(); + // }); + // // tokio::task::spawn_blocking(move || async { + // // tx_c.send(Message::Event(watch_event)).await.unwrap(); + // // }); + // }, + // Config::default(), + // move |scan_event| { + // tokio::task::block_in_place(|| async { + // tx.send(Message::Scan(scan_event)).await.unwrap(); + // }); + // }, + // )?; + + // // Automatically select the best implementation for your platform. + // // You can also access each implementation directly e.g. INotifyWatcher. + let watcher = RecommendedWatcher::new( + move |res| { + let tx = tx_2.clone(); + tokio::task::spawn(async move { + tx.send(res).unwrap(); + }); + }, + Config::default(), + )?; + + Ok((watcher, rx)) +} + +pub async fn async_watch>( + path: P, + doc: iroh::client::MemDoc, + author: iroh::docs::AuthorId, +) -> anyhow::Result<()> { + let (mut watcher, rx) = async_watcher().await?; + + // start with a reconciliation + reconcile(doc.clone(), path.as_ref().to_str().unwrap(), author).await?; + + // Add a path to be watched. All files and directories at that path and + // below will be monitored for changes. + watcher.watch(path.as_ref(), RecursiveMode::Recursive)?; + + loop { + let res = rx.recv()?; + match res { + Ok(event) => { + println!("event: {:?}", event); + // update(doc.clone(), event).await?; + println!("event: {:?}", event); + for path in event.paths { + let path = path.canonicalize()?; + + // skip .iroh directory + if path + .components() + .any(|c| c == Component::Normal(".iroh".as_ref())) + { + continue; + } + + if path.is_file() { + // let key = canonicalized_path_to_bytes(&path, true)?; + let key = bytes::Bytes::from(path.display().to_string()); + doc.import_file(author, key, &path, true) + .await? + .finish() + .await?; + } + } + } + Err(e) => { + println!("watch error: {:?}", e); + break; + } + } + } + + Ok(()) +} + +/// This function converts an already canonicalized path to a string. +/// +/// If `must_be_relative` is true, the function will fail if any component of the path is +/// `Component::RootDir` +/// +/// This function will also fail if the path is non canonical, i.e. contains +/// `..` or `.`, or if the path components contain any windows or unix path +/// separators. +fn canonicalized_path_to_bytes( + path: impl AsRef, + must_be_relative: bool, +) -> anyhow::Result { + let mut path_str = String::new(); + let parts = path + .as_ref() + .components() + .filter_map(|c| match c { + Component::Normal(x) => { + let c = match x.to_str() { + Some(c) => c, + None => return Some(Err(anyhow::anyhow!("invalid character in path"))), + }; + + if !c.contains('/') && !c.contains('\\') { + Some(Ok(c)) + } else { + Some(Err(anyhow::anyhow!("invalid path component {:?}", c))) + } + } + Component::RootDir => { + if must_be_relative { + Some(Err(anyhow::anyhow!("invalid path component {:?}", c))) + } else { + path_str.push('/'); + None + } + } + _ => Some(Err(anyhow::anyhow!("invalid path component {:?}", c))), + }) + .collect::>>()?; + let parts = parts.join("/"); + path_str.push_str(&parts); + let path_bytes = bytes::Bytes::from(path_str); + Ok(path_bytes) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[tokio::test] + async fn test_reconcile() -> Result<()> { + // TODO: Add test cases for the reconcile function + let dir = tempfile::tempdir()?; + let node = iroh::node::Node::memory().spawn().await?; + let doc = node.docs.create().await?; + let author = node.authors.create().await?; + + doc.set_bytes(author, "test/from/doc.txt", bytes::Bytes::from("hello")) + .await?; + + tokio::fs::write(dir.path().join("local_path"), b"hello from fs").await?; + reconcile(doc.clone(), dir.path().to_str().unwrap(), author).await?; + + assert_doc_keys(doc.clone(), vec!["local_path", "test/from/doc.txt"]).await?; + + Ok(()) + } + + async fn assert_doc_keys(doc: Doc, keys: Vec<&str>) -> Result<()> { + let query = Query::single_latest_per_key().build(); + let mut res = doc.get_many(query).await?; + let mut doc_keys = vec![]; + while let Some(entry) = res.next().await { + let entry = entry?; + let key = String::from_utf8_lossy(entry.key()).to_string(); + doc_keys.push(key); + } + assert_eq!(doc_keys, keys); + Ok(()) + } +}