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

fix(YouTube - ReturnYouTubeDislike): Revert support for 18.37.36 #3041

Merged
merged 1 commit into from
Sep 28, 2023
Merged

fix(YouTube - ReturnYouTubeDislike): Revert support for 18.37.36 #3041

merged 1 commit into from
Sep 28, 2023

Conversation

LisoUseInAIKyrios
Copy link

@LisoUseInAIKyrios LisoUseInAIKyrios commented Sep 28, 2023

YouTube 18.37.36 uses a new Litho based shorts player.
But in this new player the dislikes shown is frequently incorrect, especially when swiping back to previous videos.

The issue is the video id hook is called out of order with a new short is swiped to. The prior shorts patch handled this by keeping track of all dislike buttons and then updating existing buttons asynchronously when the video id hook is called.

Previously it was thought a different video id hook might solve this. Now there is a Player Response video id hook, but it was found that hook is called for shorts preloading in the background and it's not reliable for finding the current or next short that's loading.

The only possible fix I see is one of three options:

  • Set the dislike button text asynchronously (just as the existing Shorts player handles it). This would also fix the occasional frozen video during loading. But so far nobody has figured out how to modify litho components after they're created.
  • Hook onto the video id a specific litho text is being created for (probably also difficult). This will still suffer from the occasionally frozen video but will fix dislikes showing the wrong value.
  • Force the old shorts player to always be used (without spoofing the app version).

An unrelated bug also exist with the new shorts player, where the like/dislike/remix litho buttons do not appear at all. When this happens they are always hidden, and it requires restarting the app for them to appear again.

Until a fix is found, support should be reverted because otherwise dislikes for shorts is broken and unusable.

integration changes

@oSumAtrIX
Copy link
Member

What is also possible, is to support RYD for normal videos, until a solution has been found for Shorts. I believe the majority will benefit from it in this way, too.

@LisoUseInAIKyrios
Copy link
Author

I personally use the dislikes in shorts more than in regular videos. It's rare for any regular video to have over 3% dislikes, as the videos get hidden from discovery very quickly. But for some reason YouTube loves pushing shorts that have 10% or more dislikes, and after viewing most of them I see why so many people disliked.

If this cannot be solved in the near future, then RYD could be broke into two patches. One patch for regular videos, and another patch just for shorts. Then if someone hates shorts they can just exclude the patch and patch a newer version of YouTube. And when the problem is solved then combine the patches again.

@LisoUseInAIKyrios LisoUseInAIKyrios changed the title fix(YouTube - ReturnYouTubeDislike): Revert support for 18.37.36 (Shorts support was faulty) fix(YouTube - ReturnYouTubeDislike): Revert support for 18.37.36 Sep 28, 2023
@LisoUseInAIKyrios LisoUseInAIKyrios merged commit 3761073 into ReVanced:dev Sep 28, 2023
@LisoUseInAIKyrios LisoUseInAIKyrios deleted the fix_rollback_RYD_18.37.36 branch September 28, 2023 13:39
revanced-bot pushed a commit that referenced this pull request Sep 28, 2023
# [2.191.0-dev.21](ReVanced/revanced-patches@v2.191.0-dev.20...v2.191.0-dev.21) (2023-09-28)

### Bug Fixes

