diff --git a/.gitmodules b/.gitmodules
index e52c366..6d35fdf 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -55,3 +55,6 @@
[submodule "Tweaks/YouTimeStamp"]
path = Tweaks/YouTimeStamp
url = https://github.com/arichornloverALT/YouTimeStamp.git
+[submodule "Tweaks/YouLoop"]
+ path = Tweaks/YouLoop
+ url = https://github.com/bhackel/YouLoop
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..4df64a9
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 YTLitePlus
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/Makefile b/Makefile
index ad408a6..6022e6a 100644
--- a/Makefile
+++ b/Makefile
@@ -22,7 +22,7 @@ YTLitePlus_FRAMEWORKS = UIKit Security
include $(THEOS)/makefiles/common.mk
include $(THEOS_MAKE_PATH)/tweak.mk
-SUBPROJECTS += Tweaks/Alderis Tweaks/iSponsorBlock Tweaks/YTUHD Tweaks/YouPiP Tweaks/Return-YouTube-Dislikes Tweaks/YTABConfig Tweaks/YouMute Tweaks/DontEatMyContent Tweaks/YTHoldForSpeed Tweaks/YTVideoOverlay Tweaks/YouQuality Tweaks/YouTimeStamp Tweaks/YouGroupSettings
+SUBPROJECTS += Tweaks/Alderis Tweaks/iSponsorBlock Tweaks/YTUHD Tweaks/YouPiP Tweaks/Return-YouTube-Dislikes Tweaks/YTABConfig Tweaks/YouMute Tweaks/DontEatMyContent Tweaks/YTHoldForSpeed Tweaks/YTVideoOverlay Tweaks/YouQuality Tweaks/YouTimeStamp Tweaks/YouGroupSettings Tweaks/YouLoop
include $(THEOS_MAKE_PATH)/aggregate.mk
YTLITE_PATH = Tweaks/YTLite
diff --git a/README.md b/README.md
index 5277147..64d84a8 100644
--- a/README.md
+++ b/README.md
@@ -26,122 +26,49 @@
# Credits
-
-
-
-
-
-
- |
-
-
-
-
- |
-
-
-
- |
-
-
-
-
-
- |
-
-
-
-
- |
-
-
-
-
-
-
-
-
- |
-
-
-
-
-
- |
-
-
-
-
-
- |
-
-
-
-
-
- |
-
-
-
-
- |
-
-
-
-
-
-
-
- |
-
-
-
-
- |
-
-
-
-
- |
-
-
-
-
- |
-
-
-
-
- |
-
-
-
-
-
-
-
- |
-
-
-
-
- |
-
-
-
-
- |
-
-
-
-
- |
-
-
-
-
- |
-
+
+
+  |
+  |
+  |
+  |
+  |
+
+
+  |
+  |
+  |
+  |
+  |
+
+
+  |
+  |
+  |
+  |
+  |
+
+
+  |
+  |
+  |
+  |
+  |
+
+
+  |
+  |
+  |
+  |
+  |
+
+
+  |
+  |
+  |
+  |
+  |
+
# Features
diff --git a/Source/LowContrastMode.xm b/Source/LowContrastMode.xm
index 0b0744e..6948402 100644
--- a/Source/LowContrastMode.xm
+++ b/Source/LowContrastMode.xm
@@ -1,9 +1,6 @@
#import "../YTLitePlus.h"
-//
-static BOOL IsEnabled(NSString *key) {
- return [[NSUserDefaults standardUserDefaults] boolForKey:key];
-}
+// Low Contrast Mode
static int contrastMode() {
return [[NSUserDefaults standardUserDefaults] integerForKey:@"lcm"];
}
diff --git a/Source/Settings.xm b/Source/Settings.xm
index 331c9bf..c25f262 100644
--- a/Source/Settings.xm
+++ b/Source/Settings.xm
@@ -32,12 +32,6 @@
settingItemId:0]
*/
-static BOOL IsEnabled(NSString *key) {
- return [[NSUserDefaults standardUserDefaults] boolForKey:key];
-}
-static int GetSelection(NSString *key) {
- return [[NSUserDefaults standardUserDefaults] integerForKey:key];
-}
static int contrastMode() {
return [[NSUserDefaults standardUserDefaults] integerForKey:@"lcm"];
}
@@ -47,6 +41,8 @@ static int appVersionSpoofer() {
@interface YTSettingsSectionItemManager (YTLitePlus)
- (void)updateYTLitePlusSectionWithEntry:(id)entry;
+- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentsAtURLs:(NSArray *)urls;
+- (void)documentPickerWasCancelled:(UIDocumentPickerViewController *)controller;
@end
extern NSBundle *YTLitePlusBundle();
@@ -80,7 +76,7 @@ static const NSInteger YTLiteSection = 789;
%end
-// Settings
+// Add YTLitePlus to the settings list
%hook YTAppSettingsPresentationData
+ (NSArray *)settingsCategoryOrder {
NSArray *order = %orig;
@@ -108,14 +104,15 @@ static const NSInteger YTLiteSection = 789;
Class YTSettingsSectionItemClass = %c(YTSettingsSectionItem);
YTSettingsViewController *settingsViewController = [self valueForKey:@"_settingsViewControllerDelegate"];
+ // Add item for going to the YTLitePlus GitHub page
YTSettingsSectionItem *main = [%c(YTSettingsSectionItem)
- itemWithTitle:[NSString stringWithFormat:LOC(@"VERSION"), @(OS_STRINGIFY(TWEAK_VERSION))]
- titleDescription:LOC(@"VERSION_CHECK")
- accessibilityIdentifier:nil
- detailTextBlock:nil
- selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
- return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/YTLitePlus/YTLitePlus/releases/latest"]];
- }];
+ itemWithTitle:[NSString stringWithFormat:LOC(@"VERSION"), @(OS_STRINGIFY(TWEAK_VERSION))]
+ titleDescription:LOC(@"VERSION_CHECK")
+ accessibilityIdentifier:nil
+ detailTextBlock:nil
+ selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
+ return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/YTLitePlus/YTLitePlus/releases/latest"]];
+ }];
[sectionItems addObject:main];
YTSettingsSectionItem *copySettings = [%c(YTSettingsSectionItem)
@@ -197,6 +194,29 @@ static const NSInteger YTLiteSection = 789;
];
[sectionItems addObject:pasteSettings];
+ YTSettingsSectionItem *videoPlayer = [%c(YTSettingsSectionItem)
+ itemWithTitle:LOC(@"VIDEO_PLAYER")
+ titleDescription:LOC(@"VIDEO_PLAYER_DESC")
+ accessibilityIdentifier:nil
+ detailTextBlock:nil
+ selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
+ // Access the current view controller
+ UIViewController *settingsViewController = [self valueForKey:@"_settingsViewControllerDelegate"];
+ if (settingsViewController) {
+ // Present the video picker
+ UIDocumentPickerViewController *documentPicker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[(NSString *)kUTTypeMovie, (NSString *)kUTTypeVideo] inMode:UIDocumentPickerModeImport];
+ documentPicker.delegate = (id)self;
+ documentPicker.allowsMultipleSelection = NO;
+ [settingsViewController presentViewController:documentPicker animated:YES completion:nil];
+ } else {
+ NSLog(@"settingsViewController is nil");
+ }
+
+ return YES; // Return YES to indicate that the action was handled
+ }
+ ];
+ [sectionItems addObject:videoPlayer];
+
/*
YTSettingsSectionItem *appIcon = [%c(YTSettingsSectionItem)
itemWithTitle:LOC(@"CHANGE_APP_ICON")
@@ -212,6 +232,179 @@ static const NSInteger YTLiteSection = 789;
[sectionItems addObject:appIcon];
*/
+# pragma mark - Player Gestures - @bhackel
+ // Helper to get the selected gesture mode
+ static NSString* (^sectionGestureSelectedModeToString)(GestureMode) = ^(GestureMode sectionIndex) {
+ switch (sectionIndex) {
+ case GestureModeVolume:
+ return LOC(@"VOLUME");
+ case GestureModeBrightness:
+ return LOC(@"BRIGHTNESS");
+ case GestureModeSeek:
+ return LOC(@"SEEK");
+ case GestureModeDisabled:
+ return LOC(@"DISABLED");
+ default:
+ return @"Invalid index - Report bug";
+ }
+ };
+
+ // Helper to generate checkmark setting items for selecting gesture modes
+ static YTSettingsSectionItem* (^gestureCheckmarkSettingItem)(NSInteger, NSString *) = ^(NSInteger idx, NSString *key) {
+ return [YTSettingsSectionItemClass
+ checkmarkItemWithTitle:sectionGestureSelectedModeToString(idx)
+ selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
+ [[NSUserDefaults standardUserDefaults] setInteger:idx forKey:key];
+ [settingsViewController reloadData];
+ return YES;
+ }
+ ];
+ };
+
+ // Helper to generate a section item for selecting a gesture mode
+ YTSettingsSectionItem *(^createSectionGestureSelector)(NSString *, NSString *) = ^YTSettingsSectionItem *(NSString *sectionLabel, NSString *sectionKey) {
+ return [YTSettingsSectionItemClass itemWithTitle:LOC(sectionLabel)
+ accessibilityIdentifier:nil
+ detailTextBlock:^NSString *() {
+ return sectionGestureSelectedModeToString(GetSelection(sectionKey));
+ }
+ selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
+ NSArray *rows = @[
+ gestureCheckmarkSettingItem(0, sectionKey), // Volume
+ gestureCheckmarkSettingItem(1, sectionKey), // Brightness
+ gestureCheckmarkSettingItem(2, sectionKey), // Seek
+ gestureCheckmarkSettingItem(3, sectionKey) // Disabled
+ ];
+ // Present picker when selecting this settings item
+ YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc]
+ initWithNavTitle:LOC(sectionLabel)
+ pickerSectionTitle:nil
+ rows:rows
+ selectedItemIndex:GetSelection(sectionKey)
+ parentResponder:[self parentResponder]
+ ];
+ [settingsViewController pushViewController:picker];
+ return YES;
+ }
+ ];
+ };
+ // Configuration picker for deadzone to pick from 0 to 100 pixels with interval of 10
+ NSMutableArray *deadzoneValues = [NSMutableArray array];
+ for (CGFloat value = 0; value <= 100; value += 10) {
+ [deadzoneValues addObject:@(value)];
+ }
+ YTSettingsSectionItem *deadzonePicker = [YTSettingsSectionItemClass
+ itemWithTitle:LOC(@"DEADZONE")
+ titleDescription:LOC(@"DEADZONE_DESC")
+ accessibilityIdentifier:nil
+ detailTextBlock:^NSString *() {
+ return [NSString stringWithFormat:@"%ld px", (long)GetFloat(@"playerGesturesDeadzone")];
+ }
+ selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
+ // Generate rows for deadzone picker using the predefined array
+ NSMutableArray *deadzoneRows = [NSMutableArray array];
+ for (NSNumber *deadzoneValue in deadzoneValues) {
+ CGFloat deadzone = [deadzoneValue floatValue];
+ [deadzoneRows addObject:[YTSettingsSectionItemClass
+ checkmarkItemWithTitle:[NSString stringWithFormat:@"%ld px", (long)deadzone]
+ selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
+ [[NSUserDefaults standardUserDefaults] setFloat:deadzone forKey:@"playerGesturesDeadzone"];
+ [settingsViewController reloadData];
+ return YES;
+ }
+ ]];
+ }
+ // Determine the index of the currently selected deadzone
+ CGFloat currentDeadzone = GetFloat(@"playerGesturesDeadzone");
+ NSUInteger selectedIndex = [deadzoneValues indexOfObject:@(currentDeadzone)];
+ if (selectedIndex == NSNotFound) {
+ selectedIndex = 0; // Default to the first item if the current deadzone is not found
+ }
+ // Present deadzone picker when selecting this settings item
+ YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc]
+ initWithNavTitle:LOC(@"DEADZONE")
+ pickerSectionTitle:nil
+ rows:deadzoneRows
+ selectedItemIndex:selectedIndex
+ parentResponder:[self parentResponder]
+ ];
+ [settingsViewController pushViewController:picker];
+ return YES;
+ }
+ ];
+
+ // Configuration picker for sensitivity to pick from 0.5 to 2.0 with interval of 0.1
+ NSMutableArray *sensitivityValues = [NSMutableArray array];
+ for (CGFloat value = 0.5; value <= 2.0; value += 0.1) {
+ [sensitivityValues addObject:@(value)];
+ }
+ YTSettingsSectionItem *sensitivityPicker = [YTSettingsSectionItemClass
+ itemWithTitle:LOC(@"SENSITIVITY")
+ titleDescription:LOC(@"SENSITIVITY_DESC")
+ accessibilityIdentifier:nil
+ detailTextBlock:^NSString *() {
+ return [NSString stringWithFormat:@"%.1f", GetFloat(@"playerGesturesSensitivity")];
+ }
+ selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
+ // Generate rows for sensitivity picker using the predefined array
+ NSMutableArray *sensitivityRows = [NSMutableArray array];
+ for (NSNumber *sensitivityValue in sensitivityValues) {
+ CGFloat sensitivity = [sensitivityValue floatValue];
+ [sensitivityRows addObject:[YTSettingsSectionItemClass
+ checkmarkItemWithTitle:[NSString stringWithFormat:@"%.1f", sensitivity]
+ selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
+ [[NSUserDefaults standardUserDefaults] setFloat:sensitivity forKey:@"playerGesturesSensitivity"];
+ [settingsViewController reloadData];
+ return YES;
+ }
+ ]];
+ }
+ // Determine the index of the currently selected sensitivity
+ CGFloat currentSensitivity = GetFloat(@"playerGesturesSensitivity");
+ NSUInteger selectedIndex = [sensitivityValues indexOfObject:@(currentSensitivity)];
+ if (selectedIndex == NSNotFound) {
+ selectedIndex = 0; // Default to the first item if the current sensitivity is not found
+ }
+ // Present sensitivity picker
+ YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc]
+ initWithNavTitle:LOC(@"SENSITIVITY")
+ pickerSectionTitle:nil
+ rows:sensitivityRows
+ selectedItemIndex:selectedIndex
+ parentResponder:[self parentResponder]
+ ];
+ [settingsViewController pushViewController:picker];
+ return YES;
+ }
+ ];
+
+ // Create and add items to the high level gestures menu
+ YTSettingsSectionItem *playerGesturesGroup = [YTSettingsSectionItemClass itemWithTitle:LOC(@"PLAYER_GESTURES_TITLE") accessibilityIdentifier:nil detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
+ NSArray *rows = @[
+ // Description header item
+ [YTSettingsSectionItemClass
+ itemWithTitle:nil
+ titleDescription:LOC(@"PLAYER_GESTURES_DESC")
+ accessibilityIdentifier:nil
+ detailTextBlock:nil
+ selectBlock:nil
+ ],
+ // Toggle for enabling gestures
+ BASIC_SWITCH(LOC(@"PLAYER_GESTURES_TOGGLE"), nil, @"playerGestures_enabled"),
+ // Pickers for each gesture section
+ createSectionGestureSelector(@"TOP_SECTION", @"playerGestureTopSelection"),
+ createSectionGestureSelector(@"MIDDLE_SECTION", @"playerGestureMiddleSelection"),
+ createSectionGestureSelector(@"BOTTOM_SECTION", @"playerGestureBottomSelection"),
+ // Pickers for configuration settings
+ deadzonePicker,
+ sensitivityPicker
+ ];
+ YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Player Gestures (Beta)") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]];
+ [settingsViewController pushViewController:picker];
+ return YES;
+ }];
+ [sectionItems addObject:playerGesturesGroup];
+
# pragma mark - Video Controls Overlay Options
YTSettingsSectionItem *videoControlOverlayGroup = [YTSettingsSectionItemClass itemWithTitle:LOC(@"VIDEO_CONTROLS_OVERLAY_OPTIONS") accessibilityIdentifier:nil detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
NSArray *rows = @[
@@ -233,7 +426,7 @@ static const NSInteger YTLiteSection = 789;
BASIC_SWITCH(LOC(@"HIDE_AUTOPLAY_MINI_PREVIEW"), LOC(@"HIDE_AUTOPLAY_MINI_PREVIEW_DESC"), @"hideAutoplayMiniPreview_enabled"),
BASIC_SWITCH(LOC(@"HIDE_HUD_MESSAGES"), LOC(@"HIDE_HUD_MESSAGES_DESC"), @"hideHUD_enabled"),
BASIC_SWITCH(LOC(@"HIDE_COLLAPSE_BUTTON"), LOC(@"HIDE_COLLAPSE_BUTTON_DESC"), @"disableCollapseButton_enabled"),
-
+ BASIC_SWITCH(LOC(@"HIDE_SPEED_TOAST"), LOC(@"HIDE_SPEED_TOAST_DESC"), @"hideSpeedToast_enabled"),
];
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"VIDEO_CONTROLS_OVERLAY_OPTIONS") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]];
[settingsViewController pushViewController:picker];
@@ -479,4 +672,31 @@ static const NSInteger YTLiteSection = 789;
}
%orig;
}
+
+// Implement the delegate method for document picker
+%new
+- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentsAtURLs:(NSArray *)urls {
+ NSURL *pickedURL = [urls firstObject];
+
+ if (pickedURL) {
+ // Use AVPlayerViewController to play the video
+ AVPlayer *player = [AVPlayer playerWithURL:pickedURL];
+ AVPlayerViewController *playerViewController = [[AVPlayerViewController alloc] init];
+ playerViewController.player = player;
+
+ UIViewController *settingsViewController = [self valueForKey:@"_settingsViewControllerDelegate"];
+ if (settingsViewController) {
+ [settingsViewController presentViewController:playerViewController animated:YES completion:^{
+ [player play];
+ }];
+ }
+ }
+}
+
+%new
+- (void)documentPickerWasCancelled:(UIDocumentPickerViewController *)controller {
+ // Handle cancellation if needed
+ NSLog(@"Document picker was cancelled");
+}
+
%end
diff --git a/Source/Themes.xm b/Source/Themes.xm
index 4ea44b7..50457ff 100644
--- a/Source/Themes.xm
+++ b/Source/Themes.xm
@@ -1,8 +1,5 @@
#import "../YTLitePlus.h"
-static BOOL IsEnabled(NSString *key) {
- return [[NSUserDefaults standardUserDefaults] boolForKey:key];
-}
static BOOL isDarkMode() {
return ([[NSUserDefaults standardUserDefaults] integerForKey:@"page_style"] == 1);
}
diff --git a/Source/VersionSpooferLite.xm b/Source/VersionSpooferLite.xm
index 7399aec..78f2889 100644
--- a/Source/VersionSpooferLite.xm
+++ b/Source/VersionSpooferLite.xm
@@ -1,9 +1,6 @@
#import "../YTLitePlus.h"
-//
-static BOOL IsEnabled(NSString *key) {
- return [[NSUserDefaults standardUserDefaults] boolForKey:key];
-}
+
static int appVersionSpoofer() {
return [[NSUserDefaults standardUserDefaults] integerForKey:@"versionSpoofer"];
}
diff --git a/Tweaks/Return-YouTube-Dislikes b/Tweaks/Return-YouTube-Dislikes
index 0f4c6b7..8578263 160000
--- a/Tweaks/Return-YouTube-Dislikes
+++ b/Tweaks/Return-YouTube-Dislikes
@@ -1 +1 @@
-Subproject commit 0f4c6b7f5960308161c870d9aab30905fe8145cc
+Subproject commit 8578263c9f7caf7a22bd9364648e218974ee543c
diff --git a/Tweaks/YTUHD b/Tweaks/YTUHD
index 17c2035..02a5c91 160000
--- a/Tweaks/YTUHD
+++ b/Tweaks/YTUHD
@@ -1 +1 @@
-Subproject commit 17c2035ea9c8334f2d9154f114b6590928e93521
+Subproject commit 02a5c915a7f4183307812a94759d73f25e7fdba6
diff --git a/Tweaks/YouLoop b/Tweaks/YouLoop
new file mode 160000
index 0000000..5a424d7
--- /dev/null
+++ b/Tweaks/YouLoop
@@ -0,0 +1 @@
+Subproject commit 5a424d7531c0d2f82d258b8e8c580e153a93fcdd
diff --git a/Tweaks/YouTubeHeader b/Tweaks/YouTubeHeader
index 171f681..850e939 160000
--- a/Tweaks/YouTubeHeader
+++ b/Tweaks/YouTubeHeader
@@ -1 +1 @@
-Subproject commit 171f681e235a1f7176cde31a95e6454fc00418c3
+Subproject commit 850e939ce7053f593ed477e83ec914c98669be46
diff --git a/Tweaks/protobuf b/Tweaks/protobuf
index b9d1cff..57ba428 160000
--- a/Tweaks/protobuf
+++ b/Tweaks/protobuf
@@ -1 +1 @@
-Subproject commit b9d1cfff8ca6814723889bade011f3fa4675d46d
+Subproject commit 57ba42815efe292b3c9c99e8afadf13bbb13fff1
diff --git a/YTLitePlus.h b/YTLitePlus.h
index 82d6ac1..8a41583 100644
--- a/YTLitePlus.h
+++ b/YTLitePlus.h
@@ -6,6 +6,10 @@
#import
#import
#import
+#import
+#import
+#import // For AVPlayer and AVPlayerViewController
+#import // For kUTTypeMovie and kUTTypeVideo
#import "Tweaks/FLEX/FLEX.h"
#import "Tweaks/YouTubeHeader/YTAppDelegate.h"
@@ -40,6 +44,8 @@
#import "Tweaks/YouTubeHeader/YTPlayerBarController.h"
#import "Tweaks/YouTubeHeader/YTResponder.h"
#import "Tweaks/YouTubeHeader/YTMainAppControlsOverlayView.h"
+#import "Tweaks/YouTubeHeader/YTMultiSizeViewController.h"
+#import "Tweaks/YouTubeHeader/YTWatchLayerViewController.h"
#define LOC(x) [tweakBundle localizedStringForKey:x value:nil table:nil]
#define YT_BUNDLE_ID @"com.google.ios.youtube"
@@ -48,6 +54,30 @@
#define IS_ENABLED(k) [[NSUserDefaults standardUserDefaults] boolForKey:k]
#define APP_THEME_IDX [[NSUserDefaults standardUserDefaults] integerForKey:@"appTheme"]
+// Avoid issues with multiple includes of this file
+#pragma once
+
+// Helper methods for key retrieval
+#define IsEnabled(key) [[NSUserDefaults standardUserDefaults] boolForKey:key]
+#define GetSelection(key) [[NSUserDefaults standardUserDefaults] integerForKey:key]
+#define GetFloat(key) [[NSUserDefaults standardUserDefaults] floatForKey:key]
+
+
+// Player Gesture selected mode enum
+typedef NS_ENUM(NSUInteger, GestureMode) {
+ GestureModeVolume,
+ GestureModeBrightness,
+ GestureModeSeek,
+ GestureModeDisabled
+};
+// Gesture Section Enum
+typedef NS_ENUM(NSUInteger, GestureSection) {
+ GestureSectionTop,
+ GestureSectionMiddle,
+ GestureSectionBottom,
+ GestureSectionInvalid
+};
+
// YTSpeed
@interface YTVarispeedSwitchControllerOption : NSObject
- (id)initWithTitle:(id)title rate:(float)rate;
@@ -122,6 +152,17 @@
@property id parentResponder;
@end
+// Player Gestures - @bhackel
+@interface YTPlayerViewController (YTLitePlus)
+@property (nonatomic, retain) UIPanGestureRecognizer *YTLitePlusPanGesture;
+- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
+@end
+@interface YTWatchFullscreenViewController : YTMultiSizeViewController
+@end
+@interface MPVolumeController : NSObject
+@property (nonatomic, assign, readwrite) float volumeValue;
+@end
+
// Hide Collapse Button - @arichornlover
@interface YTMainAppControlsOverlayView (YTLitePlus)
@property (nonatomic, assign, readwrite) YTQTMButton *watchCollapseButton;
diff --git a/YTLitePlus.xm b/YTLitePlus.xm
index c4248cb..d7bbc48 100644
--- a/YTLitePlus.xm
+++ b/YTLitePlus.xm
@@ -33,11 +33,6 @@ static NSString *accessGroupID() {
return accessGroup;
}
-//
-static BOOL IsEnabled(NSString *key) {
- return [[NSUserDefaults standardUserDefaults] boolForKey:key];
-}
-
# pragma mark - Tweaks
// Activate FLEX
@@ -179,6 +174,7 @@ BOOL isSelf() {
%end
%end
+
// A/B flags
%hook YTColdConfig
- (BOOL)respectDeviceCaptionSetting { return NO; } // YouRememberCaption: https://poomsmart.github.io/repo/depictions/youremembercaption.html
@@ -194,6 +190,30 @@ BOOL isSelf() {
- (BOOL)shouldShowUpgradeDialog { return NO;}
%end
+// Hide Speed Toast - @bhackel
+// YTLite Speed Toast
+%hook PlayerToast
+- (void)showPlayerToastWithText:(id)text
+ value:(CGFloat)value
+ style:(NSInteger)style
+ onView:(id)view
+{
+ if (IsEnabled(@"hideSpeedToast_enabled")) {
+ return;
+ }
+ %orig;
+}
+%end
+// Default YouTube Speed Toast
+%hook YTInlinePlayerScrubUserEducationView
+- (void)setVisible:(BOOL)visible {
+ if (IsEnabled(@"hideSpeedToast_enabled")) {
+ return;
+ }
+ %orig;
+}
+%end
+
// Hide Home Tab - @bhackel
%group gHideHomeTab
%hook YTPivotBarView
@@ -557,10 +577,14 @@ BOOL isTabSelected = NO;
[self setNeedsLayout];
[self removeFromSuperview];
}
+
// Live chat OLED dark mode - @bhackel
- if (([[%c(YTLUserDefaults) standardUserDefaults] boolForKey:@"oledTheme"] // YTLite OLED Theme
- || [[NSUserDefaults standardUserDefaults] integerForKey:@"appTheme"] == 1 // YTLitePlus OLED Theme
- ) && [self.accessibilityIdentifier isEqualToString:@"eml.live_chat_text_message"]) {
+ CGFloat alpha;
+ if ([[%c(YTLUserDefaults) standardUserDefaults] boolForKey:@"oledTheme"] // YTLite OLED Theme
+ && [self.accessibilityIdentifier isEqualToString:@"eml.live_chat_text_message"] // Live chat text message
+ && [self.backgroundColor getWhite:nil alpha:&alpha] // Check if color is grayscale and get alpha
+ && alpha != 0.0) // Ignore shorts live chat
+ {
self.backgroundColor = [UIColor blackColor];
}
}
@@ -615,6 +639,213 @@ BOOL isTabSelected = NO;
}
%end
+// Gestures - @bhackel
+%group playerGestures
+%hook YTWatchLayerViewController
+// invoked when the player view controller is either created or destroyed
+- (void)watchController:(YTWatchController *)watchController didSetPlayerViewController:(YTPlayerViewController *)playerViewController {
+ if (playerViewController) {
+ // check to see if the pan gesture is already created
+ if (!playerViewController.YTLitePlusPanGesture) {
+ playerViewController.YTLitePlusPanGesture = [[UIPanGestureRecognizer alloc] initWithTarget:playerViewController
+ action:@selector(YTLitePlusHandlePanGesture:)];
+ playerViewController.YTLitePlusPanGesture.delegate = playerViewController;
+ [playerViewController.playerView addGestureRecognizer:playerViewController.YTLitePlusPanGesture];
+ }
+ }
+ %orig;
+}
+%end
+
+
+%hook YTPlayerViewController
+// the pan gesture that will be created and added to the player view
+%property (nonatomic, retain) UIPanGestureRecognizer *YTLitePlusPanGesture;
+%new
+- (void)YTLitePlusHandlePanGesture:(UIPanGestureRecognizer *)panGestureRecognizer {
+ // Haptic feedback generator
+ static UIImpactFeedbackGenerator *feedbackGenerator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleMedium];
+ // Variables for storing initial values to be adjusted
+ static float initialVolume;
+ static float initialBrightness;
+ static CGFloat currentTime;
+ // Flag to determine if the pan gesture is valid
+ static BOOL isValidHorizontalPan = NO;
+ // Variable to store the section of the screen the gesture is in
+ static GestureSection gestureSection = GestureSectionInvalid;
+ // Variable to track the start location of the whole pan gesture
+ static CGPoint startLocation;
+ // Variable to track the X translation when exiting the deadzone
+ static CGFloat deadzoneStartingXTranslation;
+ // Constant for the deadzone radius that can be changed in the settings
+ static CGFloat deadzoneRadius = (CGFloat)GetFloat(@"playerGesturesDeadzone");
+ // Constant for the sensitivity factor that can be changed in the settings
+ static CGFloat sensitivityFactor = (CGFloat)GetFloat(@"playerGesturesSensitivity");
+
+/***** Helper functions *****/
+ // Helper function to adjust brightness
+ void (^adjustBrightness)(CGFloat, CGFloat) = ^(CGFloat translationX, CGFloat initialBrightness) {
+ float newBrightness = initialBrightness + ((translationX / 1000.0) * sensitivityFactor);
+ newBrightness = fmaxf(fminf(newBrightness, 1.0), 0.0);
+ [[UIScreen mainScreen] setBrightness:newBrightness];
+ };
+ // Helper function to adjust volume
+ void (^adjustVolume)(CGFloat, CGFloat) = ^(CGFloat translationX, CGFloat initialVolume) {
+ float newVolume = initialVolume + ((translationX / 1000.0) * sensitivityFactor);
+ newVolume = fmaxf(fminf(newVolume, 1.0), 0.0);
+ // https://stackoverflow.com/questions/50737943/how-to-change-volume-programmatically-on-ios-11-4
+ MPVolumeView *volumeView = [[MPVolumeView alloc] init];
+ UISlider *volumeViewSlider = nil;
+ for (UIView *view in volumeView.subviews) {
+ if ([view isKindOfClass:[UISlider class]]) {
+ volumeViewSlider = (UISlider *)view;
+ break;
+ }
+ }
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+ volumeViewSlider.value = newVolume;
+ });
+ };
+ // Helper function to adjust seek time
+ void (^adjustSeek)(CGFloat, CGFloat) = ^(CGFloat translationX, CGFloat currentTime) {
+ // Calculate a seek fraction based on the horizontal translation
+ CGFloat totalDuration = self.currentVideoTotalMediaTime;
+ CGFloat viewWidth = self.view.bounds.size.width;
+ CGFloat seekFraction = (translationX / viewWidth);
+ // Seek to the new time based on the calculated offset
+ CGFloat sensitivityFactor = 1; // Adjust this value to make seeking less sensitive
+ seekFraction = sensitivityFactor * seekFraction;
+ CGFloat seekTime = currentTime + totalDuration * seekFraction;
+ [self seekToTime:seekTime];
+ };
+ // Helper function to run the selected gesture action
+ void (^runSelectedGesture)(NSString*, CGFloat, CGFloat, CGFloat, CGFloat)
+ = ^(NSString *sectionKey, CGFloat translationX, CGFloat initialBrightness, CGFloat initialVolume, CGFloat currentTime) {
+ // Determine the selected gesture mode using the section key
+ GestureMode selectedGestureMode = (GestureMode)GetSelection(sectionKey);
+ // Handle the gesture action based on the selected mode
+ switch (selectedGestureMode) {
+ case GestureModeVolume:
+ adjustVolume(translationX, initialVolume);
+ break;
+ case GestureModeBrightness:
+ adjustBrightness(translationX, initialBrightness);
+ break;
+ case GestureModeSeek:
+ adjustSeek(translationX, currentTime);
+ break;
+ case GestureModeDisabled:
+ // Do nothing if the gesture is disabled
+ break;
+ default:
+ // Show an alert if the gesture mode is invalid
+ UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Invalid Gesture Mode" message:@"Please report this bug." preferredStyle:UIAlertControllerStyleAlert];
+ UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
+ [alertController addAction:okAction];
+ [self presentViewController:alertController animated:YES completion:nil];
+ break;
+ }
+ };
+/***** End of Helper functions *****/
+
+ // Handle gesture based on current gesture state
+ if (panGestureRecognizer.state == UIGestureRecognizerStateBegan) {
+ // Get the gesture's start position
+ startLocation = [panGestureRecognizer locationInView:self.view];
+ CGFloat viewHeight = self.view.bounds.size.height;
+
+ // Determine the section based on the start position
+ // by dividing the view into thirds
+ if (startLocation.y <= viewHeight / 3.0) {
+ gestureSection = GestureSectionTop;
+ // Cancel the gesture if the mode is disabled
+ if (GetSelection(@"playerGestureTopSelection") == GestureModeDisabled) {
+ panGestureRecognizer.state = UIGestureRecognizerStateCancelled;
+ return;
+ }
+ } else if (startLocation.y <= 2 * viewHeight / 3.0) {
+ gestureSection = GestureSectionMiddle;
+ // Cancel the gesture if the mode is disabled
+ if (GetSelection(@"playerGestureMiddleSelection") == GestureModeDisabled) {
+ panGestureRecognizer.state = UIGestureRecognizerStateCancelled;
+ return;
+ }
+ } else if (startLocation.y <= viewHeight) {
+ gestureSection = GestureSectionBottom;
+ // Cancel the gesture if the mode is disabled
+ if (GetSelection(@"playerGestureBottomSelection") == GestureModeDisabled) {
+ panGestureRecognizer.state = UIGestureRecognizerStateCancelled;
+ return;
+ }
+ } else {
+ gestureSection = GestureSectionInvalid;
+ }
+ // Deactive the activity flag
+ isValidHorizontalPan = NO;
+ }
+
+ if (panGestureRecognizer.state == UIGestureRecognizerStateChanged) {
+ // Determine if the gesture is predominantly horizontal
+ CGPoint translation = [panGestureRecognizer translationInView:self.view];
+ if (!isValidHorizontalPan) {
+ if (fabs(translation.x) > fabs(translation.y)) {
+ // Check if the touch has moved outside the deadzone
+ CGFloat distanceFromStart = hypot(translation.x, translation.y);
+ if (distanceFromStart < deadzoneRadius) {
+ // If within the deadzone, don't activate the pan gesture
+ return;
+ }
+ // If outside the deadzone, activate the pan gesture and store the initial values
+ isValidHorizontalPan = YES;
+ deadzoneStartingXTranslation = translation.x;
+ initialBrightness = [UIScreen mainScreen].brightness;
+ initialVolume = [[AVAudioSession sharedInstance] outputVolume];
+ currentTime = self.currentVideoMediaTime;
+ // Provide haptic feedback to indicate a gesture start
+ [feedbackGenerator prepare];
+ [feedbackGenerator impactOccurred];
+ } else {
+ // Cancel the gesture if the translation is not horizontal
+ panGestureRecognizer.state = UIGestureRecognizerStateCancelled;
+ return;
+ }
+ }
+
+ // Handle the gesture based on the identified section
+ if (isValidHorizontalPan) {
+ // Adjust the X translation based on the value hit after
+ // exiting the deadzone
+ CGFloat adjustedTranslationX = translation.x - deadzoneStartingXTranslation;
+ // Pass the adjusted translation to the selected gesture
+ if (gestureSection == GestureSectionTop) {
+ runSelectedGesture(@"playerGestureTopSelection", adjustedTranslationX, initialBrightness, initialVolume, currentTime);
+ } else if (gestureSection == GestureSectionMiddle) {
+ runSelectedGesture(@"playerGestureMiddleSelection", adjustedTranslationX, initialBrightness, initialVolume, currentTime);
+ } else if (gestureSection == GestureSectionBottom) {
+ runSelectedGesture(@"playerGestureBottomSelection", adjustedTranslationX, initialBrightness, initialVolume, currentTime);
+ } else {
+ // If the section is invalid, cancel the gesture
+ panGestureRecognizer.state = UIGestureRecognizerStateCancelled;
+ }
+ }
+ }
+ if (panGestureRecognizer.state == UIGestureRecognizerStateEnded) {
+ if (isValidHorizontalPan) {
+ // Provide haptic feedback upon successful gesture recognition
+ [feedbackGenerator prepare];
+ [feedbackGenerator impactOccurred];
+ }
+ }
+
+}
+// allow the pan gesture to be recognized simultaneously with other gestures
+%new
+- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
+ return YES;
+}
+%end
+%end
+
/*
// BigYTMiniPlayer: https://github.com/Galactic-Dev/BigYTMiniPlayer
%group Main
@@ -844,6 +1075,9 @@ BOOL isTabSelected = NO;
if (IsEnabled(@"disableEngagementOverlay_enabled")) {
%init(gDisableEngagementOverlay);
}
+ if (IsEnabled(@"playerGestures_enabled")) {
+ %init(playerGestures);
+ }
// Change the default value of some options
NSArray *allKeys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys];
@@ -859,4 +1093,21 @@ BOOL isTabSelected = NO;
if (![allKeys containsObject:@"fixCasting_enabled"]) {
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"fixCasting_enabled"];
}
+ // Default gestures as volume, brightness, seek
+ if (![allKeys containsObject:@"playerGestureTopSelection"]) {
+ [[NSUserDefaults standardUserDefaults] setInteger:GestureModeVolume forKey:@"playerGestureTopSelection"];
+ }
+ if (![allKeys containsObject:@"playerGestureMiddleSelection"]) {
+ [[NSUserDefaults standardUserDefaults] setInteger:GestureModeBrightness forKey:@"playerGestureMiddleSelection"];
+ }
+ if (![allKeys containsObject:@"playerGestureBottomSelection"]) {
+ [[NSUserDefaults standardUserDefaults] setInteger:GestureModeSeek forKey:@"playerGestureBottomSelection"];
+ }
+ // Default configuration options for gestures
+ if (![allKeys containsObject:@"playerGesturesDeadzone"]) {
+ [[NSUserDefaults standardUserDefaults] setFloat:20.0 forKey:@"playerGesturesDeadzone"];
+ }
+ if (![allKeys containsObject:@"playerGesturesSensitivity"]) {
+ [[NSUserDefaults standardUserDefaults] setFloat:1.0 forKey:@"playerGesturesSensitivity"];
+ }
}
diff --git a/lang/YTLitePlus.bundle/ar.lproj/Localizable.strings b/lang/YTLitePlus.bundle/ar.lproj/Localizable.strings
index 496cfb4..a577d98 100644
--- a/lang/YTLitePlus.bundle/ar.lproj/Localizable.strings
+++ b/lang/YTLitePlus.bundle/ar.lproj/Localizable.strings
@@ -13,6 +13,25 @@
"REPLACE_COPY_AND_PASTE_BUTTONS" = "Replace 'Copy Settings' & 'Paste Settings' Buttons";
"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "Replaces the Buttons to 'Export Settings' and 'Import Settings'";
+"VIDEO_PLAYER" = "Video Player (Beta)";
+"VIDEO_PLAYER_DESC" = "Open a downloaded video in the Apple player";
+
+// Player Gestures
+"PLAYER_GESTURES_TOGGLE" = "Enable Player Gestures";
+"VOLUME" = "Volume";
+"BRIGHTNESS" = "Brightness";
+"SEEK" = "Seek";
+"DISABLED" = "Disabled";
+"DEADZONE" = "Deadzone";
+"DEADZONE_DESC" = "Minimum distance to move before a gesture is recognized";
+"SENSITIVITY" = "Sensitivity";
+"SENSITIVITY_DESC" = "Multiplier on volume and brightness gestures";
+"PLAYER_GESTURES_TITLE" = "Player Gestures";
+"PLAYER_GESTURES_DESC" = "Configure horizontal pan gestures for the player";
+"TOP_SECTION" = "Top Section";
+"MIDDLE_SECTION" = "Middle Section";
+"BOTTOM_SECTION" = "Bottom Section";
+
// Video controls overlay options
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "خيارات تراكب ضوابط الفيديو";
@@ -70,6 +89,9 @@
"HIDE_COLLAPSE_BUTTON" = "Hide Collapse Button";
"HIDE_COLLAPSE_BUTTON_DESC" = "Hides the Arrow Collapse Button that was shown in the Top Left of the Video Player.";
+"HIDE_SPEED_TOAST" = "Hide Speed Toast";
+"HIDE_SPEED_TOAST_DESC" = "Hide the 2X Speed popup when holding the player";
+
// App settings overlay options
"APP_SETTINGS_OVERLAY_OPTIONS" = "App Settings Overlay Options";
diff --git a/lang/YTLitePlus.bundle/bg.lproj/Localizable.strings b/lang/YTLitePlus.bundle/bg.lproj/Localizable.strings
new file mode 100644
index 0000000..4689437
--- /dev/null
+++ b/lang/YTLitePlus.bundle/bg.lproj/Localizable.strings
@@ -0,0 +1,185 @@
+// Settings
+"VERSION" = "Версия на YTLitePlus: %@";
+"VERSION_CHECK" = "Докоснете, за да проверите за актуализация!";
+
+"COPY_SETTINGS" = "Копиране на настройки";
+"COPY_SETTINGS_DESC" = "Копиране на всички текущи настройки в клипборда";
+"PASTE_SETTINGS" = "Поставяне на настройки";
+"PASTE_SETTINGS_DESC" = "Поставяне на настройки от клипборда и прилагане";
+"EXPORT_SETTINGS" = "Експортиране на настройки";
+"EXPORT_SETTINGS_DESC" = "Експортиране на всички текущи настройки в .txt файл";
+"IMPORT_SETTINGS" = "Импортиране на настройки";
+"IMPORT_SETTINGS_DESC" = "Натиснете, за да импортирате настройки (.txt)";
+"REPLACE_COPY_AND_PASTE_BUTTONS" = "Заменете бутоните 'Копиране на настройки' и 'Поставяне на настройки'";
+"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "Заменете бутоните с 'Експортиране на настройки' и 'Импортиране на настройки'";
+
+"VIDEO_PLAYER" = "Video Player (Beta)";
+"VIDEO_PLAYER_DESC" = "Open a downloaded video in the Apple player";
+
+// Player Gestures
+"PLAYER_GESTURES_TOGGLE" = "Enable Player Gestures";
+"VOLUME" = "Volume";
+"BRIGHTNESS" = "Brightness";
+"SEEK" = "Seek";
+"DISABLED" = "Disabled";
+"DEADZONE" = "Deadzone";
+"DEADZONE_DESC" = "Minimum distance to move before a gesture is recognized";
+"SENSITIVITY" = "Sensitivity";
+"SENSITIVITY_DESC" = "Multiplier on volume and brightness gestures";
+"PLAYER_GESTURES_TITLE" = "Player Gestures";
+"PLAYER_GESTURES_DESC" = "Configure horizontal pan gestures for the player";
+"TOP_SECTION" = "Top Section";
+"MIDDLE_SECTION" = "Middle Section";
+"BOTTOM_SECTION" = "Bottom Section";
+
+// Video controls overlay options
+"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "Опции за контрол на видеото";
+
+"ENABLE_SHARE_BUTTON" = "Активирайте бутона за споделяне";
+"ENABLE_SHARE_BUTTON_DESC" = "Активирайте бутона за споделяне в контролите на видеото.";
+
+"ENABLE_SAVE_TO_PLAYLIST_BUTTON" = "Активирайте бутона 'Запази в плейлист'";
+"ENABLE_SAVE_TO_PLAYLIST_BUTTON_DESC" = "Активирайте бутона 'Запази в плейлист' в контролите на видеото.";
+
+"HIDE_SHADOW_OVERLAY_BUTTONS" = "Скрийте бутоните с сенчест слой";
+"HIDE_SHADOW_OVERLAY_BUTTONS_DESC" = "Скрийте сенчестия слой на бутоните за възпроизвеждане/пауза, предишен, следващ, напред и въртене назад.";
+
+"HIDE_RIGHT_PANEL" = "Скрийте дясната панел в режим на цял екран";
+"HIDE_RIGHT_PANEL_DESC" = "Необходим е рестарт на приложението.";
+
+"HIDE_HEATWAVES" = "Скрийте топлинните вълни";
+"HIDE_HEATWAVES_DESC" = "Скрийте топлинните вълни в видеоплеъра. Необходим е рестарт на приложението.";
+
+"DISABLE_AMBIENT_PORTRAIT" = "Деактивирайте Ambient Mode (Портрет)";
+"DISABLE_AMBIENT_PORTRAIT_DESC" = "Деактивирайте осветлението около заглавието на видеото";
+
+"DISABLE_AMBIENT_FULLSCREEN" = "Деактивирайте Ambient Mode (Цял екран)";
+"DISABLE_AMBIENT_FULLSCREEN_DESC" = "Деактивирайте осветлението около видеоплеъра";
+
+"FULLSCREEN_TO_THE_RIGHT" = "Цял екран вдясно";
+"FULLSCREEN_TO_THE_RIGHT_DESC" = "Винаги влизайте в режим на цял екран с бутона за начало от дясната страна.";
+
+"SEEK_ANYWHERE" = "Търсене навсякъде жест";
+"SEEK_ANYWHERE_DESC" = "Задръжте и плъзнете върху видеоплеъра, за да търсите. Трябва да деактивирате YTLite - Задръжте, за да увеличите скоростта";
+
+"ENABLE_TAP_TO_SEEK" = "Активирайте докосване за търсене";
+"ENABLE_TAP_TO_SEEK_DESC" = "Скочете навсякъде в видео, като докоснете един път лентата за търсене";
+
+"DISABLE_PULL_TO_FULLSCREEN_GESTURE" = "Деактивирайте жеста за плъзгане до цял екран";
+"DISABLE_PULL_TO_FULLSCREEN_GESTURE_DESC" = "Деактивирайте жеста за плъзгане, за да влезете в вертикален режим на цял екран. Приложимо само за видеа в ландшафтен режим.";
+
+"ALWAYS_USE_REMAINING_TIME" = "Винаги използвайте оставащото време";
+"ALWAYS_USE_REMAINING_TIME_DESC" = "Променете настройката по подразбиране да показва оставащото време в лентата на плейъра.";
+
+"DISABLE_TOGGLE_TIME_REMAINING" = "Деактивирайте превключването на оставащото време";
+"DISABLE_TOGGLE_TIME_REMAINING_DESC" = "Деактивирайте променянето на изминалото време на оставащото време. Използвайте с друга настройка, за да показвате винаги оставащото време.";
+
+"DISABLE_ENGAGEMENT_OVERLAY" = "Деактивирайте ангажиращия слой в режим на цял екран";
+"DISABLE_ENGAGEMENT_OVERLAY_DESC" = "Деактивирайте жеста за плъзгане нагоре и списъка с предложени видеа в режим на цял екран";
+
+"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER" = "Скрийте прегледите на коментари под плейъра";
+"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER_DESC" = "Скрийте спойлера на коментарите в бутона за коментари";
+
+"HIDE_AUTOPLAY_MINI_PREVIEW" = "Скрийте мини прегледа за автоматично възпроизвеждане";
+"HIDE_AUTOPLAY_MINI_PREVIEW_DESC" = "Скрийте малкия прозорец с предложени видеа близо до заглавието в режим на цял екран";
+
+"HIDE_HUD_MESSAGES" = "Скрийте съобщенията на HUD";
+"HIDE_HUD_MESSAGES_DESC" = "Скрийте съобщенията, които се показват за определени действия (напр. CC включен/изключен)";
+
+"HIDE_COLLAPSE_BUTTON" = "Скрийте бутона за свиване";
+"HIDE_COLLAPSE_BUTTON_DESC" = "Скрийте бутона за свиване на стрелка, който беше показан в горния ляв ъгъл на видеоплеъра.";
+
+"HIDE_SPEED_TOAST" = "Скрийте съобщението за скорост";
+"HIDE_SPEED_TOAST_DESC" = "Скрийте изскачащото съобщение за 2X скорост при задържане на плейъра";
+
+// App settings overlay options
+"APP_SETTINGS_OVERLAY_OPTIONS" = "Опции за настройки на приложението";
+
+"HIDE_ACCOUNT_SECTION" = "Скрийте секцията \"Акаунт\"";
+"HIDE_AUTOPLAY_SECTION" = "Скрийте секцията \"Автоматично възпроизвеждане\"";
+"HIDE_TRYNEWFEATURES_SECTION" = "Скрийте секцията \"Опитайте нови функции\"";
+"HIDE_VIDEOQUALITYPREFERENCES_SECTION" = "Скрийте секцията \"Предпочитания за качество на видеото\"";
+"HIDE_NOTIFICATIONS_SECTION" = "Скрийте секцията \"Уведомления\"";
+"HIDE_MANAGEALLHISTORY_SECTION" = "Скрийте секцията \"Управление на цялата история\"";
+"HIDE_YOURDATAINYOUTUBE_SECTION" = "Скрийте секцията \"Вашите данни в YouTube\"";
+"HIDE_PRIVACY_SECTION" = "Скрийте секцията \"Поверителност\"";
+"HIDE_LIVECHAT_SECTION" = "Скрийте секцията \"Жив чат\"";
+
+// Theme
+"THEME_OPTIONS" = "Опции за тема";
+
+"OLED_DARK_THEME" = "OLED тъмен режим";
+"OLED_DARK_THEME_2" = "OLED тъмен режим";
+"OLED_DARK_THEME_DESC" = "Истински тъмен режим. Може да не работи правилно в някои случаи. Необходим е рестарт на приложението след включване/изключване на тази опция.";
+
+"OLD_DARK_THEME" = "Стар тъмен режим";
+"OLD_DARK_THEME_DESC" = "Старият тъмен режим на YouTube (сив режим). Необходим е рестарт на приложението.";
+
+"DEFAULT_THEME" = "По подразбиране";
+"DEFAULT_THEME_DESC" = "Тъмен(и) режим(и) по подразбиране на YouTube. Необходим е рестарт на приложението.";
+
+"OLED_KEYBOARD" = "OLED клавиатура";
+"OLED_KEYBOARD_DESC" = "Може да не работи правилно в някои случаи. Необходим е рестарт на приложението.";
+
+"LOW_CONTRAST_MODE" = "Режим с нисък контраст";
+"LOW_CONTRAST_MODE_DESC" = "Тази опция ще намали контраста на текстовете и бутоните, както беше в стария интерфейс на YouTube. Необходим е рестарт на приложението.";
+"LCM_SELECTOR" = "Избор на режим с нисък контраст";
+"DEFAULT_LOWCONTRASTMODE" = "(По подразбиране) Режим с нисък контраст";
+"CUSTOM_LOWCONTRASTMODE" = "(Персонализиран цвят) Режим с нисък контраст";
+
+// Miscellaneous
+"MISCELLANEOUS" = "Разни";
+
+"PLAYBACK_IN_FEEDS" = "Възпроизвеждане в новините";
+"PLAYBACK_IN_FEEDS_ALWAYS_ON" = "Винаги включено";
+"PLAYBACK_IN_FEEDS_WIFI_ONLY" = "Само Wi-Fi";
+"PLAYBACK_IN_FEEDS_OFF" = "Изключено";
+
+"NEW_SETTINGS_UI" = "Нов потребителски интерфейс на настройките";
+"NEW_SETTINGS_UI_DESC" = "Използвайте новия групиран потребителски интерфейс за настройки. Може да скрие някои настройки";
+
+"ENABLE_YT_STARTUP_ANIMATION" = "Активирайте анимацията при стартиране на YouTube";
+"ENABLE_YT_STARTUP_ANIMATION_DESC" = "";
+
+"HIDE_MODERN_INTERFACE" = "Скрийте съвременния интерфейс (YTNoModernUI)";
+"HIDE_MODERN_INTERFACE_DESC" = "Включете това, за да скриете съвременните елементи, добавени от YouTube. Премахва Ambient Mode, закръглен дизайн и други. Необходим е рестарт на приложението.";
+
+"IPAD_LAYOUT" = "Оформление за iPad";
+"IPAD_LAYOUT_DESC" = "Използвайте това, само ако искате да имате оформлението за iPad на текущия си iPhone/iPod. Необходим е рестарт на приложението.";
+
+"IPHONE_LAYOUT" = "Оформление за iPhone";
+"IPHONE_LAYOUT_DESC" = "Използвайте това, само ако искате да имате оформлението за iPhone на текущия си iPad. Необходим е рестарт на приложението.";
+
+"CAST_CONFIRM" = "Потвърдете предупреждението преди стрийминг (YTCastConfirm)";
+"CAST_CONFIRM_DESC" = "Показвайте потвърдително предупреждение преди стрийминг, за да предотвратите случайно преекспониране на TV.";
+"CASTING" = "Стрийминг";
+"MSG_ARE_YOU_SURE" = "Сигурни ли сте, че искате да започнете стрийминг?";
+"MSG_YES" = "Да";
+"MSG_CANCEL" = "Отказ";
+
+"NEW_MINIPLAYER_STYLE" = "Нов стил на мини плейъра (BigYTMiniPlayer)";
+"NEW_MINIPLAYER_STYLE_DESC" = "Необходим е рестарт на приложението.";
+
+"HIDE_CAST_BUTTON" = "Скрийте бутона за стрийминг";
+"HIDE_CAST_BUTTON_DESC" = "Необходим е рестарт на приложението.";
+
+"HIDE_SPONSORBLOCK_BUTTON" = "Скрийте бутона за iSponsorBlock в навигационната лента";
+"HIDE_SPONSORBLOCK_BUTTON_DESC" = "";
+
+"HIDE_HOME_TAB" = "Скрийте таба \"Начало\"";
+"HIDE_HOME_TAB_DESC" = "Бъдете внимателни при скриване на всички табове";
+
+"FIX_CASTING" = "Поправете стрийминг";
+"FIX_CASTING_DESC" = "Променя някои AB флагове, за да поправи стрийминг";
+
+"ENABLE_FLEX" = "Активирайте FLEX";
+"ENABLE_FLEX_DESC" = "Активирайте FLEX за отстраняване на проблеми (не се препоръчва). Оставете това изключено, освен ако не знаете какво правите.";
+
+// Version Spoofer
+"APP_VERSION_SPOOFER_LITE" = "Активирайте Промяна на версията на приложението (Lite)";
+"APP_VERSION_SPOOFER_LITE_DESC" = "Активирайте това, за да използвате Промяната на версията (Lite) и изберете предпочитаната версия по-долу. Необходим е рестарт на приложението.";
+"VERSION_SPOOFER_TITLE" = "Избор на Промяна на версията";
+
+// Other Localization
+"APP_RESTART_DESC" = "Необходим е рестарт на приложението.";
+"CHANGE_APP_ICON" = "Промяна на иконата на приложението";
diff --git a/lang/YTLitePlus.bundle/de.lproj/Localizable.strings b/lang/YTLitePlus.bundle/de.lproj/Localizable.strings
index 8d1dee7..76a63fe 100644
--- a/lang/YTLitePlus.bundle/de.lproj/Localizable.strings
+++ b/lang/YTLitePlus.bundle/de.lproj/Localizable.strings
@@ -13,6 +13,25 @@
"REPLACE_COPY_AND_PASTE_BUTTONS" = "Replace 'Copy Settings' & 'Paste Settings' Buttons";
"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "Replaces the Buttons to 'Export Settings' and 'Import Settings'";
+"VIDEO_PLAYER" = "Video Player (Beta)";
+"VIDEO_PLAYER_DESC" = "Open a downloaded video in the Apple player";
+
+// Player Gestures
+"PLAYER_GESTURES_TOGGLE" = "Enable Player Gestures";
+"VOLUME" = "Volume";
+"BRIGHTNESS" = "Brightness";
+"SEEK" = "Seek";
+"DISABLED" = "Disabled";
+"DEADZONE" = "Deadzone";
+"DEADZONE_DESC" = "Minimum distance to move before a gesture is recognized";
+"SENSITIVITY" = "Sensitivity";
+"SENSITIVITY_DESC" = "Multiplier on volume and brightness gestures";
+"PLAYER_GESTURES_TITLE" = "Player Gestures";
+"PLAYER_GESTURES_DESC" = "Configure horizontal pan gestures for the player";
+"TOP_SECTION" = "Top Section";
+"MIDDLE_SECTION" = "Middle Section";
+"BOTTOM_SECTION" = "Bottom Section";
+
// Video controls overlay options
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "Overlay-Optionen für Videosteuerungen";
@@ -70,6 +89,9 @@
"HIDE_COLLAPSE_BUTTON" = "Hide Collapse Button";
"HIDE_COLLAPSE_BUTTON_DESC" = "Hides the Arrow Collapse Button that was shown in the Top Left of the Video Player.";
+"HIDE_SPEED_TOAST" = "Hide Speed Toast";
+"HIDE_SPEED_TOAST_DESC" = "Hide the 2X Speed popup when holding the player";
+
// App settings overlay options
"APP_SETTINGS_OVERLAY_OPTIONS" = "Overlay-Optionen für App-Einstellungen";
diff --git a/lang/YTLitePlus.bundle/en.lproj/Localizable.strings b/lang/YTLitePlus.bundle/en.lproj/Localizable.strings
index 6c805d4..9801761 100644
--- a/lang/YTLitePlus.bundle/en.lproj/Localizable.strings
+++ b/lang/YTLitePlus.bundle/en.lproj/Localizable.strings
@@ -13,6 +13,25 @@
"REPLACE_COPY_AND_PASTE_BUTTONS" = "Replace 'Copy Settings' & 'Paste Settings' Buttons";
"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "Replaces the Buttons to 'Export Settings' and 'Import Settings'";
+"VIDEO_PLAYER" = "Video Player (Beta)";
+"VIDEO_PLAYER_DESC" = "Open a downloaded video in the Apple player";
+
+// Player Gestures
+"PLAYER_GESTURES_TOGGLE" = "Enable Player Gestures";
+"VOLUME" = "Volume";
+"BRIGHTNESS" = "Brightness";
+"SEEK" = "Seek";
+"DISABLED" = "Disabled";
+"DEADZONE" = "Deadzone";
+"DEADZONE_DESC" = "Minimum distance to move before a gesture is recognized";
+"SENSITIVITY" = "Sensitivity";
+"SENSITIVITY_DESC" = "Multiplier on volume and brightness gestures";
+"PLAYER_GESTURES_TITLE" = "Player Gestures";
+"PLAYER_GESTURES_DESC" = "Configure horizontal pan gestures for the player";
+"TOP_SECTION" = "Top Section";
+"MIDDLE_SECTION" = "Middle Section";
+"BOTTOM_SECTION" = "Bottom Section";
+
// Video controls overlay options
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "Video Controls Overlay Options";
@@ -70,6 +89,9 @@
"HIDE_COLLAPSE_BUTTON" = "Hide Collapse Button";
"HIDE_COLLAPSE_BUTTON_DESC" = "Hides the Arrow Collapse Button that was shown in the Top Left of the Video Player.";
+"HIDE_SPEED_TOAST" = "Hide Speed Toast";
+"HIDE_SPEED_TOAST_DESC" = "Hide the 2X Speed popup when holding the player";
+
// App settings overlay options
"APP_SETTINGS_OVERLAY_OPTIONS" = "App Settings Overlay Options";
diff --git a/lang/YTLitePlus.bundle/es.lproj/Localizable.strings b/lang/YTLitePlus.bundle/es.lproj/Localizable.strings
index 6b1d700..1cf7433 100644
--- a/lang/YTLitePlus.bundle/es.lproj/Localizable.strings
+++ b/lang/YTLitePlus.bundle/es.lproj/Localizable.strings
@@ -13,6 +13,25 @@
"REPLACE_COPY_AND_PASTE_BUTTONS" = "Replace 'Copy Settings' & 'Paste Settings' Buttons";
"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "Replaces the Buttons to 'Export Settings' and 'Import Settings'";
+"VIDEO_PLAYER" = "Video Player (Beta)";
+"VIDEO_PLAYER_DESC" = "Open a downloaded video in the Apple player";
+
+// Player Gestures
+"PLAYER_GESTURES_TOGGLE" = "Enable Player Gestures";
+"VOLUME" = "Volume";
+"BRIGHTNESS" = "Brightness";
+"SEEK" = "Seek";
+"DISABLED" = "Disabled";
+"DEADZONE" = "Deadzone";
+"DEADZONE_DESC" = "Minimum distance to move before a gesture is recognized";
+"SENSITIVITY" = "Sensitivity";
+"SENSITIVITY_DESC" = "Multiplier on volume and brightness gestures";
+"PLAYER_GESTURES_TITLE" = "Player Gestures";
+"PLAYER_GESTURES_DESC" = "Configure horizontal pan gestures for the player";
+"TOP_SECTION" = "Top Section";
+"MIDDLE_SECTION" = "Middle Section";
+"BOTTOM_SECTION" = "Bottom Section";
+
// Video controls overlay options
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "Opciones de superposición de controles de vídeo";
@@ -70,6 +89,9 @@
"HIDE_COLLAPSE_BUTTON" = "Hide Collapse Button";
"HIDE_COLLAPSE_BUTTON_DESC" = "Hides the Arrow Collapse Button that was shown in the Top Left of the Video Player.";
+"HIDE_SPEED_TOAST" = "Hide Speed Toast";
+"HIDE_SPEED_TOAST_DESC" = "Hide the 2X Speed popup when holding the player";
+
// App settings overlay options
"APP_SETTINGS_OVERLAY_OPTIONS" = "Opciones de superposición de los ajustes de la aplicación";
diff --git a/lang/YTLitePlus.bundle/fr.lproj/Localizable.strings b/lang/YTLitePlus.bundle/fr.lproj/Localizable.strings
index ec9a68c..e788b97 100644
--- a/lang/YTLitePlus.bundle/fr.lproj/Localizable.strings
+++ b/lang/YTLitePlus.bundle/fr.lproj/Localizable.strings
@@ -13,6 +13,25 @@
"REPLACE_COPY_AND_PASTE_BUTTONS" = "Replace 'Copy Settings' & 'Paste Settings' Buttons";
"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "Replaces the Buttons to 'Export Settings' and 'Import Settings'";
+"VIDEO_PLAYER" = "Video Player (Beta)";
+"VIDEO_PLAYER_DESC" = "Open a downloaded video in the Apple player";
+
+// Player Gestures
+"PLAYER_GESTURES_TOGGLE" = "Enable Player Gestures";
+"VOLUME" = "Volume";
+"BRIGHTNESS" = "Brightness";
+"SEEK" = "Seek";
+"DISABLED" = "Disabled";
+"DEADZONE" = "Deadzone";
+"DEADZONE_DESC" = "Minimum distance to move before a gesture is recognized";
+"SENSITIVITY" = "Sensitivity";
+"SENSITIVITY_DESC" = "Multiplier on volume and brightness gestures";
+"PLAYER_GESTURES_TITLE" = "Player Gestures";
+"PLAYER_GESTURES_DESC" = "Configure horizontal pan gestures for the player";
+"TOP_SECTION" = "Top Section";
+"MIDDLE_SECTION" = "Middle Section";
+"BOTTOM_SECTION" = "Bottom Section";
+
// Video controls overlay options
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "Options de l'overlay des contrôles vidéo";
@@ -70,6 +89,9 @@
"HIDE_COLLAPSE_BUTTON" = "Hide Collapse Button";
"HIDE_COLLAPSE_BUTTON_DESC" = "Hides the Arrow Collapse Button that was shown in the Top Left of the Video Player.";
+"HIDE_SPEED_TOAST" = "Hide Speed Toast";
+"HIDE_SPEED_TOAST_DESC" = "Hide the 2X Speed popup when holding the player";
+
// App settings overlay options
"APP_SETTINGS_OVERLAY_OPTIONS" = "Paramètres des options d'overlay de l'application";
diff --git a/lang/YTLitePlus.bundle/ja.lproj/Localizable.strings b/lang/YTLitePlus.bundle/ja.lproj/Localizable.strings
index 1550594..2749ff2 100644
--- a/lang/YTLitePlus.bundle/ja.lproj/Localizable.strings
+++ b/lang/YTLitePlus.bundle/ja.lproj/Localizable.strings
@@ -13,6 +13,25 @@
"REPLACE_COPY_AND_PASTE_BUTTONS" = "Replace 'Copy Settings' & 'Paste Settings' Buttons";
"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "Replaces the Buttons to 'Export Settings' and 'Import Settings'";
+"VIDEO_PLAYER" = "Video Player (Beta)";
+"VIDEO_PLAYER_DESC" = "Open a downloaded video in the Apple player";
+
+// Player Gestures
+"PLAYER_GESTURES_TOGGLE" = "Enable Player Gestures";
+"VOLUME" = "Volume";
+"BRIGHTNESS" = "Brightness";
+"SEEK" = "Seek";
+"DISABLED" = "Disabled";
+"DEADZONE" = "Deadzone";
+"DEADZONE_DESC" = "Minimum distance to move before a gesture is recognized";
+"SENSITIVITY" = "Sensitivity";
+"SENSITIVITY_DESC" = "Multiplier on volume and brightness gestures";
+"PLAYER_GESTURES_TITLE" = "Player Gestures";
+"PLAYER_GESTURES_DESC" = "Configure horizontal pan gestures for the player";
+"TOP_SECTION" = "Top Section";
+"MIDDLE_SECTION" = "Middle Section";
+"BOTTOM_SECTION" = "Bottom Section";
+
// Video controls overlay options
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "動画コントロールオーバーレイの設定";
@@ -70,6 +89,9 @@
"HIDE_COLLAPSE_BUTTON" = "折りたたみボタンを隠す";
"HIDE_COLLAPSE_BUTTON_DESC" = "プレーヤー左上の折りたたみボタンを非表示にします。";
+"HIDE_SPEED_TOAST" = "Hide Speed Toast";
+"HIDE_SPEED_TOAST_DESC" = "Hide the 2X Speed popup when holding the player";
+
// App settings overlay options
"APP_SETTINGS_OVERLAY_OPTIONS" = "アプリの設定オーバーレイの設定";
diff --git a/lang/YTLitePlus.bundle/pt.lproj/Localizable.strings b/lang/YTLitePlus.bundle/pt.lproj/Localizable.strings
index 2c580f6..df987ed 100644
--- a/lang/YTLitePlus.bundle/pt.lproj/Localizable.strings
+++ b/lang/YTLitePlus.bundle/pt.lproj/Localizable.strings
@@ -2,16 +2,35 @@
"VERSION" = "Versão do YTLitePlus: %@";
"VERSION_CHECK" = "Toque para verificar se há atualização!";
-"COPY_SETTINGS" = "Copy Settings";
-"COPY_SETTINGS_DESC" = "Copy all current settings to the clipboard";
-"PASTE_SETTINGS" = "Paste Settings";
-"PASTE_SETTINGS_DESC" = "Paste settings from clipboard and apply";
-"EXPORT_SETTINGS" = "Export Settings";
-"EXPORT_SETTINGS_DESC" = "Exports all current settings into a .txt file";
-"IMPORT_SETTINGS" = "Import Settings";
-"IMPORT_SETTINGS_DESC" = "Press to import settings (.txt)";
-"REPLACE_COPY_AND_PASTE_BUTTONS" = "Replace 'Copy Settings' & 'Paste Settings' Buttons";
-"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "Replaces the Buttons to 'Export Settings' and 'Import Settings'";
+"COPY_SETTINGS" = "Copiar Configurações";
+"COPY_SETTINGS_DESC" = "Copia todas as configurações atuais para a área de transferência";
+"PASTE_SETTINGS" = "Colar Configurações";
+"PASTE_SETTINGS_DESC" = "Cola as configurações da área de transferência e aplica";
+"EXPORT_SETTINGS" = "Exportar Configurações";
+"EXPORT_SETTINGS_DESC" = "Exporta todas as configurações atuais para um arquivo .txt";
+"IMPORT_SETTINGS" = "Importar Configurações";
+"IMPORT_SETTINGS_DESC" = "Pressione para importar as configurações (.txt)";
+"REPLACE_COPY_AND_PASTE_BUTTONS" = "Substituir os Botões 'Copiar Configurações' e 'Colar Configurações'";
+"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "Substitui os Botões 'Exportar Configurações' e 'Importar Configurações'";
+
+"VIDEO_PLAYER" = "Video Player (Beta)";
+"VIDEO_PLAYER_DESC" = "Open a downloaded video in the Apple player";
+
+// Player Gestures
+"PLAYER_GESTURES_TOGGLE" = "Enable Player Gestures";
+"VOLUME" = "Volume";
+"BRIGHTNESS" = "Brightness";
+"SEEK" = "Seek";
+"DISABLED" = "Disabled";
+"DEADZONE" = "Deadzone";
+"DEADZONE_DESC" = "Minimum distance to move before a gesture is recognized";
+"SENSITIVITY" = "Sensitivity";
+"SENSITIVITY_DESC" = "Multiplier on volume and brightness gestures";
+"PLAYER_GESTURES_TITLE" = "Player Gestures";
+"PLAYER_GESTURES_DESC" = "Configure horizontal pan gestures for the player";
+"TOP_SECTION" = "Top Section";
+"MIDDLE_SECTION" = "Middle Section";
+"BOTTOM_SECTION" = "Bottom Section";
// Video controls overlay options
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "Opções de Sobreposição de Controles de Vídeo";
@@ -37,8 +56,8 @@
"DISABLE_AMBIENT_FULLSCREEN" = "Desativar Iluminação cinematográfica (Tela cheia)";
"DISABLE_AMBIENT_FULLSCREEN_DESC" = "Desativa a iluminação ao redor do player de vídeo";
-"FULLSCREEN_TO_THE_RIGHT" = "Fullscreen to the Right";
-"FULLSCREEN_TO_THE_RIGHT_DESC" = "Always enter fullscreen with home button on the right side.";
+"FULLSCREEN_TO_THE_RIGHT" = "Tela cheia para a direita";
+"FULLSCREEN_TO_THE_RIGHT_DESC" = "Sempre entre em tela cheia com o botão home no lado direito.";
"SEEK_ANYWHERE" = "Gesto de Busca em qualquer lugar";
"SEEK_ANYWHERE_DESC" = "Segure e arraste o player de vídeo para buscar. Você deve desativar o YTLite - Segurar para velocidade (Hold for speed)";
@@ -58,17 +77,21 @@
"DISABLE_ENGAGEMENT_OVERLAY" = "Desativar sobreposição de engajamento em tela cheia";
"DISABLE_ENGAGEMENT_OVERLAY_DESC" = "Desativa o gesto de deslizar para cima e a lista de vídeos sugeridos em tela cheia";
-"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER" = "Hide Comment previews under player";
-"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER_DESC" = "Hide comment spoiler in comments button";
+"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER" = "Ocultar Visualizações de comentários sob o player";
+"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER_DESC" = "Oculta a Prévia de comentário no botão de comentários";
-"HIDE_AUTOPLAY_MINI_PREVIEW" = "Hide autoplay mini preview";
-"HIDE_AUTOPLAY_MINI_PREVIEW_DESC" = "Hide the small suggested video box near the title in fullscreen";
+"HIDE_AUTOPLAY_MINI_PREVIEW" = "Ocultar mini visualização de reprodução automática";
+"HIDE_AUTOPLAY_MINI_PREVIEW_DESC" = "Oculta a pequena caixa de vídeo sugerida perto do título em tela cheia";
"HIDE_HUD_MESSAGES" = "Ocultar Mensagens do HUD";
"HIDE_HUD_MESSAGES_DESC" = "Exemplo: Legendas/CC ativadas/desativadas, A repetição do vídeo está ativada,...";
-"HIDE_COLLAPSE_BUTTON" = "Hide Collapse Button";
-"HIDE_COLLAPSE_BUTTON_DESC" = "Hides the Arrow Collapse Button that was shown in the Top Left of the Video Player.";
+"HIDE_COLLAPSE_BUTTON" = "Ocultar Botão de Recolhimento";
+"HIDE_COLLAPSE_BUTTON_DESC" = "Oculta o botão de seta para recolher que era exibido no canto superior esquerdo do player de vídeo.";
+
+"HIDE_SPEED_TOAST" = "Ocultar Toast de Velocidade";
+"HIDE_SPEED_TOAST_DESC" = "Ocultar o popup de Velocidade 2X ao segurar o player";
+
// App settings overlay options
"APP_SETTINGS_OVERLAY_OPTIONS" = "Configurações do Aplicativo";
diff --git a/lang/YTLitePlus.bundle/ro.lproj/Localizable.strings b/lang/YTLitePlus.bundle/ro.lproj/Localizable.strings
index 6bec7d1..343c226 100644
--- a/lang/YTLitePlus.bundle/ro.lproj/Localizable.strings
+++ b/lang/YTLitePlus.bundle/ro.lproj/Localizable.strings
@@ -13,6 +13,25 @@
"REPLACE_COPY_AND_PASTE_BUTTONS" = "Replace 'Copy Settings' & 'Paste Settings' Buttons";
"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "Replaces the Buttons to 'Export Settings' and 'Import Settings'";
+"VIDEO_PLAYER" = "Video Player (Beta)";
+"VIDEO_PLAYER_DESC" = "Open a downloaded video in the Apple player";
+
+// Player Gestures
+"PLAYER_GESTURES_TOGGLE" = "Enable Player Gestures";
+"VOLUME" = "Volume";
+"BRIGHTNESS" = "Brightness";
+"SEEK" = "Seek";
+"DISABLED" = "Disabled";
+"DEADZONE" = "Deadzone";
+"DEADZONE_DESC" = "Minimum distance to move before a gesture is recognized";
+"SENSITIVITY" = "Sensitivity";
+"SENSITIVITY_DESC" = "Multiplier on volume and brightness gestures";
+"PLAYER_GESTURES_TITLE" = "Player Gestures";
+"PLAYER_GESTURES_DESC" = "Configure horizontal pan gestures for the player";
+"TOP_SECTION" = "Top Section";
+"MIDDLE_SECTION" = "Middle Section";
+"BOTTOM_SECTION" = "Bottom Section";
+
// Video controls overlay options
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "Opțiuni Overlay Controale Video";
@@ -70,6 +89,9 @@
"HIDE_COLLAPSE_BUTTON" = "Hide Collapse Button";
"HIDE_COLLAPSE_BUTTON_DESC" = "Hides the Arrow Collapse Button that was shown in the Top Left of the Video Player.";
+"HIDE_SPEED_TOAST" = "Hide Speed Toast";
+"HIDE_SPEED_TOAST_DESC" = "Hide the 2X Speed popup when holding the player";
+
// App settings overlay options
"APP_SETTINGS_OVERLAY_OPTIONS" = "Opțiuni Overlay Setări Aplicație";
diff --git a/lang/YTLitePlus.bundle/ru.lproj/Localizable.strings b/lang/YTLitePlus.bundle/ru.lproj/Localizable.strings
index f7f6443..5e6bb59 100644
--- a/lang/YTLitePlus.bundle/ru.lproj/Localizable.strings
+++ b/lang/YTLitePlus.bundle/ru.lproj/Localizable.strings
@@ -13,6 +13,25 @@
"REPLACE_COPY_AND_PASTE_BUTTONS" = "Replace 'Copy Settings' & 'Paste Settings' Buttons";
"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "Replaces the Buttons to 'Export Settings' and 'Import Settings'";
+"VIDEO_PLAYER" = "Video Player (Beta)";
+"VIDEO_PLAYER_DESC" = "Open a downloaded video in the Apple player";
+
+// Player Gestures
+"PLAYER_GESTURES_TOGGLE" = "Enable Player Gestures";
+"VOLUME" = "Volume";
+"BRIGHTNESS" = "Brightness";
+"SEEK" = "Seek";
+"DISABLED" = "Disabled";
+"DEADZONE" = "Deadzone";
+"DEADZONE_DESC" = "Minimum distance to move before a gesture is recognized";
+"SENSITIVITY" = "Sensitivity";
+"SENSITIVITY_DESC" = "Multiplier on volume and brightness gestures";
+"PLAYER_GESTURES_TITLE" = "Player Gestures";
+"PLAYER_GESTURES_DESC" = "Configure horizontal pan gestures for the player";
+"TOP_SECTION" = "Top Section";
+"MIDDLE_SECTION" = "Middle Section";
+"BOTTOM_SECTION" = "Bottom Section";
+
// Video controls overlay options
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "Video Controls Overlay Options";
@@ -70,6 +89,9 @@
"HIDE_COLLAPSE_BUTTON" = "Hide Collapse Button";
"HIDE_COLLAPSE_BUTTON_DESC" = "Hides the Arrow Collapse Button that was shown in the Top Left of the Video Player.";
+"HIDE_SPEED_TOAST" = "Hide Speed Toast";
+"HIDE_SPEED_TOAST_DESC" = "Hide the 2X Speed popup when holding the player";
+
// App settings overlay options
"APP_SETTINGS_OVERLAY_OPTIONS" = "App Settings Overlay Options";
diff --git a/lang/YTLitePlus.bundle/template.lproj/Localizable.strings b/lang/YTLitePlus.bundle/template.lproj/Localizable.strings
index 5e6f94d..413a20a 100644
--- a/lang/YTLitePlus.bundle/template.lproj/Localizable.strings
+++ b/lang/YTLitePlus.bundle/template.lproj/Localizable.strings
@@ -28,6 +28,25 @@ https://github.com/PoomSmart/Return-YouTube-Dislikes/tree/main/layout/Library/Ap
"REPLACE_COPY_AND_PASTE_BUTTONS" = "Replace 'Copy Settings' & 'Paste Settings' Buttons";
"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "Replaces the Buttons to 'Export Settings' and 'Import Settings'";
+"VIDEO_PLAYER" = "Video Player (Beta)";
+"VIDEO_PLAYER_DESC" = "Open a downloaded video in the Apple player";
+
+// Player Gestures
+"PLAYER_GESTURES_TOGGLE" = "Enable Player Gestures";
+"VOLUME" = "Volume";
+"BRIGHTNESS" = "Brightness";
+"SEEK" = "Seek";
+"DISABLED" = "Disabled";
+"DEADZONE" = "Deadzone";
+"DEADZONE_DESC" = "Minimum distance to move before a gesture is recognized";
+"SENSITIVITY" = "Sensitivity";
+"SENSITIVITY_DESC" = "Multiplier on volume and brightness gestures";
+"PLAYER_GESTURES_TITLE" = "Player Gestures";
+"PLAYER_GESTURES_DESC" = "Configure horizontal pan gestures for the player";
+"TOP_SECTION" = "Top Section";
+"MIDDLE_SECTION" = "Middle Section";
+"BOTTOM_SECTION" = "Bottom Section";
+
// Video controls overlay options
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "Video Controls Overlay Options";
@@ -85,6 +104,9 @@ https://github.com/PoomSmart/Return-YouTube-Dislikes/tree/main/layout/Library/Ap
"HIDE_COLLAPSE_BUTTON" = "Hide Collapse Button";
"HIDE_COLLAPSE_BUTTON_DESC" = "Hides the Arrow Collapse Button that was shown in the Top Left of the Video Player.";
+"HIDE_SPEED_TOAST" = "Hide Speed Toast";
+"HIDE_SPEED_TOAST_DESC" = "Hide the 2X Speed popup when holding the player";
+
// App settings overlay options
"APP_SETTINGS_OVERLAY_OPTIONS" = "App Settings Overlay Options";
diff --git a/lang/YTLitePlus.bundle/tr.lproj/Localizable.strings b/lang/YTLitePlus.bundle/tr.lproj/Localizable.strings
index e1d707f..14c9e72 100644
--- a/lang/YTLitePlus.bundle/tr.lproj/Localizable.strings
+++ b/lang/YTLitePlus.bundle/tr.lproj/Localizable.strings
@@ -1,6 +1,36 @@
// Settings
"VERSION" = "YTLitePlus'ın sürümü: %@";
-"VERSION_CHECK" = "Güncelleme için dokunun!";
+"VERSION_CHECK" = "Güncelleme kontrolü için dokun!";
+
+"COPY_SETTINGS" = "Ayarları Kopyala";
+"COPY_SETTINGS_DESC" = "Tüm mevcut ayarları panoya kopyala";
+"PASTE_SETTINGS" = "Ayarları Yapıştır";
+"PASTE_SETTINGS_DESC" = "Panodaki ayarları yapıştır ve uygula";
+"EXPORT_SETTINGS" = "Ayarları Dışa Aktar";
+"EXPORT_SETTINGS_DESC" = "Tüm mevcut ayarları bir .txt dosyasına dışa aktarır";
+"IMPORT_SETTINGS" = "Ayarları İçe Aktar";
+"IMPORT_SETTINGS_DESC" = "Ayarları içe aktarmak için basın (.txt)";
+"REPLACE_COPY_AND_PASTE_BUTTONS" = "'Ayarları Kopyala' ve 'Ayarları Yapıştır' Düğmelerini Değiştir";
+"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "Düğmeleri 'Ayarları Dışa Aktar' ve 'Ayarları İçe Aktar' ile değiştirir";
+
+"VIDEO_PLAYER" = "Video Player (Beta)";
+"VIDEO_PLAYER_DESC" = "Open a downloaded video in the Apple player";
+
+// Player Gestures
+"PLAYER_GESTURES_TOGGLE" = "Enable Player Gestures";
+"VOLUME" = "Volume";
+"BRIGHTNESS" = "Brightness";
+"SEEK" = "Seek";
+"DISABLED" = "Disabled";
+"DEADZONE" = "Deadzone";
+"DEADZONE_DESC" = "Minimum distance to move before a gesture is recognized";
+"SENSITIVITY" = "Sensitivity";
+"SENSITIVITY_DESC" = "Multiplier on volume and brightness gestures";
+"PLAYER_GESTURES_TITLE" = "Player Gestures";
+"PLAYER_GESTURES_DESC" = "Configure horizontal pan gestures for the player";
+"TOP_SECTION" = "Top Section";
+"MIDDLE_SECTION" = "Middle Section";
+"BOTTOM_SECTION" = "Bottom Section";
"COPY_SETTINGS" = "Ayarları Kopyala";
"COPY_SETTINGS_DESC" = "Tüm mevcut ayarları panoya kopyala";
@@ -61,8 +91,8 @@
"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER" = "Oynatıcının Altındaki Yorum Önizlemelerini Gizle";
"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER_DESC" = "Video oynatıcının altındaki yorum önizlemelerini gizler.";
-"HIDE_AUTOPLAY_MINI_PREVIEW" = "Hide autoplay mini preview";
-"HIDE_AUTOPLAY_MINI_PREVIEW_DESC" = "Hide the small suggested video box near the title in fullscreen";
+"HIDE_AUTOPLAY_MINI_PREVIEW" = "Otomatik Oynatma Mini Önizlemesini Gizle";
+"HIDE_AUTOPLAY_MINI_PREVIEW_DESC" = "Tam ekranda başlık yakınındaki küçük önerilen video kutusunu gizle";
"HIDE_HUD_MESSAGES" = "HUD mesajlarını gizle";
"HIDE_HUD_MESSAGES_DESC" = "Belirli işlemler için görüntülenen bildirim çubuklarını gizler (ör. CC açıldı/kapandı)";
@@ -70,6 +100,9 @@
"HIDE_COLLAPSE_BUTTON" = "Daraltma Düğmesini Gizle";
"HIDE_COLLAPSE_BUTTON_DESC" = "Video oynatıcıda sol üstte görünen ok ile daraltma düğmesini gizler.";
+"HIDE_SPEED_TOAST" = "Hız Bildirimini Gizle";
+"HIDE_SPEED_TOAST_DESC" = "Oynatıcıya basılı tutarken 2X Hız bildirimini gizle";
+
// App settings overlay options
"APP_SETTINGS_OVERLAY_OPTIONS" = "Uyg. Ayarları Kaplama Seç.";
@@ -84,7 +117,7 @@
"HIDE_LIVECHAT_SECTION" = "\"Canlı Sohbet\" Bölümünü Gizle";
// Theme
-"THEME_OPTIONS" = "Tema Seç.";
+"THEME_OPTIONS" = "Tema Seç";
"OLED_DARK_THEME" = "OLED koyu tema";
"OLED_DARK_THEME_2" = "OLED koyu tema";
@@ -106,9 +139,9 @@
"CUSTOM_LOWCONTRASTMODE" = "(Özel Renk) DüşükKontrastModu";
// Miscellaneous
-"MISCELLANEOUS" = "Çeşitli";
+"MISCELLANEOUS" = "Diğer";
-"PLAYBACK_IN_FEEDS" = "Akışlarda Oynatma";
+"PLAYBACK_IN_FEEDS" = "Akışlarda Oto Oynatma";
"PLAYBACK_IN_FEEDS_ALWAYS_ON" = "Her zaman açık";
"PLAYBACK_IN_FEEDS_WIFI_ONLY" = "Yalnızca Wi-Fi";
"PLAYBACK_IN_FEEDS_OFF" = "Kapalı";
diff --git a/lang/YTLitePlus.bundle/vi.lproj/Localizable.strings b/lang/YTLitePlus.bundle/vi.lproj/Localizable.strings
index 49194cd..dd3fdb0 100644
--- a/lang/YTLitePlus.bundle/vi.lproj/Localizable.strings
+++ b/lang/YTLitePlus.bundle/vi.lproj/Localizable.strings
@@ -13,6 +13,25 @@
"REPLACE_COPY_AND_PASTE_BUTTONS" = "Replace 'Copy Settings' & 'Paste Settings' Buttons";
"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "Replaces the Buttons to 'Export Settings' and 'Import Settings'";
+"VIDEO_PLAYER" = "Video Player (Beta)";
+"VIDEO_PLAYER_DESC" = "Open a downloaded video in the Apple player";
+
+// Player Gestures
+"PLAYER_GESTURES_TOGGLE" = "Enable Player Gestures";
+"VOLUME" = "Volume";
+"BRIGHTNESS" = "Brightness";
+"SEEK" = "Seek";
+"DISABLED" = "Disabled";
+"DEADZONE" = "Deadzone";
+"DEADZONE_DESC" = "Minimum distance to move before a gesture is recognized";
+"SENSITIVITY" = "Sensitivity";
+"SENSITIVITY_DESC" = "Multiplier on volume and brightness gestures";
+"PLAYER_GESTURES_TITLE" = "Player Gestures";
+"PLAYER_GESTURES_DESC" = "Configure horizontal pan gestures for the player";
+"TOP_SECTION" = "Top Section";
+"MIDDLE_SECTION" = "Middle Section";
+"BOTTOM_SECTION" = "Bottom Section";
+
// Video player options
"VIDEO_PLAYER_OPTIONS" = "Tùy chọn trình phát video";
@@ -79,6 +98,9 @@
"HIDE_COLLAPSE_BUTTON" = "Hide Collapse Button";
"HIDE_COLLAPSE_BUTTON_DESC" = "Hides the Arrow Collapse Button that was shown in the Top Left of the Video Player.";
+"HIDE_SPEED_TOAST" = "Hide Speed Toast";
+"HIDE_SPEED_TOAST_DESC" = "Hide the 2X Speed popup when holding the player";
+
// Shorts controls overlay options
"SHORTS_CONTROLS_OVERLAY_OPTIONS" = "Tùy chọn lớp phủ điều khiển quần short";
diff --git a/lang/YTLitePlus.bundle/zh_TW.lproj/Localizable.strings b/lang/YTLitePlus.bundle/zh_TW.lproj/Localizable.strings
index f4d3dfa..aef5cf3 100644
--- a/lang/YTLitePlus.bundle/zh_TW.lproj/Localizable.strings
+++ b/lang/YTLitePlus.bundle/zh_TW.lproj/Localizable.strings
@@ -14,6 +14,25 @@
"REPLACE_COPY_AND_PASTE_BUTTONS" = "Replace 'Copy Settings' & 'Paste Settings' Buttons";
"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "Replaces the Buttons to 'Export Settings' and 'Import Settings'";
+"VIDEO_PLAYER" = "Video Player (Beta)";
+"VIDEO_PLAYER_DESC" = "Open a downloaded video in the Apple player";
+
+// Player Gestures
+"PLAYER_GESTURES_TOGGLE" = "Enable Player Gestures";
+"VOLUME" = "Volume";
+"BRIGHTNESS" = "Brightness";
+"SEEK" = "Seek";
+"DISABLED" = "Disabled";
+"DEADZONE" = "Deadzone";
+"DEADZONE_DESC" = "Minimum distance to move before a gesture is recognized";
+"SENSITIVITY" = "Sensitivity";
+"SENSITIVITY_DESC" = "Multiplier on volume and brightness gestures";
+"PLAYER_GESTURES_TITLE" = "Player Gestures";
+"PLAYER_GESTURES_DESC" = "Configure horizontal pan gestures for the player";
+"TOP_SECTION" = "Top Section";
+"MIDDLE_SECTION" = "Middle Section";
+"BOTTOM_SECTION" = "Bottom Section";
+
// Video controls overlay options
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "影片區覆蓋按鈕設定";
@@ -71,6 +90,9 @@
"HIDE_COLLAPSE_BUTTON" = "Hide Collapse Button";
"HIDE_COLLAPSE_BUTTON_DESC" = "Hides the Arrow Collapse Button that was shown in the Top Left of the Video Player.";
+"HIDE_SPEED_TOAST" = "Hide Speed Toast";
+"HIDE_SPEED_TOAST_DESC" = "Hide the 2X Speed popup when holding the player";
+
// App settings overlay options
"APP_SETTINGS_OVERLAY_OPTIONS" = "應用程式設定隱藏項目";