-
Notifications
You must be signed in to change notification settings - Fork 204
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: refactor code to support diff methods of storing the scheduling info, and diff SR algorithms #1006
feat: refactor code to support diff methods of storing the scheduling info, and diff SR algorithms #1006
Conversation
…multiple-schedule-methods
… manual work involved to complete merge with unit test cases working
…multiple-schedule-methods
Hi @st3v3nmw , hope you are doing okay. If you could please review this so that we can merge it into master. Thanks |
commit 3228e9c Author: Ronny Zulaikha <75528127+ronzulu@users.noreply.github.com> Date: Wed Jul 24 15:10:39 2024 +1000 Support RTL flashcards specified by frontmatter "direction" attribute (st3v3nmw#935) * Nearly completed * Added RTL support for flashcards edit modal * Changes as part of the merge * post upstream master merge fixes * Minor code improvement * lint and format * Change log and documentation update * Minor code change * Fixed EditModal RTL * lint and format * Updated test cases to fix global coverage error * Format & lint commit 971e4af Author: Anna Zubenko <anna_zubenko@fastmail.com> Date: Mon Jul 22 07:29:18 2024 +0200 FEAT-990 Mobile landscape mode and functional size sliders (st3v3nmw#998) commit a89a818 Author: 4Source <38220764+4Source@users.noreply.github.com> Date: Mon Jul 22 07:25:45 2024 +0200 [FIX] Cards missing when horizontal rule present in document (st3v3nmw#970) * Use obsidians funtion to extractFrontmatter * Fix line pos shift * Stop using obsidian function because of UnitTest * Add UnitTest for Frontmatter and Horizontal line * Fix linting --------- Co-authored-by: Stephen Mwangi <mail@stephenmwangi.com> commit 77f15e1 Author: Carlos Galdino <carloshsgaldino@gmail.com> Date: Mon Jul 22 06:02:11 2024 +0100 Filter due notes when all are scheduled (st3v3nmw#947) Ignore notes due in the future. Fixes st3v3nmw#548 commit 83590be Author: Newdea <9208450+Newdea@users.noreply.github.com> Date: Sat Jul 20 15:10:57 2024 +0800 fix st3v3nmw#1000 sidebar indent (st3v3nmw#1001) commit e3a0146 Author: 4Source <38220764+4Source@users.noreply.github.com> Date: Sat Jul 20 09:02:14 2024 +0200 [FIX] Include link parsing for Review context (st3v3nmw#964) * Include link parsing * Fix linting commit 3024264 Author: 4Source <38220764+4Source@users.noreply.github.com> Date: Sat Jul 20 09:00:46 2024 +0200 [FIX] Not scroll back to top after review (st3v3nmw#971) * Update deprecated function * Add scroll back to top * Fix linting commit 1dfd52e Author: 4Source <38220764+4Source@users.noreply.github.com> Date: Sat Jul 20 09:00:33 2024 +0200 [FIX] Folder ignore sorts all folder starting with string (st3v3nmw#972) * Implement isEqualOrSubPath * Implement UnitTest for isEqualOrSubPath * Replace separators with system seperator * Improved seperator replacement commit b175d22 Author: artificialUsagi <41666068+artefaritaKuniklo@users.noreply.github.com> Date: Sat Jul 20 14:59:11 2024 +0800 add translation: zh-cn (st3v3nmw#982)
…multiple-schedule-methods
Hi @st3v3nmw Great that I can merge this into master myself now. But probably better if you can review first. Cheers |
Hi @st3v3nmw, just wondering when you will be able to review and merge this. Or are you happy for me to do that? |
…multiple-schedule-methods
…github.com/ronzulu/obsidian-spaced-repetition into merge-feat-878-support-multiple-schedule-methods
…feat-878-support-multiple-schedule-methods
…multiple-schedule-methods
Hi @st3v3nmw I've updated this branch from master, and rectified the small number of conflicts. I know that I can click "squash and merge" but thought I would leave it to you :-) Cheers |
Hi @st3v3nmw there are a few PRs ready to merge and release. I can release them as Beta, but only if they are first merged into master. So I'll merge this and probably others into master now. Cheers |
… info, and diff SR algorithms (#1006) * Perhaps half way towards implementation; doesn't build yet * Implemented 70%; doesn't build * Progress * Progress * Progress * 11 of the 19 existing test suites pass * 12 of the 19 existing test suites pass * 14 of the 19 existing test suites pass * Progress * 15 of the 19 existing test suites pass * All nineteen existing test suites pass * Minor fixes * More refactoring; doesn't build * Progress, doesn't build * Builds and all existing unit tests pass * Progress * Merge remote-tracking branch 'upstream/master'; due to conflicts fair manual work involved to complete merge with unit test cases working * Continued fixing post #495 integration * Added some test cases for OsrCore * Added unit test support code * Added more test files * Added test case, fixed code issues * Updated tests * Small refactor * !!GitHub_Desktop<feat-878-support-multiple-schedule-methods> * Fixes post merge stash * Added tests * More refactoring * Improved test coverage * Improved unit test code coverage * Starting testing of plugin within Obsidian * Bug fixes * Fixed broken test cases * Added test case for global coverage * A few merge fixes * Version ready for beta testing * Format and lint * Updated actions/checkout@v3 to node 20 * Lets make lint happy! * Previously the pnpm format added a blank line in a test markdown file which caused the test to fail * Slightly reduced jest code coverage threshold to writing a number of difficult test cases * Fixed bug where note frontmatter interval/ease set to null (app specific code, not core code) * Fixed some note review queue bugs (previously introduced in branch #878) * Lint & format * Fixed bug preventing stats being shown (previously introduced in branch #878) * Squashed commit of the following: commit 3228e9c Author: Ronny Zulaikha <75528127+ronzulu@users.noreply.github.com> Date: Wed Jul 24 15:10:39 2024 +1000 Support RTL flashcards specified by frontmatter "direction" attribute (#935) * Nearly completed * Added RTL support for flashcards edit modal * Changes as part of the merge * post upstream master merge fixes * Minor code improvement * lint and format * Change log and documentation update * Minor code change * Fixed EditModal RTL * lint and format * Updated test cases to fix global coverage error * Format & lint commit 971e4af Author: Anna Zubenko <anna_zubenko@fastmail.com> Date: Mon Jul 22 07:29:18 2024 +0200 FEAT-990 Mobile landscape mode and functional size sliders (#998) commit a89a818 Author: 4Source <38220764+4Source@users.noreply.github.com> Date: Mon Jul 22 07:25:45 2024 +0200 [FIX] Cards missing when horizontal rule present in document (#970) * Use obsidians funtion to extractFrontmatter * Fix line pos shift * Stop using obsidian function because of UnitTest * Add UnitTest for Frontmatter and Horizontal line * Fix linting --------- Co-authored-by: Stephen Mwangi <mail@stephenmwangi.com> commit 77f15e1 Author: Carlos Galdino <carloshsgaldino@gmail.com> Date: Mon Jul 22 06:02:11 2024 +0100 Filter due notes when all are scheduled (#947) Ignore notes due in the future. Fixes #548 commit 83590be Author: Newdea <9208450+Newdea@users.noreply.github.com> Date: Sat Jul 20 15:10:57 2024 +0800 fix #1000 sidebar indent (#1001) commit e3a0146 Author: 4Source <38220764+4Source@users.noreply.github.com> Date: Sat Jul 20 09:02:14 2024 +0200 [FIX] Include link parsing for Review context (#964) * Include link parsing * Fix linting commit 3024264 Author: 4Source <38220764+4Source@users.noreply.github.com> Date: Sat Jul 20 09:00:46 2024 +0200 [FIX] Not scroll back to top after review (#971) * Update deprecated function * Add scroll back to top * Fix linting commit 1dfd52e Author: 4Source <38220764+4Source@users.noreply.github.com> Date: Sat Jul 20 09:00:33 2024 +0200 [FIX] Folder ignore sorts all folder starting with string (#972) * Implement isEqualOrSubPath * Implement UnitTest for isEqualOrSubPath * Replace separators with system seperator * Improved seperator replacement commit b175d22 Author: artificialUsagi <41666068+artefaritaKuniklo@users.noreply.github.com> Date: Sat Jul 20 14:59:11 2024 +0800 add translation: zh-cn (#982) * Format & lint * fix: changelog formatting * Post review fixes * Format and lint * Format & lint --------- Co-authored-by: Stephen Mwangi <mail@stephenmwangi.com>
… info, and diff SR algorithms (#1006) * Perhaps half way towards implementation; doesn't build yet * Implemented 70%; doesn't build * Progress * Progress * Progress * 11 of the 19 existing test suites pass * 12 of the 19 existing test suites pass * 14 of the 19 existing test suites pass * Progress * 15 of the 19 existing test suites pass * All nineteen existing test suites pass * Minor fixes * More refactoring; doesn't build * Progress, doesn't build * Builds and all existing unit tests pass * Progress * Merge remote-tracking branch 'upstream/master'; due to conflicts fair manual work involved to complete merge with unit test cases working * Continued fixing post #495 integration * Added some test cases for OsrCore * Added unit test support code * Added more test files * Added test case, fixed code issues * Updated tests * Small refactor * !!GitHub_Desktop<feat-878-support-multiple-schedule-methods> * Fixes post merge stash * Added tests * More refactoring * Improved test coverage * Improved unit test code coverage * Starting testing of plugin within Obsidian * Bug fixes * Fixed broken test cases * Added test case for global coverage * A few merge fixes * Version ready for beta testing * Format and lint * Updated actions/checkout@v3 to node 20 * Lets make lint happy! * Previously the pnpm format added a blank line in a test markdown file which caused the test to fail * Slightly reduced jest code coverage threshold to writing a number of difficult test cases * Fixed bug where note frontmatter interval/ease set to null (app specific code, not core code) * Fixed some note review queue bugs (previously introduced in branch #878) * Lint & format * Fixed bug preventing stats being shown (previously introduced in branch #878) * Squashed commit of the following: commit 3228e9c Author: Ronny Zulaikha <75528127+ronzulu@users.noreply.github.com> Date: Wed Jul 24 15:10:39 2024 +1000 Support RTL flashcards specified by frontmatter "direction" attribute (#935) * Nearly completed * Added RTL support for flashcards edit modal * Changes as part of the merge * post upstream master merge fixes * Minor code improvement * lint and format * Change log and documentation update * Minor code change * Fixed EditModal RTL * lint and format * Updated test cases to fix global coverage error * Format & lint commit 971e4af Author: Anna Zubenko <anna_zubenko@fastmail.com> Date: Mon Jul 22 07:29:18 2024 +0200 FEAT-990 Mobile landscape mode and functional size sliders (#998) commit a89a818 Author: 4Source <38220764+4Source@users.noreply.github.com> Date: Mon Jul 22 07:25:45 2024 +0200 [FIX] Cards missing when horizontal rule present in document (#970) * Use obsidians funtion to extractFrontmatter * Fix line pos shift * Stop using obsidian function because of UnitTest * Add UnitTest for Frontmatter and Horizontal line * Fix linting --------- Co-authored-by: Stephen Mwangi <mail@stephenmwangi.com> commit 77f15e1 Author: Carlos Galdino <carloshsgaldino@gmail.com> Date: Mon Jul 22 06:02:11 2024 +0100 Filter due notes when all are scheduled (#947) Ignore notes due in the future. Fixes #548 commit 83590be Author: Newdea <9208450+Newdea@users.noreply.github.com> Date: Sat Jul 20 15:10:57 2024 +0800 fix #1000 sidebar indent (#1001) commit e3a0146 Author: 4Source <38220764+4Source@users.noreply.github.com> Date: Sat Jul 20 09:02:14 2024 +0200 [FIX] Include link parsing for Review context (#964) * Include link parsing * Fix linting commit 3024264 Author: 4Source <38220764+4Source@users.noreply.github.com> Date: Sat Jul 20 09:00:46 2024 +0200 [FIX] Not scroll back to top after review (#971) * Update deprecated function * Add scroll back to top * Fix linting commit 1dfd52e Author: 4Source <38220764+4Source@users.noreply.github.com> Date: Sat Jul 20 09:00:33 2024 +0200 [FIX] Folder ignore sorts all folder starting with string (#972) * Implement isEqualOrSubPath * Implement UnitTest for isEqualOrSubPath * Replace separators with system seperator * Improved seperator replacement commit b175d22 Author: artificialUsagi <41666068+artefaritaKuniklo@users.noreply.github.com> Date: Sat Jul 20 14:59:11 2024 +0800 add translation: zh-cn (#982) * Format & lint * fix: changelog formatting * Post review fixes * Format and lint * Format & lint --------- Co-authored-by: Stephen Mwangi <mail@stephenmwangi.com>
* Full coverage for UnitTest utils * Change test config * Added Unit Test for stats * Added Unit Test for NumberCountDict * Add function parseDateToTicks, formatDate * Fix includes and doc * Added Testcases * Remove unused function * Try fix ticksFromDate * Fix lint * [FIX] isEqualOrSubPath function (#1048) * Improve isEqualOrSubPath Description + remove use of normalize * update changelog * fix linting * update changelog * Revert "update changelog" This reverts commit d7ba801. * Update Changelog * feat: refactor code to support diff methods of storing the scheduling info, and diff SR algorithms (#1006) * Perhaps half way towards implementation; doesn't build yet * Implemented 70%; doesn't build * Progress * Progress * Progress * 11 of the 19 existing test suites pass * 12 of the 19 existing test suites pass * 14 of the 19 existing test suites pass * Progress * 15 of the 19 existing test suites pass * All nineteen existing test suites pass * Minor fixes * More refactoring; doesn't build * Progress, doesn't build * Builds and all existing unit tests pass * Progress * Merge remote-tracking branch 'upstream/master'; due to conflicts fair manual work involved to complete merge with unit test cases working * Continued fixing post #495 integration * Added some test cases for OsrCore * Added unit test support code * Added more test files * Added test case, fixed code issues * Updated tests * Small refactor * !!GitHub_Desktop<feat-878-support-multiple-schedule-methods> * Fixes post merge stash * Added tests * More refactoring * Improved test coverage * Improved unit test code coverage * Starting testing of plugin within Obsidian * Bug fixes * Fixed broken test cases * Added test case for global coverage * A few merge fixes * Version ready for beta testing * Format and lint * Updated actions/checkout@v3 to node 20 * Lets make lint happy! * Previously the pnpm format added a blank line in a test markdown file which caused the test to fail * Slightly reduced jest code coverage threshold to writing a number of difficult test cases * Fixed bug where note frontmatter interval/ease set to null (app specific code, not core code) * Fixed some note review queue bugs (previously introduced in branch #878) * Lint & format * Fixed bug preventing stats being shown (previously introduced in branch #878) * Squashed commit of the following: commit 3228e9c Author: Ronny Zulaikha <75528127+ronzulu@users.noreply.github.com> Date: Wed Jul 24 15:10:39 2024 +1000 Support RTL flashcards specified by frontmatter "direction" attribute (#935) * Nearly completed * Added RTL support for flashcards edit modal * Changes as part of the merge * post upstream master merge fixes * Minor code improvement * lint and format * Change log and documentation update * Minor code change * Fixed EditModal RTL * lint and format * Updated test cases to fix global coverage error * Format & lint commit 971e4af Author: Anna Zubenko <anna_zubenko@fastmail.com> Date: Mon Jul 22 07:29:18 2024 +0200 FEAT-990 Mobile landscape mode and functional size sliders (#998) commit a89a818 Author: 4Source <38220764+4Source@users.noreply.github.com> Date: Mon Jul 22 07:25:45 2024 +0200 [FIX] Cards missing when horizontal rule present in document (#970) * Use obsidians funtion to extractFrontmatter * Fix line pos shift * Stop using obsidian function because of UnitTest * Add UnitTest for Frontmatter and Horizontal line * Fix linting --------- Co-authored-by: Stephen Mwangi <mail@stephenmwangi.com> commit 77f15e1 Author: Carlos Galdino <carloshsgaldino@gmail.com> Date: Mon Jul 22 06:02:11 2024 +0100 Filter due notes when all are scheduled (#947) Ignore notes due in the future. Fixes #548 commit 83590be Author: Newdea <9208450+Newdea@users.noreply.github.com> Date: Sat Jul 20 15:10:57 2024 +0800 fix #1000 sidebar indent (#1001) commit e3a0146 Author: 4Source <38220764+4Source@users.noreply.github.com> Date: Sat Jul 20 09:02:14 2024 +0200 [FIX] Include link parsing for Review context (#964) * Include link parsing * Fix linting commit 3024264 Author: 4Source <38220764+4Source@users.noreply.github.com> Date: Sat Jul 20 09:00:46 2024 +0200 [FIX] Not scroll back to top after review (#971) * Update deprecated function * Add scroll back to top * Fix linting commit 1dfd52e Author: 4Source <38220764+4Source@users.noreply.github.com> Date: Sat Jul 20 09:00:33 2024 +0200 [FIX] Folder ignore sorts all folder starting with string (#972) * Implement isEqualOrSubPath * Implement UnitTest for isEqualOrSubPath * Replace separators with system seperator * Improved seperator replacement commit b175d22 Author: artificialUsagi <41666068+artefaritaKuniklo@users.noreply.github.com> Date: Sat Jul 20 14:59:11 2024 +0800 add translation: zh-cn (#982) * Format & lint * fix: changelog formatting * Post review fixes * Format and lint * Format & lint --------- Co-authored-by: Stephen Mwangi <mail@stephenmwangi.com> * chore: update dependencies, linting, & tests * update eslint * lower coverage threshold * minor fixes --------- Co-authored-by: 4Source <38220764+4Source@users.noreply.github.com> Co-authored-by: Ronny Zulaikha <75528127+ronzulu@users.noreply.github.com>
* Full coverage for UnitTest utils * Change test config * Added Unit Test for stats * Added Unit Test for NumberCountDict * Add function parseDateToTicks, formatDate * Fix includes and doc * Added Testcases * Remove unused function * Try fix ticksFromDate * Fix lint * [FIX] isEqualOrSubPath function (st3v3nmw#1048) * Improve isEqualOrSubPath Description + remove use of normalize * update changelog * fix linting * update changelog * Revert "update changelog" This reverts commit d7ba801. * Update Changelog * feat: refactor code to support diff methods of storing the scheduling info, and diff SR algorithms (st3v3nmw#1006) * Perhaps half way towards implementation; doesn't build yet * Implemented 70%; doesn't build * Progress * Progress * Progress * 11 of the 19 existing test suites pass * 12 of the 19 existing test suites pass * 14 of the 19 existing test suites pass * Progress * 15 of the 19 existing test suites pass * All nineteen existing test suites pass * Minor fixes * More refactoring; doesn't build * Progress, doesn't build * Builds and all existing unit tests pass * Progress * Merge remote-tracking branch 'upstream/master'; due to conflicts fair manual work involved to complete merge with unit test cases working * Continued fixing post st3v3nmw#495 integration * Added some test cases for OsrCore * Added unit test support code * Added more test files * Added test case, fixed code issues * Updated tests * Small refactor * !!GitHub_Desktop<feat-878-support-multiple-schedule-methods> * Fixes post merge stash * Added tests * More refactoring * Improved test coverage * Improved unit test code coverage * Starting testing of plugin within Obsidian * Bug fixes * Fixed broken test cases * Added test case for global coverage * A few merge fixes * Version ready for beta testing * Format and lint * Updated actions/checkout@v3 to node 20 * Lets make lint happy! * Previously the pnpm format added a blank line in a test markdown file which caused the test to fail * Slightly reduced jest code coverage threshold to writing a number of difficult test cases * Fixed bug where note frontmatter interval/ease set to null (app specific code, not core code) * Fixed some note review queue bugs (previously introduced in branch st3v3nmw#878) * Lint & format * Fixed bug preventing stats being shown (previously introduced in branch st3v3nmw#878) * Squashed commit of the following: commit 3228e9c Author: Ronny Zulaikha <75528127+ronzulu@users.noreply.github.com> Date: Wed Jul 24 15:10:39 2024 +1000 Support RTL flashcards specified by frontmatter "direction" attribute (st3v3nmw#935) * Nearly completed * Added RTL support for flashcards edit modal * Changes as part of the merge * post upstream master merge fixes * Minor code improvement * lint and format * Change log and documentation update * Minor code change * Fixed EditModal RTL * lint and format * Updated test cases to fix global coverage error * Format & lint commit 971e4af Author: Anna Zubenko <anna_zubenko@fastmail.com> Date: Mon Jul 22 07:29:18 2024 +0200 FEAT-990 Mobile landscape mode and functional size sliders (st3v3nmw#998) commit a89a818 Author: 4Source <38220764+4Source@users.noreply.github.com> Date: Mon Jul 22 07:25:45 2024 +0200 [FIX] Cards missing when horizontal rule present in document (st3v3nmw#970) * Use obsidians funtion to extractFrontmatter * Fix line pos shift * Stop using obsidian function because of UnitTest * Add UnitTest for Frontmatter and Horizontal line * Fix linting --------- Co-authored-by: Stephen Mwangi <mail@stephenmwangi.com> commit 77f15e1 Author: Carlos Galdino <carloshsgaldino@gmail.com> Date: Mon Jul 22 06:02:11 2024 +0100 Filter due notes when all are scheduled (st3v3nmw#947) Ignore notes due in the future. Fixes st3v3nmw#548 commit 83590be Author: Newdea <9208450+Newdea@users.noreply.github.com> Date: Sat Jul 20 15:10:57 2024 +0800 fix st3v3nmw#1000 sidebar indent (st3v3nmw#1001) commit e3a0146 Author: 4Source <38220764+4Source@users.noreply.github.com> Date: Sat Jul 20 09:02:14 2024 +0200 [FIX] Include link parsing for Review context (st3v3nmw#964) * Include link parsing * Fix linting commit 3024264 Author: 4Source <38220764+4Source@users.noreply.github.com> Date: Sat Jul 20 09:00:46 2024 +0200 [FIX] Not scroll back to top after review (st3v3nmw#971) * Update deprecated function * Add scroll back to top * Fix linting commit 1dfd52e Author: 4Source <38220764+4Source@users.noreply.github.com> Date: Sat Jul 20 09:00:33 2024 +0200 [FIX] Folder ignore sorts all folder starting with string (st3v3nmw#972) * Implement isEqualOrSubPath * Implement UnitTest for isEqualOrSubPath * Replace separators with system seperator * Improved seperator replacement commit b175d22 Author: artificialUsagi <41666068+artefaritaKuniklo@users.noreply.github.com> Date: Sat Jul 20 14:59:11 2024 +0800 add translation: zh-cn (st3v3nmw#982) * Format & lint * fix: changelog formatting * Post review fixes * Format and lint * Format & lint --------- Co-authored-by: Stephen Mwangi <mail@stephenmwangi.com> * chore: update dependencies, linting, & tests * update eslint * lower coverage threshold * minor fixes --------- Co-authored-by: 4Source <38220764+4Source@users.noreply.github.com> Co-authored-by: Ronny Zulaikha <75528127+ronzulu@users.noreply.github.com>
Hey there, finally have implemented and tested these non-trivial changes - and is now ready for review and beta testing.
#878
From the user perspective, there shouldn't be any functional change. But the architecture has changed as follows:
Code Changes
Algorithms
The code for implementing the current algorithm has been extracted from the various files and placed in a new class
SrsAlgorithm_Osr
that implements a new interfaceISrsAlgorithm
.Future algorithms would similarly need to implement the interface
ISrsAlgorithm
.Data Stores
The existing code for saving the scheduling info (both for notes in the frontmatter, as well as the HTML comments for the flashcards) have been placed in a new class
DataStore_StoreInNote
that implements a new interfaceIDataStore
.Methods for storing the schedule info in alternate ways would similarly need to implement the
IDataStore
interface.DataStoreAlgorithm
Although most of the existing code could be classified either algorithm or data store, some good not. This code was specific to the algorithm and data store combination.
That code was extracted and placed in a new class
DataStoreInNote_AlgorithmOsr
that implements the new interfaceIDataStoreAlgorithm
Separation Of Core Logic From User Interface Code
#751 (about 9 months ago) separated out much business logic from user interface code. Similar change was required in order to achieve the above.
Unit testing
With more code separated from UI code, it was possible to include more unit test cases. About 30 more test cases were written.
Next Steps
[FEAT] user defined "Easy, Good, Hard" values instead of or in addition to the algorithm defined one. #741 - Suggestion by @danhje as an easy way to further test these changes
[FEAT] Stop using YAML; Move plugin info and data to separate file #162 - Possibly necessary for supporting algorithms that require the storage of extensive scheduling info
[FEAT] sm-2 is outdated, can you please replace it with the fsrs algorithm? #748
Beta testing (help wanted!)
As you can appreciate, lots of work went into this. And even though more test cases were written, it's more than likely I inadvertently broke something (e.g. in functionality that I don't use myself).
main_878A.zip
@st3v3nmw would be great if you could have a look