* **YouTube - ReturnYouTubeDislike:** Revert support for 18.37.36 ([#3041](ReVanced/revanced-patches#3041)) ([3761073](ReVanced/revanced-patches@3761073))
@oSumAtrIX
Copy link
Member

That sounds reasonable, separating the integrations will be challenging I assume.

@LisoUseInAIKyrios
Copy link
Author

I think it could be done by the shorts patch changing an integrations static field from false to true. And integrations checks that field and then forces RYD shorts always off and hides the setting switch.

@oSumAtrIX
Copy link
Member

changing an integrations static field from false to true

I'd say a simpler way would be to add a guard in the method that hooks the litho code and checks if the current player is a Short. In older versions of YouTube, the Litho code is not being used, the old patch hooks will be used and RYD will work on Shorts while on the new supported version, the guard will prevent the hook to modify the value for Shorts.

@oSumAtrIX
Copy link
Member

video id hook is called out of order with a new short is swiped to

There may be a simple solution to this. The current hook we have for text spec is called whenever short components are rendered. This means, we just need a way to retrieve the current short video id at the time the hook is being called. This way we would be able to match the current playing short to the current video id.

@LisoUseInAIKyrios
Copy link
Author

video id hook is called out of order with a new short is swiped to

There may be a simple solution to this. The current hook we have for text spec is called whenever short components are rendered. This means, we just need a way to retrieve the current short video id at the time the hook is being called. This way we would be able to match the current playing short to the current video id.

Yes, but it would need to be the video id for that specific dislike button.

The big issue is the dislike text for the next short is created before the short is swiped to. Swipe to the next short by swiping slowly up the entire screen and you'll see the dislikes for the next short is already there, even though the current short has not yet changed and the current video id has not yet changed either.

Maybe the video id is exposed somewhere in the new shorts player. And maybe the conversion context for that specific short could also be found. With both of those pieces it might be possible to figure out which video id a litho conversion context belongs to during it's creation.

It seems it might be easier 'tagging' a dislikes text as loading, and then find the image view that has that loading text (with a new patch point somewhere in the litho framework). Then in theory you now have the image view and can solve this asynchronously the same way the current shorts player works. I briefly looked at the litho source code for some insight, but man what a convoluted mess that is. I stopped looking when I found multiple comments of "for unknown reasons this value can sometimes be null so check to prevent null pointer exception" (??). It's not as bad as the source code for the awful Facebook iOS sdk from years ago (very messy + unnecessarily complex), so I guess they're improving.

revanced-bot pushed a commit that referenced this pull request Oct 4, 2023
# [2.191.0](ReVanced/revanced-patches@v2.190.0...v2.191.0) (2023-10-04)

### Bug Fixes

* Add hooks to existing hook set ([5655067](ReVanced/revanced-patches@5655067))
* **Duolingo - Unlock Super:** Get correct instruction offset ([#3023](ReVanced/revanced-patches#3023)) ([5146de8](ReVanced/revanced-patches@5146de8))
* **Google Recorder - Remove device restrictions:** Clarify limitation ([094f57b](ReVanced/revanced-patches@094f57b))
* **Infinity for Reddit - Spoof client:** Constrain patch to last working versions ([#2944](ReVanced/revanced-patches#2944)) ([ee975de](ReVanced/revanced-patches@ee975de))
* **Relay - Spoof client:** Restore OAuth login ([96e01f7](ReVanced/revanced-patches@96e01f7))
* **Slide - Spoof client:** Use correct patch name ([f355dbf](ReVanced/revanced-patches@f355dbf))
* **Sync for Reddit:** Do not throw an error when not necessary ([ef644e4](ReVanced/revanced-patches@ef644e4))
* **TikTok - Hide ads:** Constrain to last working version ([56e45a6](ReVanced/revanced-patches@56e45a6))
* **Twitch - Audio ads:** Support missing version `16.1.0` ([#2928](ReVanced/revanced-patches#2928)) ([688d8fa](ReVanced/revanced-patches@688d8fa))
* Use consistent toggle description ([#2983](ReVanced/revanced-patches#2983)) ([ceaa512](ReVanced/revanced-patches@ceaa512))
* Use correct instruction ([246cf2c](ReVanced/revanced-patches@246cf2c))
* **YouTube - Client spoof:** adjust settings text ([#3035](ReVanced/revanced-patches#3035)) ([59a2e96](ReVanced/revanced-patches@59a2e96))
* **YouTube - Client spoof:** Display seekbar thumbnails in high quality ([5e8a2d3](ReVanced/revanced-patches@5e8a2d3))
* **YouTube - Client spoof:** Do not record feed videos to history by default ([#3017](ReVanced/revanced-patches#3017)) ([5ccbf1b](ReVanced/revanced-patches@5ccbf1b))
* **YouTube - Client spoof:** Removed unused code ([#3030](ReVanced/revanced-patches#3030)) ([15e27bf](ReVanced/revanced-patches@15e27bf))
* **YouTube - Client spoof:** Restore seekbar thumbnails ([bf4a115](ReVanced/revanced-patches@bf4a115))
* **YouTube - Client spoof:** Show seekbar thumbnail for age restricted and paid videos ([1a79300](ReVanced/revanced-patches@1a79300))
* **YouTube - Custom filter:** Use new lines between components instead of commas ([#2952](ReVanced/revanced-patches#2952)) ([ecb2e32](ReVanced/revanced-patches@ecb2e32))
* **YouTube - Hide "Load more" button:** Use correct names ([569c3cd](ReVanced/revanced-patches@569c3cd))
* **YouTube - Hide info cards:** Fix info cards not hiding for some users ([#3039](ReVanced/revanced-patches#3039)) ([cb38637](ReVanced/revanced-patches@cb38637))
* **YouTube - Hide layout components:** Always hide redundant 'player audio track' button ([#2951](ReVanced/revanced-patches#2951)) ([ca632bd](ReVanced/revanced-patches@ca632bd))
* **YouTube - Hide shorts components:** Fix hiding navigation bar ([2de51e6](ReVanced/revanced-patches@2de51e6))
* **YouTube - Premium heading:** Correct inverted logic ([#3042](ReVanced/revanced-patches#3042)) ([b33ed75](ReVanced/revanced-patches@b33ed75))
* **YouTube - ReturnYouTubeDislike:** Revert support for 18.37.36 ([#3041](ReVanced/revanced-patches#3041)) ([3761073](ReVanced/revanced-patches@3761073))
* **YouTube - SponsorBlock:** Adjust import/export UI text ([#3063](ReVanced/revanced-patches#3063)) ([4e5513e](ReVanced/revanced-patches@4e5513e))
* **YouTube - Video Id:** Fix video id not showing the currently playing video ([#3038](ReVanced/revanced-patches#3038)) ([f6f226b](ReVanced/revanced-patches@f6f226b))
* **YouTube:** Restore functionality of `Old video quality menu` and `Custom speeds` on tablets ([#2999](ReVanced/revanced-patches#2999)) ([238bed1](ReVanced/revanced-patches@238bed1))

### Features

* Add notice for thumbnails for age restricted or paid videos ([f7cf70b](ReVanced/revanced-patches@f7cf70b))
* **Duolingo:** Remove `Unlock Duolingo Super` patch ([b4b9746](ReVanced/revanced-patches@b4b9746))
* **SPB Serviceportal Bund:** Add `Remove root detection` patch ([#3049](ReVanced/revanced-patches#3049)) ([481bf58](ReVanced/revanced-patches@481bf58))
* **Strava:** Add `Disable subscription suggestions` patch ([#2997](ReVanced/revanced-patches#2997)) ([af02175](ReVanced/revanced-patches@af02175))
* **Sync for Reddit - Client spoof:** Restore upload functionality ([9344c8a](ReVanced/revanced-patches@9344c8a))
* **TikTok - Hide ads:** Constrain to last working version ([516e8a1](ReVanced/revanced-patches@516e8a1))
* **TU Dortmund:** Add `Show on lockscreen` patch ([#2947](ReVanced/revanced-patches#2947)) ([9a18326](ReVanced/revanced-patches@9a18326))
* **Tumblr:** Add `Disable blog notification reminder` patch ([29f19b9](ReVanced/revanced-patches@29f19b9))
* **Tumblr:** Add `Disable dashboard ads` patch ([#2979](ReVanced/revanced-patches#2979)) ([07c267a](ReVanced/revanced-patches@07c267a))
* **Tumblr:** Add `Disable gift message popup` patch ([a4d6b4e](ReVanced/revanced-patches@a4d6b4e))
* **Tumblr:** Add `Disable in-app update` patch ([#3058](ReVanced/revanced-patches#3058)) ([5e8076b](ReVanced/revanced-patches@5e8076b))
* **Tumblr:** Add `Disable Tumblr Live` patch ([#2987](ReVanced/revanced-patches#2987)) ([bf1f9dc](ReVanced/revanced-patches@bf1f9dc))
* **Twitch - Block embedded ads:** Switch from `ttv.lol` to `luminous.dev` ([0fe115e](ReVanced/revanced-patches@0fe115e))
* Use properties file for `Client spoof` patches ([e5d548c](ReVanced/revanced-patches@e5d548c))
* **YouTube - Hide layout components:** Hide "Join" button ([1b71f89](ReVanced/revanced-patches@1b71f89))
* **YouTube - Hide layout components:** Hide "Notify me" button ([3027c15](ReVanced/revanced-patches@3027c15))
* **YouTube - Hide layout components:** Hide search result shelf header ([f4eda8c](ReVanced/revanced-patches@f4eda8c))
* **YouTube - Hide layout components:** Hide timed reactions ([d0a775d](ReVanced/revanced-patches@d0a775d))
* **YouTube - Premium heading:** Allow using default heading ([#3029](ReVanced/revanced-patches#3029)) ([d5ab35a](ReVanced/revanced-patches@d5ab35a))
* **YouTube - Spoof app version:** add version 18.20.39 ([#3001](ReVanced/revanced-patches#3001)) ([f14c5e7](ReVanced/revanced-patches@f14c5e7))
* **YouTube:** Add `Bypass URL redirects` patch ([125cac5](ReVanced/revanced-patches@125cac5))
* **YouTube:** Bump compatibility to `18.37.36` ([#3028](ReVanced/revanced-patches#3028)) ([eda28e5](ReVanced/revanced-patches@eda28e5))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants