From 0402199d1cdc50e08ec9c94f60a4def64754c8c4 Mon Sep 17 00:00:00 2001 From: clover caruso Date: Sun, 13 Sep 2026 01:46:18 -0700 Subject: [PATCH] feat: recordings and annotations in the page model, kept through edits `page::Attachment::recording` names a recording OneNote captured (identity and type) and `PageParagraph::media` a paragraph's link to a moment in recordings, what OneNote exports as `MediaFile`, `MediaReference` and `MediaIndex`. The writer keeps both through ordinary edits and refuses to author them, since OneNote makes them while recording; the three-way merge carries them like tags. `corpus/media-edit` is the cold read of the native recording page with a paragraph added in Rust: the recording and its 500 ms annotation survive. Evidence rows: `evidence/m4/soak-restart` (twenty session launches resuming one cache against one section), `evidence/m4/fuzz-bounded` (three minutes per fuzz target), and `evidence/PROTECTED-WRITE-DESIGN.md` recording the protected object layout and the plan for writing protected sections. Assisted-by: claude-fable-5.1 --- corpus/media-edit/README.md | 17 + corpus/media-edit/candidate/Features.one | Bin 0 -> 123088 bytes .../candidate/Open Notebook.onetoc2 | Bin 0 -> 1604 bytes .../media-edit/candidate/expected-count.txt | 1 + corpus/media-edit/cold/commands.jsonl | 3 + corpus/media-edit/cold/machine.json | 1 + corpus/media-edit/cold/notebook/Features.one | Bin 0 -> 123088 bytes .../cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 3764 bytes .../cold/notebook/expected-count.txt | 1 + ...7ea3b7acce24415c0ae83c36c6bd7c2.attachment | Bin 0 -> 27 bytes ...30348ce3a746086079fe89285548dc9.attachment | Bin 0 -> 16044 bytes corpus/media-edit/cold/read/environment.json | 7 + corpus/media-edit/cold/read/hierarchy.xml | 2 + corpus/media-edit/cold/read/page-000.xml | 300 ++++++++++++++++++ corpus/media-edit/cold/read/page-001.xml | 21 ++ corpus/media-edit/cold/read/page-002.xml | 6 + corpus/media-edit/cold/read/page-003.xml | 6 + corpus/media-edit/cold/read/page-004.xml | 2 + corpus/media-edit/cold/read/page-005.xml | 2 + corpus/media-edit/cold/read/page-006.xml | 9 + corpus/media-edit/cold/read/page-007.xml | 2 + corpus/media-edit/cold/read/page-008.xml | 6 + corpus/media-edit/cold/read/page-009.xml | 4 + corpus/media-edit/cold/read/page-010.xml | 46 +++ corpus/media-edit/cold/read/page-011.xml | 6 + corpus/media-edit/cold/read/page-012.xml | 6 + corpus/media-edit/cold/read/payloads.json | 18 ++ corpus/media-edit/cold/run.json | 18 ++ corpus/media-edit/cold/scripts/cold.ps1 | 27 ++ corpus/media-edit/cold/scripts/read.ps1 | 142 +++++++++ corpus/media-edit/cold/source.json | 20 ++ corpus/media-edit/cold/teardown.json | 1 + crates/canvas/src/document.rs | 2 + crates/canvas/src/editor.rs | 1 + crates/canvas/src/editor/table.rs | 1 + crates/canvas/src/outline.rs | 1 + crates/notebook/src/merge.rs | 1 + .../notebook/tests/support/page_schedule.rs | 1 + crates/notebook/tests/sync_pages.rs | 1 + crates/onestore/README.md | 1 + crates/onestore/src/page/mod.rs | 33 +- crates/onestore/src/page/write.rs | 14 + crates/onestore/tests/page_attachments.rs | 2 + crates/onestore/tests/page_media.rs | 147 +++++++++ fuzz/Cargo.lock | 1 + tools/test_media_edit.py | 34 ++ 46 files changed, 913 insertions(+), 1 deletion(-) create mode 100644 corpus/media-edit/README.md create mode 100644 corpus/media-edit/candidate/Features.one create mode 100644 corpus/media-edit/candidate/Open Notebook.onetoc2 create mode 100644 corpus/media-edit/candidate/expected-count.txt create mode 100644 corpus/media-edit/cold/commands.jsonl create mode 100644 corpus/media-edit/cold/machine.json create mode 100644 corpus/media-edit/cold/notebook/Features.one create mode 100644 corpus/media-edit/cold/notebook/Open Notebook.onetoc2 create mode 100644 corpus/media-edit/cold/notebook/expected-count.txt create mode 100644 corpus/media-edit/cold/read/4cff0039dbdf53a59f5f4e4592c29a5297ea3b7acce24415c0ae83c36c6bd7c2.attachment create mode 100644 corpus/media-edit/cold/read/56d4af65701c26df20bd4021eda95b6e830348ce3a746086079fe89285548dc9.attachment create mode 100644 corpus/media-edit/cold/read/environment.json create mode 100644 corpus/media-edit/cold/read/hierarchy.xml create mode 100644 corpus/media-edit/cold/read/page-000.xml create mode 100644 corpus/media-edit/cold/read/page-001.xml create mode 100644 corpus/media-edit/cold/read/page-002.xml create mode 100644 corpus/media-edit/cold/read/page-003.xml create mode 100644 corpus/media-edit/cold/read/page-004.xml create mode 100644 corpus/media-edit/cold/read/page-005.xml create mode 100644 corpus/media-edit/cold/read/page-006.xml create mode 100644 corpus/media-edit/cold/read/page-007.xml create mode 100644 corpus/media-edit/cold/read/page-008.xml create mode 100644 corpus/media-edit/cold/read/page-009.xml create mode 100644 corpus/media-edit/cold/read/page-010.xml create mode 100644 corpus/media-edit/cold/read/page-011.xml create mode 100644 corpus/media-edit/cold/read/page-012.xml create mode 100644 corpus/media-edit/cold/read/payloads.json create mode 100644 corpus/media-edit/cold/run.json create mode 100644 corpus/media-edit/cold/scripts/cold.ps1 create mode 100644 corpus/media-edit/cold/scripts/read.ps1 create mode 100644 corpus/media-edit/cold/source.json create mode 100644 corpus/media-edit/cold/teardown.json create mode 100644 crates/onestore/tests/page_media.rs create mode 100644 tools/test_media_edit.py diff --git a/corpus/media-edit/README.md b/corpus/media-edit/README.md new file mode 100644 index 0000000000000000000000000000000000000000..38c9fc6c77e8e50438af8e2d58729ef30529091d --- /dev/null +++ b/corpus/media-edit/README.md @@ -0,0 +1,17 @@ +# Editing next to a recording + +`candidate/Features.one` is the writer's output for +`editing_a_recorded_page_keeps_the_recording_and_its_annotation` in +`crates/onestore/tests/page_media.rs`: the native section of +`corpus/m6/native-features-01` with one plain paragraph appended to the page +"Files and recording", where OneNote 2010 recorded `silence.wav` and +annotated a paragraph with the moment 500 ms. The recording attachment +(`page::Attachment::recording`) and the annotation +(`PageParagraph::media`) are read from the page and kept through the edit; +a model that adds an annotation or drops the recording refuses to write. + +`cold/` is a fresh OneNote 2010 read: `MediaFile`, `MediaReference` and +`MediaIndex` name the same recording and moment as before the edit, next to +the added paragraph. `tools/test_media_edit.py` checks this without a VM. +Regenerate with `ONESTORE_MEDIA_EXPORT` set to a new directory while running +the test, then cold-open with `--expected-pages 13 --collect-notebook`. diff --git a/corpus/media-edit/candidate/Features.one b/corpus/media-edit/candidate/Features.one new file mode 100644 index 0000000000000000000000000000000000000000..713b4cc25604250b16cf5563975c219c0889538a GIT binary patch literal 123088 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 literal 0 HcmV?d00001 diff --git a/corpus/media-edit/candidate/Open Notebook.onetoc2 b/corpus/media-edit/candidate/Open Notebook.onetoc2 new file mode 100644 index 0000000000000000000000000000000000000000..c7273fd1d4b80a77fecd7a9bddd97c2d8292167e GIT binary patch literal 1604 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∾nc`Nz7exzEM53iSSqa3!k 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 literal 0 HcmV?d00001 diff --git a/corpus/media-edit/cold/notebook/Open Notebook.onetoc2 b/corpus/media-edit/cold/notebook/Open Notebook.onetoc2 new file mode 100644 index 0000000000000000000000000000000000000000..c78460b407cbe0b72d1173cdff042b941bfe559a GIT binary patch literal 3764 zcmZ3e|KIuM`!b(-j|5(YE0x7pPg|svdP2u@jc0hxnr;mp1~g!Qcb0(k#IK%9FNjZk zdt%)UX`nnZhAICK1RypOOaMy5#L|D}aXe zOu&I*LI%_-u<1ZCNJ$4N>(I>;1{nqf920>0pyeaT1K7-F!C@yh^Fi?h@)XFupfVg} z4~Pc2aoM)|DO*62AOLY|1NJoJzj_KY*DDLZ{Z40#`Ooi60_i54hJf~f(-6oCCU80e zrAd(OTjt#ZlCZD@xe;Wd^oxdue);lyvqEf~7G8JZs^t237$lA@4Jq86#1P|rmk}h- zz@RA707@@F0th%y^{gp-e#CFWix-98^$tj=8bHKB7K7LzEg-BR(9qBW)Z?F;G_zZw z&wHov#--2Jc1;1vIa)OIOaVqe3l~rqt8PF;j|-5;1xp@416ooTdXNJgsEL80Mw8)} v4A59GXOtKXfzc3vh5&L_ft7urd@l;bpbV!u_d^C$=_oZC0;3@?0zv=);kic5 literal 0 HcmV?d00001 diff --git a/corpus/media-edit/cold/notebook/expected-count.txt b/corpus/media-edit/cold/notebook/expected-count.txt new file mode 100644 index 0000000000000000000000000000000000000000..ca7bf83ac53a27a2a914bed25e1a07478dd8ef47 --- /dev/null +++ b/corpus/media-edit/cold/notebook/expected-count.txt @@ -0,0 +1 @@ +13 \ No newline at end of file diff --git a/corpus/media-edit/cold/read/4cff0039dbdf53a59f5f4e4592c29a5297ea3b7acce24415c0ae83c36c6bd7c2.attachment b/corpus/media-edit/cold/read/4cff0039dbdf53a59f5f4e4592c29a5297ea3b7acce24415c0ae83c36c6bd7c2.attachment new file mode 100644 index 0000000000000000000000000000000000000000..a959c053358a06abc072d3492e7a86d2e712d804 GIT binary patch literal 27 icmZ?EOfJbR$;>Y;R!A%^U9)DqF@3}6_8VvqZ8K40EEjpNfMYrhP~c{Np%;%iqY z_xG2nvTxV+Zy`W{009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 g2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0Rq3k3(iIeJpcdz literal 0 HcmV?d00001 diff --git a/corpus/media-edit/cold/read/environment.json b/corpus/media-edit/cold/read/environment.json new file mode 100644 index 0000000000000000000000000000000000000000..19f357038cc1c48596167daa2fa96e692d2761f7 --- /dev/null +++ b/corpus/media-edit/cold/read/environment.json @@ -0,0 +1,7 @@ +{ + "powershell": "5.1.14409.1005", + "schema": "xs2010", + "hostname": "ONE-M6-7A9FE25A", + "cold": true, + "onenote": "14.0.4763.1000" +} diff --git a/corpus/media-edit/cold/read/hierarchy.xml b/corpus/media-edit/cold/read/hierarchy.xml new file mode 100644 index 0000000000000000000000000000000000000000..e7f0b76c346f33d56bb32995acfd6722a32e6e1e --- /dev/null +++ b/corpus/media-edit/cold/read/hierarchy.xml @@ -0,0 +1,2 @@ + + diff --git a/corpus/media-edit/cold/read/page-000.xml b/corpus/media-edit/cold/read/page-000.xml new file mode 100644 index 0000000000000000000000000000000000000000..39048fca3bbfeb051bce15d8758c2f021e375015 --- /dev/null +++ b/corpus/media-edit/cold/read/page-000.xml @@ -0,0 +1,300 @@ + +iVBORw0KGgoAAAANSUhEUgAAAGAAAABACAIAAABqVuVZAAAAAXNSR0IArs4c6QAAAARnQU1BAACx +jwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAEImSURBVHheDbiBV2GL+v+/f9V1q+uk46TjpDFp +TBqDMUhoh3Zoh3Zoh3Zoh3YYgzE0Jo1J46TjpOOk61Yf32pZ1bKqZVXLqpZV/W2/8y8863nez/v1 +AgAAaAL+vxagiQQ0twIt7cC/yACpA/h3J9BKBdq6gPZu4D90gNwD/NQLdDABSh/Q2Q/8zAaoA8Av +g0AXF6DxgG4B8KsQoIuA3yRAjxRgyIBeBfACBJhK4KUa6IMAlgbo1wGvYICtB14bgQEE4JiAQQvw +BgW4VuCtHeBhAN8BCFzAOxwQuoH3XkBEAGIfIAkAQ0FAGgKGI4AsCshjgGIFGEkA4CowugYoU4Bq +HVBvAGMZANoExrcATQ7QbgO6HWCiAMC7wOQeoC8Bhn3AeAhMlQHkCJg+AUwVwHwKWM6BmSqAXgCz +V4C1BtiuAfstMFcHsDtg/gFwNADnI+B6BhYAoPn/a2puamluJjW3tDb/q72ZRG7+d0dza2dzG7W5 +vav5P93NZHrzTz3NHb3NFGZzZ1/zz/3NVHbzLwPNXYPNNG5zN6/5V0EzXdj8m6i5R9LMkDb3yppf +KJqZYPNLZXOfupkFNfdrml/pmtlw82t984CxmYM0D5qa31iauWjzW2szz97Mx5oFjuZ3rmYh3vze +3SzyNouJZomveSjQLA02D4eaZZFmebRZEWseWWkGE82jq83KtWZVqlm93jy20Qxlmsc3mzVbzdpc +s267eWKnGS40T+426/eaDaVm437z1GEzUm6ePmo2nTSbK82W0+aZ82a02jx70Wy9arbVmu3XzXO3 +zVi9ef6u2fHQ7Gw0ux6bF56bcQAgNTX9MxtSC4n0r1YSqZ30bzKptYPU1klqp5L+00Uid5N+opM6 +ekiUXlInk/RzH4naT/qFTeoaINEGSd1c0q88El1A+k1I6hGRGBJSr5T0QkZiKkgvQVKfksRSk/oh +0isNia0jvYZJA3oSx0gaREhvTCSuhfQWJfGsJL6dJMBI7xwkoYv0HieJ3CSxlyQhSEM+kjRAGg6S +ZCGSPEJSREkjMRK4QhpNkJSrJNUaSZ0ija2ToA3SeIak2SRpt0i6HGlimwTvkCYLJP0uybBHMpZI +U/sk5JA0XSaZjkjmE5KlQpo5JaHnpNkqyXpBsl2R7DXS3DUJuyXN10mOO5LzgeRqkBYeSfgzaREA +2pqb2lpa2v5FaiO1tv27va2V3NbW0dbe2fYfahu5q+2n7rYOehulp62zt+1nZhu1r+2X/rYudhtt +oK17sO1Xbhud1/aboK1H2MYQtfVK2l5I25iytpeKtj6wjaVs61e3vYLa2Jq217q2AbiNo28bNLa9 +Qdq4pra3ljYe2sa3tgnsbe+wNqGj7b2rTYS3id1tEm/bENEm9bUNB9pkwTZ5qE0RaRuJtoGxttGV +NmWiTbXapl5rG0u1Qett4xttmkybdrNNt9U2kWuDt9smd9r0hTbDbptxr22q1Ibst00ftpnKbeaj +NstJ20ylDT1tmz1vs1bbbBdt9qu2uVobdt02f9vmqLc579pcD20LjTb8sW3xuc0NAOSWJvK/Wsgk +EvnfreTWdnIbmdzeQf5PJ5lMJf/URe7oJlPo5M4e8s+9ZCqT/EsfuaufTGOTuwfIvw6S6Vzybzxy +j4DMEJJ7ReQXEjJTSn4pI/cpyCyQ3K8kv1KT2RD5tYY8oCNzYPKgnvzGSOYi5LcmMs9C5qNkgZX8 +zk4WYuT3DrLIRRbjZImbPOQlSwnysI8sC5DlQbIiRB6JkMEoeTRGVq6QVQmyepU8tkaGUuTxdbJm +g6zNkHWb5IktMpwjT26T9TtkQ4Fs3CVP7ZGREnl6n2w6JJvLZMsReeaEjFbIs6dk6znZViXbL8hz +V2SsRp6/Jjtuyc462XVHXngg4w3y4iPZ/Uz2AADlX00UUgvl3yRKayulrZ3STqb8p4NC7qT8RKV0 +dFEo3ZROOuXnHgq1l/ILk9LVR6H1U7rZlF8HKPRBym9cSg+PwhBQeoWUFyIKU0J5KaX0ySgsBaUf +pLxSUthqymuIMqChcHSUQZjyRk/hGilvEQrPROFbKAKU8s5KEdop7zGKyEERuygSnDLkpki9lGGC +IvNR5AGKIkgZCVHACGU0SlHGKKoVijpBGVulQGuU8RRFs07RblB0GcrEJgXeokzmKPptimGHYixQ +pnYpyB5lukQx7VPMhxRLmTJzREFPKLMVivWUYjun2KuUuQsKdkWZr1Ec1xTnLcVVpyzcUfAHymKD +4n6keJ4pXgCgkpqo/26htpKoba3U9nbqf/7ZnA7qT53UDiqV0kXt7Kb+TKdSe6i/9FK7mFRaH7W7 +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 +B583DmKZg/jmwcrWwZfcQWL74OvOwWrhILl7sLZ38K10kNo/+H54sF4+SB8dbJwc/KgcZE4Pfj8/ +2KweZC8Otq4O/qgd5K4P/rw92K4f5O8Odh4O/mocFB4P/n4+2AWAsqSpPNRSlpLKw61lWXtZTi4r +OsojnWWQWh7tKiu7yyp6Wd1THustQ8zyeF9Z01/Wssu6gfLEYBnmlid5Zb2gbBCWjaLylKSMSMvT +srJJUTaDZYuyPKMuo1B5VlO26so2uGzXl+eMZQwpz5vKDkvZiZZd1vKCvYxj5UVH2e0qe/Cy111e +8pYJorzsK/sCZX+wHAiVP0T+0Tnlj7FyaKUcTpQjq+VPa+Voqvx5vRzbKMcz5ZXN8petciJX/rpd +Xt0pJwvltd3yt71yqlT+vl9ePyyny+WNo/KPk3KmUv79tLx5Xs5Wy1sX5T+uyrla+c/r8vZtOV8v +79yV/3ooFxrlvx/Lu8/lIgAcDzUdS1uOh0nHstZjefuxgnw80nEMdh6PUo+VXceq7mM1/Xis5xjq +PR5nHmv6jrX9xzr28cTAMTx4PMk91vOODYJjo/B4SnSMSI6npccm2bFZcWwBj2eUx6j6eBY6tmqO +bbpjO3w8pz/GjMfzyLHDdOy0HLvQ4wXrMW4/XsSO3Y5jj+vYix8vuY8J7/EycezzHfsDx4Hg8YfQ +cTBy/DF6HIodh1eOI4njT6vH0bXjz6nj2PpxfON4JXP8ZfM4sXX8NXe8un2c3DleKxx/2z1O7R1/ +Lx2v7x+nD483ysc/jo4zJ8e/V443T4+z58db1eM/Lo5zV8d/1o63r4/zt8c79eO/7o4LD8d/N453 +H4+Lz8d7AFCRNlWGWyoyUkXeWlG0V0bIFbCjMtpZUVIrqq6KursyRq9APZXx3oqGWdH2VXT9lQl2 +BR6oTA5W9NyKgVcxCipTwgoiqkxLKiZpxSyrWBSVGbCCKiuz6ooVqtg0FbuuMgdXMH1l3lhxIBWn +qeKyVBbQCm6tLNorbqzicVS8rsoSXiHclWVvxUdU/L5KIFD5EKwEQ5WPkUooWgnHKpGVyqdEJbpa ++bxWiaUq8fXKykblS6aS2Kx83aqs5irJ7craTuVboZLarXzfq6yXKun9ysZh5Ue5kjmq/H5S2axU +sqeVrfPKH9VK7qLy51Vlu1bJX1d2bit/1SuFu8rfD5XdRqX4WNl7rvwXAM6Gm85kLWdy0pmi9Wyk +/Qwkn412nCk7z1TUM3XX2Vj3GUQ/G+850/SeaZlnur6zif4zmH02OXCmHzwzcM+MvLMpwRkiPJsW +nZkkZ2bpmUV2NqM4Q8GzWeWZVX1mg87smrM53RkGn83rzxzGMydy5jKdLVjOcPRs0Xrmtp95sDOv +42zJdUbgZ8vuM5/3zE+cBXxnHwJnweDZx9BZKHIWjp5FYmefVs6iibPPq2extbN46mxl/ezLxlki +c/Z182x16yyZO1vbPvu2c5YqnH3fPVvfO0uXzjb2z34cnmXKZ78fnW2enGUrZ1unZ3+cn+WqZ39e +nG1fneVrZzvXZ3/dnhXqZ3/fne0+nBUbZ3uPZ/99PisBQFXWVJW3VBWk6khrFWyvjpKryo6qqrOq +plbHuqpQd3WcXtX0VLW9VR2zOtFXhfurk+yqfqBqGKwaudUpXhURVKeFVZOoapZULdLqjKyKKqqz +YNWqrNrUVTtUndNUMV11Hq469FWnsepCqgumKm6pLqJVt7XqsVe9WHXJUSVc1WW86nNX/d5qgKh+ +8FWDgerHYDUUqoYj1Ui0+ilWja5UPyeqsX9k11p1JVX9sl5NbFS/Zqqrm9XkVnUtV/22XU3tVL8X +quu71fRedaNU/bFfzRxWfy9XN4+q2ZPqVqX6x2k1d179s1rdvqjmr6o7tepf19XCbfXvenX3rlp8 +qO41qv99rJaeq/8DgEt506Wi5XKEdAm2Xo62XyrJl6qOS3Xn5Rj1Euq6HO++1NAvtT2Xut7LCeYl +3Hc52X+pZ18aBi6Ng5dT3EuEdzktuDQJL82iS4vkckZ6icouZxWXVvDSpry0qy/noEtMczmvu3TA +l079pct4uYBc4qbLRculG730WC+99ssl7JJwXC67Ln34pd99GfBefiAug77Lj4HLUPAyHLqMRC4/ +RS+jscvPK5exxGV89XJl7fJL6jKxfvl143I1c5ncvFzbuvyWu0xtX37fuVwvXKZ3Lzf2Ln+ULjP7 +l78fXm6WL7NHl1snl39ULnOnl3+eX25XL/MXlztXl3/VLgvXl3/fXu7WL4t3l3sPl/9tXJYeL//3 +fLkPADVFU22kpQaSaqOtNWV7TUWuqTtqY501iFob76ppumtaek3XU5vorcHM2mRfTd9fM7BrxoHa +1GAN4dameTWToGYW1iyi2oykhkprs7KaVVGzgTW7sjanrmFQbV5Tc+hqTrjm0tcWjDUcqS2aam5L +zYPWvNbakr1GYLVlR83nqvnxWsBd++CtBYnaR18tFKiFg7VIqPYpUotGa59jtdhKLZ6orazWvqzV +/lGBX9drqxu1ZKa2tln7tlVL5Wrft2vrO7V0obaxW/uxV8uUar/v1zYPa9lybeuo9sdJLVep/Xla +2z6v5au1nYvaX1e1Qq3293Vt97ZWrNf27mr/faiVGrX/Pdb2n2sHAHAz0nQDttyMkm6UrTeq9hs1 ++Was4wbqvBmn3mi6brTdNzr6zUTPDdx7M8m80ffdGPpvjOybqYEbZPBmmntj4t2YBTcW4c2M6AaV +3MxKb6yyG5vixg7ezClvMPXNPHTj0Nw4dTcu+GZBf4MbbxaRG7fpxmO58aI3S9Ybwn6zjN34HDd+ +100Av/ngvgl6bz4SNyHfTThwEwnefArdRCM3n6M3sdhNfOVmJXHzZfUmsXbzNXWzun6T3LhZy9x8 +27xJbd18z92sb9+kd242Cjc/dm8yeze/l24292+yhzdb5Zs/jm5yJzd/Vm62T2/y5zc71Zu/Lm4K +Vzd/1252r2+Ktzd79Zv/3t2UHm7+17jZf7w5eL45BIA62FQfbakrSXVVa13dXh8j16GO+nhnXUOt +a7vquu76BL0O99Qne+t6Zt3QVzf216fYdWSgPj1YN3HrZl7dIqjPCOuoqD4rqVuldZusblfU58A6 +pqzPq+sOqO7U1F26+gJcx/X1RWPdjdQ9prrXUl9C64S1vmyv+7C631EPuOof8HrQXf/orYeIethX +jwTqn4L1aKj+OVKPRevxWH1lpf4lUU+s1r+u1VdT9eR6fW2j/i1TT23Wv2/V13P19HZ9Y6f+o1DP +7NZ/36tvlurZ/frWYf2Pcj13VP/zpL5dqedP6zvn9b+q9cJF/e+r+m6tXryu793W/1uvl+7q/3uo +7zfqB4/1w+f6/wHA/WjTvbLlXkW6V7fej7XfQ+T78Y57Tee9lnqv67qf6L6H6feTPff63nsD897Y +dz/Vf4+w76cH7k2D92buvYV3PyO4R4X3s6J7q+TeJr23y+7nFPcYeD+vvHeo753QvUtzv6C7x+H7 +Rf2923jvQe69pvslyz2B3i9b7332ez92H3Dcf3DdB/H7j+77kPc+TNxHfPefAvfR4P3n0H0sch+P +3q/E7r+s3CcS919X71fX7pOp+7X1+28b96nM/ffN+/Wt+3TufmP7/sfOfaZw//vu/ebefbZ0v7V/ +/8fhfa58/+fR/fbJfb5yv3N6/9f5faF6//fF/e7VfbF2v3d9/9/b+1L9/n939/sP9weN+8PH+/97 +vi8DQEPZ1FC1NNSkxlhrA2pvjJMbmo6GtrOhozYmuhpwd2OS3tD3NAy9DSOzMdXXQPob0+yGaaBh +HmxYuI0ZXgMVNGaFDauoYZM07NLGnKyBKRrzYMOhbDjVDRfUWNA0cF1jEW649Q2PseFFGkumBmFp +LKMNn7XhtzcCWOODoxF0NT7ijZC7EfY2IkTjk68RDTQ+BxuxUCMeaaxEG19ijcRK42uisbraSK41 +1lKNb+uN1Ebje6axvvmPJW1s5Bo/thuZncbvhcbmbiO719gqNf7Yb+QOG3+WG9tHjfxJY6fS+Ou0 +UThv/F1t7F40ileNvVrjv9eN0m3jf/XG/l3j4KFx2Gj832Oj/Nz4fwDwpGp6Urc8jZGeoNan8fYn +DflJ2/Gk63yaoD7BXU+T3U96+pOh58nY+zTFfEL6nqb7n0zsJ/PAk2XwaYb7hPKeZgVPVuGTTfRk +lzzNSZ8w2dO84skBPjmVTy710wL0hGueFnVPbvjJo3/yGp+WkCfC9LRsefKhT37rU8D+9AF7Cjqe +PrqeQvhT2P0U8T59Ip6ivqfPgadY8CkeelqJPH2JPiViT19XnlYTT8nVp7W1p2+pp9T60/eNp/XM +U3rzaWPr6UfuKbP99PvO02bhKbv7tLX39EfpKbf/9Ofh03b5KX/0tHPy9FflqXD69Pf50271qXjx +tHf19N/aU+n66X+3T/v1p4O7p8OHp/9rPJUfn/7f89PR/w8QCy14LJdV2gAAAABJRU5ErkJggg== diff --git a/corpus/media-edit/cold/read/page-001.xml b/corpus/media-edit/cold/read/page-001.xml new file mode 100644 index 0000000000000000000000000000000000000000..0ec54232e1f3400a55b8b2f40866327732f10047 --- /dev/null +++ b/corpus/media-edit/cold/read/page-001.xml @@ -0,0 +1,21 @@ + +/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a +HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy +MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABAAGADASIA +AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA +AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 +ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm +p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA +AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx +BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK +U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 +uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDwhYfa +plh9qsrD7VMsPtUqRFOqVVh9qmWH2qysPtUyw+1UpHbTqlZYfaplh9qsrD7VMsPtVqR206pVWGpl +h9qsrDUyw+1UpHbTqlZYalWH2q0sNSrD7VSkdtOqVlh9qmWH2qysPtUyw+1UpHdTqnHrD7VMsPtV +lYfaplh9q81SPyqnVKqw+1TLD7VZWH2qZYfaqUjtp1SssPtUyw+1WVh9qmWH2qlI7adUqrDUyw+1 +WVhqZYfarUjtp1SssNSrD7VaWGpVh9qpSO2nVKyw+1TLD7VZWH2qZYfaqUjup1Tj1h9qmWH2qysP +tUyw+1eapH5VTqlVYfaplh9qsrD7VMsPtVKR206pWWH2qZYfarKw+1TLD7VSkdtOqVVhqZYfarKw +1MsPtVqR206pWWGpVh9qtLDUqw+1UpHbTqlZYfaplh9qsrD7VMsPtVKR206px6w+1TLD7VZWH2qZ +YfavNUj8rp1SqsPtUyw+1WVh9qmWH2qlI7adUrLD7VMsPtVlYfaplh9qpSO2nVKqw1MsPtVlYamW +H2q1I7adUrLDUqw+1WlhqVYfaqUjtp1SssPtUyw+1WVh9qmWH2qlI7adU//Z + diff --git a/corpus/media-edit/cold/read/page-002.xml b/corpus/media-edit/cold/read/page-002.xml new file mode 100644 index 0000000000000000000000000000000000000000..06fd70d877cf4fc736042f3721d922604bbf5548 --- /dev/null +++ b/corpus/media-edit/cold/read/page-002.xml @@ -0,0 +1,6 @@ + +iVBORw0KGgoAAAANSUhEUgAAAGAAAABACAIAAABqVuVZAAAAwUlEQVR4nO3ZwQ2DQBDF0Hkk/dec +CuASwXCwtBVY/mYBM3OMznEC4TsfMx1nEALk2o8ACZB/GpJBAiSD3PcgbmICJIM0MVvX/RokQDJI +E1ODvPOrS5EWIBmkialB1ntcpAVIBmli1rvTRVGAZJAmZj1AvawKkAzSxNQg6zEu0gIkgzQx69Hp +oihAMkgT85LTn1UBkkGamBpkvcdFWoBkkCZmvTtdFAVIBmli1gPUy6oAySBNTA2yHuMiLUAyyPMT ++wHXVRp4qDc0HQAAAABJRU5ErkJggg== diff --git a/corpus/media-edit/cold/read/page-003.xml b/corpus/media-edit/cold/read/page-003.xml new file mode 100644 index 0000000000000000000000000000000000000000..fe4862b04644ab0360f7d559524f5d9e58ede5f2 --- /dev/null +++ b/corpus/media-edit/cold/read/page-003.xml @@ -0,0 +1,6 @@ + +iVBORw0KGgoAAAANSUhEUgAAAGAAAABACAIAAABqVuVZAAAAwUlEQVR4nO3ZwQ2DQBDF0Hkk/dec +CuASwXCwtBVY/mYBM3OMznEC4TsfMx1nEALk2o8ACZB/GpJBAiSD3PcgbmICJIM0MVvX/RokQDJI +E1ODvPOrS5EWIBmkialB1ntcpAVIBmli1rvTRVGAZJAmZj1AvawKkAzSxNQg6zEu0gIkgzQx69Hp +oihAMkgT85LTn1UBkkGamBpkvcdFWoBkkCZmvTtdFAVIBmli1gPUy6oAySBNTA2yHuMiLUAyyPMT ++wHXVRp4qDc0HQAAAABJRU5ErkJggg== diff --git a/corpus/media-edit/cold/read/page-004.xml b/corpus/media-edit/cold/read/page-004.xml new file mode 100644 index 0000000000000000000000000000000000000000..4639561ea941e9e423acbc5fe06ad1644698fc3c --- /dev/null +++ b/corpus/media-edit/cold/read/page-004.xml @@ -0,0 +1,2 @@ + + diff --git a/corpus/media-edit/cold/read/page-005.xml b/corpus/media-edit/cold/read/page-005.xml new file mode 100644 index 0000000000000000000000000000000000000000..48734a443612be25fc28531731ea7c0aca3d68c2 --- /dev/null +++ b/corpus/media-edit/cold/read/page-005.xml @@ -0,0 +1,2 @@ + + diff --git a/corpus/media-edit/cold/read/page-006.xml b/corpus/media-edit/cold/read/page-006.xml new file mode 100644 index 0000000000000000000000000000000000000000..08773c95a324e440f88aeb89c56698693cc948ee --- /dev/null +++ b/corpus/media-edit/cold/read/page-006.xml @@ -0,0 +1,9 @@ + +iVBORw0KGgoAAAANSUhEUgAAAGAAAABACAIAAABqVuVZAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAO +xAAADsQBlSsOGwAAARlJREFUeF7t2VFHQ2EcBvD3PWetVqvVam1ERESMiIiIiL7/J5p9gD1dvF51 +8eNcn4uf53n2P1ZLKUOpnkMCtYx0kkAt00F8gkAtsxFQBJpPAEWgxRGgCLScAopAq2NAEWhzAigC +3c0ARaD7U0AR6OEMUAR6nAOKQE/ngCLQ8wWgCLRdAIpAL5eAItDrFaAI9LYEFIHerwFFoI8bQBHo +cwUoAn3dAopA32tAEehnAygKjPu/xjyHBAY0WQDQL+0BBKhtYSVIgiSo6w+xiqmYiqnYX34J2SAb +ZINskA1qa4EESZAEdW1B15e7g9xBbf2VIAmSICPtDmprgQRJkAR1bUHXl7uD3EFt/ZUgCZIgI+0O +amuBBEnQP07QDo1OW207QPoWAAAAAElFTkSuQmCC + diff --git a/corpus/media-edit/cold/read/page-007.xml b/corpus/media-edit/cold/read/page-007.xml new file mode 100644 index 0000000000000000000000000000000000000000..e101f77116ccc48f07c4f8993e9f51c78626bb03 --- /dev/null +++ b/corpus/media-edit/cold/read/page-007.xml @@ -0,0 +1,2 @@ + + diff --git a/corpus/media-edit/cold/read/page-008.xml b/corpus/media-edit/cold/read/page-008.xml new file mode 100644 index 0000000000000000000000000000000000000000..022a3cda8d3d69c1b6746b6597d482872e5a3348 --- /dev/null +++ b/corpus/media-edit/cold/read/page-008.xml @@ -0,0 +1,6 @@ + +iVBORw0KGgoAAAANSUhEUgAAAGAAAABACAIAAABqVuVZAAAAwUlEQVR4nO3ZwQ2DQBDF0Hkk/dec +CuASwXCwtBVY/mYBM3OMznEC4TsfMx1nEALk2o8ACZB/GpJBAiSD3PcgbmICJIM0MVvX/RokQDJI +E1ODvPOrS5EWIBmkialB1ntcpAVIBmli1rvTRVGAZJAmZj1AvawKkAzSxNQg6zEu0gIkgzQx69Hp +oihAMkgT85LTn1UBkkGamBpkvcdFWoBkkCZmvTtdFAVIBmli1gPUy6oAySBNTA2yHuMiLUAyyPMT ++wHXVRp4qDc0HQAAAABJRU5ErkJggg== diff --git a/corpus/media-edit/cold/read/page-009.xml b/corpus/media-edit/cold/read/page-009.xml new file mode 100644 index 0000000000000000000000000000000000000000..6b36a5c00b4b852f1b0efc8bf3e42a05c80ca966 --- /dev/null +++ b/corpus/media-edit/cold/read/page-009.xml @@ -0,0 +1,4 @@ + +Inherited strike and spacing]]>مرحبا بالعالم]]> diff --git a/corpus/media-edit/cold/read/page-010.xml b/corpus/media-edit/cold/read/page-010.xml new file mode 100644 index 0000000000000000000000000000000000000000..924580a23aa6902ea18ed48b5ab76ec3332a920c --- /dev/null +++ b/corpus/media-edit/cold/read/page-010.xml @@ -0,0 +1,46 @@ + +iVBORw0KGgoAAAANSUhEUgAAAGAAAABACAMAAADS6oI8AAADAFBMVEW4t5mrt5O4qpWrqo6euo2S +uoeZs4ieqoiSqoK4nJCrnIq4kIyrkIaen4SSn36ZmH+ekH+SkHmGuoGGs395t3pounJos3CGqnx5 +qnVtqm9iqmqGnHd5nHGGkHN5kG1on2lomGdokGS4hIirhIK4d4Srd32eh3ySh3aZgHeed3eSd3G4 +a4Cra3m4YHyrYHaea3OSa22eYG+SYGmGh3CGgG55hGloh2FogF+Gd2t5d2Rtd15id1mGa2d5a2CG +YGN5YF1ta1pia1VoYFRWumlWs2dJt2I4ulo4s1hWqmRJql09qlcyqlImulEaukshs0wKukMKs0Em +qkwaqkYPqkAEqjtWnF9JnFlWkFtJkFU4n1E4mE84kEwmn0gan0IhmEMmkEMakD0KnzoKmDgKkDVW +h1hWgFZJhFE4h0k4gEdWd1NJd0w9d0Yyd0FWa09Ja0hWYEtJYEU9a0Iyaz04YDwmh0AahzohgDsK +hzIKgDAmdzsadzUPdy8EdyomazcaazEmYDMaYC0PaysEayYKYCW4VHirVHK4R3SrR22eV2ySV2aZ +UGeeR2eSR2G4O3CrO2m4MGyrMGaeO2OSO12eMF+SMFmGV2CGUF55VFloV1FoUE+GR1t5R1RtR05i +R0mGO1d5O1CGMFN5ME1tO0piO0VoMES4JGirJGK4GGSrGF6eJ1ySJ1aZIFeeGFeSGFG4DmGrDlq4 +A12rA1eeDlSSDk6eA1CSA0qGJE95JEmGGEt5GEVoJ0FoID9oGDyGDkh5DkGGA0R5Az5tDjtiDjZo +AzVWVEdJVEE4Vzk4UDdWR0NJRzw9RzYyRzFWOz9JOzhWMDtJMDU9OzIyOy04MCwmVzAaVyohUCsK +VyIKUCAmRysaRyUPRx8ERxomOycaOyEmMCMaMB0POxsEOxYKMBVWJDdJJDFWGDNJGC04Jyk4ICc4 +GCRWDjBJDilWAyxJAyY9DiMyDh44Ax0mJyAaJxohIBsmGBsaGBUKJxIKIBAKGA0mDhgaDhImAxQa +Aw4PDgwEDgcKAwZYdbPqAAAAAWJLR0QAiAUdSAAAAAxjbVBQSkNtcDA3MTIAAAADSABzvAAABjJJ +REFUWEedkImbTgUcha9ChZl2RUKR0TKTtGiRsZUSEpI0tKm0GoW0WSOjMmNpL82oFG1apJJltNDC +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 +AElFTkSuQmCC + diff --git a/corpus/media-edit/cold/read/page-011.xml b/corpus/media-edit/cold/read/page-011.xml new file mode 100644 index 0000000000000000000000000000000000000000..6c6b43a8da6ff70f118a4fc131e824286792fc9f --- /dev/null +++ b/corpus/media-edit/cold/read/page-011.xml @@ -0,0 +1,6 @@ + +iVBORw0KGgoAAAANSUhEUgAAAGAAAABACAIAAABqVuVZAAAAwUlEQVR4nO3ZwQ2DQBDF0Hkk/dec +CuASwXCwtBVY/mYBM3OMznEC4TsfMx1nEALk2o8ACZB/GpJBAiSD3PcgbmICJIM0MVvX/RokQDJI +E1ODvPOrS5EWIBmkialB1ntcpAVIBmli1rvTRVGAZJAmZj1AvawKkAzSxNQg6zEu0gIkgzQx69Hp +oihAMkgT85LTn1UBkkGamBpkvcdFWoBkkCZmvTtdFAVIBmli1gPUy6oAySBNTA2yHuMiLUAyyPMT ++wHXVRp4qDc0HQAAAABJRU5ErkJggg== diff --git a/corpus/media-edit/cold/read/page-012.xml b/corpus/media-edit/cold/read/page-012.xml new file mode 100644 index 0000000000000000000000000000000000000000..39c09dd905736b20a2d03f7e178f04ed6e0a8248 --- /dev/null +++ b/corpus/media-edit/cold/read/page-012.xml @@ -0,0 +1,6 @@ + +iVBORw0KGgoAAAANSUhEUgAAAGAAAABACAIAAABqVuVZAAAAwUlEQVR4nO3ZwQ2DQBDF0Hkk/dec +CuASwXCwtBVY/mYBM3OMznEC4TsfMx1nEALk2o8ACZB/GpJBAiSD3PcgbmICJIM0MVvX/RokQDJI +E1ODvPOrS5EWIBmkialB1ntcpAVIBmli1rvTRVGAZJAmZj1AvawKkAzSxNQg6zEu0gIkgzQx69Hp +oihAMkgT85LTn1UBkkGamBpkvcdFWoBkkCZmvTtdFAVIBmli1gPUy6oAySBNTA2yHuMiLUAyyPMT ++wHXVRp4qDc0HQAAAABJRU5ErkJggg== diff --git a/corpus/media-edit/cold/read/payloads.json b/corpus/media-edit/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..a209cd162964418686ed4b959c89c4ce107cda5f --- /dev/null +++ b/corpus/media-edit/cold/read/payloads.json @@ -0,0 +1,18 @@ +[ + { + "sha256": "4cff0039dbdf53a59f5f4e4592c29a5297ea3b7acce24415c0ae83c36c6bd7c2", + "name": "Fictitious attachment.txt", + "object": "{4DE24944-9177-0A86-2CA3-43EAAD47BA51}{40}{B0}", + "kind": "InsertedFile", + "page": "{57F870C0-4994-044B-3FBF-D15BD6A07C26}{1}{B0}", + "bytes": 27 + }, + { + "sha256": "56d4af65701c26df20bd4021eda95b6e830348ce3a746086079fe89285548dc9", + "name": "silence.wav", + "object": "{4DE24944-9177-0A86-2CA3-43EAAD47BA51}{44}{B0}", + "kind": "MediaFile", + "page": "{57F870C0-4994-044B-3FBF-D15BD6A07C26}{1}{B0}", + "bytes": 16044 + } +] \ No newline at end of file diff --git a/corpus/media-edit/cold/run.json b/corpus/media-edit/cold/run.json new file mode 100644 index 0000000000000000000000000000000000000000..f22e4a895345aed5ec75ac33a1f210a321c986c4 --- /dev/null +++ b/corpus/media-edit/cold/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/private/tmp/m4/media", + "expected_pages": 13, + "author": null, + "author_timeout_seconds": 600, + "inspect": false, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/media-edit/cold/scripts/cold.ps1 b/corpus/media-edit/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/media-edit/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/media-edit/cold/scripts/read.ps1 b/corpus/media-edit/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/media-edit/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/media-edit/cold/source.json b/corpus/media-edit/cold/source.json new file mode 100644 index 0000000000000000000000000000000000000000..ae7e9f3ebbef2b7bbacd3b9a301771964d4c3643 --- /dev/null +++ b/corpus/media-edit/cold/source.json @@ -0,0 +1,20 @@ +[ + { + "path": "Features.one", + "bytes": 123088, + "sha256": "a070197bb9c1c2f9fbbe39680173407bb9b5fead4bb442d03a84b77a4036d67b", + "mtime_ns": 1789288953404668177 + }, + { + "path": "Open Notebook.onetoc2", + "bytes": 1604, + "sha256": "7dfd85afb7d1e4cf389bf09b9c934bf4a8bc7922ee676d47c4878309322e72e6", + "mtime_ns": 1789288953405483509 + }, + { + "path": "expected-count.txt", + "bytes": 2, + "sha256": "3fdba35f04dc8c462986c992bcf875546257113072a909c162f7e470e581e278", + "mtime_ns": 1789288953413592244 + } +] diff --git a/corpus/media-edit/cold/teardown.json b/corpus/media-edit/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/media-edit/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/crates/canvas/src/document.rs b/crates/canvas/src/document.rs index 15d5c8f7be59bb006fe3261051f693c9a36b5284..c39ed873578593710123916b57b9be5c7f981884 100644 --- a/crates/canvas/src/document.rs +++ b/crates/canvas/src/document.rs @@ -42,6 +42,7 @@ pub(crate) fn node(text: Paragraph, format: Format) -> Result ExGuid { content: ParagraphContent::Text(content), lists: Vec::new(), tags: Vec::new(), + media: Default::default(), collapsed: false, }], unsupported: Vec::new(), diff --git a/crates/notebook/tests/sync_pages.rs b/crates/notebook/tests/sync_pages.rs index baffaa9274d7f4ea701e5d7ad69f131fdd12456d..14b91ecaa59634fae77dea998e68fe230d2b96aa 100644 --- a/crates/notebook/tests/sync_pages.rs +++ b/crates/notebook/tests/sync_pages.rs @@ -93,6 +93,7 @@ fn body_outline(page: &mut Page, text: &str) -> ExGuid { content: ParagraphContent::Text(content), lists: Vec::new(), tags: Vec::new(), + media: Default::default(), collapsed: false, }], unsupported: Vec::new(), diff --git a/crates/onestore/README.md b/crates/onestore/README.md index da3bb0f4fe9c8c4926085cb917bb6654478355ef..249ded674288292f417d54906bac30ebd5a23b0c 100644 --- a/crates/onestore/README.md +++ b/crates/onestore/README.md @@ -45,6 +45,7 @@ harness also accepts `--client-profile release`. | `Document::active`, `Document::pages_in`, `Revision::parents`, `RevisionIndex::active` | Resolve the active revision, the pages of a space and parent links without repeating the lookups | | `Page::copy` | The page's content under fresh identities for copying into another section, definitions and payloads included; indent levels only an outline group carries refuse | | `page::link::internal_link`, `page::link::parse_internal_link` | Build and read the `onenote:#…` URLs OneNote stores for links to sections, pages and paragraphs, by identity | +| `page::Recording`, `page::MediaIndex` | A recording attachment's identity and type, and a paragraph's link to a moment in recordings; read from native pages and kept through edits, never authored | | `page::Page`, `page::Paragraph`, `page::Ink`, `page::Math` | Build an editable page model (title, outlines, paragraphs with coalesced text spans, tables, images, attachments, ink drawings and handwriting decoded to stroke polylines in page points) with stored identities; equations parse from their linear text and run data into a tree that renders the MathML OneNote exports; content outside the model is retained as `Unsupported` | | `protected::UnlockedSection` (optional feature) | Own decoded buffers for explicit known-password inspection; clear those buffers on drop; derived document strings/exports remain caller-owned | | `create_section` | Create one page containing one plain-text paragraph and an author, including Unicode | diff --git a/crates/onestore/src/page/mod.rs b/crates/onestore/src/page/mod.rs index 95bf245bd0f3cb5f25cffbdd6ada12e2be6091b7..d23fb27b43bddf33145ab0e3ffcfb0c81e26223e 100644 --- a/crates/onestore/src/page/mod.rs +++ b/crates/onestore/src/page/mod.rs @@ -146,6 +146,7 @@ pub struct PageParagraph { pub content: ParagraphContent, pub lists: Vec, pub tags: Vec, + pub media: MediaIndex, pub collapsed: bool, } @@ -176,6 +177,25 @@ pub struct Attachment { pub bytes: Option>, #[serde(with = "payload")] pub preview: Option>, + /// Set when the file is an audio or video recording OneNote captured; annotations on + /// the page refer to it by identity (`PageParagraph::media`). + pub recording: Option, +} + +/// A recording's identity and OneNote's type code for it. +#[derive(Clone, Copy, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +pub struct Recording { + pub id: [u8; 16], + pub kind: u32, +} + +/// A paragraph's link to a moment in recordings on the page: OneNote plays from +/// `time_ms` when the paragraph is chosen. Read from native pages and preserved through +/// edits; OneNote alone creates them while recording. +#[derive(Clone, Debug, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +pub struct MediaIndex { + pub recordings: Vec<[u8; 16]>, + pub time_ms: Option, } impl PartialEq for Attachment { @@ -184,6 +204,7 @@ impl PartialEq for Attachment { && self.filename == other.filename && self.source_path == other.source_path && self.size == other.size + && self.recording == other.recording } } @@ -199,9 +220,10 @@ impl Attachment { preview, filename, source_path, + recording_id, + recording_type, icon_width, icon_height, - .. } = &node.kind else { unreachable!() @@ -226,6 +248,10 @@ impl Attachment { size: icon_width.zip(*icon_height).map(|(w, h)| [w, h]), bytes: payload(container)?, preview: payload(preview)?, + recording: recording_id.map(|id| Recording { + id, + kind: recording_type.unwrap_or(0), + }), }) } } @@ -699,6 +725,10 @@ fn read_paragraphs( .nodes .get(content_id) .ok_or_else(|| invalid("Missing canvas paragraph content"))?; + let media = MediaIndex { + recordings: content.media_ids.clone(), + time_ms: content.media_time_ms, + }; let content = if let Kind::RichText { paragraph_style, .. } = &content.kind @@ -844,6 +874,7 @@ fn read_paragraphs( content, lists: lists.clone(), tags: node.tags.clone(), + media, collapsed: *collapse_state == Some(1), }); pending.extend( diff --git a/crates/onestore/src/page/write.rs b/crates/onestore/src/page/write.rs index e6c8b8f1cea0bce230bf2c41621566de611ddb78..7fa8eecf5328521938fff47b9ff021d274dafff9 100644 --- a/crates/onestore/src/page/write.rs +++ b/crates/onestore/src/page/write.rs @@ -611,6 +611,9 @@ impl Lowering<'_> { let Some(previous) = old.paragraphs.get(id) else { continue; }; + if paragraph.media != previous.media { + return Err(invalid("Recording annotations cannot be edited")); + } let same = paragraph.style == previous.style && paragraph.format == previous.format; if !same { return Err(invalid( @@ -971,6 +974,9 @@ impl Lowering<'_> { } continue; } + if attachment.recording.is_some() { + return Err(invalid("Recordings are captured by OneNote, not inserted")); + } let Some(bytes) = &attachment.bytes else { return Err(invalid("A new attachment needs its payload")); }; @@ -1383,6 +1389,9 @@ impl Lowering<'_> { .to_le_bytes() .to_vec(), )]; + if attachment.recording != stored.recording { + return Err(invalid("A recording stays the recording OneNote captured")); + } let mut removed = Vec::new(); if attachment.filename != stored.filename { let name = crate::create::string(&attachment.filename); @@ -1490,6 +1499,11 @@ impl Lowering<'_> { "New paragraphs in a stored outline contain plain text without styles", )); } + if paragraph.media != Default::default() { + return Err(invalid( + "Recording annotations are made by OneNote while it records", + )); + } // A new table starts as an empty text paragraph whose content the // structure pass replaces with the table. let (text, text_id) = match ¶graph.content { diff --git a/crates/onestore/tests/page_attachments.rs b/crates/onestore/tests/page_attachments.rs index 89e0d1f3cfdb1bb6394075688ce6e9233df656e4..7304fb6d0355f13b8917f4df9f886235f2e48968 100644 --- a/crates/onestore/tests/page_attachments.rs +++ b/crates/onestore/tests/page_attachments.rs @@ -113,6 +113,7 @@ fn insert_attachment(section: &str, preview: Option>) -> Vec { size: Some([24.0, 24.0]), bytes: Some(Arc::from(PAYLOAD)), preview: preview.clone(), + recording: None, }); body_paragraphs(&mut after).push(holder.clone()); body_paragraphs(&mut after).push(plain_paragraph(&template, "After the file")); @@ -182,6 +183,7 @@ fn attachments_need_a_file_name_and_stored_ones_are_renamed_in_place() { size: None, bytes: Some(Arc::from(PAYLOAD)), preview: None, + recording: None, }); body_paragraphs(&mut after).push(holder); assert!(PreparedEdit::page(&source, space, &after, AUTHOR).is_err()); diff --git a/crates/onestore/tests/page_media.rs b/crates/onestore/tests/page_media.rs new file mode 100644 index 0000000000000000000000000000000000000000..9f24c297c880a8041b58fd91eb6d2b9f604f13d9 --- /dev/null +++ b/crates/onestore/tests/page_media.rs @@ -0,0 +1,147 @@ +use onestore::{ + ExGuid, PreparedEdit, RevisionIndex, Store, + document::Document, + page::{MediaIndex, Page, PageObject, ParagraphContent, Recording}, +}; + +/// A page OneNote 2010 recorded audio on (`corpus/m6/native-features-01`): a recording +/// attachment and a paragraph annotated with a moment in it. +const NATIVE: &[u8] = include_bytes!("../../../corpus/m6/native-features-01/notebook/Features.one"); +const NATIVE_READ: &str = include_str!("../../../corpus/m6/native-features-01/read/page-017.xml"); +const TITLE: &str = "Files and recording"; + +fn page(bytes: &[u8]) -> (ExGuid, Page) { + let store = Store::parse(bytes).unwrap(); + let index = RevisionIndex::parse(&store).unwrap(); + let document = Document::parse(&index).unwrap(); + document + .pages() + .unwrap() + .into_iter() + .map(|(space, _)| (space, Page::from_space(&document, space).unwrap())) + .find(|(_, page)| page.title == TITLE) + .unwrap() +} + +fn media_id(read: &str) -> [u8; 16] { + let start = read.find("mediaID=\"").unwrap() + 9; + let guid = &read[start..read[start..].find('"').unwrap() + start]; + format!("{guid},0").parse::().unwrap().guid +} + +fn recording(page: &Page) -> (Recording, MediaIndex) { + let mut recording = None; + let mut annotation = None; + for object in &page.objects { + let PageObject::Outline(outline) = object else { + continue; + }; + for paragraph in &outline.paragraphs { + if let ParagraphContent::Attachment(attachment) = ¶graph.content + && let Some(found) = attachment.recording + { + recording = Some(found); + } + if !paragraph.media.recordings.is_empty() { + annotation = Some(paragraph.media.clone()); + } + } + } + (recording.unwrap(), annotation.unwrap()) +} + +#[test] +fn a_native_recording_and_its_annotation_read_as_the_export_names_them() { + let (_, native) = page(NATIVE); + let (recording, annotation) = recording(&native); + let id = media_id(NATIVE_READ); + assert_eq!(recording.id, id); + assert_eq!( + annotation, + MediaIndex { + recordings: vec![id], + time_ms: Some(500) + } + ); + assert!(NATIVE_READ.contains("timeIndex=\"500\"")); +} + +/// `ONESTORE_MEDIA_EXPORT` names a new directory receiving the edited section for a cold +/// reopen: the recording and its annotation survive an ordinary edit of the page. +#[test] +fn editing_a_recorded_page_keeps_the_recording_and_its_annotation() { + use onestore::page::{TextObject, text::new_id}; + let (space, before) = page(NATIVE); + let mut after = before.clone(); + let outline = after + .objects + .iter_mut() + .find_map(|object| match object { + PageObject::Outline(outline) if !outline.title => Some(outline), + _ => None, + }) + .unwrap(); + let mut added = outline.paragraphs[0].clone(); + added.id = new_id().unwrap(); + added.parent = None; + added.level = 1; + added.style = None; + added.lists.clear(); + added.tags.clear(); + added.media = MediaIndex::default(); + added.content = ParagraphContent::Text(TextObject { + id: new_id().unwrap(), + date_field: None, + text: onestore::page::Paragraph::new("Added after recording".into(), Default::default()), + tags: Vec::new(), + }); + outline.paragraphs.push(added.clone()); + let written = PreparedEdit::page(NATIVE, space, &after, "Media author").unwrap(); + let (_, stored) = page(written.as_bytes()); + assert_eq!(recording(&stored), recording(&before)); + assert_eq!(stored.objects.len(), before.objects.len()); + + let mut annotated = after.clone(); + let outline = annotated + .objects + .iter_mut() + .find_map(|object| match object { + PageObject::Outline(outline) if !outline.title => Some(outline), + _ => None, + }) + .unwrap(); + let last = outline.paragraphs.last_mut().unwrap(); + last.media = recording(&before).1; + assert!(PreparedEdit::page(written.as_bytes(), space, &annotated, "x").is_err()); + let mut recaptured = after.clone(); + for object in &mut recaptured.objects { + if let PageObject::Outline(outline) = object { + for paragraph in &mut outline.paragraphs { + if let ParagraphContent::Attachment(attachment) = &mut paragraph.content { + attachment.recording = None; + } + } + } + } + assert!(PreparedEdit::page(written.as_bytes(), space, &recaptured, "x").is_err()); + + if let Some(directory) = std::env::var_os("ONESTORE_MEDIA_EXPORT") { + let directory = std::path::PathBuf::from(directory); + std::fs::create_dir_all(&directory).unwrap(); + std::fs::write(directory.join("Features.one"), written.as_bytes()).unwrap(); + let file_id = Store::parse(written.as_bytes()).unwrap().header.file_id; + std::fs::write( + directory.join("Open Notebook.onetoc2"), + onestore::create_table_of_contents( + "Open Notebook.onetoc2", + &[("Features.one", file_id)], + ) + .unwrap(), + ) + .unwrap(); + let store = Store::parse(written.as_bytes()).unwrap(); + let index = RevisionIndex::parse(&store).unwrap(); + let count = Document::parse(&index).unwrap().pages().unwrap().len(); + std::fs::write(directory.join("expected-count.txt"), count.to_string()).unwrap(); + } +} diff --git a/fuzz/Cargo.lock b/fuzz/Cargo.lock index aeb18075979bba53c2030be9bfa8db908cc91fd4..61d283e44b1c19f25dceae3d451a4848803b8cce 100644 --- a/fuzz/Cargo.lock +++ b/fuzz/Cargo.lock @@ -652,6 +652,7 @@ dependencies = [ "nix", "roxmltree", "serde", + "serde_json", "sha1", "subtle", "zeroize", diff --git a/tools/test_media_edit.py b/tools/test_media_edit.py new file mode 100644 index 0000000000000000000000000000000000000000..46cded49f156bd13f0ef46d8d37ede03f73c4ca4 --- /dev/null +++ b/tools/test_media_edit.py @@ -0,0 +1,34 @@ +from pathlib import Path +import runpy +import shutil +from tempfile import TemporaryDirectory +import unittest +import xml.etree.ElementTree as ET + +from native_xml import ns + +ROOT = Path(__file__).resolve().parent.parent +FIXTURE = ROOT / 'corpus/media-edit' +compare = runpy.run_path(str(ROOT / 'tools/verify-document.py'))['compare'] + + +class MediaEditTest(unittest.TestCase): + def test_an_edit_next_to_a_recording_keeps_the_recording_and_its_annotation(self): + with TemporaryDirectory() as temporary: + read = Path(temporary) / 'read' + shutil.copytree(FIXTURE / 'cold/read', read) + compare(FIXTURE / 'candidate', read) + pages = [ET.parse(path).getroot() for path in sorted((FIXTURE / 'cold/read').glob('page-*.xml'))] + page = next(page for page in pages if page.get('name') == 'Files and recording') + media = page.find('.//one:MediaFile', ns) + self.assertEqual(media.get('preferredName'), 'silence.wav') + recording = media.find('one:MediaReference', ns).get('mediaID') + index = page.find('.//one:MediaIndex', ns) + self.assertEqual(index.get('timeIndex'), '500') + self.assertEqual(index.find('one:MediaReference', ns).get('mediaID'), recording) + texts = [t.text for t in page.findall('.//one:T', ns) if t.text] + self.assertIn('Added after recording', texts) + + +if __name__ == '__main__': + unittest.main() -- 2.54.0