NewsBlur/media/iphone/Classes/MoveSiteViewController.m

271 lines
8.7 KiB
Mathematica
Raw Normal View History

//
// MoveSiteViewController.m
// NewsBlur
//
// Created by Samuel Clay on 12/2/11.
// Copyright 2011 NewsBlur. All rights reserved.
//
#import "MoveSiteViewController.h"
#import "NewsBlurAppDelegate.h"
#import "ASIHTTPRequest.h"
#import "ASIFormDataRequest.h"
#import "JSON.h"
#import "StringHelper.h"
@implementation MoveSiteViewController
@synthesize appDelegate;
@synthesize toFolderInput;
@synthesize fromFolderInput;
@synthesize titleLabel;
@synthesize moveButton;
@synthesize cancelButton;
@synthesize folderPicker;
@synthesize navBar;
@synthesize activityIndicator;
@synthesize movingLabel;
@synthesize errorLabel;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
}
return self;
}
- (void)viewDidLoad {
UIImageView *folderImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"folder.png"]];
[toFolderInput setLeftView:folderImage];
[toFolderInput setLeftViewMode:UITextFieldViewModeAlways];
UIImageView *folderImage2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"folder.png"]];
[fromFolderInput setLeftView:folderImage2];
[fromFolderInput setLeftViewMode:UITextFieldViewModeAlways];
[folderImage release];
[folderImage2 release];
navBar.tintColor = [UIColor colorWithRed:0.16f green:0.36f blue:0.46 alpha:0.9];
appDelegate = [NewsBlurAppDelegate sharedAppDelegate];
[super viewDidLoad];
}
- (void)viewWillAppear:(BOOL)animated {
[self.errorLabel setHidden:YES];
[self.movingLabel setHidden:YES];
[self.activityIndicator stopAnimating];
for (UIView *subview in [self.titleLabel subviews]) {
[subview removeFromSuperview];
}
[self.titleLabel addSubview:[appDelegate makeFeedTitle:appDelegate.activeFeed]];
[self reload];
[super viewWillAppear:animated];
}
- (void)viewDidAppear:(BOOL)animated {
[self.activityIndicator stopAnimating];
[super viewDidAppear:animated];
}
- (void)dealloc {
[appDelegate release];
[toFolderInput release];
[fromFolderInput release];
[titleLabel release];
[moveButton release];
[cancelButton release];
[folderPicker release];
[navBar release];
[super dealloc];
}
- (void)reload {
BOOL isTopLevel = [[appDelegate.activeFolder trim] isEqualToString:@""];
NSString *fromFolderName = isTopLevel ?
@"- Top Level -" :
appDelegate.activeFolder;
[toFolderInput setText:@""];
[fromFolderInput setText:fromFolderName];
[folderPicker reloadAllComponents];
int row = isTopLevel ?
0 :
[[appDelegate dictFoldersArray] indexOfObject:fromFolderName];
[folderPicker selectRow:row inComponent:0 animated:NO];
moveButton.enabled = NO;
}
- (IBAction)doCancelButton {
[appDelegate.moveSiteViewController dismissModalViewControllerAnimated:YES];
}
- (IBAction)doMoveButton {
if (appDelegate.isRiverView) {
[self moveFolder];
} else {
[self moveSite];
}
}
#pragma mark -
#pragma mark Move Site
- (IBAction)moveSite {
[self.movingLabel setHidden:NO];
[self.movingLabel setText:@"Moving site..."];
[self.errorLabel setHidden:YES];
[self.activityIndicator startAnimating];
NSString *urlString = [NSString stringWithFormat:@"http://%@/reader/move_feed_to_folder",
NEWSBLUR_URL];
NSURL *url = [NSURL URLWithString:urlString];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
NSString *fromFolder = [self extractParentFolder:[fromFolderInput text]];
NSString *toFolder = [self extractParentFolder:[toFolderInput text]];
[request setPostValue:fromFolder forKey:@"in_folder"];
[request setPostValue:toFolder forKey:@"to_folder"];
[request setPostValue:[appDelegate.activeFeed objectForKey:@"id"] forKey:@"feed_id"];
[request setDelegate:self];
[request setDidFinishSelector:@selector(requestFinished:)];
[request setDidFailSelector:@selector(requestFailed:)];
[request startAsynchronous];
}
- (void)requestFinished:(ASIHTTPRequest *)request {
if ([request responseStatusCode] >= 500) {
return [self requestFailed:request];
}
[self.movingLabel setHidden:YES];
[self.activityIndicator stopAnimating];
NSString *responseString = [request responseString];
NSDictionary *results = [[NSDictionary alloc]
initWithDictionary:[responseString JSONValue]];
// int statusCode = [request responseStatusCode];
int code = [[results valueForKey:@"code"] intValue];
if (code == -1) {
[self.errorLabel setText:[results valueForKey:@"message"]];
[self.errorLabel setHidden:NO];
} else {
appDelegate.activeFolder = [toFolderInput text];
[appDelegate.moveSiteViewController dismissModalViewControllerAnimated:YES];
[appDelegate reloadFeedsView:NO];
}
[results release];
}
- (NSString *)extractParentFolder:(NSString *)folderName {
if ([folderName containsString:@"Top Level"]) {
folderName = @"";
}
if ([folderName containsString:@" - "]) {
int folder_loc = [folderName rangeOfString:@" - " options:NSBackwardsSearch].location;
folderName = [folderName substringFromIndex:(folder_loc + 3)];
}
return folderName;
}
#pragma mark -
#pragma mark Move Folder
- (IBAction)moveFolder {
[self.movingLabel setHidden:NO];
[self.movingLabel setText:@"Moving Folder..."];
[self.errorLabel setHidden:YES];
[self.activityIndicator startAnimating];
NSString *urlString = [NSString stringWithFormat:@"http://%@/reader/move_folder_to_folder",
NEWSBLUR_URL];
NSURL *url = [NSURL URLWithString:urlString];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
NSString *fromFolder = [self extractParentFolder:[fromFolderInput text]];
NSString *toFolder = [self extractParentFolder:[toFolderInput text]];
[request setPostValue:fromFolder forKey:@"from_folder"];
[request setPostValue:toFolder forKey:@"to_folder"];
[request setPostValue:toFolder forKey:@"folder_to_move"];
[request setDelegate:self];
[request setDidFinishSelector:@selector(finishMoveFolder:)];
[request setDidFailSelector:@selector(requestFailed:)];
[request startAsynchronous];
}
- (void)finishMoveFolder:(ASIHTTPRequest *)request {
[self.movingLabel setHidden:YES];
[self.activityIndicator stopAnimating];
NSString *responseString = [request responseString];
NSDictionary *results = [[NSDictionary alloc]
initWithDictionary:[responseString JSONValue]];
// int statusCode = [request responseStatusCode];
int code = [[results valueForKey:@"code"] intValue];
if (code == -1) {
[self.errorLabel setText:[results valueForKey:@"message"]];
[self.errorLabel setHidden:NO];
} else {
[appDelegate.moveSiteViewController dismissModalViewControllerAnimated:YES];
[appDelegate reloadFeedsView:NO];
}
[results release];
}
- (void)requestFailed:(ASIHTTPRequest *)request {
[self.movingLabel setHidden:YES];
[self.errorLabel setHidden:NO];
[self.activityIndicator stopAnimating];
NSError *error = [request error];
NSLog(@"Error: %@", error);
NSLog(@"Error: %@", [request responseString]);
[self.errorLabel setText:error.localizedDescription];
}
#pragma mark -
#pragma mark Folder Picker
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component {
return [[appDelegate dictFoldersArray] count];
}
- (NSString *)pickerView:(UIPickerView *)pickerView
titleForRow:(NSInteger)row
forComponent:(NSInteger)component {
if (row == 0) {
return @"— Top Level —";
} else {
return [[appDelegate dictFoldersArray] objectAtIndex:row];
}
}
- (void)pickerView:(UIPickerView *)pickerView
didSelectRow:(NSInteger)row
inComponent:(NSInteger)component {
NSString *folder_title;
if (row == 0) {
folder_title = @"- Top Level -";
} else {
folder_title = [[appDelegate dictFoldersArray] objectAtIndex:row];
}
[toFolderInput setText:folder_title];
moveButton.enabled = YES;
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
[errorLabel setText:@""];
if (textField == toFolderInput && ![toFolderInput isFirstResponder]) {
[toFolderInput setInputView:folderPicker];
}
return NO;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
return YES;
}
@end