|
@@ -17,20 +17,31 @@
|
|
#import "VLCAppDelegate.h"
|
|
#import "VLCAppDelegate.h"
|
|
#import "VLCPlaylistViewController.h"
|
|
#import "VLCPlaylistViewController.h"
|
|
#import "UINavigationController+Theme.h"
|
|
#import "UINavigationController+Theme.h"
|
|
|
|
+#import "WhiteRaccoon.h"
|
|
|
|
|
|
#define kVLCUPNPFileServer 0
|
|
#define kVLCUPNPFileServer 0
|
|
#define kVLCFTPServer 1
|
|
#define kVLCFTPServer 1
|
|
|
|
|
|
-@interface VLCLocalServerFolderListViewController () <UITableViewDataSource, UITableViewDelegate>
|
|
|
|
|
|
+@interface VLCLocalServerFolderListViewController () <UITableViewDataSource, UITableViewDelegate, WRRequestDelegate>
|
|
{
|
|
{
|
|
|
|
+ /* UI */
|
|
UIBarButtonItem *_backButton;
|
|
UIBarButtonItem *_backButton;
|
|
|
|
|
|
|
|
+ /* generic data storage */
|
|
NSString *_listTitle;
|
|
NSString *_listTitle;
|
|
NSMutableArray *_objectList;
|
|
NSMutableArray *_objectList;
|
|
NSUInteger _serverType;
|
|
NSUInteger _serverType;
|
|
|
|
|
|
|
|
+ /* UPNP specifics */
|
|
MediaServer1Device *_UPNPdevice;
|
|
MediaServer1Device *_UPNPdevice;
|
|
NSString *_UPNProotID;
|
|
NSString *_UPNProotID;
|
|
|
|
+
|
|
|
|
+ /* FTP specifics */
|
|
|
|
+ NSString *_ftpServerAddress;
|
|
|
|
+ NSString *_ftpServerUserName;
|
|
|
|
+ NSString *_ftpServerPassword;
|
|
|
|
+ NSString *_ftpServerPath;
|
|
|
|
+ WRRequestListDirectory *_listDirRequest;
|
|
}
|
|
}
|
|
|
|
|
|
@end
|
|
@end
|
|
@@ -55,8 +66,21 @@
|
|
_listTitle = header;
|
|
_listTitle = header;
|
|
_UPNProotID = rootID;
|
|
_UPNProotID = rootID;
|
|
_serverType = kVLCUPNPFileServer;
|
|
_serverType = kVLCUPNPFileServer;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return self;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+- (id)initWithFTPServer:(NSString *)serverAddress userName:(NSString *)username andPassword:(NSString *)password atPath:(NSString *)path
|
|
|
|
+{
|
|
|
|
+ self = [super init];
|
|
|
|
|
|
- _objectList = [[NSMutableArray alloc] init];
|
|
|
|
|
|
+ if (self) {
|
|
|
|
+ _ftpServerAddress = serverAddress;
|
|
|
|
+ _ftpServerUserName = username;
|
|
|
|
+ _ftpServerPassword = password;
|
|
|
|
+ _ftpServerPath = path;
|
|
|
|
+ _serverType = kVLCFTPServer;
|
|
}
|
|
}
|
|
|
|
|
|
return self;
|
|
return self;
|
|
@@ -66,6 +90,8 @@
|
|
{
|
|
{
|
|
[super viewDidLoad];
|
|
[super viewDidLoad];
|
|
|
|
|
|
|
|
+ _objectList = [[NSMutableArray alloc] init];
|
|
|
|
+
|
|
if (_serverType == kVLCUPNPFileServer) {
|
|
if (_serverType == kVLCUPNPFileServer) {
|
|
NSMutableString *outResult = [[NSMutableString alloc] init];
|
|
NSMutableString *outResult = [[NSMutableString alloc] init];
|
|
NSMutableString *outNumberReturned = [[NSMutableString alloc] init];
|
|
NSMutableString *outNumberReturned = [[NSMutableString alloc] init];
|
|
@@ -77,6 +103,12 @@
|
|
NSData *didl = [outResult dataUsingEncoding:NSUTF8StringEncoding];
|
|
NSData *didl = [outResult dataUsingEncoding:NSUTF8StringEncoding];
|
|
MediaServerBasicObjectParser *parser = [[MediaServerBasicObjectParser alloc] initWithMediaObjectArray:_objectList itemsOnly:NO];
|
|
MediaServerBasicObjectParser *parser = [[MediaServerBasicObjectParser alloc] initWithMediaObjectArray:_objectList itemsOnly:NO];
|
|
[parser parseFromData:didl];
|
|
[parser parseFromData:didl];
|
|
|
|
+ } else if (_serverType == kVLCFTPServer) {
|
|
|
|
+ if ([_ftpServerPath isEqualToString:@"/"])
|
|
|
|
+ _listTitle = _ftpServerAddress;
|
|
|
|
+ else
|
|
|
|
+ _listTitle = [_ftpServerPath lastPathComponent];
|
|
|
|
+ [self _listFTPDirectory];
|
|
}
|
|
}
|
|
|
|
|
|
self.tableView.separatorColor = [UIColor colorWithWhite:.122 alpha:1.];
|
|
self.tableView.separatorColor = [UIColor colorWithWhite:.122 alpha:1.];
|
|
@@ -124,6 +156,16 @@
|
|
[cell setIcon:[UIImage imageNamed:@"folder"]];
|
|
[cell setIcon:[UIImage imageNamed:@"folder"]];
|
|
}
|
|
}
|
|
[cell setTitle:[item title]];
|
|
[cell setTitle:[item title]];
|
|
|
|
+ } else if (_serverType == kVLCFTPServer) {
|
|
|
|
+ cell.title = [_objectList[indexPath.row] objectForKey:(id)kCFFTPResourceName];
|
|
|
|
+ if ([[_objectList[indexPath.row] objectForKey:(id)kCFFTPResourceType] intValue] == 4) {
|
|
|
|
+ cell.isDirectory = YES;
|
|
|
|
+ cell.icon = [UIImage imageNamed:@"folder"];
|
|
|
|
+ } else {
|
|
|
|
+ cell.isDirectory = NO;
|
|
|
|
+ cell.icon = [UIImage imageNamed:@"blank"];
|
|
|
|
+ cell.subtitle = [NSString stringWithFormat:@"%0.2f MB", [[_objectList[indexPath.row] objectForKey:(id)kCFFTPResourceType] intValue], (float)([[_objectList[indexPath.row] objectForKey:(id)kCFFTPResourceSize] intValue] / 1e6)];
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
return cell;
|
|
return cell;
|
|
@@ -167,7 +209,58 @@
|
|
[appDelegate.playlistViewController performSelector:@selector(openMovieFromURL:) withObject:itemURL afterDelay:kGHRevealSidebarDefaultAnimationDuration];
|
|
[appDelegate.playlistViewController performSelector:@selector(openMovieFromURL:) withObject:itemURL afterDelay:kGHRevealSidebarDefaultAnimationDuration];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ } else if (_serverType == kVLCFTPServer) {
|
|
|
|
+ if ([[_objectList[indexPath.row] objectForKey:(id)kCFFTPResourceType] intValue] == 4) {
|
|
|
|
+ NSString *newPath;
|
|
|
|
+ if ([_ftpServerPath hasSuffix:@"/"])
|
|
|
|
+ newPath = [NSString stringWithFormat:@"%@%@", _ftpServerPath, [_objectList[indexPath.row] objectForKey:(id)kCFFTPResourceName]];
|
|
|
|
+ else
|
|
|
|
+ newPath = [NSString stringWithFormat:@"%@/%@", _ftpServerPath, [_objectList[indexPath.row] objectForKey:(id)kCFFTPResourceName]];
|
|
|
|
+
|
|
|
|
+ VLCLocalServerFolderListViewController *targetViewController = [[VLCLocalServerFolderListViewController alloc] initWithFTPServer:_ftpServerAddress userName:_ftpServerUserName andPassword:_ftpServerPassword atPath:newPath];
|
|
|
|
+ [self.navigationController pushViewController:targetViewController animated:YES];
|
|
|
|
+ } else {
|
|
|
|
+ NSLog(@"user would like to fetch %@", [_objectList[indexPath.row] objectForKey:(id)kCFFTPResourceName]);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+#pragma mark - FTP specifics
|
|
|
|
+- (void)_listFTPDirectory
|
|
|
|
+{
|
|
|
|
+ if (_listDirRequest)
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ _listDirRequest = [[WRRequestListDirectory alloc] init];
|
|
|
|
+ _listDirRequest.delegate = self;
|
|
|
|
+ _listDirRequest.hostname = _ftpServerAddress;
|
|
|
|
+ _listDirRequest.username = _ftpServerUserName;
|
|
|
|
+ _listDirRequest.password = _ftpServerPassword;
|
|
|
|
+ _listDirRequest.path = _ftpServerPath;
|
|
|
|
+
|
|
|
|
+ [_listDirRequest start];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+- (void)requestCompleted:(WRRequest *)request
|
|
|
|
+{
|
|
|
|
+ if (request == _listDirRequest) {
|
|
|
|
+ NSMutableArray *filteredList = [[NSMutableArray alloc] init];
|
|
|
|
+ NSArray *rawList = [(WRRequestListDirectory*)request filesInfo];
|
|
|
|
+ NSUInteger count = rawList.count;
|
|
|
|
+
|
|
|
|
+ for (NSUInteger x = 0; x < count; x++) {
|
|
|
|
+ if (![[rawList[x] objectForKey:(id)kCFFTPResourceName] hasPrefix:@"."])
|
|
|
|
+ [filteredList addObject:rawList[x]];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ _objectList = [NSArray arrayWithArray:filteredList];
|
|
|
|
+ [self.tableView reloadData];
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+- (void)requestFailed:(WRRequest *)request
|
|
|
|
+{
|
|
|
|
+ APLog(@"request %@ failed with error %i message '%@'", request, request.error.errorCode, request.error.message);
|
|
|
|
+}
|
|
|
|
+
|
|
@end
|
|
@end
|