Skip to content
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
Merged

Ship ReactiveUI 6.0 #434

merged 863 commits into from Jul 7, 2014

Conversation

@anaisbetts
Copy link
Member

@anaisbetts anaisbetts commented Dec 12, 2013

ReactiveUI 6.x is now in Ship It Mode, the :squirrel: 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
Copy link
Member

@tberman 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.

@clairernovotny
Copy link
Member

@clairernovotny clairernovotny 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! :)

@anaisbetts
Copy link
Member Author

@anaisbetts anaisbetts commented Dec 16, 2013

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

@anaisbetts
Copy link
Member Author

@anaisbetts anaisbetts commented Dec 16, 2013

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

👍

@jlaanstra
Copy link
Member

@jlaanstra 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
Copy link
Member

@jlaanstra 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
Copy link
Member

@tberman 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.

@anaisbetts
Copy link
Member Author

@anaisbetts anaisbetts 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

@clairernovotny
Copy link
Member

@clairernovotny clairernovotny 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?

@anaisbetts
Copy link
Member Author

@anaisbetts anaisbetts commented Dec 18, 2013

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

@clairernovotny
Copy link
Member

@clairernovotny clairernovotny 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...

@clairernovotny
Copy link
Member

@clairernovotny clairernovotny 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
Copy link
Member

@jlaanstra 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

@anaisbetts
Copy link
Member Author

@anaisbetts anaisbetts 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
Copy link
Member

@jlaanstra 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
Copy link
Member

@jlaanstra jlaanstra commented Jan 12, 2014

I will create a PR with the projects setup correctly.

@anaisbetts
Copy link
Member Author

@anaisbetts anaisbetts 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

@clairernovotny
Copy link
Member

@clairernovotny clairernovotny 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/

@clairernovotny
Copy link
Member

@clairernovotny clairernovotny commented Apr 1, 2014

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

anaisbetts and others added 23 commits Jun 20, 2014
Fix incorrect passing of Lambda expression.
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.
Throttle values until the command can again be executed.
anaisbetts pushed a commit that referenced this issue Jul 7, 2014
@anaisbetts anaisbetts merged commit 4802adc into master Jul 7, 2014
@shiftkey
Copy link
Contributor

@shiftkey shiftkey commented Jul 7, 2014




@jen20
Copy link
Contributor

@jen20 jen20 commented Jul 7, 2014

👍

@ammeep
Copy link
Contributor

@ammeep ammeep commented Jul 9, 2014

pants dance
💥 💃

@ghuntley ghuntley deleted the rxui6-master branch Aug 14, 2017
@lock lock bot locked and limited conversation to collaborators Jun 26, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

None yet

10 participants