Compare commits
29
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c85d928952 | ||
|
|
9ce39051ef | ||
|
|
cb2c7ff951 | ||
|
|
223a0b094b | ||
|
|
36a1f12671 | ||
|
|
6b799b5c01 | ||
|
|
fc392e1742 | ||
|
|
87813f8acb | ||
|
|
5f659617e9 | ||
|
|
645036d28e | ||
|
|
f00e66bded | ||
|
|
f91287b737 | ||
|
|
58abfbaffd | ||
|
|
dad5377435 | ||
|
|
a902d90449 | ||
|
|
2657f8ca7c | ||
|
|
dcb41ab74d | ||
|
|
0147865c53 | ||
|
|
b56461a439 | ||
|
|
9d27a3b9c0 | ||
|
|
ea309fd094 | ||
|
|
1bed1db404 | ||
|
|
c864966f11 | ||
|
|
409537eba3 | ||
|
|
6604f5e497 | ||
|
|
0b64741d50 | ||
|
|
34a66bec01 | ||
|
|
dcb1a2aba1 | ||
|
|
db1318b576 |
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: Bug
|
name: Bug
|
||||||
about: Create a report to help us improve
|
about: Make sure you complete the template. Otherwise, it will be closed without further explanation!
|
||||||
title: "[Bug]"
|
title: "[Bug]"
|
||||||
labels: bug
|
labels: bug
|
||||||
assignees: ''
|
assignees: ''
|
||||||
@@ -14,8 +14,8 @@ _Make sure you complete the template. Otherwise, it will be closed without furth
|
|||||||
### Device info
|
### Device info
|
||||||
- iOS/iPadOS version:
|
- iOS/iPadOS version:
|
||||||
- Device model:
|
- Device model:
|
||||||
- Sideload tool (Ex: AltStore, Sideloadly...)
|
- Sideload tool (Ex: AltStore, Sideloadly, TrollStore,...)
|
||||||
- Version of uYouPlus: _**latest** or **newest** is NOT a version number!!_
|
- The specific version of uYouPlus: _**latest** or **newest** is NOT a version number!!_
|
||||||
|
|
||||||
### Describe the bug
|
### Describe the bug
|
||||||
|
|
||||||
@@ -23,9 +23,11 @@ _Make sure you complete the template. Otherwise, it will be closed without furth
|
|||||||
### How to reproduce the bug
|
### How to reproduce the bug
|
||||||
_(Please attach videos or screenshots if possible)_
|
_(Please attach videos or screenshots if possible)_
|
||||||
|
|
||||||
|
|
||||||
### Crash log (if possible)
|
### Crash log (if possible)
|
||||||
_(The crash log can be found in the Settings app - Privacy - Analytics & Improvements - Analytics Data - Youtube...)_
|
_(The crash log can be found in the Settings app > Privacy > Analytics & Improvements > Analytics Data > Youtube...)_
|
||||||
|
|
||||||
|
### Are you using the newest version of uYouPlus? If not, why?
|
||||||
|
_(Developers spend time and effort to fix bugs & add improvements with every release. Why don't you update to the latest version before reporting about an issue???)_
|
||||||
|
|
||||||
### Does the issue happen with the official YouTube from AppStore?
|
### Does the issue happen with the official YouTube from AppStore?
|
||||||
_(Well, YouTube itself is buggy sometimes...)_
|
_(Well, YouTube itself is buggy sometimes...)_
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ on:
|
|||||||
uyou_version:
|
uyou_version:
|
||||||
description: "The version of uYou"
|
description: "The version of uYou"
|
||||||
default: "2.1"
|
default: "2.1"
|
||||||
required: false
|
required: true
|
||||||
type: string
|
type: string
|
||||||
decrypted_youtube_url:
|
decrypted_youtube_url:
|
||||||
description: "The direct URL to the decrypted YouTube ipa"
|
description: "The direct URL to the decrypted YouTube ipa"
|
||||||
@@ -66,7 +66,7 @@ jobs:
|
|||||||
- name: Setup Theos Jailed
|
- name: Setup Theos Jailed
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
repository: kabiroberai/theos-jailed
|
repository: qnblackcat/theos-jailed
|
||||||
ref: master
|
ref: master
|
||||||
path: theos-jailed
|
path: theos-jailed
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
#define LOC(x) [tweakBundle localizedStringForKey:x value:nil table:nil]
|
#define LOC(x) [tweakBundle localizedStringForKey:x value:nil table:nil]
|
||||||
#define YT_BUNDLE_ID @"com.google.ios.youtube"
|
#define YT_BUNDLE_ID @"com.google.ios.youtube"
|
||||||
#define YT_NAME @"YouTube"
|
#define YT_NAME @"YouTube"
|
||||||
|
#define UNSUPPORTED_DEVICES @[@"iPhone14,3", @"iPhone14,6", @"iPhone14,8"] // DontEatMycontent
|
||||||
|
#define THRESHOLD 1.99 // DontEatMycontent
|
||||||
|
|
||||||
// IAmYouTube
|
// IAmYouTube
|
||||||
@interface SSOConfiguration : NSObject
|
@interface SSOConfiguration : NSObject
|
||||||
@@ -37,6 +39,28 @@
|
|||||||
- (float)progress;
|
- (float)progress;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
// DontEatMyContent
|
||||||
|
NSString* deviceName();
|
||||||
|
BOOL isDeviceSupported();
|
||||||
|
void activate();
|
||||||
|
void deactivate();
|
||||||
|
void center();
|
||||||
|
|
||||||
|
@interface YTPlayerView : UIView
|
||||||
|
- (BOOL)zoomToFill;
|
||||||
|
- (id)renderingView;
|
||||||
|
- (id)playerView;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface MLHAMSBDLSampleBufferRenderingView : UIView
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface YTMainAppVideoPlayerOverlayViewController : UIViewController
|
||||||
|
- (BOOL)isFullscreen;
|
||||||
|
- (id)videoPlayerOverlayView;
|
||||||
|
- (id)activeVideoPlayerOverlay;
|
||||||
|
@end
|
||||||
|
|
||||||
// iOS16 fix
|
// iOS16 fix
|
||||||
@interface OBPrivacyLinkButton : UIButton
|
@interface OBPrivacyLinkButton : UIButton
|
||||||
- (instancetype)initWithCaption:(NSString *)caption
|
- (instancetype)initWithCaption:(NSString *)caption
|
||||||
@@ -63,6 +87,8 @@
|
|||||||
// YTAutoFullScreen
|
// YTAutoFullScreen
|
||||||
@interface YTPlayerViewController (YTAFS)
|
@interface YTPlayerViewController (YTAFS)
|
||||||
- (void)autoFullscreen;
|
- (void)autoFullscreen;
|
||||||
|
- (id)activeVideoPlayerOverlay; // DontEatMycontent
|
||||||
|
- (id)playerView; // DontEatMycontent
|
||||||
@end
|
@end
|
||||||
|
|
||||||
// OLED Darkmode
|
// OLED Darkmode
|
||||||
@@ -94,4 +120,4 @@
|
|||||||
@end
|
@end
|
||||||
|
|
||||||
@interface UIPredictionViewController : UIViewController
|
@interface UIPredictionViewController : UIViewController
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ before-package::
|
|||||||
@echo -e "==> \033[1mMoving tweak's bundle to Resources/...\033[0m"
|
@echo -e "==> \033[1mMoving tweak's bundle to Resources/...\033[0m"
|
||||||
@mkdir -p Resources/Frameworks/Alderis.framework && find .theos/obj/install/Library/Frameworks/Alderis.framework -maxdepth 1 -type f -exec cp {} Resources/Frameworks/Alderis.framework/ \;
|
@mkdir -p Resources/Frameworks/Alderis.framework && find .theos/obj/install/Library/Frameworks/Alderis.framework -maxdepth 1 -type f -exec cp {} Resources/Frameworks/Alderis.framework/ \;
|
||||||
@cp -R Tweaks/YouPiP/layout/Library/Application\ Support/YouPiP.bundle Resources/
|
@cp -R Tweaks/YouPiP/layout/Library/Application\ Support/YouPiP.bundle Resources/
|
||||||
|
@cp -R Tweaks/YTUHD/layout/Library/Application\ Support/YTUHD.bundle Resources/
|
||||||
|
@cp -R Tweaks/Return-YouTube-Dislikes/layout/Library/Application\ Support/RYD.bundle Resources/
|
||||||
@cp -R Tweaks/iSponsorBlock/layout/Library/Application\ Support/iSponsorBlock.bundle Resources/
|
@cp -R Tweaks/iSponsorBlock/layout/Library/Application\ Support/iSponsorBlock.bundle Resources/
|
||||||
@cp -R Tweaks/uYou/Library/Application\ Support/uYouBundle.bundle Resources/
|
@cp -R Tweaks/uYou/Library/Application\ Support/uYouBundle.bundle Resources/
|
||||||
@cp -R lang/uYouPlus.bundle Resources/
|
@cp -R lang/uYouPlus.bundle Resources/
|
||||||
|
|||||||
@@ -80,16 +80,16 @@
|
|||||||
|
|
||||||
- My official AltStore repo: https://qnblackcat.github.io/AltStore/
|
- My official AltStore repo: https://qnblackcat.github.io/AltStore/
|
||||||
|
|
||||||
- [Open in AltStore (v17.36.4-2.1)](https://tinyurl.com/bdezph3t) - It will take a while to install because AltStore needs to download the IPA.
|
- [Open in AltStore (v17.37.3-2.1)](https://tinyurl.com/2p8pd9n7) - It will take a while to install because AltStore needs to download the IPA.
|
||||||
|
|
||||||
- Version info: _(last update: Sep 17)_
|
- Version info: _(last update: Sep 24)_
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Expand</summary>
|
<summary>Expand</summary>
|
||||||
|
|
||||||
| **Tweaks/App** | **Developer** | **Version** | **Open source** |
|
| **Tweaks/App** | **Developer** | **Version** | **Open source** |
|
||||||
| - | - | :-: | :-: |
|
| - | - | :-: | :-: |
|
||||||
| **YouTube** | Google Inc | 17.36.4 | ✖︎ |
|
| **YouTube** | Google Inc | 17.37.3 | ✖︎ |
|
||||||
| [uYou](https://github.com/MiRO92/uYou-for-YouTube) | [MiRO92](https://twitter.com/miro92) | 2.1 | ✖︎ |
|
| [uYou](https://github.com/MiRO92/uYou-for-YouTube) | [MiRO92](https://twitter.com/miro92) | 2.1 | ✖︎ |
|
||||||
| [Open in YouTube](https://github.com/CokePokes/YoutubeExtensions) | [CokePokes](https://github.com/CokePokes) | 1.2 | ✖︎ |
|
| [Open in YouTube](https://github.com/CokePokes/YoutubeExtensions) | [CokePokes](https://github.com/CokePokes) | 1.2 | ✖︎ |
|
||||||
| **iSponsorBlock** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.0-15 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) |
|
| **iSponsorBlock** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.0-15 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) |
|
||||||
|
|||||||
+12
-2
@@ -25,6 +25,7 @@ extern BOOL hidePreviousAndNextButton();
|
|||||||
extern BOOL hidePaidPromotionCard();
|
extern BOOL hidePaidPromotionCard();
|
||||||
extern BOOL fixGoogleSignIn();
|
extern BOOL fixGoogleSignIn();
|
||||||
extern BOOL replacePreviousAndNextButton();
|
extern BOOL replacePreviousAndNextButton();
|
||||||
|
extern BOOL dontEatMyContent();
|
||||||
|
|
||||||
// Settings
|
// Settings
|
||||||
%hook YTAppSettingsPresentationData
|
%hook YTAppSettingsPresentationData
|
||||||
@@ -53,6 +54,15 @@ extern BOOL replacePreviousAndNextButton();
|
|||||||
exit(0);
|
exit(0);
|
||||||
}];
|
}];
|
||||||
|
|
||||||
|
YTSettingsSectionItem *dontEatMyContent = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"DONT_EAT_MY_CONTENT") titleDescription:LOC(@"DONT_EAT_MY_CONTENT_DESC")];
|
||||||
|
dontEatMyContent.hasSwitch = YES;
|
||||||
|
dontEatMyContent.switchVisible = YES;
|
||||||
|
dontEatMyContent.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"dontEatMyContent_enabled"];
|
||||||
|
dontEatMyContent.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
|
||||||
|
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"dontEatMyContent_enabled"];
|
||||||
|
return YES;
|
||||||
|
};
|
||||||
|
|
||||||
YTSettingsSectionItem *replacePreviousAndNextButton = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"REPLACE_PREVIOUS_NEXT_BUTTON") titleDescription:LOC(@"REPLACE_PREVIOUS_NEXT_BUTTON_DESC")];
|
YTSettingsSectionItem *replacePreviousAndNextButton = [[%c(YTSettingsSectionItem) alloc] initWithTitle:LOC(@"REPLACE_PREVIOUS_NEXT_BUTTON") titleDescription:LOC(@"REPLACE_PREVIOUS_NEXT_BUTTON_DESC")];
|
||||||
replacePreviousAndNextButton.hasSwitch = YES;
|
replacePreviousAndNextButton.hasSwitch = YES;
|
||||||
replacePreviousAndNextButton.switchVisible = YES;
|
replacePreviousAndNextButton.switchVisible = YES;
|
||||||
@@ -188,7 +198,7 @@ extern BOOL replacePreviousAndNextButton();
|
|||||||
return YES;
|
return YES;
|
||||||
};
|
};
|
||||||
|
|
||||||
NSMutableArray <YTSettingsSectionItem *> *sectionItems = [NSMutableArray arrayWithArray:@[killApp, autoFull, castConfirm, ytMiniPlayer, fixGoogleSignIn, hideAutoplaySwitch, hideCC, hideHUD, hidePaidPromotionCard, hidePreviousAndNextButton, hideHoverCard, bigYTMiniPlayer, oledDarkMode, oledKeyBoard, replacePreviousAndNextButton, reExplore]];
|
NSMutableArray <YTSettingsSectionItem *> *sectionItems = [NSMutableArray arrayWithArray:@[killApp, autoFull, castConfirm, ytMiniPlayer, fixGoogleSignIn, hideAutoplaySwitch, hideCC, hideHUD, hidePaidPromotionCard, hidePreviousAndNextButton, hideHoverCard, bigYTMiniPlayer, oledDarkMode, oledKeyBoard, dontEatMyContent, replacePreviousAndNextButton, reExplore]];
|
||||||
[delegate setSectionItems:sectionItems forCategory:uYouPlusSection title:@"uYouPlus" titleDescription:nil headerHidden:NO];
|
[delegate setSectionItems:sectionItems forCategory:uYouPlusSection title:@"uYouPlus" titleDescription:nil headerHidden:NO];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -199,4 +209,4 @@ extern BOOL replacePreviousAndNextButton();
|
|||||||
}
|
}
|
||||||
%orig;
|
%orig;
|
||||||
}
|
}
|
||||||
%end
|
%end
|
||||||
|
|||||||
Submodule Tweaks/Return-YouTube-Dislikes updated: 8b1e9d14f1...80074def6c
+1
-1
Submodule Tweaks/YTUHD updated: 47bcdc5a5b...5f556078cf
+1
-1
Submodule Tweaks/YouPiP updated: a754e1bf32...b73ce464dc
+1
-1
Submodule Tweaks/YouTubeHeader updated: efcf986beb...d6bc59b8f9
+1
-1
Submodule Tweaks/iSponsorBlock updated: 82d717878f...997d792317
@@ -1,5 +1,8 @@
|
|||||||
// Settings
|
// Settings
|
||||||
|
|
||||||
|
"DONT_EAT_MY_CONTENT" = "منع النوتش/الجزيرة التفاعلية على مقاطع 2:1 (أداة DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "منع النوتش/الجزيرة التفاعلية من قص المقاطع التي تكون نسبة العرض إلى الارتفاع فيها تساوي 2:1. يتطلب إعادة تشغيل التطبيق.";
|
||||||
|
|
||||||
"REPLACE_PREVIOUS_NEXT_BUTTON" = "تقدم وتراجع بدلاً من السابق والتالي";
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "تقدم وتراجع بدلاً من السابق والتالي";
|
||||||
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "استبدال زرّي المقطع السابق والمقطع التالي بزرّي تقدم وتراجع. يتطلب إعادة تشغيل التطبيق.";
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "استبدال زرّي المقطع السابق والمقطع التالي بزرّي تقدم وتراجع. يتطلب إعادة تشغيل التطبيق.";
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,15 @@
|
|||||||
// How to translate uYouPlus to your languate:
|
|
||||||
//
|
|
||||||
// 1. Fork uYouPlus repo
|
|
||||||
// 2. Duplicate the template.lproj folder, and edit the duplicated folder's name to your <lang_code>.lproj id.
|
|
||||||
// For example: <ru.lproj> for Russia. For more details, visit: https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes
|
|
||||||
// 3. Translate each line below after each =
|
|
||||||
// 4. Open a Pull Request
|
|
||||||
//
|
|
||||||
// If your language already exists then feel free to check it and/or improve it!
|
|
||||||
// You can also add your localiztion to YouPiP here, the process is the same
|
|
||||||
// https://github.com/PoomSmart/YouPiP/tree/main/layout/Library/Application%20Support/YouPiP.bundle
|
|
||||||
//
|
|
||||||
// Settings
|
// Settings
|
||||||
|
"DONT_EAT_MY_CONTENT" = "Zabránit zářezu/ostrovu na videoobsahu 2:1 (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "Zabraňte tomu, aby zářez/Dynamic Island žvýkal video obsah 2:1 na YouTube. Je vyžadován restart aplikace.";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Nahradit předchozí a další tlačítko";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Nahradit předchozí a následující tlačítko tlačítkem Přetočit vpřed a vzad. Je vyžadován restart aplikace.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Opravit přihlášení přes Google (pouze pro uživatele TrollStore)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Tuto možnost zapněte pouze v případě, že se nemůžete přihlásit pomocí svého účtu Google a aplikace byla nainstalována prostřednictvím TrollStore. Pokud se můžete normálně přihlásit, ponechte ji deaktivovanou. Je vyžadován restart aplikace.";
|
||||||
|
|
||||||
|
"KILL_APP" = "Zavřít YouTube";
|
||||||
|
"KILL_APP_DESC" = "Klepnutím sem zavřete YouTube!";
|
||||||
|
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Skrýt tlačítka předchozí a následující";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Skrýt tlačítka předchozí a následující";
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Skryje tlačítka předchozí a následující v překrytí ovládání videa.";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Skryje tlačítka předchozí a následující v překrytí ovládání videa.";
|
||||||
|
|||||||
@@ -1,16 +1,36 @@
|
|||||||
// Settings
|
// Settings
|
||||||
|
"DONT_EAT_MY_CONTENT" = "Kerbe/Insel bei 2:1-Videoinhalten verhindern (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "Verhindert, dass die Notch/Dynamic Island 2:1-Videoinhalte auf YouTube kaut. Neustart der App erforderlich.";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Zurück- und Weiter-Schaltfläche ersetzen";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Ersetzen Sie die Schaltflächen „Zurück“ und „Weiter“ durch die Schaltflächen „Schnellvorlauf“ und „Rücklauf“. App-Neustart ist erforderlich.“;
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Google-Anmeldung reparieren (nur für TrollStore-Benutzer)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Aktivieren Sie diese Option nur, wenn Sie sich nicht mit Ihrem Google-Konto anmelden können und die App über den TrollStore installiert wurde. Wenn Sie sich normal anmelden können, lassen Sie sie deaktiviert. Ein Neustart der App ist erforderlich.";
|
||||||
|
|
||||||
|
"KILL_APP" = "YouTube schließen";
|
||||||
|
"KILL_APP_DESC" = "Hier tippen, um YouTube zu schließen!";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Vor- und Zurücktasten ersetzen";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Vor- und Zurücktasten mit Vor- und Zurückspultasten ersetzen. App restart is required.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Google-Anmeldung beheben (nur für TrollStore Benutzer!)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Aktiviere diese Option nur, wenn Sie sich nicht mit Ihrem Google-Account anmelden können und die App über TrollStore installiert wurde. Wenn Sie sich normal anmelden können, halte diese Option deaktiviert! App-Neustart erforderlich!";
|
||||||
|
|
||||||
|
"KILL_APP" = "YouTube crashen";
|
||||||
|
"KILL_APP_DESC" = "Tippe hier, um YouTube zum Abstürzen zu bringen!";
|
||||||
|
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Vor- und Zurücktasten ausblenden";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Vor- und Zurücktasten ausblenden";
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Vor- und Zurückspultasten vom Videoplayer ausblenden.";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Vor- und Zurücktasten vom Videoplayer ausblenden.";
|
||||||
|
|
||||||
"YT_MINIPLAYER" = "Miniplayer für alle YT Videos aktivieren";
|
"YT_MINIPLAYER" = "Miniplayer für alle YouTube-Videos aktivieren";
|
||||||
"YT_MINIPLAYER_DESC" = "z.B. bei Videos für Kinder";
|
"YT_MINIPLAYER_DESC" = "z.B. bei Videos für Kinder.";
|
||||||
|
|
||||||
"CAST_CONFIRM" = "Warnung vor TV-Übertragungen (YTCastConfirm)";
|
"CAST_CONFIRM" = "Warnung vor TV-Übertragungen (YTCastConfirm)";
|
||||||
"CAST_CONFIRM_DESC" = "Zeigt eine Warnung an, um eine ausversehene TV-Übertragung zu verhindern.";
|
"CAST_CONFIRM_DESC" = "Zeigt eine Warnung an, um eine ausversehene TV-Übertragung zu verhindern.";
|
||||||
|
|
||||||
"HIDE_HOVER_CARD" = "Endkarten ausblenden (YTNoHoverCards)";
|
"HIDE_HOVER_CARD" = "Endkarten ausblenden (YTNoHoverCards)";
|
||||||
"HIDE_HOVER_CARD_DESC" = "Endkarten (Thumbnails) am Ende des Videos ausblenden.";
|
"HIDE_HOVER_CARD_DESC" = "Creator-Endkarten (Thumbnails) am Ende des Videos ausblenden.";
|
||||||
|
|
||||||
"NEW_MINIPLAYER_STYLE" = "Neuer Miniplayer Style (BigYTMiniPlayer)";
|
"NEW_MINIPLAYER_STYLE" = "Neuer Miniplayer Style (BigYTMiniPlayer)";
|
||||||
"NEW_MINIPLAYER_STYLE_DESC" = "App-Neustart erforderlich!";
|
"NEW_MINIPLAYER_STYLE_DESC" = "App-Neustart erforderlich!";
|
||||||
@@ -34,7 +54,7 @@
|
|||||||
"OLED_DARKMODE_DESC" = "Könnte in manchen Fällen nicht richtig funktionieren. App-Neustart ist erforderlich, wenn diese Option akti-/deaktiviert wird!";
|
"OLED_DARKMODE_DESC" = "Könnte in manchen Fällen nicht richtig funktionieren. App-Neustart ist erforderlich, wenn diese Option akti-/deaktiviert wird!";
|
||||||
|
|
||||||
"OLED_KEYBOARD" = "OLED-Tastatur (Experimental)";
|
"OLED_KEYBOARD" = "OLED-Tastatur (Experimental)";
|
||||||
"OLED_KEYBOARD_DESC" = "Könnte in manchen Fällen nicht richtig funktionieren. App-Neustart erforderlich1";
|
"OLED_KEYBOARD_DESC" = "Könnte in manchen Fällen nicht richtig funktionieren. App-Neustart erforderlich!";
|
||||||
|
|
||||||
"HIDE_PAID_PROMOTION_CARDS" = "Enthält bezahlte Werbung Info ausblenden";
|
"HIDE_PAID_PROMOTION_CARDS" = "Enthält bezahlte Werbung Info ausblenden";
|
||||||
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Enthält bezahlte Werbung Infobanner bei manchen Videos ausblenden.";
|
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Enthält bezahlte Werbung Infobanner bei manchen Videos ausblenden.";
|
||||||
|
|||||||
@@ -1,4 +1,15 @@
|
|||||||
// Settings
|
// Settings
|
||||||
|
"DONT_EAT_MY_CONTENT" = "Αποτροπή Notch/Island σε περιεχόμενο βίντεο 2:1 (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "Αποτρέψτε το notch/Dynamic Island από το να μασουλάει περιεχόμενο βίντεο 2:1 στο YouTube. Απαιτείται επανεκκίνηση της εφαρμογής.";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Αντικατάσταση του Προηγούμενου και του Επόμενου Κουμπιού";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Αντικατάσταση του Προηγούμενου και του Επόμενου κουμπιού με το κουμπί Γρήγορη κίνηση προς τα εμπρός και προς τα πίσω. Απαιτείται επανεκκίνηση της εφαρμογής.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Διόρθωση σύνδεσης Google (μόνο για χρήστες του TrollStore)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Ενεργοποιήστε αυτήν την επιλογή μόνο όταν δεν μπορείτε να συνδεθείτε με τον λογαριασμό σας Google και η εφαρμογή έχει εγκατασταθεί μέσω του TrollStore. Εάν μπορείτε να συνδεθείτε κανονικά, διατηρήστε την απενεργοποιημένη. Απαιτείται επανεκκίνηση της εφαρμογής.";
|
||||||
|
|
||||||
|
"KILL_APP" = "Κλείσιμο YouTube";
|
||||||
|
"KILL_APP_DESC" = "Πατήστε εδώ για να κλείσετε το YouTube!";
|
||||||
|
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Κρύψτε το προηγούμενο και το επόμενο κουμπί";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Κρύψτε το προηγούμενο και το επόμενο κουμπί";
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Κρύψτε το προηγούμενο και το επόμενο κουμπί κατά την αναπαραγωγή βίντεο.";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Κρύψτε το προηγούμενο και το επόμενο κουμπί κατά την αναπαραγωγή βίντεο.";
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
// Settings
|
// Settings
|
||||||
|
|
||||||
|
"DONT_EAT_MY_CONTENT" = "Prevent Notch/Island on 2:1 Video Content (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "Prevent the notch/Dynamic Island from munching on 2:1 video content in YouTube. App restart is required.";
|
||||||
|
|
||||||
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Replace Previous and Next Button";
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Replace Previous and Next Button";
|
||||||
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Replace Previous and Next Button with Fast forward and Rewind button. App restart is required.";
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Replace Previous and Next Button with Fast forward and Rewind button. App restart is required.";
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,12 @@
|
|||||||
// Settings
|
// Settings
|
||||||
|
"DONT_EAT_MY_CONTENT" = "Evitar Notch/Island en contenido de video 2:1 (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "Evite que la muesca/Dynamic Island se trague contenido de video 2:1 en YouTube. Es necesario reiniciar la aplicación.";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Reemplazar botón anterior y siguiente";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Reemplace el botón Anterior y Siguiente con el botón Avance rápido y Rebobinado. Es necesario reiniciar la aplicación.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Reparar el inicio de sesión de Google (solo para usuarios de TrollStore)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Active esta opción solo cuando no pueda iniciar sesión con su cuenta de Google y la aplicación se instaló a través de TrollStore. Si puede iniciar sesión normalmente, manténgala desactivada. Es necesario reiniciar la aplicación.";
|
||||||
|
|
||||||
"KILL_APP" = "Cerrar YouTube";
|
"KILL_APP" = "Cerrar YouTube";
|
||||||
"KILL_APP_DESC" = "Toca aquí para cerrar YouTube!";
|
"KILL_APP_DESC" = "Toca aquí para cerrar YouTube!";
|
||||||
|
|||||||
@@ -1,4 +1,12 @@
|
|||||||
// Settings
|
// Settings
|
||||||
|
"DONT_EAT_MY_CONTENT" = "Evitar Notch/Island en contenido de video 2:1 (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "Evite que la muesca/Dynamic Island se trague contenido de video 2:1 en YouTube. Es necesario reiniciar la aplicación.";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Reemplazar botón anterior y siguiente";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Reemplace el botón Anterior y Siguiente con el botón Avance rápido y Rebobinado. Es necesario reiniciar la aplicación.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Reparar el inicio de sesión de Google (solo para usuarios de TrollStore)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Active esta opción solo cuando no pueda iniciar sesión con su cuenta de Google y la aplicación se instaló a través de TrollStore. Si puede iniciar sesión normalmente, manténgala desactivada. Es necesario reiniciar la aplicación.";
|
||||||
|
|
||||||
"KILL_APP" = "Fermer YouTube";
|
"KILL_APP" = "Fermer YouTube";
|
||||||
"KILL_APP_DESC" = "Appuyez ici pour fermer YouTube !";
|
"KILL_APP_DESC" = "Appuyez ici pour fermer YouTube !";
|
||||||
|
|||||||
@@ -1,4 +1,15 @@
|
|||||||
// Settings
|
// Settings
|
||||||
|
"DONT_EAT_MY_CONTENT" = "מנע חריץ/אי בתוכן וידאו 2:1 (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "מנע מהחריץ/האי הדינמי ללעוס תוכן וידאו 2:1 ב-YouTube. נדרשת הפעלה מחדש של האפליקציה.";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "החלף את הלחצן הקודם והבא";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "החלף את הלחצן הקודם והבא בלחצן הרצה קדימה והאחורה. נדרשת הפעלה מחדש של האפליקציה.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "תקן כניסה של Google (עבור משתמש TrollStore בלבד)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "הפעל אפשרות זו רק כאשר אינך יכול להיכנס עם חשבון Google שלך והאפליקציה הותקנה דרך TrollStore. אם אתה יכול להתחבר כרגיל, השאר אותה מושבתת. נדרשת הפעלה מחדש של האפליקציה.";
|
||||||
|
|
||||||
|
"KILL_APP" = "סגור את YouTube";
|
||||||
|
"KILL_APP_DESC" = "הקש כאן כדי לסגור את YouTube!";
|
||||||
|
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "הסתר את הקודם והבא";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "הסתר את הקודם והבא";
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "הסתר את כפתורי הקודם והבא בתצוגת השליטה בסרטון.";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "הסתר את כפתורי הקודם והבא בתצוגת השליטה בסרטון.";
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
// Settings
|
// Settings
|
||||||
|
"DONT_EAT_MY_CONTENT" = "노치/아일랜드 영역이 2:1 비율 비디오를 가리지 않게 함 (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "노치/다이내믹 아일랜드 영역이 유튜브의 2:1 비율 영상 일부를 가리는 것을 막아줍니다. 앱을 다시 시작해야 합니다.";
|
||||||
|
|
||||||
"REPLACE_PREVIOUS_NEXT_BUTTON" = "이전, 다음 재생 버튼 교체";
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "이전, 다음 재생 버튼 교체";
|
||||||
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "이전 재생, 다음 재생 버튼을 빨리 감기, 되감기 버튼으로 교체합니다. 앱을 다시 시작해야 합니다.";
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "이전 재생, 다음 재생 버튼을 빨리 감기, 되감기 버튼으로 교체합니다. 앱을 다시 시작해야 합니다.";
|
||||||
|
|
||||||
"FIX_GOOGLE_SIGNIN" = "구글 로그인 문제 수정 (TrollStore 사용자 대상)";
|
"FIX_GOOGLE_SIGNIN" = "구글 로그인 문제 수정 (TrollStore 사용자만 해당)";
|
||||||
"FIX_GOOGLE_SIGNIN_DESC" = "TrollStore를 통해 설치된 앱에서만 동작합니다: 구글 계정으로 로그인하려면 이 옵션을 켜 주세요. 앱을 다시 시작해야 합니다.";
|
"FIX_GOOGLE_SIGNIN_DESC" = "TrollStore를 통해 설치된 앱에서만 동작합니다: 구글 계정으로 로그인하려면 이 옵션을 켜 주세요. 앱을 다시 시작해야 합니다.";
|
||||||
|
|
||||||
"KILL_APP" = "YouTube 닫기";
|
"KILL_APP" = "YouTube 닫기";
|
||||||
@@ -13,7 +15,7 @@
|
|||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "비디오 재생 오버레이에서 이전 재생, 다음 재생 버튼을 숨깁니다.";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "비디오 재생 오버레이에서 이전 재생, 다음 재생 버튼을 숨깁니다.";
|
||||||
|
|
||||||
"YT_MINIPLAYER" = "모든 YouTube 영상에서 미니 플레이어 활성화";
|
"YT_MINIPLAYER" = "모든 YouTube 영상에서 미니 플레이어 활성화";
|
||||||
"YT_MINIPLAYER_DESC" = "아동용 영상일 경우.";
|
"YT_MINIPLAYER_DESC" = "유튜브 키즈의 영상 같은 경우.";
|
||||||
|
|
||||||
"CAST_CONFIRM" = "TV 전송 알림 (YTCastConfirm)";
|
"CAST_CONFIRM" = "TV 전송 알림 (YTCastConfirm)";
|
||||||
"CAST_CONFIRM_DESC" = "의도치 않게 TV로 영상을 전송하지 않도록 보내기 전에 확인 메시지를 표시합니다.";
|
"CAST_CONFIRM_DESC" = "의도치 않게 TV로 영상을 전송하지 않도록 보내기 전에 확인 메시지를 표시합니다.";
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
// Settings
|
// Settings
|
||||||
|
|
||||||
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Substituir o botão Anterior e Próximo";
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Substituir o botão Anterior e Próximo";
|
||||||
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Substitui o botão Anterior e Próximo pelo botão Avançar e Retroceder. A reinicialização do app é necessária.";
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Substitui o botão Anterior e Próximo pelo botão Avançar e Retroceder. A reinicialização do app é necessária.";
|
||||||
|
|
||||||
"FIX_GOOGLE_SIGNIN" = "Corrigir o login do Google (somente para usuários da TrollStore)";
|
"FIX_GOOGLE_SIGNIN" = "Corrigir o login do Google (somente para usuários da TrollStore)";
|
||||||
"FIX_GOOGLE_SIGNIN_DESC" = "Funciona apenas quando o app foi instalado via TrollStore: ative esta opção para que você possa fazer login com sua conta do Google. A reinicialização do app é necessária.";
|
"FIX_GOOGLE_SIGNIN_DESC" = "Ative esta opção somente quando você não conseguir fazer login com sua conta do Google e o aplicativo foi instalado via TrollStore. Se você conseguir fazer login normalmente, mantenha-o desativado. A reinicialização do app é necessária.";
|
||||||
|
|
||||||
"KILL_APP" = "Fechar o YouTube";
|
"KILL_APP" = "Fechar o YouTube";
|
||||||
"KILL_APP_DESC" = "Toque aqui para fechar o YouTube!";
|
"KILL_APP_DESC" = "Toque aqui para fechar o YouTube!";
|
||||||
|
|||||||
@@ -1,4 +1,15 @@
|
|||||||
/* uYouPlusSettings */
|
/* uYouPlusSettings */
|
||||||
|
"DONT_EAT_MY_CONTENT" = "Предотвратить выемку/остров на видеоконтенте 2:1 (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "Не позволяйте вырезу/Dynamic Island поглощать видеоконтент 2:1 на YouTube. Требуется перезапуск приложения.";
|
||||||
|
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Заменить кнопку "Назад" и "Далее";
|
||||||
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Замените кнопки «Назад» и «Далее» на кнопки «Перемотка вперед» и «Назад». Требуется перезапуск приложения.";
|
||||||
|
|
||||||
|
"FIX_GOOGLE_SIGNIN" = "Исправить вход через Google (только для пользователя TrollStore)";
|
||||||
|
"FIX_GOOGLE_SIGNIN_DESC" = "Включайте эту опцию, только если вы не можете войти в свою учетную запись Google и приложение было установлено через TrollStore. Если вы можете нормально войти в систему, оставьте ее отключенной. Требуется перезапуск приложения.";
|
||||||
|
|
||||||
|
"KILL_APP" = "Закрыть YouTube";
|
||||||
|
"KILL_APP_DESC" = "Нажмите здесь, чтобы закрыть YouTube!";
|
||||||
|
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Скрыть «Пред.» и «След.»";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Скрыть «Пред.» и «След.»";
|
||||||
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Убирает кнопки переключения видео «Следующий» и «Предыдущий» с плеера.";
|
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Убирает кнопки переключения видео «Следующий» и «Предыдущий» с плеера.";
|
||||||
|
|||||||
@@ -1,16 +1,20 @@
|
|||||||
// How to translate uYouPlus to your language:
|
/* Read me:
|
||||||
//
|
- How to translate uYouPlus (if your language already exists then feel free to check it and/or improve it):
|
||||||
// 1. Fork uYouPlus repo
|
1. Fork uYouPlus repo
|
||||||
// 2. Duplicate the template.lproj folder, and edit the duplicated folder's name to your <lang_code>.lproj id.
|
2. Duplicate the template.lproj folder, and edit the duplicated folder's name to your <lang_code>.lproj id.
|
||||||
// For example: <ru.lproj> for Russia. For more details, visit: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
|
For example: <ru.lproj> for Russia. For more details, visit: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
|
||||||
// 3. Translate each line below after each =
|
3. Translate each line below after each =
|
||||||
// 4. Open a Pull Request
|
4. Open a Pull Request
|
||||||
//
|
|
||||||
// If your language already exists then feel free to check it and/or improve it!
|
- You can also add your localization to YouPiP, YTUHD and Return YouTube Dislike. The process is the same:
|
||||||
// You can also add your localization to YouPiP here, the process is the same
|
https://github.com/PoomSmart/YouPiP/tree/main/layout/Library/Application%20Support/YouPiP.bundle
|
||||||
// https://github.com/PoomSmart/YouPiP/tree/main/layout/Library/Application%20Support/YouPiP.bundle
|
https://github.com/PoomSmart/YTUHD/tree/master/layout/Library/Application%20Support/YTUHD.bundle
|
||||||
//
|
https://github.com/PoomSmart/Return-YouTube-Dislikes/tree/main/layout/Library/Application%20Support/RYD.bundle
|
||||||
|
*/
|
||||||
|
|
||||||
// Settings
|
// Settings
|
||||||
|
"DONT_EAT_MY_CONTENT" = "Prevent Notch/Island on 2:1 Video Content (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "Prevent the notch/Dynamic Island from munching on 2:1 video content in YouTube. App restart is required.";
|
||||||
|
|
||||||
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Replace Previous and Next Button";
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Replace Previous and Next Button";
|
||||||
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Replace Previous and Next Button with Fast forward and Rewind button. App restart is required.";
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Replace Previous and Next Button with Fast forward and Rewind button. App restart is required.";
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
// Settings
|
// Settings
|
||||||
|
"DONT_EAT_MY_CONTENT" = "Ẩn tai thỏ/Dynamic Island (DontEatMyContent)";
|
||||||
|
"DONT_EAT_MY_CONTENT_DESC" = "Ẩn tai thỏ/Dynamic Island chèn vào các video có tỷ lệ 2:1. Cần khởi động lại ứng dụng.";
|
||||||
|
|
||||||
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Thay thế nút chuyển video";
|
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Thay thế nút chuyển video";
|
||||||
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Thay thế nút chuyển video bằng nút tua nhanh. Cần khởi động lại ứng dụng.";
|
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Thay thế nút chuyển video bằng nút tua nhanh. Cần khởi động lại ứng dụng.";
|
||||||
|
|||||||
+165
-9
@@ -2,6 +2,8 @@
|
|||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <objc/runtime.h>
|
#import <objc/runtime.h>
|
||||||
#import <dlfcn.h>
|
#import <dlfcn.h>
|
||||||
|
#import <sys/utsname.h>
|
||||||
|
#import <substrate.h>
|
||||||
#import "Header.h"
|
#import "Header.h"
|
||||||
#import "Tweaks/YouTubeHeader/YTVideoQualitySwitchOriginalController.h"
|
#import "Tweaks/YouTubeHeader/YTVideoQualitySwitchOriginalController.h"
|
||||||
#import "Tweaks/YouTubeHeader/YTPlayerViewController.h"
|
#import "Tweaks/YouTubeHeader/YTPlayerViewController.h"
|
||||||
@@ -98,14 +100,11 @@ BOOL fixGoogleSignIn() {
|
|||||||
BOOL replacePreviousAndNextButton() {
|
BOOL replacePreviousAndNextButton() {
|
||||||
return [[NSUserDefaults standardUserDefaults] boolForKey:@"replacePreviousAndNextButton_enabled"];
|
return [[NSUserDefaults standardUserDefaults] boolForKey:@"replacePreviousAndNextButton_enabled"];
|
||||||
}
|
}
|
||||||
|
BOOL dontEatMyContent() {
|
||||||
|
return [[NSUserDefaults standardUserDefaults] boolForKey:@"dontEatMyContent_enabled"];
|
||||||
|
}
|
||||||
|
|
||||||
# pragma mark - Tweaks
|
# pragma mark - Tweaks
|
||||||
// Enable Reorder videos from playlist while on the Watch page - @PoomSmart
|
|
||||||
%hook YTIPlaylistPanelVideoRenderer
|
|
||||||
%new
|
|
||||||
- (BOOL)canReorder { return YES; }
|
|
||||||
%end
|
|
||||||
|
|
||||||
// Skips content warning before playing *some videos - @PoomSmart
|
// Skips content warning before playing *some videos - @PoomSmart
|
||||||
%hook YTPlayabilityResolutionUserActionUIController
|
%hook YTPlayabilityResolutionUserActionUIController
|
||||||
- (void)showConfirmAlert { [self confirmAlertDidPressConfirm]; }
|
- (void)showConfirmAlert { [self confirmAlertDidPressConfirm]; }
|
||||||
@@ -876,6 +875,142 @@ static void replaceTab(YTIGuideResponse *response) {
|
|||||||
%end
|
%end
|
||||||
%end
|
%end
|
||||||
|
|
||||||
|
// DontEatMyContent - @therealFoxster: https://github.com/therealFoxster/DontEatMyContent
|
||||||
|
double aspectRatio = 16/9;
|
||||||
|
bool zoomedToFill = false;
|
||||||
|
|
||||||
|
MLHAMSBDLSampleBufferRenderingView *renderingView;
|
||||||
|
NSLayoutConstraint *widthConstraint, *heightConstraint, *centerXConstraint, *centerYConstraint;
|
||||||
|
|
||||||
|
%group gDontEatMyContent
|
||||||
|
%hook YTPlayerViewController
|
||||||
|
- (void)viewDidAppear:(BOOL)animated {
|
||||||
|
YTPlayerView *playerView = [self playerView];
|
||||||
|
UIView *renderingViewContainer = MSHookIvar<UIView *>(playerView, "_renderingViewContainer");
|
||||||
|
renderingView = [playerView renderingView];
|
||||||
|
|
||||||
|
CGFloat constant = 23; // Make renderingView a bit larger since safe area has sizeable margins from the notch and side borders; tested on iPhone 13 mini
|
||||||
|
|
||||||
|
widthConstraint = [renderingView.widthAnchor constraintEqualToAnchor:renderingViewContainer.safeAreaLayoutGuide.widthAnchor constant:constant];
|
||||||
|
heightConstraint = [renderingView.heightAnchor constraintEqualToAnchor:renderingViewContainer.safeAreaLayoutGuide.heightAnchor constant:constant];
|
||||||
|
centerXConstraint = [renderingView.centerXAnchor constraintEqualToAnchor:renderingViewContainer.centerXAnchor];
|
||||||
|
centerYConstraint = [renderingView.centerYAnchor constraintEqualToAnchor:renderingViewContainer.centerYAnchor];
|
||||||
|
|
||||||
|
// playerView.backgroundColor = [UIColor greenColor];
|
||||||
|
// renderingViewContainer.backgroundColor = [UIColor redColor];
|
||||||
|
// renderingView.backgroundColor = [UIColor blueColor];
|
||||||
|
|
||||||
|
YTMainAppVideoPlayerOverlayViewController *activeVideoPlayerOverlay = [self activeVideoPlayerOverlay];
|
||||||
|
|
||||||
|
// Must check class since YTInlineMutedPlaybackPlayerOverlayViewController doesn't have -(BOOL)isFullscreen
|
||||||
|
if ([NSStringFromClass([activeVideoPlayerOverlay class]) isEqualToString:@"YTMainAppVideoPlayerOverlayViewController"] && [activeVideoPlayerOverlay isFullscreen]) {
|
||||||
|
activate();
|
||||||
|
} else {
|
||||||
|
center();
|
||||||
|
}
|
||||||
|
|
||||||
|
%orig(animated);
|
||||||
|
}
|
||||||
|
- (void)didPressToggleFullscreen {
|
||||||
|
YTMainAppVideoPlayerOverlayViewController *activeVideoPlayerOverlay = [self activeVideoPlayerOverlay];
|
||||||
|
|
||||||
|
if (![activeVideoPlayerOverlay isFullscreen]) // Entering fullscreen
|
||||||
|
activate();
|
||||||
|
else // Exiting fullscreen
|
||||||
|
deactivate();
|
||||||
|
|
||||||
|
%orig;
|
||||||
|
}
|
||||||
|
- (void)didSwipeToEnterFullscreen {
|
||||||
|
%orig; activate();
|
||||||
|
}
|
||||||
|
- (void)didSwipeToExitFullscreen {
|
||||||
|
%orig; deactivate();
|
||||||
|
}
|
||||||
|
- (void)singleVideo:(id)arg1 aspectRatioDidChange:(CGFloat)arg2 {
|
||||||
|
aspectRatio = arg2;
|
||||||
|
if (aspectRatio == 0.0) {
|
||||||
|
// App backgrounded
|
||||||
|
} else if (aspectRatio < THRESHOLD) {
|
||||||
|
deactivate();
|
||||||
|
} else {
|
||||||
|
activate();
|
||||||
|
}
|
||||||
|
%orig(arg1, arg2);
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
|
||||||
|
%hook YTVideoZoomOverlayView
|
||||||
|
- (void)didRecognizePinch:(UIPinchGestureRecognizer *)pinchGestureRecognizer {
|
||||||
|
// %log((CGFloat) [pinchGestureRecognizer scale], (CGFloat) [pinchGestureRecognizer velocity]);
|
||||||
|
if ([pinchGestureRecognizer velocity] <= 0.0) { // >>Zoom out<<
|
||||||
|
zoomedToFill = false;
|
||||||
|
activate();
|
||||||
|
} else if ([pinchGestureRecognizer velocity] > 0.0) { // <<Zoom in>>
|
||||||
|
zoomedToFill = true;
|
||||||
|
deactivate();
|
||||||
|
}
|
||||||
|
%orig(pinchGestureRecognizer);
|
||||||
|
}
|
||||||
|
- (void)flashAndHideSnapIndicator {}
|
||||||
|
// https://github.com/lgariv/UniZoom/blob/master/Tweak.xm
|
||||||
|
- (void)setSnapIndicatorVisible:(bool)arg1 {
|
||||||
|
%orig(NO);
|
||||||
|
}
|
||||||
|
%end
|
||||||
|
%end // gDontEatMyContent
|
||||||
|
|
||||||
|
// DontEatMycontent - detecting device model
|
||||||
|
// https://stackoverflow.com/a/11197770/19227228
|
||||||
|
NSString* deviceName() {
|
||||||
|
struct utsname systemInfo;
|
||||||
|
uname(&systemInfo);
|
||||||
|
return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL isDeviceSupported() {
|
||||||
|
NSString *identifier = deviceName();
|
||||||
|
NSArray *unsupportedDevices = UNSUPPORTED_DEVICES;
|
||||||
|
|
||||||
|
for (NSString *device in unsupportedDevices) {
|
||||||
|
if ([device isEqualToString:identifier]) {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ([identifier containsString:@"iPhone"]) {
|
||||||
|
NSString *model = [identifier stringByReplacingOccurrencesOfString:@"iPhone" withString:@""];
|
||||||
|
model = [model stringByReplacingOccurrencesOfString:@"," withString:@"."];
|
||||||
|
if ([identifier isEqualToString:@"iPhone13,1"]) { // iPhone 12 mini
|
||||||
|
return YES;
|
||||||
|
} else if ([model floatValue] >= 14.0) { // iPhone 13 series and newer
|
||||||
|
return YES;
|
||||||
|
} else return NO;
|
||||||
|
} else return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
void activate() {
|
||||||
|
if (aspectRatio < THRESHOLD || zoomedToFill) return;
|
||||||
|
// NSLog(@"activate");
|
||||||
|
center();
|
||||||
|
renderingView.translatesAutoresizingMaskIntoConstraints = NO;
|
||||||
|
widthConstraint.active = YES;
|
||||||
|
heightConstraint.active = YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
void deactivate() {
|
||||||
|
// NSLog(@"deactivate");
|
||||||
|
center();
|
||||||
|
renderingView.translatesAutoresizingMaskIntoConstraints = YES;
|
||||||
|
widthConstraint.active = NO;
|
||||||
|
heightConstraint.active = NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
void center() {
|
||||||
|
centerXConstraint.active = YES;
|
||||||
|
centerYConstraint.active = YES;
|
||||||
|
}
|
||||||
|
|
||||||
// iOS 16 uYou crash fix - @level3tjg: https://github.com/qnblackcat/uYouPlus/pull/224
|
// iOS 16 uYou crash fix - @level3tjg: https://github.com/qnblackcat/uYouPlus/pull/224
|
||||||
%group iOS16
|
%group iOS16
|
||||||
%hook OBPrivacyLinkButton
|
%hook OBPrivacyLinkButton
|
||||||
@@ -898,9 +1033,6 @@ static void replaceTab(YTIGuideResponse *response) {
|
|||||||
# pragma mark - ctor
|
# pragma mark - ctor
|
||||||
%ctor {
|
%ctor {
|
||||||
%init;
|
%init;
|
||||||
if (![[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"relatedVideosAtTheEndOfYTVideos"]) {
|
|
||||||
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"relatedVideosAtTheEndOfYTVideos"];
|
|
||||||
}
|
|
||||||
if (oled()) {
|
if (oled()) {
|
||||||
%init(gOLED);
|
%init(gOLED);
|
||||||
}
|
}
|
||||||
@@ -919,10 +1051,34 @@ static void replaceTab(YTIGuideResponse *response) {
|
|||||||
if (replacePreviousAndNextButton()) {
|
if (replacePreviousAndNextButton()) {
|
||||||
%init(gReplacePreviousAndNextButton);
|
%init(gReplacePreviousAndNextButton);
|
||||||
}
|
}
|
||||||
|
if (dontEatMyContent() && isDeviceSupported()) {
|
||||||
|
%init(gDontEatMyContent);
|
||||||
|
}
|
||||||
if (@available(iOS 16, *)) {
|
if (@available(iOS 16, *)) {
|
||||||
%init(iOS16);
|
%init(iOS16);
|
||||||
}
|
}
|
||||||
if (!fixGoogleSignIn()) {
|
if (!fixGoogleSignIn()) {
|
||||||
%init(gFixGoogleSignIn);
|
%init(gFixGoogleSignIn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Disable broken options of uYou
|
||||||
|
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"removeYouTubeAds"];
|
||||||
|
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"disableAgeRestriction"];
|
||||||
|
|
||||||
|
// Change the default value of some uYou's options
|
||||||
|
if (![[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"relatedVideosAtTheEndOfYTVideos"]) {
|
||||||
|
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"relatedVideosAtTheEndOfYTVideos"];
|
||||||
|
}
|
||||||
|
if (![[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"uYouButtonVideoControlsOverlay"]) {
|
||||||
|
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"uYouButtonVideoControlsOverlay"];
|
||||||
|
}
|
||||||
|
if (![[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"uYouPiPButtonVideoControlsOverlay"]) {
|
||||||
|
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"uYouPiPButtonVideoControlsOverlay"];
|
||||||
|
}
|
||||||
|
// if (![[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"uYouRepeatButtonVideoControlsOverlay"]) {
|
||||||
|
// [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"uYouRepeatButtonVideoControlsOverlay"];
|
||||||
|
// }
|
||||||
|
// if (![[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"uYouRightRotateButtonVideoControlsOverlay"]) {
|
||||||
|
// [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"uYouRightRotateButtonVideoControlsOverlay"];
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user