Releases: reactiveui/Akavache
Akavache 3.1.2
What's New
Bug Fixes:
- Ensure that GetAndFetchLatest uses the correct cache key (#89, thanks @nigel-sampson)
- Object invalidation should use type-prefixing (#91, thanks @nigel-sampson)
Akavache 3.1.1
What's New
Bulk Operations
BlobCache now supports overloads and new methods to add / get / invalidate multiple objects in the same API call. Previously if you wanted to insert many objects into the cache at the same time, it could be potentially very expensive / wasteful. Check out #79 for the details. For example:
var interestingKeys = await BlobCache.UserAccount.GetObjectsAsync<string>(new[] { "Foo", "Bar", "Baz", });
interestingKeys["Foo"]
>>> It worked!
Speed!
Akavache now correctly parallelizes connections to SQLite as well as fixes some threading errors that you might have been seeing (#66).
Hide our version of SQLite3
Our version of @praeclarum's SQLite3 bindings were exposed as public classes, which conflicted with the official versions, this release makes them internal (#72).
Modern Xamarin support
Akavache is now built against the official Xamarin Rx binaries. This means that on MonoMac, you need to be up-to-date on the latest Mono install.
Other Stuff
Akavache 3.0.2
What's New
Bug Fixes
- Fix bugs around manual dependency registration
- Correctly handle invalidation in GetAndFetchLatest
- Handle unsynchronized access to variable in SQLite3 driver
Akavache 3.0.1
What's New
Akavache 3.0 is now released! A special thanks to @onovotny for his huge contribution to PLib support in this release.
Portable Library Support
Akavache 3.0 can now be used with Portable Libraries, including handling images and downloading URLs, via the Splat helper library. This means that with Akavache, nearly all of your serialization and network access layer can be cross-platform.
Cleaned up initialization support
Just like in ReactiveUI 5.0, Akavache now has a much cleaner initialization setup, which is also reliant on RxUI 5.0's RxApp.DependencyResolver
. Many libraries now initialize themselves automatically if possible (on iOS / Cocoa), and other platforms now only require you to set BlobCache.ApplicationName
.
Platforms Supported
Note that for this release, .NET 4.0-based platforms such as Silverlight and WP7 are no longer supported. Bug fixes will still be ported to the Akavache 2.x series when appropriate, you can use the NuGet Package Console to configure your app to only download 2.x updates. Here are the officially supported platforms:
- Xamarin.iOS
- Xamarin.Mac
- Xamarin.Android
- .NET 4.5 Desktop (WPF)
- Windows Phone 8
- Windows Store (WinRT)
Akavache 2.6.7
What's New
Notable changes since 2.6.5
- Handle serializing simple types as values in SQLite3 backend
- Correctly handle opening paths containing Unicode characters in SQLite3 backend
- Fix race condition on dispose where disposing a single BlobCache could affect other blob caches.
- Remove WP8 SQLite3-based backend, as WP8 disables P/Invoke on device at runtime.
Akavache 2.6.5
What's New
Bugfix release, fixes problem with using BlobCache.Secure
Akavache 2.6.4
What's New
- Akavache.SQLite3 now configures itself AutoMagically™ if it's included in your project, no need to manually set
BlobCache.LocalMachine
et al. - Remove key operation serialization from old-school Akavache - you need to
await
all calls to BlobCache, no more sloppy coding! - Support for Xamarin.Mac, Xamarin.iOS, and Xamarin.Android - on Cocoa-based platforms, your
ApplicationName
is automatically configured to be your Bundle ID, no need to set it by-hand. - Fix a bug in SQLite3 engine where
GetOrFetchObject
with an expiration wouldn't work.
Akavache 2.6.2
What's New
Completion for Object Methods
Now all object invalidation methods (like InvalidateObject
, InvalidateAllObjects
, etc) return IObservable<Unit>
so you can await
them
Miscellaneous fixes
- Fixes to PersistentBlobCache Dispose so that it properly flushes metadata on exit
2.6.1
What's New
Shut It All Down
Akavache now has an easy way to shut itself down. Make sure to run this on app shutdown:
BlobCache.Shutdown().Wait()
Or if you're on WinRT:
var deferral = e.SuspendingOperation.GetDeferral();
await BlobCache.Shutdown();
deferral.Complete()
Other Stuff
- Fix a bug where in certain situations, Akavache would deadlock (2917a5e)
Akavache 2.6.0
What's New
Race Condition Changes
Consider the following piece of code:
BlobCache.UserAccount.Invalidate("TheKey");
BlobCache.UserAccount.InsertObject("TheKey", new MyAwesomeKey());
This code is technically incorrect, yet will often appear to work correctly depending on the backing BlobCache. The reason is, that the invalidate and Insert happen concurrently, meaning it is possible for the Insert to succeed, then the Invalidate to remove the new key (never mind that it isn't necessary to actually Invalidate before Insert). To fix this, in Akavache 2.6.0, operations done to the same key are guaranteed to happen in order.
Shutdown Changes
Disposing a BlobCache is asynchronous, yet the Dispose
method call has no way to signal when it is complete. A new Shutdown
Observable exists to facilitate this. So, to flush the blob cache properly, now run:
BlobCache.UserAccount.Dispose();
BlobCache.UserAccount.Shutdown.Wait();
Other Changes
- Bug fixes around leaking file handles in certain circumstances
- Fixes to more clearly throw error messages when Akavache is used incorrectly