Skip to content

Commit

Permalink
Fix up the SuspensionHost tricks
Browse files Browse the repository at this point in the history
  • Loading branch information
anaisbetts committed Jan 27, 2014
1 parent 385f1f6 commit ade0a43
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 8 deletions.
22 changes: 14 additions & 8 deletions Akavache.Http/Registrations.cs
Expand Up @@ -30,18 +30,16 @@ public class Registrations : IWantsToRegisterStuff
{
public void Register(IMutableDependencyResolver resolver)
{
// NB: This is an end-run around not having ReactiveUI as a reference
// but it being real damn useful at this point for detecting suspension
// ReactiveUI.Mobile sets up this Observable in its initializer
var shouldPersistState = Locator.Current.GetService<IObservable<IDisposable>>("ShouldPersistState")
?? Observable.Never<IDisposable>();
var isUnpausing = Locator.Current.GetService<IObservable<Unit>>("IsUnpausing")
?? Observable.Never<Unit>();

var background = new Lazy<IHttpScheduler>(() =>
{
var ret = new CachingHttpScheduler(new HttpScheduler((int)Priorities.Background, 1));
// NB: This is an end-run around not having ReactiveUI as a reference
// but it being real damn useful at this point for detecting suspension
// Akavache.Mobile sets up this Observable in its initializer
var shouldPersistState = resolver.GetService<IObservable<IDisposable>>("ShouldPersistState")
?? Observable.Never<IDisposable>();
if (shouldPersistState != null)
{
shouldPersistState.Subscribe(_ => ret.CancelAll());
Expand All @@ -54,6 +52,9 @@ public void Register(IMutableDependencyResolver resolver)
{
var ret = new CachingHttpScheduler(new HttpScheduler((int)Priorities.UserInitiated, 3));
var shouldPersistState = resolver.GetService<IObservable<IDisposable>>("ShouldPersistState")
?? Observable.Never<IDisposable>();
if (shouldPersistState != null)
{
shouldPersistState.Subscribe(_ => ret.CancelAll());
Expand All @@ -67,6 +68,11 @@ public void Register(IMutableDependencyResolver resolver)
var ret = new CachingHttpScheduler(new HttpScheduler((int)Priorities.Speculative, 0));
ret.ResetLimit(GetDataLimit());
var shouldPersistState = resolver.GetService<IObservable<IDisposable>>("ShouldPersistState")
?? Observable.Never<IDisposable>();
var isUnpausing = resolver.GetService<IObservable<Unit>>("IsUnpausing")
?? Observable.Never<Unit>();
if (shouldPersistState != null)
{
shouldPersistState.Subscribe(_ => ret.CancelAll());
Expand Down
8 changes: 8 additions & 0 deletions Akavache.Mobile/Registrations.cs
Expand Up @@ -6,6 +6,7 @@
using System.Text;
using System.Threading.Tasks;
using Splat;
using System.Reactive;

namespace Akavache.Mobile
{
Expand All @@ -22,6 +23,13 @@ public void Register(IMutableDependencyResolver resolver)

var akavacheDriver = new AkavacheDriver();
resolver.Register(() => akavacheDriver, typeof(ISuspensionDriver), null);

// NB: These correspond to the hacks in Akavache.Http's registrations
resolver.Register(() => resolver.GetService<ISuspensionHost>().ShouldPersistState,
typeof(IObservable<IDisposable>), "ShouldPersistState");

resolver.Register(() => resolver.GetService<ISuspensionHost>().IsUnpausing,
typeof(IObservable<Unit>), "IsUnpausing");
}
}
}

0 comments on commit ade0a43

Please sign in to comment.