diff --git a/Source/VersionSpooferLite.xm b/Source/VersionSpooferLite.xm index 80c3183..0d05e4b 100644 --- a/Source/VersionSpooferLite.xm +++ b/Source/VersionSpooferLite.xm @@ -1,143 +1,49 @@ #import "../YTLitePlus.h" +typedef struct { + int version; + NSString *appVersion; +} VersionMapping; + +static VersionMapping versionMappings[] = { + {0, @"19.49.7"}, // Last v19 App Version + {1, @"19.28.1"}, // New 2024 Thin Outline Icons + {2, @"19.26.5"}, // Restore 2020's Thin Outline Icons + {3, @"18.49.3"}, // Last v18 App Version + {4, @"18.35.4"}, // Oldest Supported App Version (v18) - this is a replacement of v17.33.2. + {5, @"18.34.5"}, // Brings back Library Tab - Deprecated/Unsupported + {6, @"18.33.3"}, // Removes Playables in Explore - Deprecated/Unsupported + {7, @"18.18.2"}, // Fixes YTClassicVideoQuality + YTSpeed - Deprecated/Unsupported + {8, @"18.01.2"}, // First v18 App Version - Deprecated/Unsupported + {9, @"17.49.6"}, // Last v17 App Version - Deprecated/Unsupported + {10, @"17.38.10"}, // Fixes LowContrastMode + No Rounded Thumbnails - Deprecated/Unsupported + {11, @"17.33.2"} // Oldest Supported App Version (v17) - Deprecated/Unsupported +}; static int appVersionSpoofer() { return [[NSUserDefaults standardUserDefaults] integerForKey:@"versionSpoofer"]; } -static BOOL version0() { - return IsEnabled(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 0; -} -static BOOL version1() { - return IsEnabled(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 1; -} -static BOOL version2() { - return IsEnabled(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 2; -} -static BOOL version3() { - return IsEnabled(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 3; -} -static BOOL version4() { - return IsEnabled(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 4; -} -static BOOL version5() { - return IsEnabled(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 5; -} -static BOOL version6() { - return IsEnabled(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 6; -} -static BOOL version7() { - return IsEnabled(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 7; -} -static BOOL version8() { - return IsEnabled(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 8; -} -static BOOL version9() { - return IsEnabled(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 9; -} -static BOOL version10() { - return IsEnabled(@"enableVersionSpoofer_enabled") && appVersionSpoofer() == 10; + +static BOOL isVersionSpooferEnabled() { + return IS_ENABLED(@"enableVersionSpoofer_enabled"); } -%group gVersion0 -%hook YTVersionUtils // New 2024 Thin Outline Icons -+ (NSString *)appVersion { return @"19.28.1"; } -%end -%end - -%group gVersion1 -%hook YTVersionUtils // Restore 2020's Thin Outline Icons -+ (NSString *)appVersion { return @"19.26.5"; } -%end -%end - -%group gVersion2 -%hook YTVersionUtils // Last v18 App Version -+ (NSString *)appVersion { return @"18.49.3"; } -%end -%end - -%group gVersion3 -%hook YTVersionUtils // Oldest Supported App Version (v18) - this is a replacement of v17.33.2. -+ (NSString *)appVersion { return @"18.35.4"; } -%end -%end - -%group gVersion4 -%hook YTVersionUtils // Brings back Library Tab - Deprecated/Unsupported -+ (NSString *)appVersion { return @"18.34.5"; } -%end -%end - -%group gVersion5 -%hook YTVersionUtils // Removes Playables in Explore - Deprecated/Unsupported -+ (NSString *)appVersion { return @"18.33.3"; } -%end -%end - -%group gVersion6 -%hook YTVersionUtils // Fixes YTClassicVideoQuality + YTSpeed - Deprecated/Unsupported -+ (NSString *)appVersion { return @"18.18.2"; } -%end -%end - -%group gVersion7 -%hook YTVersionUtils // First v18 App Version - Deprecated/Unsupported -+ (NSString *)appVersion { return @"18.01.2"; } -%end -%end - -%group gVersion8 -%hook YTVersionUtils // Last v17 App Version - Deprecated/Unsupported -+ (NSString *)appVersion { return @"17.49.6"; } -%end -%end - -%group gVersion9 -%hook YTVersionUtils // v17.38.10 Fixes LowContrastMode + No Rounded Thumbnails - Deprecated/Unsupported -+ (NSString *)appVersion { return @"17.38.10"; } -%end -%end - -%group gVersion10 -%hook YTVersionUtils // Oldest Supported App Version (v17) - Deprecated/Unsupported -+ (NSString *)appVersion { return @"17.33.2"; } -%end -%end - -# pragma mark - ctor -%ctor { - %init; - if (version0()) { - %init(gVersion0); - } - if (version1()) { - %init(gVersion1); - } - if (version2()) { - %init(gVersion2); - } - if (version3()) { - %init(gVersion3); - } - if (version4()) { - %init(gVersion4); - } - if (version5()) { - %init(gVersion5); - } - if (version6()) { - %init(gVersion6); - } - if (version7()) { - %init(gVersion7); - } - if (version8()) { - %init(gVersion8); - } - if (version9()) { - %init(gVersion9); - } - if (version10()) { - %init(gVersion10); +static NSString* getAppVersionForSpoofedVersion(int spoofedVersion) { + for (int i = 0; i < sizeof(versionMappings) / sizeof(versionMappings[0]); i++) { + if (versionMappings[i].version == spoofedVersion) { + return versionMappings[i].appVersion; + } } + return nil; } + +%hook YTVersionUtils ++ (NSString *)appVersion { + if (!isVersionSpooferEnabled()) { + return %orig; + } + int spoofedVersion = appVersionSpoofer(); + NSString *appVersion = getAppVersionForSpoofedVersion(spoofedVersion); + return appVersion ? appVersion : %orig; +} +%end