mirror of
				https://github.com/SoPat712/YTLitePlus.git
				synced 2025-10-30 20:34:04 -04:00 
			
		
		
		
	added files via upload
This commit is contained in:
		
							
								
								
									
										105
									
								
								Tweaks/FLEX/GlobalStateExplorers/Globals/FLEXGlobalsEntry.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								Tweaks/FLEX/GlobalStateExplorers/Globals/FLEXGlobalsEntry.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,105 @@ | ||||
| // | ||||
| //  FLEXGlobalsEntry.h | ||||
| //  FLEX | ||||
| // | ||||
| //  Created by Javier Soto on 7/26/14. | ||||
| //  Copyright (c) 2020 FLEX Team. All rights reserved. | ||||
| // | ||||
|  | ||||
| #import <UIKit/UIKit.h> | ||||
|  | ||||
| NS_ASSUME_NONNULL_BEGIN | ||||
|  | ||||
| typedef NS_ENUM(NSUInteger, FLEXGlobalsRow) { | ||||
|     FLEXGlobalsRowProcessInfo, | ||||
|     FLEXGlobalsRowNetworkHistory, | ||||
|     FLEXGlobalsRowSystemLog, | ||||
|     FLEXGlobalsRowLiveObjects, | ||||
|     FLEXGlobalsRowAddressInspector, | ||||
|     FLEXGlobalsRowCookies, | ||||
|     FLEXGlobalsRowBrowseRuntime, | ||||
|     FLEXGlobalsRowAppKeychainItems, | ||||
|     FLEXGlobalsRowAppDelegate, | ||||
|     FLEXGlobalsRowRootViewController, | ||||
|     FLEXGlobalsRowUserDefaults, | ||||
|     FLEXGlobalsRowMainBundle, | ||||
|     FLEXGlobalsRowBrowseBundle, | ||||
|     FLEXGlobalsRowBrowseContainer, | ||||
|     FLEXGlobalsRowApplication, | ||||
|     FLEXGlobalsRowKeyWindow, | ||||
|     FLEXGlobalsRowMainScreen, | ||||
|     FLEXGlobalsRowCurrentDevice, | ||||
|     FLEXGlobalsRowPasteboard, | ||||
|     FLEXGlobalsRowURLSession, | ||||
|     FLEXGlobalsRowURLCache, | ||||
|     FLEXGlobalsRowNotificationCenter, | ||||
|     FLEXGlobalsRowMenuController, | ||||
|     FLEXGlobalsRowFileManager, | ||||
|     FLEXGlobalsRowTimeZone, | ||||
|     FLEXGlobalsRowLocale, | ||||
|     FLEXGlobalsRowCalendar, | ||||
|     FLEXGlobalsRowMainRunLoop, | ||||
|     FLEXGlobalsRowMainThread, | ||||
|     FLEXGlobalsRowOperationQueue, | ||||
|     FLEXGlobalsRowCount | ||||
| }; | ||||
|  | ||||
| typedef NSString * _Nonnull (^FLEXGlobalsEntryNameFuture)(void); | ||||
| /// Simply return a view controller to be pushed on the navigation stack | ||||
| typedef UIViewController * _Nullable (^FLEXGlobalsEntryViewControllerFuture)(void); | ||||
| /// Do something like present an alert, then use the host | ||||
| /// view controller to present or push another view controller. | ||||
| typedef void (^FLEXGlobalsEntryRowAction)(__kindof UITableViewController * _Nonnull host); | ||||
|  | ||||
| /// For view controllers to conform to to indicate they support being used | ||||
| /// in the globals table view controller. These methods help create concrete entries. | ||||
| /// | ||||
| /// Previously, the concrete entries relied on "futures" for the view controller and title. | ||||
| /// With this protocol, the conforming class itself can act as a future, since the methods | ||||
| /// will not be invoked until the title and view controller / row action are needed. | ||||
| /// | ||||
| /// Entries can implement \c globalsEntryViewController: to unconditionally provide a | ||||
| /// view controller, or \c globalsEntryRowAction: to conditionally provide one and | ||||
| /// perform some action (such as present an alert) if no view controller is available, | ||||
| /// or both if there is a mix of rows where some are guaranteed to work and some are not. | ||||
| /// Where both are implemented, \c globalsEntryRowAction: takes precedence; if it returns | ||||
| /// an action for the requested row, that will be used instead of \c globalsEntryViewController: | ||||
| @protocol FLEXGlobalsEntry <NSObject> | ||||
|  | ||||
| + (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row; | ||||
|  | ||||
| // Must respond to at least one of the below. | ||||
| // globalsEntryRowAction: takes precedence if both are implemented. | ||||
| @optional | ||||
|  | ||||
| + (nullable UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row; | ||||
| + (nullable FLEXGlobalsEntryRowAction)globalsEntryRowAction:(FLEXGlobalsRow)row; | ||||
|  | ||||
| @end | ||||
|  | ||||
| @interface FLEXGlobalsEntry : NSObject | ||||
|  | ||||
| @property (nonatomic, readonly, nonnull)  FLEXGlobalsEntryNameFuture entryNameFuture; | ||||
| @property (nonatomic, readonly, nullable) FLEXGlobalsEntryViewControllerFuture viewControllerFuture; | ||||
| @property (nonatomic, readonly, nullable) FLEXGlobalsEntryRowAction rowAction; | ||||
|  | ||||
| + (instancetype)entryWithEntry:(Class<FLEXGlobalsEntry>)entry row:(FLEXGlobalsRow)row; | ||||
|  | ||||
| + (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture | ||||
|                viewControllerFuture:(FLEXGlobalsEntryViewControllerFuture)viewControllerFuture; | ||||
|  | ||||
| + (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture | ||||
|                              action:(FLEXGlobalsEntryRowAction)rowSelectedAction; | ||||
|  | ||||
| @end | ||||
|  | ||||
|  | ||||
| @interface NSObject (FLEXGlobalsEntry) | ||||
|  | ||||
| /// @return The result of passing self to +[FLEXGlobalsEntry entryWithEntry:] | ||||
| /// if the class conforms to FLEXGlobalsEntry, else, nil. | ||||
| + (nullable FLEXGlobalsEntry *)flex_concreteGlobalsEntry:(FLEXGlobalsRow)row; | ||||
|  | ||||
| @end | ||||
|  | ||||
| NS_ASSUME_NONNULL_END | ||||
							
								
								
									
										86
									
								
								Tweaks/FLEX/GlobalStateExplorers/Globals/FLEXGlobalsEntry.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								Tweaks/FLEX/GlobalStateExplorers/Globals/FLEXGlobalsEntry.m
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,86 @@ | ||||
| // | ||||
| //  FLEXGlobalsEntry.m | ||||
| //  FLEX | ||||
| // | ||||
| //  Created by Javier Soto on 7/26/14. | ||||
| //  Copyright (c) 2020 FLEX Team. All rights reserved. | ||||
| // | ||||
|  | ||||
| #import "FLEXGlobalsEntry.h" | ||||
|  | ||||
| @implementation FLEXGlobalsEntry | ||||
|  | ||||
| + (instancetype)entryWithEntry:(Class<FLEXGlobalsEntry>)cls row:(FLEXGlobalsRow)row { | ||||
|     BOOL providesVCs = [cls respondsToSelector:@selector(globalsEntryViewController:)]; | ||||
|     BOOL providesActions = [cls respondsToSelector:@selector(globalsEntryRowAction:)]; | ||||
|     NSParameterAssert(cls); | ||||
|     NSParameterAssert(providesVCs || providesActions); | ||||
|  | ||||
|     FLEXGlobalsEntry *entry = [self new]; | ||||
|     entry->_entryNameFuture = ^{ return [cls globalsEntryTitle:row]; }; | ||||
|  | ||||
|     if (providesVCs) { | ||||
|         id action = providesActions ? [cls globalsEntryRowAction:row] : nil; | ||||
|         if (action) { | ||||
|             entry->_rowAction = action; | ||||
|         } else { | ||||
|             entry->_viewControllerFuture = ^{ return [cls globalsEntryViewController:row]; }; | ||||
|         } | ||||
|     } else { | ||||
|         entry->_rowAction = [cls globalsEntryRowAction:row]; | ||||
|     } | ||||
|  | ||||
|     return entry; | ||||
| } | ||||
|  | ||||
| + (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture | ||||
|                viewControllerFuture:(FLEXGlobalsEntryViewControllerFuture)viewControllerFuture { | ||||
|     NSParameterAssert(nameFuture); | ||||
|     NSParameterAssert(viewControllerFuture); | ||||
|  | ||||
|     FLEXGlobalsEntry *entry = [self new]; | ||||
|     entry->_entryNameFuture = [nameFuture copy]; | ||||
|     entry->_viewControllerFuture = [viewControllerFuture copy]; | ||||
|  | ||||
|     return entry; | ||||
| } | ||||
|  | ||||
| + (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture | ||||
|                              action:(FLEXGlobalsEntryRowAction)rowSelectedAction { | ||||
|     NSParameterAssert(nameFuture); | ||||
|     NSParameterAssert(rowSelectedAction); | ||||
|  | ||||
|     FLEXGlobalsEntry *entry = [self new]; | ||||
|     entry->_entryNameFuture = [nameFuture copy]; | ||||
|     entry->_rowAction = [rowSelectedAction copy]; | ||||
|  | ||||
|     return entry; | ||||
| } | ||||
|  | ||||
| @end | ||||
|  | ||||
| @interface FLEXGlobalsEntry (Debugging) | ||||
| @property (nonatomic, readonly) NSString *name; | ||||
| @end | ||||
|  | ||||
| @implementation FLEXGlobalsEntry (Debugging) | ||||
|  | ||||
| - (NSString *)name { | ||||
|     return self.entryNameFuture(); | ||||
| } | ||||
|  | ||||
| @end | ||||
|  | ||||
| #pragma mark - flex_concreteGlobalsEntry | ||||
|  | ||||
| @implementation NSObject (FLEXGlobalsEntry) | ||||
|  | ||||
| + (FLEXGlobalsEntry *)flex_concreteGlobalsEntry:(FLEXGlobalsRow)row { | ||||
|     if ([self conformsToProtocol:@protocol(FLEXGlobalsEntry)]) { | ||||
|         return [FLEXGlobalsEntry entryWithEntry:self row:row]; | ||||
|     } | ||||
|  | ||||
|     return nil; | ||||
| } | ||||
|  | ||||
| @end | ||||
| @@ -0,0 +1,20 @@ | ||||
| // | ||||
| //  FLEXGlobalsSection.h | ||||
| //  FLEX | ||||
| // | ||||
| //  Created by Tanner Bennett on 7/11/19. | ||||
| //  Copyright © 2020 FLEX Team. All rights reserved. | ||||
| // | ||||
|  | ||||
| #import "FLEXTableViewSection.h" | ||||
| #import "FLEXGlobalsEntry.h" | ||||
|  | ||||
| NS_ASSUME_NONNULL_BEGIN | ||||
|  | ||||
| @interface FLEXGlobalsSection : FLEXTableViewSection | ||||
|  | ||||
| + (instancetype)title:(NSString *)title rows:(NSArray<FLEXGlobalsEntry *> *)rows; | ||||
|  | ||||
| @end | ||||
|  | ||||
| NS_ASSUME_NONNULL_END | ||||
| @@ -0,0 +1,86 @@ | ||||
| // | ||||
| //  FLEXGlobalsSection.m | ||||
| //  FLEX | ||||
| // | ||||
| //  Created by Tanner Bennett on 7/11/19. | ||||
| //  Copyright © 2020 FLEX Team. All rights reserved. | ||||
| // | ||||
|  | ||||
| #import "FLEXGlobalsSection.h" | ||||
| #import "NSArray+FLEX.h" | ||||
| #import "UIFont+FLEX.h" | ||||
|  | ||||
| @interface FLEXGlobalsSection () | ||||
| /// Filtered rows | ||||
| @property (nonatomic) NSArray<FLEXGlobalsEntry *> *rows; | ||||
| /// Unfiltered rows | ||||
| @property (nonatomic) NSArray<FLEXGlobalsEntry *> *allRows; | ||||
| @end | ||||
| @implementation FLEXGlobalsSection | ||||
|  | ||||
| #pragma mark - Initialization | ||||
|  | ||||
| + (instancetype)title:(NSString *)title rows:(NSArray<FLEXGlobalsEntry *> *)rows { | ||||
|     FLEXGlobalsSection *s = [self new]; | ||||
|     s->_title = title; | ||||
|     s.allRows = rows; | ||||
|  | ||||
|     return s; | ||||
| } | ||||
|  | ||||
| - (void)setAllRows:(NSArray<FLEXGlobalsEntry *> *)allRows { | ||||
|     _allRows = allRows.copy; | ||||
|     [self reloadData]; | ||||
| } | ||||
|  | ||||
| #pragma mark - Overrides | ||||
|  | ||||
| - (NSInteger)numberOfRows { | ||||
|     return self.rows.count; | ||||
| } | ||||
|  | ||||
| - (void)setFilterText:(NSString *)filterText { | ||||
|     super.filterText = filterText; | ||||
|     [self reloadData]; | ||||
| } | ||||
|  | ||||
| - (void)reloadData { | ||||
|     NSString *filterText = self.filterText; | ||||
|      | ||||
|     if (filterText.length) { | ||||
|         self.rows = [self.allRows flex_filtered:^BOOL(FLEXGlobalsEntry *entry, NSUInteger idx) { | ||||
|             return [entry.entryNameFuture() localizedCaseInsensitiveContainsString:filterText]; | ||||
|         }]; | ||||
|     } else { | ||||
|         self.rows = self.allRows; | ||||
|     } | ||||
| } | ||||
|  | ||||
| - (BOOL)canSelectRow:(NSInteger)row { | ||||
|     return YES; | ||||
| } | ||||
|  | ||||
| - (void (^)(__kindof UIViewController *))didSelectRowAction:(NSInteger)row { | ||||
|     return (id)self.rows[row].rowAction; | ||||
| } | ||||
|  | ||||
| - (UIViewController *)viewControllerToPushForRow:(NSInteger)row { | ||||
|     return self.rows[row].viewControllerFuture ? self.rows[row].viewControllerFuture() : nil; | ||||
| } | ||||
|  | ||||
| - (void)configureCell:(__kindof UITableViewCell *)cell forRow:(NSInteger)row { | ||||
|     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; | ||||
|     cell.textLabel.font = UIFont.flex_defaultTableCellFont; | ||||
|     cell.textLabel.text = self.rows[row].entryNameFuture(); | ||||
| } | ||||
|  | ||||
| @end | ||||
|  | ||||
|  | ||||
| @implementation FLEXGlobalsSection (Subscripting) | ||||
|  | ||||
| - (id)objectAtIndexedSubscript:(NSUInteger)idx { | ||||
|     return self.rows[idx]; | ||||
| } | ||||
|  | ||||
| @end | ||||
| @@ -0,0 +1,28 @@ | ||||
| // | ||||
| //  FLEXGlobalsViewController.h | ||||
| //  Flipboard | ||||
| // | ||||
| //  Created by Ryan Olson on 2014-05-03. | ||||
| //  Copyright (c) 2020 FLEX Team. All rights reserved. | ||||
| // | ||||
|  | ||||
| #import "FLEXFilteringTableViewController.h" | ||||
| @protocol FLEXGlobalsTableViewControllerDelegate; | ||||
|  | ||||
| typedef NS_ENUM(NSUInteger, FLEXGlobalsSectionKind) { | ||||
|     FLEXGlobalsSectionCustom, | ||||
|     /// NSProcessInfo, Network history, system log, | ||||
|     /// heap, address explorer, libraries, app classes | ||||
|     FLEXGlobalsSectionProcessAndEvents, | ||||
|     /// Browse container, browse bundle, NSBundle.main, | ||||
|     /// NSUserDefaults.standard, UIApplication, | ||||
|     /// app delegate, key window, root VC, cookies | ||||
|     FLEXGlobalsSectionAppShortcuts, | ||||
|     /// UIPasteBoard.general, UIScreen, UIDevice | ||||
|     FLEXGlobalsSectionMisc, | ||||
|     FLEXGlobalsSectionCount | ||||
| }; | ||||
|  | ||||
| @interface FLEXGlobalsViewController : FLEXFilteringTableViewController | ||||
|  | ||||
| @end | ||||
| @@ -0,0 +1,200 @@ | ||||
| // | ||||
| //  FLEXGlobalsViewController.m | ||||
| //  Flipboard | ||||
| // | ||||
| //  Created by Ryan Olson on 2014-05-03. | ||||
| //  Copyright (c) 2020 FLEX Team. All rights reserved. | ||||
| // | ||||
|  | ||||
| #import "FLEXGlobalsViewController.h" | ||||
| #import "FLEXUtility.h" | ||||
| #import "FLEXRuntimeUtility.h" | ||||
| #import "FLEXObjcRuntimeViewController.h" | ||||
| #import "FLEXKeychainViewController.h" | ||||
| #import "FLEXObjectExplorerViewController.h" | ||||
| #import "FLEXObjectExplorerFactory.h" | ||||
| #import "FLEXLiveObjectsController.h" | ||||
| #import "FLEXFileBrowserController.h" | ||||
| #import "FLEXCookiesViewController.h" | ||||
| #import "FLEXGlobalsEntry.h" | ||||
| #import "FLEXManager+Private.h" | ||||
| #import "FLEXSystemLogViewController.h" | ||||
| #import "FLEXNetworkMITMViewController.h" | ||||
| #import "FLEXAddressExplorerCoordinator.h" | ||||
| #import "FLEXGlobalsSection.h" | ||||
| #import "UIBarButtonItem+FLEX.h" | ||||
|  | ||||
| @interface FLEXGlobalsViewController () | ||||
| /// Only displayed sections of the table view; empty sections are purged from this array. | ||||
| @property (nonatomic) NSArray<FLEXGlobalsSection *> *sections; | ||||
| /// Every section in the table view, regardless of whether or not a section is empty. | ||||
| @property (nonatomic, readonly) NSArray<FLEXGlobalsSection *> *allSections; | ||||
| @property (nonatomic, readonly) BOOL manuallyDeselectOnAppear; | ||||
| @end | ||||
|  | ||||
| @implementation FLEXGlobalsViewController | ||||
| @dynamic sections, allSections; | ||||
|  | ||||
| #pragma mark - Initialization | ||||
|  | ||||
| + (NSString *)globalsTitleForSection:(FLEXGlobalsSectionKind)section { | ||||
|     switch (section) { | ||||
|         case FLEXGlobalsSectionCustom: | ||||
|             return @"Custom Additions"; | ||||
|         case FLEXGlobalsSectionProcessAndEvents: | ||||
|             return @"Process and Events"; | ||||
|         case FLEXGlobalsSectionAppShortcuts: | ||||
|             return @"App Shortcuts"; | ||||
|         case FLEXGlobalsSectionMisc: | ||||
|             return @"Miscellaneous"; | ||||
|  | ||||
|         default: | ||||
|             @throw NSInternalInconsistencyException; | ||||
|     } | ||||
| } | ||||
|  | ||||
| + (FLEXGlobalsEntry *)globalsEntryForRow:(FLEXGlobalsRow)row { | ||||
|     switch (row) { | ||||
|         case FLEXGlobalsRowAppKeychainItems: | ||||
|             return [FLEXKeychainViewController flex_concreteGlobalsEntry:row]; | ||||
|         case FLEXGlobalsRowAddressInspector: | ||||
|             return [FLEXAddressExplorerCoordinator flex_concreteGlobalsEntry:row]; | ||||
|         case FLEXGlobalsRowBrowseRuntime: | ||||
|             return [FLEXObjcRuntimeViewController flex_concreteGlobalsEntry:row]; | ||||
|         case FLEXGlobalsRowLiveObjects: | ||||
|             return [FLEXLiveObjectsController flex_concreteGlobalsEntry:row]; | ||||
|         case FLEXGlobalsRowCookies: | ||||
|             return [FLEXCookiesViewController flex_concreteGlobalsEntry:row]; | ||||
|         case FLEXGlobalsRowBrowseBundle: | ||||
|         case FLEXGlobalsRowBrowseContainer: | ||||
|             return [FLEXFileBrowserController flex_concreteGlobalsEntry:row]; | ||||
|         case FLEXGlobalsRowSystemLog: | ||||
|             return [FLEXSystemLogViewController flex_concreteGlobalsEntry:row]; | ||||
|         case FLEXGlobalsRowNetworkHistory: | ||||
|             return [FLEXNetworkMITMViewController flex_concreteGlobalsEntry:row]; | ||||
|         case FLEXGlobalsRowKeyWindow: | ||||
|         case FLEXGlobalsRowRootViewController: | ||||
|         case FLEXGlobalsRowProcessInfo: | ||||
|         case FLEXGlobalsRowAppDelegate: | ||||
|         case FLEXGlobalsRowUserDefaults: | ||||
|         case FLEXGlobalsRowMainBundle: | ||||
|         case FLEXGlobalsRowApplication: | ||||
|         case FLEXGlobalsRowMainScreen: | ||||
|         case FLEXGlobalsRowCurrentDevice: | ||||
|         case FLEXGlobalsRowPasteboard: | ||||
|         case FLEXGlobalsRowURLSession: | ||||
|         case FLEXGlobalsRowURLCache: | ||||
|         case FLEXGlobalsRowNotificationCenter: | ||||
|         case FLEXGlobalsRowMenuController: | ||||
|         case FLEXGlobalsRowFileManager: | ||||
|         case FLEXGlobalsRowTimeZone: | ||||
|         case FLEXGlobalsRowLocale: | ||||
|         case FLEXGlobalsRowCalendar: | ||||
|         case FLEXGlobalsRowMainRunLoop: | ||||
|         case FLEXGlobalsRowMainThread: | ||||
|         case FLEXGlobalsRowOperationQueue: | ||||
|             return [FLEXObjectExplorerFactory flex_concreteGlobalsEntry:row]; | ||||
|  | ||||
|         default: | ||||
|             @throw [NSException | ||||
|                 exceptionWithName:NSInternalInconsistencyException | ||||
|                 reason:@"Missing globals case in switch" userInfo:nil | ||||
|             ]; | ||||
|     } | ||||
| } | ||||
|  | ||||
| + (NSArray<FLEXGlobalsSection *> *)defaultGlobalSections { | ||||
|     static NSMutableArray<FLEXGlobalsSection *> *sections = nil; | ||||
|     static dispatch_once_t onceToken; | ||||
|     dispatch_once(&onceToken, ^{ | ||||
|         NSDictionary<NSNumber *, NSArray<FLEXGlobalsEntry *> *> *rowsBySection = @{ | ||||
|             @(FLEXGlobalsSectionProcessAndEvents) : @[ | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowNetworkHistory], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowSystemLog], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowProcessInfo], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowLiveObjects], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowAddressInspector], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowBrowseRuntime], | ||||
|             ], | ||||
|             @(FLEXGlobalsSectionAppShortcuts) : @[ | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowBrowseBundle], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowBrowseContainer], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowMainBundle], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowUserDefaults], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowAppKeychainItems], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowApplication], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowAppDelegate], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowKeyWindow], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowRootViewController], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowCookies], | ||||
|             ], | ||||
|             @(FLEXGlobalsSectionMisc) : @[ | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowPasteboard], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowMainScreen], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowCurrentDevice], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowURLSession], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowURLCache], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowNotificationCenter], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowMenuController], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowFileManager], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowTimeZone], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowLocale], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowCalendar], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowMainRunLoop], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowMainThread], | ||||
|                 [self globalsEntryForRow:FLEXGlobalsRowOperationQueue], | ||||
|             ] | ||||
|         }; | ||||
|  | ||||
|         sections = [NSMutableArray array]; | ||||
|         for (FLEXGlobalsSectionKind i = FLEXGlobalsSectionCustom + 1; i < FLEXGlobalsSectionCount; ++i) { | ||||
|             NSString *title = [self globalsTitleForSection:i]; | ||||
|             [sections addObject:[FLEXGlobalsSection title:title rows:rowsBySection[@(i)]]]; | ||||
|         } | ||||
|     }); | ||||
|      | ||||
|     return sections; | ||||
| } | ||||
|  | ||||
|  | ||||
| #pragma mark - Overrides | ||||
|  | ||||
| - (void)viewDidLoad { | ||||
|     [super viewDidLoad]; | ||||
|  | ||||
|     self.title = @"💪  FLEX"; | ||||
|     self.showsSearchBar = YES; | ||||
|     self.searchBarDebounceInterval = kFLEXDebounceInstant; | ||||
|     self.navigationItem.backBarButtonItem = [UIBarButtonItem flex_backItemWithTitle:@"Back"]; | ||||
|      | ||||
|     _manuallyDeselectOnAppear = NSProcessInfo.processInfo.operatingSystemVersion.majorVersion < 10; | ||||
| } | ||||
|  | ||||
| - (void)viewWillAppear:(BOOL)animated { | ||||
|     [super viewWillAppear:animated]; | ||||
|      | ||||
|     [self disableToolbar]; | ||||
|      | ||||
|     if (self.manuallyDeselectOnAppear) { | ||||
|         [self.tableView deselectRowAtIndexPath:self.tableView.indexPathForSelectedRow animated:YES]; | ||||
|     } | ||||
| } | ||||
|  | ||||
| - (NSArray<FLEXGlobalsSection *> *)makeSections { | ||||
|     NSMutableArray<FLEXGlobalsSection *> *sections = [NSMutableArray array]; | ||||
|     // Do we have custom sections to add? | ||||
|     if (FLEXManager.sharedManager.userGlobalEntries.count) { | ||||
|         NSString *title = [[self class] globalsTitleForSection:FLEXGlobalsSectionCustom]; | ||||
|         FLEXGlobalsSection *custom = [FLEXGlobalsSection | ||||
|             title:title | ||||
|             rows:FLEXManager.sharedManager.userGlobalEntries | ||||
|         ]; | ||||
|         [sections addObject:custom]; | ||||
|     } | ||||
|  | ||||
|     [sections addObjectsFromArray:[self.class defaultGlobalSections]]; | ||||
|  | ||||
|     return sections; | ||||
| } | ||||
|  | ||||
| @end | ||||
		Reference in New Issue
	
	Block a user
	 Balackburn
					Balackburn