Skip to content

Refactored and finalized storage property setup, added inbox CreatedAt, LastModifiedAt, LastAccessAt properties#108

Open
Arlodotexe wants to merge 3 commits intomainfrom
features/new/properties/datetime
Open

Refactored and finalized storage property setup, added inbox CreatedAt, LastModifiedAt, LastAccessAt properties#108
Arlodotexe wants to merge 3 commits intomainfrom
features/new/properties/datetime

Conversation

@Arlodotexe
Copy link
Owner

@Arlodotexe Arlodotexe commented Jan 12, 2026

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 IStorable with readonly, mutable and modifiable layers, fixing IDisposable lifecycles to the property instead of the containing file/folder, and future-proofing properties:

  • To be yielded from IFolder.GetItemsAsync() async enumerable while staying strongly typed, and
  • To implement IFile for loosely-typed mass property enumeration.

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 GetCreatedAtAsync and GetCreatedAtWatcherAsync, instead you'll just have createdAt.GetAsync() and createdAt.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-typed IFile<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.

…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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant