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

Ship ReactiveUI 6.0 #434

Merged
merged 863 commits into from Jul 7, 2014

Conversation

Projects
None yet
10 participants
@paulcbetts
Copy link
Member

paulcbetts commented Dec 12, 2013

ReactiveUI 6.x is now in Ship It Mode, the :shipit: must be given its Due.

DO THIS BEFORE SHIPPING

  • Consider rewriting ReactiveCommand still.
  • Need to make Android Support into a separate lib, it conflicts too much with other stuff (/cc @onovotny) (#571)
  • Suspend / Resume is mostly weird and broken on multiple platforms (#570)
  • Whatever gets announced at BUILD, we're this close already, may as well (#552)
  • Wait for Rx.NET to include Profile259. (#569)

What has Shipped:

  • Fix up collection interfaces (#432)
  • Xamarin moves to PCLs (#438)
  • ReactiveUI is now based on Splat (#451)
  • Nuke legacy ReactiveCommands (ty @jlaanstra)
  • Remove IO as an interface from OAPH (ty @niik)
  • Move service location + logging + unit test detection to Splat, make ReactiveUI depend on it, so that Akavache doesn't need ReactiveUI and everyone can share service location / logging without buying into RxUI
  • Ship 6.0 Alpha
  • Attach CanExecute to Bound Commands on iOS (#469)
  • Add ReactiveListAdapter, Android binding improvements (#470)
  • ViewPager adapter (#494)
  • Add Blend for Windows 8.1 (#487)
  • Remove scheduling (#516)
  • Rewritten ReactiveCommand (#521)
  • Activation framework (#503, #526)
  • Asynchronous intent results on Android (#528)
  • Reactive subclasses for many more Cocoa objects
  • Event leak fixes on XAML-based platforms (#547, #549)
  • Generic Cocoa classes for collection and table view sources (#448)
  • Make sure people who naively await events don't deadlock (#586)
  • Move ReactiveUI to a single DLL (#587)
  • Cocoa scheduler now runs items sequentially on the UI thread (#600)
  • WinForms view caching (#603)

Breaking Changes

  • Anything dependending on the non-generic IReactiveCollection. I believe you can just use the generic variant almost everywhere, since every collection type in ReactiveUI is generic.
  • Anything implementing IReactiveCollection<T> only loses the type IReactiveCollection. All its interfaces are still implemented by the generic variant.
  • The IReactiveCollection<T> interface no longer implements ICollection<T>. However it does still implement IEnumerable<T>.
  • ReactiveUI now depends on the Microsoft version of Rx, version 2.2.2
  • IEnableLogger now needs a using Splat;
  • InitializeResolver => InitializeSplat + InitializeReactiveUI
  • Legacy ReactiveUI 4.x commands are gone - pull them from source if you need them
  • ObservableAsPropertyHelper is now no longer directly IObservable. Use WhenAny to get to these properties instead of grabbing the backing field.
  • MemoizingMRUCache and ObservableAsyncMRUCache are both removed - the former has moved to Splat (add a using Splat; to fix this), and the latter is deprecated. Akavache is a better solution for ObservableAsyncMRUCache.
  • ReactiveUI now no longer implicitly schedules things to the UI thread for you except for RegisterAsync. If you were relying on this, you probably need to add some ObserveOn(RxApp.MainThreadScheduler)s
  • ReactiveCommand is a lot different. See #521 for more.
  • ReactiveUI on iOS now requires Xamarin.iOS 7.2.1 or higher
  • No more references to ReactiveUI.Platforms - NuGet should handle this Automagically

Find And Replace Breaking Changes

  • RxApp.DependencyResolver => Locator.Current
  • RxApp.MutableResolver => Locator.CurrentMutable
  • RxApp.InUnitTestRunner => ModeDetector.InUnitTestRunner
@tberman

This comment has been minimized.

Copy link
Member

tberman commented Dec 13, 2013

I have found the non generic versions to be very useful. For example, assume you have a method called GetEvents(some params) and it returns collections of various types based on those params, being able to address that return value as a non-generic collection can be very valuable.

@onovotny

This comment has been minimized.

Copy link
Member

onovotny commented Dec 14, 2013

What would you say is the current status for RxUI 6? I saw that there was the breaking IReactiveCollection interface removal, which is cool, but what generally is planned for it?

Any removal of some of the legacy stuff -- having too many different ways of doing the same thing?

With the Xamarin hotfix, do you think the rxui6-master branch is "stable/correct" for use or has there been too much untested code put in?

Must kill file-linked projects! :)

@paulcbetts

This comment has been minimized.

Copy link
Member

paulcbetts commented Dec 16, 2013

@jlaanstra Thanks for the fixups - how did I miss this? Weird.

@paulcbetts

This comment has been minimized.

Copy link
Member

paulcbetts commented Dec 16, 2013

ReactiveCollectionView for Windows Runtime to do grouping, lazy loading, etc

👍

@jlaanstra

This comment has been minimized.

Copy link
Member

jlaanstra commented Dec 16, 2013

I have found the non generic versions to be very useful. For example, assume you have a method called GetEvents(some params) and it returns collections of various types based on those params, being able to address that return value as a non-generic collection can be very valuable.

You should still be able to do this by using ISomeInterface, which is basically the same as a non-generic interface.

@jlaanstra

This comment has been minimized.

Copy link
Member

jlaanstra commented Dec 16, 2013

Any removal of some of the legacy stuff -- having too many different ways of doing the same thing?

I would say +1 to removing the legacy stuff that currently resides in the Legacy folder, but I leave that decision to @paulcbetts .

@tberman

This comment has been minimized.

Copy link
Member

tberman commented Dec 16, 2013

@jlaanstra What is ISomeInterface? The issue is I want IReactiveCollection for sure, not IList or something that doesn't have the same interface guarantees.

@paulcbetts

This comment has been minimized.

Copy link
Member

paulcbetts commented Dec 18, 2013

Hey guys, there was a screwed up merge awhile back and I had to rewrite history to fix it - if you pulled sometime this afternoon, you need to do the following to fix it:

git fetch
git reset origin/rxui6-master
@onovotny

This comment has been minimized.

Copy link
Member

onovotny commented Dec 18, 2013

I just did that - I also nuked my local rxui6-master branch and re-checked it out from the origin (upstream in my remotes)

When I try to push back to my fork I get the following error:

error: failed to push some refs to 'https://onovotny@github.com/onovotny/ReactiveUI.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

How do I force the push to my fork?

@paulcbetts

This comment has been minimized.

Copy link
Member

paulcbetts commented Dec 18, 2013

@onovotny git push -f [your fork remote name] rxui6-master

@onovotny

This comment has been minimized.

Copy link
Member

onovotny commented Jan 5, 2014

Just noticed that in the interface refactoring/cleanup, SuppressChangeNotifications() is no longer on the base interfaces for IReactiveList. It should go back...

@onovotny

This comment has been minimized.

Copy link
Member

onovotny commented Jan 6, 2014

For a To Do: Need to figure out if Bind(*) can work without the IViewFor constraint.

The scenario is Android, in the views for reactive list adapters. If you try to bind to a simple view, like TextView, there's no way to. You need to derive your own to get IViewFor.

@jlaanstra

This comment has been minimized.

Copy link
Member

jlaanstra commented Jan 12, 2014

•Windows 8.0 is no longer supported

I would like to add this back. Windows 8 still has twice as much market share as Windows 8.1 according to Net Applications (http://thenextweb.com/insider/2014/01/01/windows-8-windows-8-1-pass-10-market-share-windows-7-still-gains-windows-xp-falls-30/#!r1NYr) and since we currently do not use Windows 8.1 specific API's, I do not see a good reason to drop Win8 support in RxUI 6.x.

I will submit a PR but would like to hear your opinions first. Note that a library targeting Windows 8 will run just fine on Windows 8.1

@paulcbetts

This comment has been minimized.

Copy link
Member

paulcbetts commented Jan 12, 2014

I do not see a good reason to drop Win8 support in RxUI 6.x.

I can't even create Win8.0 projects in VS2013 anymore, and I'm constantly nagged by VS to upgrade them. I'd rather just capitulate.

Hm. However, 50% of WinRT-capable people still on Win8 is a compelling argument. Anyone else have any thoughts?

@jlaanstra

This comment has been minimized.

Copy link
Member

jlaanstra commented Jan 12, 2014

I can't even create Win8.0 projects in VS2013 anymore, and I'm constantly nagged by VS to upgrade them. I'd rather just capitulate.

VS only prompts you once unless you remove the .suo file. I don't like it too but I just ignore it and while creating the projects seems like a hassle, you can still build and maintain them if you choose to install the VS part during setup.

I would love to be able to do Win81 only, but with the current adoption I just still need Win8 support and I guess many others do too.

@jlaanstra

This comment has been minimized.

Copy link
Member

jlaanstra commented Jan 12, 2014

I will create a PR with the projects setup correctly.

@paulcbetts

This comment has been minimized.

Copy link
Member

paulcbetts commented Feb 17, 2014

Here's a backup copy of what was the Ideas thread before we transitioned into :shipit: mode:

This branch is the Master branch for tracking all of the stuff that will eventually become ReactiveUI 6.0:

Cool Ideas

  • Rewrite ReactiveCommand to match what ReactiveCocoa does in 3.0 (just for you @jspahrsummers)
  • Actually make good on the scaffolding promises made in 5.x
  • ReactiveCollectionView for Windows Runtime to do grouping, lazy loading, etc (@jlaanstra)
  • Redacted Xamarin Project (NOT TELLING)
  • Keyboard Navigation (#404)
  • View / ViewModel Activation

What has Shipped:

  • Fix up collection interfaces (#432)
  • Xamarin moves to PCLs (#438)
  • ReactiveUI is now based on Splat (#451)
  • Nuke legacy ReactiveCommands (ty @jlaanstra)
  • Remove IO as an interface from OAPH (ty @niik)
  • Move service location + logging + unit test detection to Splat, make ReactiveUI depend on it, so that Akavache doesn't need ReactiveUI and everyone can share service location / logging without buying into RxUI
  • Ship 6.0 Alpha
  • Attach CanExecute to Bound Commands on iOS (#469)
  • Add ReactiveListAdapter, Android binding improvements (#470)
  • ViewPager adapter (#494)
  • Add Blend for Windows 8.1 (#487)
  • Remove scheduling (#516)

Breaking Changes

  • Anything dependending on the non-generic IReactiveCollection. I believe you can just use the generic variant almost everywhere, since every collection type in ReactiveUI is generic.
  • Anything implementing IReactiveCollection<T> only loses the type IReactiveCollection. All its interfaces are still implemented by the generic variant.
  • The IReactiveCollection<T> interface no longer implements ICollection<T>. However it does still implement IEnumerable<T>.
  • ReactiveUI now depends on the Microsoft version of Rx, version 2.2.2
  • IEnableLogger now needs a using Splat;
  • InitializeResolver => InitializeSplat + InitializeReactiveUI
  • Legacy ReactiveUI 4.x commands are gone - pull them from source if you need them
  • ObservableAsPropertyHelper is now no longer directly IObservable. Use WhenAny to get to these properties instead of grabbing the backing field.
  • MemoizingMRUCache and ObservableAsyncMRUCache are both removed - the former has moved to Splat (add a using Splat; to fix this), and the latter is deprecated. Akavache is a better solution for ObservableAsyncMRUCache.
  • ReactiveUI now no longer implicitly schedules things to the UI thread for you except for RegisterAsync. If you were relying on this, you probably need to add some ObserveOn(RxApp.MainThreadScheduler)s

DO THIS BEFORE SHIPPING

  • Update the Android package to depend on the Xamarin Support Lib
  • Suspend / Resume is mostly weird and broken on multiple platforms
  • Still hitting bugs around not being initialized because DependencyResolver moved to Splat
  • Need to make Android Support into a separate lib, it conflicts too much with other stuff (/cc @onovotny)

Find And Replace Breaking Changes

  • RxApp.DependencyResolver => Locator.Current
  • RxApp.MutableResolver => Locator.CurrentMutable
  • RxApp.InUnitTestRunner => ModeDetector.InUnitTestRunner
@onovotny

This comment has been minimized.

Copy link
Member

onovotny commented Apr 1, 2014

The changes to RxUI.Cocoa where there were generic NSObjects should be restored. Xamarin.iOS 7.2.1 finally supports generic NSObjects!

http://docs.xamarin.com/guides/ios/under_the_hood/api_design/nsobject_generics/

@onovotny

This comment has been minimized.

Copy link
Member

onovotny commented Apr 1, 2014

Hmm....seems @paulcbetts has already reverted it. 🍻

paulcbetts and others added some commits Jun 20, 2014

Paul Betts
Merge pull request #648 from reactiveui/fix-onewaybind-bug
Fix incorrect passing of Lambda expression.
Todd Berman
Fixes a bug where if:
Object.Prop1 changes
Object.Prop1 is being listened for changes, and when Prop1 changes, it causes Prop2 to change
Object.Prop2 change listener doesn't fire properly (it is caught in the buffer)

This is because the way Buffer is implemented internally, it Nexts out the buffer, then re-grabs the Close observable, so any changes created during that window are stuck until the buffer gets closed next time.
Paul Betts
Merge pull request #654 from reactiveui/throttle-invokecommand
Throttle values until the command can again be executed.

paulcbetts pushed a commit that referenced this pull request Jul 7, 2014

@paulcbetts paulcbetts merged commit 4802adc into master Jul 7, 2014

@shiftkey

This comment has been minimized.

Copy link
Contributor

shiftkey commented Jul 7, 2014




@jen20

This comment has been minimized.

Copy link
Contributor

jen20 commented Jul 7, 2014

👍

@ammeep

This comment has been minimized.

Copy link
Contributor

ammeep commented Jul 9, 2014

pants dance
💥 💃

@ghuntley ghuntley deleted the rxui6-master branch Aug 14, 2017

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment