mirror of
https://github.com/viq/NewsBlur.git
synced 2025-09-18 21:43:31 +00:00
Fixing the crap out of the move feed/folder dialog in iOS app. Completely done with this dialog. Yay!
This commit is contained in:
parent
3c9fd42bf0
commit
85feadb3f1
6 changed files with 111 additions and 63 deletions
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue