mirror of
https://github.com/libretro/RetroArch
synced 2025-02-04 21:40:02 +00:00
ios: Refactor browser code some.
This commit is contained in:
parent
192f7d56d7
commit
9ac77f65d1
@ -82,6 +82,7 @@
|
||||
96AFAFD416C1FBC0009DE44C /* input_common.c in Sources */ = {isa = PBXBuildFile; fileRef = 96AFAFC916C1FBC0009DE44C /* input_common.c */; };
|
||||
96C19C2216D2F3BA00FE8D5A /* RADirectoryFilterList.m in Sources */ = {isa = PBXBuildFile; fileRef = 96C19C2116D2F3BA00FE8D5A /* RADirectoryFilterList.m */; };
|
||||
96C19C2416D453BA00FE8D5A /* RADirectoryGrid.m in Sources */ = {isa = PBXBuildFile; fileRef = 96C19C2316D453BA00FE8D5A /* RADirectoryGrid.m */; };
|
||||
96C19C2916D5A56500FE8D5A /* browser.m in Sources */ = {isa = PBXBuildFile; fileRef = 96C19C2816D5A56400FE8D5A /* browser.m */; };
|
||||
96CF015016C2C0B700ABF9C9 /* overlay.c in Sources */ = {isa = PBXBuildFile; fileRef = 96AFAFCE16C1FBC0009DE44C /* overlay.c */; };
|
||||
96CF015C16C2F72900ABF9C9 /* ios_input.c in Sources */ = {isa = PBXBuildFile; fileRef = 96CF015B16C2F72900ABF9C9 /* ios_input.c */; };
|
||||
/* End PBXBuildFile section */
|
||||
@ -229,6 +230,7 @@
|
||||
96C19C2316D453BA00FE8D5A /* RADirectoryGrid.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RADirectoryGrid.m; sourceTree = "<group>"; };
|
||||
96C19C2516D455BE00FE8D5A /* browser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = browser.h; sourceTree = "<group>"; };
|
||||
96C19C2616D455BE00FE8D5A /* rarch_wrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rarch_wrapper.h; sourceTree = "<group>"; };
|
||||
96C19C2816D5A56400FE8D5A /* browser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = browser.m; sourceTree = "<group>"; };
|
||||
96CF015B16C2F72900ABF9C9 /* ios_input.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ios_input.c; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
@ -550,6 +552,7 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
96C19C2516D455BE00FE8D5A /* browser.h */,
|
||||
96C19C2816D5A56400FE8D5A /* browser.m */,
|
||||
96C19C2116D2F3BA00FE8D5A /* RADirectoryFilterList.m */,
|
||||
96C19C2316D453BA00FE8D5A /* RADirectoryGrid.m */,
|
||||
963F5AC416CC523B009BBD19 /* RADirectoryList.m */,
|
||||
@ -687,6 +690,7 @@
|
||||
96096DD816D1ABAF00BF4499 /* RAModuleInfoList.m in Sources */,
|
||||
96C19C2216D2F3BA00FE8D5A /* RADirectoryFilterList.m in Sources */,
|
||||
96C19C2416D453BA00FE8D5A /* RADirectoryGrid.m in Sources */,
|
||||
96C19C2916D5A56500FE8D5A /* browser.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -18,19 +18,9 @@
|
||||
|
||||
- (id)initWithPath:(NSString*)path filter:(NSRegularExpression*)regex
|
||||
{
|
||||
UICollectionViewFlowLayout* layout = [UICollectionViewFlowLayout new];
|
||||
layout.itemSize = CGSizeMake(175, 248);
|
||||
self = [super initWithCollectionViewLayout:layout];
|
||||
|
||||
if (path == nil)
|
||||
{
|
||||
if (ra_ios_is_directory(@"/var/mobile/RetroArchGames")) path = @"/var/mobile/RetroArchGames";
|
||||
else if (ra_ios_is_directory(@"/var/mobile")) path = @"/var/mobile";
|
||||
else path = @"/";
|
||||
}
|
||||
|
||||
_path = path;
|
||||
_path = path ? path : ra_ios_get_browser_root();
|
||||
|
||||
// Load template image
|
||||
NSString* templateName = [NSString stringWithFormat:@"%@/.coverart/template.png", _path];
|
||||
_templateImage = [UIImage imageWithContentsOfFile:templateName];
|
||||
|
||||
@ -40,29 +30,12 @@
|
||||
_templateImage = [RetroArch_iOS get].file_icon;
|
||||
}
|
||||
|
||||
_list = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:_path error:nil];
|
||||
_list = [_path stringsByAppendingPaths:_list];
|
||||
//
|
||||
UICollectionViewFlowLayout* layout = [UICollectionViewFlowLayout new];
|
||||
layout.itemSize = _templateImage.size;
|
||||
self = [super initWithCollectionViewLayout:layout];
|
||||
|
||||
if (regex)
|
||||
{
|
||||
_list = [_list filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^(id object, NSDictionary* bindings)
|
||||
{
|
||||
if (ra_ios_is_directory(object))
|
||||
return YES;
|
||||
|
||||
return (BOOL)([regex numberOfMatchesInString:[object lastPathComponent] options:0 range:NSMakeRange(0, [[object lastPathComponent] length])] != 0);
|
||||
}]];
|
||||
}
|
||||
|
||||
_list = [_list sortedArrayUsingComparator:^(id left, id right)
|
||||
{
|
||||
const BOOL left_is_dir = ra_ios_is_directory((NSString*)left);
|
||||
const BOOL right_is_dir = ra_ios_is_directory((NSString*)right);
|
||||
|
||||
return (left_is_dir != right_is_dir) ?
|
||||
(left_is_dir ? -1 : 1) :
|
||||
([left caseInsensitiveCompare:right]);
|
||||
}];
|
||||
_list = ra_ios_list_directory(_path, regex);
|
||||
|
||||
self.navigationItem.rightBarButtonItem = [RetroArch_iOS get].settings_button;
|
||||
[self setTitle: [_path lastPathComponent]];
|
||||
@ -88,13 +61,9 @@
|
||||
NSString* path = [_list objectAtIndex: indexPath.row];
|
||||
|
||||
if(ra_ios_is_directory(path))
|
||||
{
|
||||
[[RetroArch_iOS get] pushViewController:[RADirectoryList directoryListWithPath:path]];
|
||||
}
|
||||
else
|
||||
{
|
||||
[[RetroArch_iOS get] runGame:path];
|
||||
}
|
||||
}
|
||||
|
||||
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
|
||||
|
@ -8,18 +8,6 @@
|
||||
|
||||
#import "browser.h"
|
||||
|
||||
BOOL ra_ios_is_file(NSString* path)
|
||||
{
|
||||
return [[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:nil];
|
||||
}
|
||||
|
||||
BOOL ra_ios_is_directory(NSString* path)
|
||||
{
|
||||
BOOL result = NO;
|
||||
[[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&result];
|
||||
return result;
|
||||
}
|
||||
|
||||
static NSString* check_path(NSString* path)
|
||||
{
|
||||
if (path && !ra_ios_is_directory(path))
|
||||
@ -62,38 +50,8 @@ static NSString* check_path(NSString* path)
|
||||
{
|
||||
self = [super initWithStyle:UITableViewStylePlain];
|
||||
|
||||
if (path == nil)
|
||||
{
|
||||
if (ra_ios_is_directory(@"/var/mobile/RetroArchGames")) path = @"/var/mobile/RetroArchGames";
|
||||
else if (ra_ios_is_directory(@"/var/mobile")) path = @"/var/mobile";
|
||||
else path = @"/";
|
||||
}
|
||||
|
||||
_path = path;
|
||||
|
||||
_list = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:_path error:nil];
|
||||
_list = [_path stringsByAppendingPaths:_list];
|
||||
|
||||
if (regex)
|
||||
{
|
||||
_list = [_list filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^(id object, NSDictionary* bindings)
|
||||
{
|
||||
if (ra_ios_is_directory(object))
|
||||
return YES;
|
||||
|
||||
return (BOOL)([regex numberOfMatchesInString:[object lastPathComponent] options:0 range:NSMakeRange(0, [[object lastPathComponent] length])] != 0);
|
||||
}]];
|
||||
}
|
||||
|
||||
_list = [_list sortedArrayUsingComparator:^(id left, id right)
|
||||
{
|
||||
const BOOL left_is_dir = ra_ios_is_directory((NSString*)left);
|
||||
const BOOL right_is_dir = ra_ios_is_directory((NSString*)right);
|
||||
|
||||
return (left_is_dir != right_is_dir) ?
|
||||
(left_is_dir ? -1 : 1) :
|
||||
([left caseInsensitiveCompare:right]);
|
||||
}];
|
||||
_path = path ? path : ra_ios_get_browser_root();
|
||||
_list = ra_ios_list_directory(_path, regex);
|
||||
|
||||
self.navigationItem.rightBarButtonItem = [RetroArch_iOS get].settings_button;
|
||||
[self setTitle: [_path lastPathComponent]];
|
||||
|
@ -1,5 +1,7 @@
|
||||
extern BOOL ra_ios_is_directory(NSString* path);
|
||||
extern BOOL ra_ios_is_file(NSString* path);
|
||||
extern NSArray* ra_ios_list_directory(NSString* path, NSRegularExpression* regex);
|
||||
extern NSString* ra_ios_get_browser_root();
|
||||
|
||||
@interface RADirectoryGrid : UICollectionViewController
|
||||
- (id)initWithPath:(NSString*)path filter:(NSRegularExpression*)regex;
|
||||
|
47
ios/RetroArch/browser.m
Normal file
47
ios/RetroArch/browser.m
Normal file
@ -0,0 +1,47 @@
|
||||
BOOL ra_ios_is_file(NSString* path)
|
||||
{
|
||||
return [[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:nil];
|
||||
}
|
||||
|
||||
BOOL ra_ios_is_directory(NSString* path)
|
||||
{
|
||||
BOOL result = NO;
|
||||
[[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&result];
|
||||
return result;
|
||||
}
|
||||
|
||||
NSArray* ra_ios_list_directory(NSString* path, NSRegularExpression* regex)
|
||||
{
|
||||
NSArray* result = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];
|
||||
result = [path stringsByAppendingPaths:result];
|
||||
|
||||
if (regex)
|
||||
{
|
||||
result = [result filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^(id object, NSDictionary* bindings)
|
||||
{
|
||||
if (ra_ios_is_directory(object))
|
||||
return YES;
|
||||
|
||||
return (BOOL)([regex numberOfMatchesInString:[object lastPathComponent] options:0 range:NSMakeRange(0, [[object lastPathComponent] length])] != 0);
|
||||
}]];
|
||||
}
|
||||
|
||||
result = [result sortedArrayUsingComparator:^(id left, id right)
|
||||
{
|
||||
const BOOL left_is_dir = ra_ios_is_directory((NSString*)left);
|
||||
const BOOL right_is_dir = ra_ios_is_directory((NSString*)right);
|
||||
|
||||
return (left_is_dir != right_is_dir) ?
|
||||
(left_is_dir ? -1 : 1) :
|
||||
([left caseInsensitiveCompare:right]);
|
||||
}];
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
NSString* ra_ios_get_browser_root()
|
||||
{
|
||||
if (ra_ios_is_directory(@"/var/mobile/RetroArchGames")) return @"/var/mobile/RetroArchGames";
|
||||
else if (ra_ios_is_directory(@"/var/mobile")) return @"/var/mobile";
|
||||
else return @"/";
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user