2011-12-02 11:37:55 -08:00
|
|
|
//
|
|
|
|
// MoveSiteViewController.m
|
|
|
|
// NewsBlur
|
|
|
|
//
|
|
|
|
// Created by Samuel Clay on 12/2/11.
|
2011-12-02 16:23:00 -08:00
|
|
|
// Copyright 2011 NewsBlur. All rights reserved.
|
2011-12-02 11:37:55 -08:00
|
|
|
//
|
|
|
|
|
|
|
|
#import "MoveSiteViewController.h"
|
2011-12-02 16:23:00 -08:00
|
|
|
#import "NewsBlurAppDelegate.h"
|
|
|
|
#import "ASIHTTPRequest.h"
|
|
|
|
#import "ASIFormDataRequest.h"
|
2011-12-03 18:22:14 -08:00
|
|
|
#import "StringHelper.h"
|
2011-12-02 11:37:55 -08:00
|
|
|
|
|
|
|
@implementation MoveSiteViewController
|
|
|
|
|
2011-12-02 16:23:00 -08:00
|
|
|
@synthesize appDelegate;
|
|
|
|
@synthesize toFolderInput;
|
2011-12-03 18:22:14 -08:00
|
|
|
@synthesize fromFolderInput;
|
2011-12-02 16:23:00 -08:00
|
|
|
@synthesize titleLabel;
|
|
|
|
@synthesize moveButton;
|
|
|
|
@synthesize cancelButton;
|
|
|
|
@synthesize folderPicker;
|
|
|
|
@synthesize navBar;
|
|
|
|
@synthesize activityIndicator;
|
|
|
|
@synthesize movingLabel;
|
|
|
|
@synthesize errorLabel;
|
2011-12-04 13:55:57 -08:00
|
|
|
@synthesize folders;
|
2011-12-02 16:23:00 -08:00
|
|
|
|
|
|
|
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
|
|
|
|
|
|
|
|
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
|
2011-12-02 11:37:55 -08:00
|
|
|
}
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
2011-12-02 16:23:00 -08:00
|
|
|
- (void)viewDidLoad {
|
2013-02-26 19:58:30 -08:00
|
|
|
UIImageView *folderImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"g_icn_folder.png"]];
|
2013-09-12 21:26:38 -07:00
|
|
|
folderImage.frame = CGRectMake(-6, 0, 16, 16);
|
2011-12-02 16:23:00 -08:00
|
|
|
[toFolderInput setLeftView:folderImage];
|
|
|
|
[toFolderInput setLeftViewMode:UITextFieldViewModeAlways];
|
2013-02-26 19:58:30 -08:00
|
|
|
UIImageView *folderImage2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"g_icn_folder_rss.png"]];
|
2013-09-12 21:26:38 -07:00
|
|
|
folderImage2.frame = CGRectMake(-6, 0, 16, 16);
|
2011-12-03 18:22:14 -08:00
|
|
|
[fromFolderInput setLeftView:folderImage2];
|
|
|
|
[fromFolderInput setLeftViewMode:UITextFieldViewModeAlways];
|
2013-09-12 21:26:38 -07:00
|
|
|
|
2011-12-02 16:23:00 -08:00
|
|
|
navBar.tintColor = [UIColor colorWithRed:0.16f green:0.36f blue:0.46 alpha:0.9];
|
|
|
|
|
2011-12-03 18:22:14 -08:00
|
|
|
appDelegate = [NewsBlurAppDelegate sharedAppDelegate];
|
|
|
|
|
2011-12-02 16:23:00 -08:00
|
|
|
[super viewDidLoad];
|
|
|
|
}
|
|
|
|
|
2012-06-08 19:36:23 -07:00
|
|
|
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
|
|
|
|
// Return YES for supported orientations
|
2012-08-13 19:46:47 -07:00
|
|
|
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
|
|
|
|
return YES;
|
|
|
|
} else if (UIInterfaceOrientationIsPortrait(interfaceOrientation)) {
|
|
|
|
return YES;
|
|
|
|
}
|
|
|
|
|
|
|
|
return NO;
|
2012-06-08 19:36:23 -07:00
|
|
|
}
|
|
|
|
|
2011-12-02 16:23:00 -08:00
|
|
|
- (void)viewWillAppear:(BOOL)animated {
|
|
|
|
[self.errorLabel setHidden:YES];
|
|
|
|
[self.movingLabel setHidden:YES];
|
|
|
|
[self.activityIndicator stopAnimating];
|
|
|
|
|
2011-12-03 18:22:14 -08:00
|
|
|
for (UIView *subview in [self.titleLabel subviews]) {
|
|
|
|
[subview removeFromSuperview];
|
|
|
|
}
|
2011-12-04 21:09:16 -08:00
|
|
|
UIView *label = [appDelegate makeFeedTitle:appDelegate.activeFeed];
|
2012-08-07 17:24:55 -07:00
|
|
|
label.frame = CGRectMake(0,
|
|
|
|
0,
|
|
|
|
200,
|
|
|
|
20);
|
2011-12-04 21:09:16 -08:00
|
|
|
[self.titleLabel addSubview:label];
|
2011-12-03 18:22:14 -08:00
|
|
|
[self reload];
|
2011-12-02 16:23:00 -08:00
|
|
|
[super viewWillAppear:animated];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)viewDidAppear:(BOOL)animated {
|
|
|
|
[self.activityIndicator stopAnimating];
|
|
|
|
[super viewDidAppear:animated];
|
|
|
|
}
|
|
|
|
|
2011-12-04 13:55:57 -08:00
|
|
|
|
2011-12-02 16:23:00 -08:00
|
|
|
- (void)reload {
|
2013-02-06 15:15:43 -08:00
|
|
|
BOOL isTopLevel = [[appDelegate.activeFolder trim] isEqualToString:@""] ||
|
|
|
|
[appDelegate.activeFolder isEqual:@"everything"];
|
2011-12-05 09:26:02 -08:00
|
|
|
int row = 0;
|
2011-12-02 16:23:00 -08:00
|
|
|
[toFolderInput setText:@""];
|
2011-12-02 11:37:55 -08:00
|
|
|
|
2011-12-04 13:55:57 -08:00
|
|
|
if (appDelegate.isRiverView) {
|
2011-12-05 09:26:02 -08:00
|
|
|
NSString *parentFolderName = [appDelegate extractParentFolderName:appDelegate.activeFolder];
|
2011-12-04 13:55:57 -08:00
|
|
|
row = [[self pickerFolders]
|
2011-12-05 09:26:02 -08:00
|
|
|
indexOfObject:parentFolderName];
|
|
|
|
fromFolderInput.text = parentFolderName;
|
2011-12-04 13:55:57 -08:00
|
|
|
} else {
|
2011-12-05 09:26:02 -08:00
|
|
|
fromFolderInput.text = isTopLevel ? @"— Top Level —" : appDelegate.activeFolder;
|
2011-12-04 13:55:57 -08:00
|
|
|
row = isTopLevel ?
|
2011-12-05 09:26:02 -08:00
|
|
|
0 :
|
|
|
|
[[self pickerFolders] indexOfObject:appDelegate.activeFolder];
|
2011-12-04 13:55:57 -08:00
|
|
|
}
|
2011-12-05 09:26:02 -08:00
|
|
|
self.folders = [NSMutableArray array];
|
|
|
|
[folderPicker reloadAllComponents];
|
2011-12-03 18:22:14 -08:00
|
|
|
[folderPicker selectRow:row inComponent:0 animated:NO];
|
|
|
|
|
|
|
|
moveButton.enabled = NO;
|
2011-12-05 09:26:02 -08:00
|
|
|
moveButton.title = appDelegate.isRiverView ? @"Move Folder to Folder" : @"Move Site to Folder";
|
2011-12-02 11:37:55 -08:00
|
|
|
}
|
|
|
|
|
2011-12-03 18:22:14 -08:00
|
|
|
- (IBAction)doCancelButton {
|
2013-06-17 11:50:13 -07:00
|
|
|
[appDelegate.moveSiteViewController dismissViewControllerAnimated:YES completion:nil];
|
2011-12-03 18:22:14 -08:00
|
|
|
}
|
2011-12-02 11:37:55 -08:00
|
|
|
|
2011-12-03 18:22:14 -08:00
|
|
|
- (IBAction)doMoveButton {
|
|
|
|
if (appDelegate.isRiverView) {
|
|
|
|
[self moveFolder];
|
|
|
|
} else {
|
|
|
|
[self moveSite];
|
2011-12-02 16:23:00 -08:00
|
|
|
}
|
2011-12-02 11:37:55 -08:00
|
|
|
}
|
|
|
|
|
2011-12-03 18:22:14 -08:00
|
|
|
#pragma mark -
|
|
|
|
#pragma mark Move Site
|
2011-12-02 16:23:00 -08:00
|
|
|
|
|
|
|
- (IBAction)moveSite {
|
|
|
|
[self.movingLabel setHidden:NO];
|
|
|
|
[self.movingLabel setText:@"Moving site..."];
|
|
|
|
[self.errorLabel setHidden:YES];
|
|
|
|
[self.activityIndicator startAnimating];
|
2013-06-18 21:23:20 -04:00
|
|
|
NSString *urlString = [NSString stringWithFormat:@"%@/reader/move_feed_to_folder",
|
2011-12-02 16:23:00 -08:00
|
|
|
NEWSBLUR_URL];
|
|
|
|
NSURL *url = [NSURL URLWithString:urlString];
|
|
|
|
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
|
2011-12-04 21:09:16 -08:00
|
|
|
NSString *fromFolder = [appDelegate extractFolderName:[fromFolderInput text]];
|
|
|
|
NSString *toFolder = [appDelegate extractFolderName:[toFolderInput text]];
|
2011-12-03 18:22:14 -08:00
|
|
|
[request setPostValue:fromFolder forKey:@"in_folder"];
|
2011-12-02 16:23:00 -08:00
|
|
|
[request setPostValue:toFolder forKey:@"to_folder"];
|
2011-12-03 18:22:14 -08:00
|
|
|
[request setPostValue:[appDelegate.activeFeed objectForKey:@"id"] forKey:@"feed_id"];
|
2011-12-02 16:23:00 -08:00
|
|
|
[request setDelegate:self];
|
|
|
|
[request setDidFinishSelector:@selector(requestFinished:)];
|
|
|
|
[request setDidFailSelector:@selector(requestFailed:)];
|
|
|
|
[request startAsynchronous];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)requestFinished:(ASIHTTPRequest *)request {
|
2011-12-03 18:22:14 -08:00
|
|
|
if ([request responseStatusCode] >= 500) {
|
|
|
|
return [self requestFailed:request];
|
|
|
|
}
|
|
|
|
|
2011-12-02 16:23:00 -08:00
|
|
|
[self.movingLabel setHidden:YES];
|
|
|
|
[self.activityIndicator stopAnimating];
|
|
|
|
NSString *responseString = [request responseString];
|
2012-07-27 16:21:44 -07:00
|
|
|
NSData *responseData=[responseString dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
|
NSError *error;
|
|
|
|
NSDictionary *results = [NSJSONSerialization
|
|
|
|
JSONObjectWithData:responseData
|
|
|
|
options:kNilOptions
|
|
|
|
error:&error];
|
2011-12-02 16:23:00 -08:00
|
|
|
// int statusCode = [request responseStatusCode];
|
|
|
|
int code = [[results valueForKey:@"code"] intValue];
|
|
|
|
if (code == -1) {
|
|
|
|
[self.errorLabel setText:[results valueForKey:@"message"]];
|
|
|
|
[self.errorLabel setHidden:NO];
|
|
|
|
} else {
|
2011-12-03 18:22:14 -08:00
|
|
|
appDelegate.activeFolder = [toFolderInput text];
|
2013-06-17 11:50:13 -07:00
|
|
|
[appDelegate.moveSiteViewController dismissViewControllerAnimated:YES completion:nil];
|
2011-12-03 18:22:14 -08:00
|
|
|
[appDelegate reloadFeedsView:NO];
|
2011-12-02 16:23:00 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#pragma mark -
|
|
|
|
#pragma mark Move Folder
|
|
|
|
|
|
|
|
- (IBAction)moveFolder {
|
|
|
|
[self.movingLabel setHidden:NO];
|
|
|
|
[self.movingLabel setText:@"Moving Folder..."];
|
|
|
|
[self.errorLabel setHidden:YES];
|
|
|
|
[self.activityIndicator startAnimating];
|
2013-06-18 21:23:20 -04:00
|
|
|
NSString *urlString = [NSString stringWithFormat:@"%@/reader/move_folder_to_folder",
|
2011-12-02 16:23:00 -08:00
|
|
|
NEWSBLUR_URL];
|
|
|
|
NSURL *url = [NSURL URLWithString:urlString];
|
|
|
|
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
|
2011-12-04 21:09:16 -08:00
|
|
|
NSString *folderName = [appDelegate extractFolderName:appDelegate.activeFolder];
|
|
|
|
NSString *fromFolder = [appDelegate extractFolderName:[fromFolderInput text]];
|
|
|
|
NSString *toFolder = [appDelegate extractFolderName:[toFolderInput text]];
|
2011-12-04 13:55:57 -08:00
|
|
|
[request setPostValue:fromFolder forKey:@"in_folder"];
|
2011-12-02 16:23:00 -08:00
|
|
|
[request setPostValue:toFolder forKey:@"to_folder"];
|
2011-12-04 13:55:57 -08:00
|
|
|
[request setPostValue:folderName forKey:@"folder_name"];
|
2011-12-02 16:23:00 -08:00
|
|
|
[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];
|
2012-07-27 16:21:44 -07:00
|
|
|
NSData *responseData=[responseString dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
|
NSError *error;
|
|
|
|
NSDictionary *results = [NSJSONSerialization
|
|
|
|
JSONObjectWithData:responseData
|
|
|
|
options:kNilOptions
|
|
|
|
error:&error];
|
2011-12-02 16:23:00 -08:00
|
|
|
// int statusCode = [request responseStatusCode];
|
|
|
|
int code = [[results valueForKey:@"code"] intValue];
|
|
|
|
if (code == -1) {
|
|
|
|
[self.errorLabel setText:[results valueForKey:@"message"]];
|
|
|
|
[self.errorLabel setHidden:NO];
|
|
|
|
} else {
|
2013-06-17 11:50:13 -07:00
|
|
|
[appDelegate.moveSiteViewController dismissViewControllerAnimated:YES completion:nil];
|
2011-12-03 18:22:14 -08:00
|
|
|
[appDelegate reloadFeedsView:NO];
|
2011-12-02 16:23:00 -08:00
|
|
|
}
|
|
|
|
|
2011-12-02 11:37:55 -08:00
|
|
|
}
|
|
|
|
|
2011-12-03 18:22:14 -08:00
|
|
|
- (void)requestFailed:(ASIHTTPRequest *)request {
|
2011-12-02 16:23:00 -08:00
|
|
|
[self.movingLabel setHidden:YES];
|
|
|
|
[self.errorLabel setHidden:NO];
|
|
|
|
[self.activityIndicator stopAnimating];
|
|
|
|
NSError *error = [request error];
|
|
|
|
NSLog(@"Error: %@", error);
|
2011-12-03 18:22:14 -08:00
|
|
|
NSLog(@"Error: %@", [request responseString]);
|
2011-12-02 16:23:00 -08:00
|
|
|
[self.errorLabel setText:error.localizedDescription];
|
|
|
|
}
|
|
|
|
|
|
|
|
#pragma mark -
|
|
|
|
#pragma mark Folder Picker
|
|
|
|
|
2011-12-04 13:55:57 -08:00
|
|
|
- (NSArray *)pickerFolders {
|
|
|
|
if ([self.folders count]) return self.folders;
|
|
|
|
|
|
|
|
self.folders = [NSMutableArray array];
|
|
|
|
[self.folders addObject:@"— Top Level —"];
|
|
|
|
|
|
|
|
for (NSString *folder in appDelegate.dictFoldersArray) {
|
2012-10-03 16:08:40 -07:00
|
|
|
if ([folder isEqualToString:@"everything"]) continue;
|
|
|
|
if ([folder isEqualToString:@"river_blurblogs"]) continue;
|
2012-12-07 15:17:22 -08:00
|
|
|
if ([folder isEqualToString:@"river_global"]) continue;
|
2013-03-04 15:09:09 -08:00
|
|
|
if ([folder isEqualToString:@"saved_stories"]) continue;
|
2011-12-04 13:55:57 -08:00
|
|
|
if ([[folder trim] isEqualToString:@""]) continue;
|
|
|
|
if (appDelegate.isRiverView) {
|
|
|
|
if (![folder containsString:appDelegate.activeFolder]) {
|
|
|
|
[self.folders addObject:folder];
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
[self.folders addObject:folder];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return self.folders;
|
|
|
|
}
|
|
|
|
|
2011-12-02 16:23:00 -08:00
|
|
|
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSInteger)pickerView:(UIPickerView *)pickerView
|
|
|
|
numberOfRowsInComponent:(NSInteger)component {
|
2011-12-04 13:55:57 -08:00
|
|
|
return [[self pickerFolders] count];
|
2011-12-02 16:23:00 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
- (NSString *)pickerView:(UIPickerView *)pickerView
|
|
|
|
titleForRow:(NSInteger)row
|
|
|
|
forComponent:(NSInteger)component {
|
2011-12-04 13:55:57 -08:00
|
|
|
return [[self pickerFolders] objectAtIndex:row];
|
2011-12-02 16:23:00 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
- (void)pickerView:(UIPickerView *)pickerView
|
|
|
|
didSelectRow:(NSInteger)row
|
|
|
|
inComponent:(NSInteger)component {
|
2011-12-04 13:55:57 -08:00
|
|
|
[toFolderInput setText:[[self pickerFolders] objectAtIndex:row]];
|
2011-12-03 18:22:14 -08:00
|
|
|
moveButton.enabled = YES;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
|
|
|
|
[errorLabel setText:@""];
|
|
|
|
if (textField == toFolderInput && ![toFolderInput isFirstResponder]) {
|
|
|
|
[toFolderInput setInputView:folderPicker];
|
|
|
|
}
|
|
|
|
return NO;
|
2011-12-02 16:23:00 -08:00
|
|
|
}
|
|
|
|
|
2011-12-03 18:22:14 -08:00
|
|
|
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
|
|
|
|
return YES;
|
2011-12-02 11:37:55 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
@end
|
2013-09-12 21:26:38 -07:00
|
|
|
|
|
|
|
|
|
|
|
@implementation FolderTextField
|
|
|
|
|
|
|
|
- (CGRect)textRectForBounds:(CGRect)bounds {
|
|
|
|
int margin = 18;
|
|
|
|
CGRect inset = CGRectMake(bounds.origin.x + margin, bounds.origin.y, bounds.size.width - margin, bounds.size.height);
|
|
|
|
return inset;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (CGRect)editingRectForBounds:(CGRect)bounds {
|
|
|
|
int margin = 18;
|
|
|
|
CGRect inset = CGRectMake(bounds.origin.x + margin, bounds.origin.y, bounds.size.width - margin, bounds.size.height);
|
|
|
|
return inset;
|
|
|
|
}
|
|
|
|
|
|
|
|
@end
|