Refactored and finalized storage property setup, added inbox CreatedAt, LastModifiedAt, LastAccessAt properties#108
Open
Arlodotexe wants to merge 3 commits intomainfrom
Open
Conversation
…ystemFile and SystemFolder
…tcher and readonly/mutable/modifiable with folder type tree. Fixes issue with previous setup that required SystemFile and SystemFolder instances to be disposable, rather than the property watcher being disposable. Enables properties to be yielded from IFolder.GetItemsAsync() async enumerable in the future, or to implement IFile for loosely-typed mass property enumeration. See internal notes and public discord discussion 12/30/2025 https://discord.com/channels/372137812037730304/1443993977262178396
This was referenced Jan 12, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
After much investigation, assessment and analysis with the help of our dependents in the Windows App Community Discord and the dependencies in our implementations, this PR refactors our original proposal for storage properties and finalizes their abstraction into a stable API surface for OwlCore.Storage.
After a few iterations, we landed on a setup where properties closely resember other
IStorablewith readonly, mutable and modifiable layers, fixingIDisposablelifecycles to the property instead of the containing file/folder, and future-proofing properties:Here, we do a single interfaced property containing multiple async methods, rather than having multiple async methods per property implemented on the container directly.
This removes the need for separate
GetCreatedAtAsyncandGetCreatedAtWatcherAsync, instead you'll just havecreatedAt.GetAsync()andcreatedAt.GetWatcherAsync()using a common interface as all other properties for get/notify/update. At that point, what you've made is effectively just a strongly-typedIFile<T>, even if you don't call it that.Unit tests have been added here which demonstrate how to access these inbox properties and the recommended pattern for implementing and consuming them. These will help test that our many implementations conform to the API surface that we designed by abstracting across them.
For extended rationale and methodology, see internal notes and public discord discussion 12/30/2025 and earlier.
Special thanks to the devs of SecureFolderFS and the Files app for extending OwlCore.Storage each with their own take on storage properties.
This was made possible by the open source work done by our dependents and the underlying storage dependencies in our many implementations.