Fixing the crap out of the move feed/folder dialog in iOS app. Completely done with this dialog. Yay!

This commit is contained in:
Samuel Clay 2011-12-04 13:55:57 -08:00
parent 3c9fd42bf0
commit 85feadb3f1
6 changed files with 111 additions and 63 deletions

View file

@ -518,6 +518,8 @@ class UserSubscriptionFolders(models.Model):
self.save()
def move_feed_to_folder(self, feed_id, in_folder=None, to_folder=None):
logging.user(self.user, "~FBMoving feed '~SB%s~SN' in '%s' to: ~SB%s" % (
feed_id, in_folder, to_folder))
user_sub_folders = json.decode(self.folders)
self.delete_feed(feed_id, in_folder, commit_delete=False)
user_sub_folders = json.decode(self.folders)
@ -528,6 +530,8 @@ class UserSubscriptionFolders(models.Model):
return self
def move_folder_to_folder(self, folder_name, in_folder=None, to_folder=None):
logging.user(self.user, "~FBMoving folder '~SB%s~SN' in '%s' to: ~SB%s" % (
folder_name, in_folder, to_folder))
user_sub_folders = json.decode(self.folders)
deleted_folder = self.delete_folder(folder_name, in_folder, [], commit_delete=False)
user_sub_folders = json.decode(self.folders)

View file

@ -22,7 +22,9 @@
- (IBAction)moveFolder;
- (IBAction)doCancelButton;
- (IBAction)doMoveButton;
- (NSString *)extractParentFolder:(NSString *)folderName;
- (NSArray *)pickerFolders;
- (NSString *)extractFolderName:(NSString *)folderName;
- (NSString *)extractParentFolderName:(NSString *)folderName;
@property (nonatomic, retain) IBOutlet NewsBlurAppDelegate *appDelegate;
@property (nonatomic, retain) IBOutlet UITextField *fromFolderInput;
@ -38,4 +40,6 @@
@property (nonatomic, retain) IBOutlet UILabel *movingLabel;
@property (nonatomic, retain) IBOutlet UILabel *errorLabel;
@property (nonatomic, retain) NSMutableArray *folders;
@end

View file

