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 */; };
|
96AFAFD416C1FBC0009DE44C /* input_common.c in Sources */ = {isa = PBXBuildFile; fileRef = 96AFAFC916C1FBC0009DE44C /* input_common.c */; };
|
||||||
96C19C2216D2F3BA00FE8D5A /* RADirectoryFilterList.m in Sources */ = {isa = PBXBuildFile; fileRef = 96C19C2116D2F3BA00FE8D5A /* RADirectoryFilterList.m */; };
|
96C19C2216D2F3BA00FE8D5A /* RADirectoryFilterList.m in Sources */ = {isa = PBXBuildFile; fileRef = 96C19C2116D2F3BA00FE8D5A /* RADirectoryFilterList.m */; };
|
||||||
96C19C2416D453BA00FE8D5A /* RADirectoryGrid.m in Sources */ = {isa = PBXBuildFile; fileRef = 96C19C2316D453BA00FE8D5A /* RADirectoryGrid.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 */; };
|
96CF015016C2C0B700ABF9C9 /* overlay.c in Sources */ = {isa = PBXBuildFile; fileRef = 96AFAFCE16C1FBC0009DE44C /* overlay.c */; };
|
||||||
96CF015C16C2F72900ABF9C9 /* ios_input.c in Sources */ = {isa = PBXBuildFile; fileRef = 96CF015B16C2F72900ABF9C9 /* ios_input.c */; };
|
96CF015C16C2F72900ABF9C9 /* ios_input.c in Sources */ = {isa = PBXBuildFile; fileRef = 96CF015B16C2F72900ABF9C9 /* ios_input.c */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
@ -229,6 +230,7 @@
|
||||||
96C19C2316D453BA00FE8D5A /* RADirectoryGrid.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RADirectoryGrid.m; sourceTree = "<group>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
96CF015B16C2F72900ABF9C9 /* ios_input.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ios_input.c; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
|
@ -550,6 +552,7 @@
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
96C19C2516D455BE00FE8D5A /* browser.h */,
|
96C19C2516D455BE00FE8D5A /* browser.h */,
|
||||||
|
96C19C2816D5A56400FE8D5A /* browser.m */,
|
||||||
96C19C2116D2F3BA00FE8D5A /* RADirectoryFilterList.m */,
|
96C19C2116D2F3BA00FE8D5A /* RADirectoryFilterList.m */,
|
||||||
96C19C2316D453BA00FE8D5A /* RADirectoryGrid.m */,
|
96C19C2316D453BA00FE8D5A /* RADirectoryGrid.m */,
|
||||||
963F5AC416CC523B009BBD19 /* RADirectoryList.m */,
|
963F5AC416CC523B009BBD19 /* RADirectoryList.m */,
|
||||||
|
@ -687,6 +690,7 @@
|
||||||
96096DD816D1ABAF00BF4499 /* RAModuleInfoList.m in Sources */,
|
96096DD816D1ABAF00BF4499 /* RAModuleInfoList.m in Sources */,
|
||||||
96C19C2216D2F3BA00FE8D5A /* RADirectoryFilterList.m in Sources */,
|
96C19C2216D2F3BA00FE8D5A /* RADirectoryFilterList.m in Sources */,
|
||||||
96C19C2416D453BA00FE8D5A /* RADirectoryGrid.m in Sources */,
|
96C19C2416D453BA00FE8D5A /* RADirectoryGrid.m in Sources */,
|
||||||
|
96C19C2916D5A56500FE8D5A /* browser.m in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
|
|
@ -18,19 +18,9 @@
|
||||||
|
|
||||||
- (id)initWithPath:(NSString*)path filter:(NSRegularExpression*)regex
|
- (id)initWithPath:(NSString*)path filter:(NSRegularExpression*)regex
|
||||||
{
|
{
|
||||||
UICollectionViewFlowLayout* layout = [UICollectionViewFlowLayout new];
|
_path = path ? path : ra_ios_get_browser_root();
|
||||||
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;
|
|
||||||
|
|
||||||
|
// Load template image
|
||||||
NSString* templateName = [NSString stringWithFormat:@"%@/.coverart/template.png", _path];
|
NSString* templateName = [NSString stringWithFormat:@"%@/.coverart/template.png", _path];
|
||||||
_templateImage = [UIImage imageWithContentsOfFile:templateName];
|
_templateImage = [UIImage imageWithContentsOfFile:templateName];
|
||||||
|
|
||||||
|
@ -40,29 +30,12 @@
|
||||||
_templateImage = [RetroArch_iOS get].file_icon;
|
_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;
|
||||||
if (regex)
|
self = [super initWithCollectionViewLayout:layout];
|
||||||
{
|
|
||||||
_list = [_list filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^(id object, NSDictionary* bindings)
|
_list = ra_ios_list_directory(_path, regex);
|
||||||
{
|
|
||||||
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]);
|
|
||||||
}];
|
|
||||||
|
|
||||||
self.navigationItem.rightBarButtonItem = [RetroArch_iOS get].settings_button;
|
self.navigationItem.rightBarButtonItem = [RetroArch_iOS get].settings_button;
|
||||||
[self setTitle: [_path lastPathComponent]];
|
[self setTitle: [_path lastPathComponent]];
|
||||||
|
@ -88,13 +61,9 @@
|
||||||
NSString* path = [_list objectAtIndex: indexPath.row];
|
NSString* path = [_list objectAtIndex: indexPath.row];
|
||||||
|
|
||||||
if(ra_ios_is_directory(path))
|
if(ra_ios_is_directory(path))
|
||||||
{
|
|
||||||
[[RetroArch_iOS get] pushViewController:[RADirectoryList directoryListWithPath:path]];
|
[[RetroArch_iOS get] pushViewController:[RADirectoryList directoryListWithPath:path]];
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
[[RetroArch_iOS get] runGame:path];
|
[[RetroArch_iOS get] runGame:path];
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
|
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
|
||||||
|
|
|
@ -8,18 +8,6 @@
|
||||||
|
|
||||||
#import "browser.h"
|
#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)
|
static NSString* check_path(NSString* path)
|
||||||
{
|
{
|
||||||
if (path && !ra_ios_is_directory(path))
|
if (path && !ra_ios_is_directory(path))
|
||||||
|
@ -62,38 +50,8 @@ static NSString* check_path(NSString* path)
|
||||||
{
|
{
|
||||||
self = [super initWithStyle:UITableViewStylePlain];
|
self = [super initWithStyle:UITableViewStylePlain];
|
||||||
|
|
||||||
if (path == nil)
|
_path = path ? path : ra_ios_get_browser_root();
|
||||||
{
|
_list = ra_ios_list_directory(_path, regex);
|
||||||
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]);
|
|
||||||
}];
|
|
||||||
|
|
||||||
self.navigationItem.rightBarButtonItem = [RetroArch_iOS get].settings_button;
|
self.navigationItem.rightBarButtonItem = [RetroArch_iOS get].settings_button;
|
||||||
[self setTitle: [_path lastPathComponent]];
|
[self setTitle: [_path lastPathComponent]];
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
extern BOOL ra_ios_is_directory(NSString* path);
|
extern BOOL ra_ios_is_directory(NSString* path);
|
||||||
extern BOOL ra_ios_is_file(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
|
@interface RADirectoryGrid : UICollectionViewController
|
||||||
- (id)initWithPath:(NSString*)path filter:(NSRegularExpression*)regex;
|
- (id)initWithPath:(NSString*)path filter:(NSRegularExpression*)regex;
|
||||||
|
|
|
@ -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…
Reference in New Issue