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

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

DO THIS BEFORE SHIPPING

What has Shipped:

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 Rewrite ReactiveCommand #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 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

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

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

@anaisbetts
Copy link
Member Author

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

👍

@jlaanstra
Copy link
Member

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

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

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

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

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

@clairernovotny
Copy link
Member

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

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

•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

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

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

I will create a PR with the projects setup correctly.

@anaisbetts
Copy link
Member Author

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

What has Shipped:

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

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

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

anaisbetts and others added 23 commits June 20, 2014 16:18
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 pull request Jul 7, 2014
@anaisbetts anaisbetts merged commit 4802adc into master Jul 7, 2014
@shiftkey
Copy link
Contributor

shiftkey commented Jul 7, 2014




@jen20
Copy link
Contributor

jen20 commented Jul 7, 2014

👍

@ammeep
Copy link
Contributor

ammeep commented Jul 9, 2014

pants dance
💥 💃

@ghuntley ghuntley deleted the rxui6-master branch August 14, 2017 09:06
@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
Development

Successfully merging this pull request may close these issues.

None yet

8 participants