ios: Refactor browser code some.

This commit is contained in:
meancoot 2013-02-20 19:45:51 -05:00
parent 192f7d56d7
commit 9ac77f65d1
5 changed files with 63 additions and 83 deletions

View File

@ -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;
};

View File

@ -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];
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]);
}];
//
UICollectionViewFlowLayout* layout = [UICollectionViewFlowLayout new];
layout.itemSize = _templateImage.size;
self = [super initWithCollectionViewLayout:layout];
_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

View File

@ -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]];

View File

@ -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
View 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 @"/";
}