@ -26,6 +26,7 @@
@synthesize activityIndicator;
@synthesize movingLabel;
@synthesize errorLabel;
@synthesize folders;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
@ -78,20 +79,30 @@
[cancelButton release];
[folderPicker release];
[navBar release];
[folders release];
[super dealloc];
}
- (void)reload {
BOOL isTopLevel = [[appDelegate.activeFolder trim] isEqualToString:@""];
NSString *fromFolderName = isTopLevel ?
@"- Top Level -" :
appDelegate.activeFolder;
[toFolderInput setText:@""];
[fromFolderInput setText:fromFolderName];
if (appDelegate.isRiverView) {
[fromFolderInput setText:[self extractParentFolderName:appDelegate.activeFolder]];
} else {
[fromFolderInput setText:appDelegate.activeFolder];
}
self.folders = [NSMutableArray array];
[folderPicker reloadAllComponents];
int row = isTopLevel ?
0 :
[[appDelegate dictFoldersArray] indexOfObject:fromFolderName];
int row = 0;
if (appDelegate.isRiverView) {
row = [[self pickerFolders]
indexOfObject:[self extractParentFolderName:appDelegate.activeFolder]];
} else {
BOOL isTopLevel = [[appDelegate.activeFolder trim] isEqualToString:@""];
row = isTopLevel ?
0 :
[[self pickerFolders] indexOfObject:appDelegate.activeFolder];
}
[folderPicker selectRow:row inComponent:0 animated:NO];
moveButton.enabled = NO;
@ -121,8 +132,8 @@
NEWSBLUR_URL];
NSURL *url = [NSURL URLWithString:urlString];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
NSString *fromFolder = [self extractParentFolder:[fromFolderInput text]];
NSString *toFolder = [self extractParentFolder:[toFolderInput text]];
NSString *fromFolder = [self extractFolderName:[fromFolderInput text]];
NSString *toFolder = [self extractFolderName:[toFolderInput text]];
[request setPostValue:fromFolder forKey:@"in_folder"];
[request setPostValue:toFolder forKey:@"to_folder"];
[request setPostValue:[appDelegate.activeFeed objectForKey:@"id"] forKey:@"feed_id"];
@ -155,7 +166,23 @@
[results release];
}
- (NSString *)extractParentFolder:(NSString *)folderName {
- (NSString *)extractParentFolderName:(NSString *)folderName {
if ([folderName containsString:@"Top Level"]) {
folderName = @"";
}
if ([folderName containsString:@" - "]) {
int lastFolderLoc = [folderName rangeOfString:@" - " options:NSBackwardsSearch].location;
// int secondLastFolderLoc = [[folderName substringToIndex:lastFolderLoc] rangeOfString:@" - " options:NSBackwardsSearch].location;
folderName = [folderName substringToIndex:lastFolderLoc];
} else {
folderName = @"— Top Level —";
}
return folderName;
}
- (NSString *)extractFolderName:(NSString *)folderName {
if ([folderName containsString:@"Top Level"]) {
folderName = @"";
}
@ -180,11 +207,12 @@
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"];
NSString *folderName = [self extractFolderName:appDelegate.activeFolder];
NSString *fromFolder = [self extractFolderName:[fromFolderInput text]];
NSString *toFolder = [self extractFolderName:[toFolderInput text]];
[request setPostValue:fromFolder forKey:@"in_folder"];
[request setPostValue:toFolder forKey:@"to_folder"];
[request setPostValue:toFolder forKey:@"folder_to_move"];
[request setPostValue:folderName forKey:@"folder_name"];
[request setDelegate:self];
[request setDidFinishSelector:@selector(finishMoveFolder:)];
[request setDidFailSelector:@selector(requestFailed:)];
@ -223,35 +251,45 @@
#pragma mark -
#pragma mark Folder Picker
- (NSArray *)pickerFolders {
if ([self.folders count]) return self.folders;
self.folders = [NSMutableArray array];
[self.folders addObject:@"— Top Level —"];
for (NSString *folder in appDelegate.dictFoldersArray) {
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;
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component {
return [[appDelegate dictFoldersArray] count];
return [[self pickerFolders] count];
}
- (NSString *)pickerView:(UIPickerView *)pickerView
titleForRow:(NSInteger)row
forComponent:(NSInteger)component {
if (row == 0) {
return @"— Top Level —";
} else {
return [[appDelegate dictFoldersArray] objectAtIndex:row];
}
return [[self pickerFolders] 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];
[toFolderInput setText:[[self pickerFolders] objectAtIndex:row]];
moveButton.enabled = YES;
}

View file

@ -48,7 +48,7 @@
<string key="NSFrame">{{0, 44}, {320, 416}}</string>
<reference key="NSSuperview" ref="612255706"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="44894680"/>
<reference key="NSNextKeyView" ref="864978609"/>
<string key="NSReuseIdentifierKey">_NS:541</string>
<bool key="IBUIUserInteractionEnabled">NO</bool>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
@ -60,12 +60,12 @@
<object class="IBUIView" id="714055721">
<reference key="NSNextResponder" ref="612255706"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{51, 69}, {249, 26}}</string>
<string key="NSFrame">{{51, 70}, {249, 26}}</string>
<reference key="NSSuperview" ref="612255706"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="553240011"/>
<reference key="NSNextKeyView" ref="715092773"/>
<string key="NSReuseIdentifierKey">_NS:196</string>
<object class="NSColor" key="IBUIBackgroundColor" id="4667806">
<object class="NSColor" key="IBUIBackgroundColor" id="915035019">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MCAwAA</bytes>
</object>
@ -87,7 +87,7 @@
<bool key="IBUIUserInteractionEnabled">NO</bool>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<string key="IBUIText">Moving...</string>
<object class="NSColor" key="IBUITextColor" id="910196665">
<object class="NSColor" key="IBUITextColor" id="837366249">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
</object>
@ -110,7 +110,7 @@
<int key="NSfFlags">16</int>
</object>
</object>
<object class="IBUILabel" id="44894680">
<object class="IBUILabel" id="864978609">
<reference key="NSNextResponder" ref="612255706"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{7, 65}, {61, 28}}</string>
@ -124,23 +124,23 @@
<bool key="IBUIUserInteractionEnabled">NO</bool>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<string key="IBUIText">MOVING</string>
<reference key="IBUITextColor" ref="910196665"/>
<reference key="IBUITextColor" ref="837366249"/>
<nil key="IBUIHighlightedColor"/>
<reference key="IBUIShadowColor" ref="458025816"/>
<int key="IBUIBaselineAdjustment">1</int>
<float key="IBUIMinimumFontSize">10</float>
<int key="IBUITextAlignment">2</int>
<object class="IBUIFontDescription" key="IBUIFontDescription" id="680600679">
<object class="IBUIFontDescription" key="IBUIFontDescription" id="425763953">
<int key="type">1</int>
<double key="pointSize">12</double>
</object>
<object class="NSFont" key="IBUIFont" id="110035095">
<object class="NSFont" key="IBUIFont" id="556335463">
<string key="NSName">Helvetica</string>
<double key="NSSize">12</double>
<int key="NSfFlags">16</int>
</object>
</object>
<object class="IBUILabel" id="989318109">
<object class="IBUILabel" id="464452035">
<reference key="NSNextResponder" ref="612255706"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{19, 148}, {49, 31}}</string>
@ -154,14 +154,14 @@
<bool key="IBUIUserInteractionEnabled">NO</bool>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<string key="IBUIText">INTO</string>
<reference key="IBUITextColor" ref="910196665"/>
<reference key="IBUITextColor" ref="837366249"/>
<nil key="IBUIHighlightedColor"/>
<reference key="IBUIShadowColor" ref="458025816"/>
<int key="IBUIBaselineAdjustment">1</int>
<float key="IBUIMinimumFontSize">10</float>
<int key="IBUITextAlignment">2</int>
<reference key="IBUIFontDescription" ref="680600679"/>
<reference key="IBUIFont" ref="110035095"/>
<reference key="IBUIFontDescription" ref="425763953"/>
<reference key="IBUIFont" ref="556335463"/>
</object>
<object class="IBUILabel" id="949390072">
<reference key="NSNextResponder" ref="612255706"/>
@ -275,13 +275,13 @@
<reference key="IBUIFontDescription" ref="687614221"/>
<reference key="IBUIFont" ref="710114804"/>
</object>
<object class="IBUILabel" id="553240011">
<object class="IBUILabel" id="715092773">
<reference key="NSNextResponder" ref="612255706"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{19, 105}, {49, 31}}</string>
<reference key="NSSuperview" ref="612255706"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="831219612"/>
<reference key="NSNextKeyView" ref="78857574"/>
<string key="NSReuseIdentifierKey">_NS:311</string>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClipsSubviews">YES</bool>
@ -289,22 +289,22 @@
<bool key="IBUIUserInteractionEnabled">NO</bool>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<string key="IBUIText">FROM</string>
<reference key="IBUITextColor" ref="910196665"/>
<reference key="IBUITextColor" ref="837366249"/>
<nil key="IBUIHighlightedColor"/>
<reference key="IBUIShadowColor" ref="458025816"/>
<int key="IBUIBaselineAdjustment">1</int>
<float key="IBUIMinimumFontSize">10</float>
<int key="IBUITextAlignment">2</int>
<reference key="IBUIFontDescription" ref="680600679"/>
<reference key="IBUIFont" ref="110035095"/>
<reference key="IBUIFontDescription" ref="425763953"/>
<reference key="IBUIFont" ref="556335463"/>
</object>
<object class="IBUITextField" id="831219612">
<object class="IBUITextField" id="78857574">
<reference key="NSNextResponder" ref="612255706"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{74, 102}, {226, 31}}</string>
<reference key="NSSuperview" ref="612255706"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="989318109"/>
<reference key="NSNextKeyView" ref="464452035"/>
<string key="NSReuseIdentifierKey">_NS:294</string>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClipsSubviews">YES</bool>
@ -4720,7 +4720,7 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE</bytes>
</object>
</array>
</array>
<reference key="NSColor" ref="4667806"/>
<reference key="NSColor" ref="915035019"/>
</object>
<string key="IBUIColorCocoaTouchKeyPath">scrollViewTexturedBackgroundColor</string>
</object>
@ -4814,7 +4814,7 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE</bytes>
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">fromFolderInput</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="831219612"/>
<reference key="destination" ref="78857574"/>
</object>
<int key="connectionID">46</int>
</object>
@ -4861,7 +4861,7 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE</bytes>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="831219612"/>
<reference key="source" ref="78857574"/>
<reference key="destination" ref="372490531"/>
</object>
<int key="connectionID">45</int>
@ -4893,15 +4893,15 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE</bytes>
<reference ref="347019207"/>
<reference ref="727310282"/>
<reference ref="92066299"/>
<reference ref="989318109"/>
<reference ref="464452035"/>
<reference ref="522048353"/>
<reference ref="553240011"/>
<reference ref="831219612"/>
<reference ref="715092773"/>
<reference ref="78857574"/>
<reference ref="949390072"/>
<reference ref="876700848"/>
<reference ref="434594381"/>
<reference ref="714055721"/>
<reference ref="44894680"/>
<reference ref="864978609"/>
</array>
<reference key="parent" ref="0"/>
</object>
@ -4971,22 +4971,22 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE</bytes>
</object>
<object class="IBObjectRecord">
<int key="objectID">41</int>
<reference key="object" ref="44894680"/>
<reference key="object" ref="864978609"/>
<reference key="parent" ref="612255706"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">42</int>
<reference key="object" ref="989318109"/>
<reference key="object" ref="464452035"/>
<reference key="parent" ref="612255706"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">43</int>
<reference key="object" ref="553240011"/>
<reference key="object" ref="715092773"/>
<reference key="parent" ref="612255706"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">44</int>
<reference key="object" ref="831219612"/>
<reference key="object" ref="78857574"/>
<reference key="parent" ref="612255706"/>
</object>
</array>

View file

@ -1094,8 +1094,8 @@
return -1;
} else if (!feedA && feedB) {
return 1;
} else if (!feedA && !feedB && !_.isNumber(a) && !_.isNumber(b)) {
// console.log(['a b 1', a, b]);
} else if (!feedA && !feedB && !_.isNumber(a) && !_.isNumber(b) && a && b) {
// console.log(['a b 1', a, b, feedA, feedB]);
var folderA = _.keys(a)[0];
var folderB = _.keys(b)[0];
return folderA.toLowerCase() > folderB.toLowerCase() ? 1 : -1;

View file

@ -387,7 +387,9 @@ class Dispatcher:
logging.debug('[%d] ! -------------------------' % (feed_id,))
# feed.save_feed_history(560, "Icon Error", tb)
mail_feed_error_to_admin(feed, e)
else:
logging.debug(u' ---> [%-30s] Skipping page fetch: %s (%s on %s stories) %s' % (unicode(feed)[:30], unicode(feed.feed_link)[:30], self.feed_trans[ret_feed], feed.stories_last_month, '' if feed.has_page else ' [HAS NO PAGE]'))
feed = self.refresh_feed(feed_id)
delta = datetime.datetime.utcnow() - start_time