Adding infrequent site stories to iOS. Also adding documentation to API.

This commit is contained in:
Samuel Clay 2017-11-05 22:07:43 -08:00
parent 2ffdabdbb8
commit cf26b3aced
8 changed files with 65 additions and 18 deletions

View file

@ -47,7 +47,7 @@
- (NSString *)title {
NSString *title = self.info[@"feed_title"];
if ([title isEqualToString:@" "] || [title isEqualToString:@"everything"]) {
if ([title isEqualToString:@" "] || [title isEqualToString:@"everything"] || [title isEqualToString:@"infrequent"]) {
return @"";
} else {
return title;

View file

@ -128,6 +128,8 @@
- (void)buildMenuOptions {
BOOL everything = appDelegate.storiesCollection.isRiverView &&
[appDelegate.storiesCollection.activeFolder isEqualToString:@"everything"];
BOOL infrequent = appDelegate.storiesCollection.isRiverView &&
[appDelegate.storiesCollection.activeFolder isEqualToString:@"infrequent"];
BOOL read = appDelegate.storiesCollection.isReadView;
BOOL saved = appDelegate.storiesCollection.isSavedView;
@ -137,7 +139,7 @@
// appDelegate.storiesCollection.activeFolder :
// [appDelegate.storiesCollection.activeFeed objectForKey:@"feed_title"];
if (!everything && !read && !saved) {
if (!everything && !infrequent && !read && !saved) {
NSString *deleteText = [NSString stringWithFormat:@"Delete %@",
appDelegate.storiesCollection.isRiverView ?
@"this entire folder" :
@ -149,7 +151,7 @@
}
}
if (!appDelegate.storiesCollection.isRiverView && !saved && !read) {
if (!appDelegate.storiesCollection.isRiverView && !infrequent && !saved && !read) {
[options addObject:[@"Rename this site" uppercaseString]];
[options addObject:[@"Mute this site" uppercaseString]];
[options addObject:[@"Train this site" uppercaseString]];

View file

@ -901,11 +901,16 @@
subarrayWithRange:NSMakeRange(0, MIN(storiesCollection.activeFolderFeeds.count, 800))]
componentsJoinedByString:@"&f="];
}
NSString *infrequent = @"false";
if ([storiesCollection.activeFolder isEqualToString:@"infrequent"]) {
infrequent = @"30";
}
theFeedDetailURL = [NSString stringWithFormat:
@"%@/reader/river_stories/?include_hidden=true&f=%@&page=%d",
@"%@/reader/river_stories/?include_hidden=true&f=%@&page=%d&infrequent=%@",
self.appDelegate.url,
feeds,
storiesCollection.feedPage];
storiesCollection.feedPage,
infrequent];
}
@ -1428,6 +1433,8 @@
feedTitle = @"Global Shared Stories";
} else if ([storiesCollection.activeFolder isEqualToString:@"everything"]) {
feedTitle = @"All Stories";
} else if ([storiesCollection.activeFolder isEqualToString:@"infrequent"]) {
feedTitle = @"Infrequent Site Stories";
} else if (storiesCollection.isSavedView && storiesCollection.activeSavedStoryTag) {
feedTitle = storiesCollection.activeSavedStoryTag;
} else if ([storiesCollection.activeFolder isEqualToString:@"read_stories"]) {
@ -1784,7 +1791,7 @@ didEndSwipingSwipingWithState:(MCSwipeTableViewCellState)state
NSMutableDictionary *params = [NSMutableDictionary dictionary];
if (storiesCollection.isRiverView) {
if ([storiesCollection.activeFolder isEqual:@"everything"]) {
if ([storiesCollection.activeFolder isEqual:@"everything"] || [storiesCollection.activeFolder isEqual:@"infrequent"]) {
for (NSString *folderName in appDelegate.dictFoldersArray) {
for (id feedId in [appDelegate.dictFolders objectForKey:folderName]) {
if (![feedId isKindOfClass:[NSString class]] || ![feedId startsWith:@"saved:"]) {

View file

@ -121,6 +121,8 @@
folderTitle = [@"All Shared Stories" uppercaseString];
} else if (section == 2) {
folderTitle = [@"All Stories" uppercaseString];
} else if (section == 3) {
folderTitle = [@"Infrequent Site Stories" uppercaseString];
} else if ([folderName isEqual:@"read_stories"]) {
folderTitle = [@"Read Stories" uppercaseString];
} else if ([folderName isEqual:@"saved_stories"]) {
@ -174,7 +176,7 @@
disclosureButton.frame = CGRectMake(customView.frame.size.width - 32, CGRectGetMidY(self.bounds)-disclosureHeight/2-1, disclosureHeight, disclosureHeight);
// Add collapse button to all folders except Everything
if (section != 0 && section != 2 && ![folderName isEqual:@"read_stories"]) {
if (section != 0 && section != 2 && section != 3 && ![folderName isEqual:@"read_stories"]) {
if (!isFolderCollapsed) {
UIImage *disclosureImage = [UIImage imageNamed:@"disclosure_down.png"];
[disclosureButton setImage:disclosureImage forState:UIControlStateNormal];
@ -228,6 +230,14 @@
folderImageViewX = 7;
}
allowLongPress = YES;
} else if (section == 3) {
folderImage = [UIImage imageNamed:@"ak-icon-allstories.png"];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
folderImageViewX = 10;
} else {
folderImageViewX = 7;
}
allowLongPress = NO;
} else if ([folderName isEqual:@"saved_stories"]) {
folderImage = [UIImage imageNamed:@"clock.png"];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

View file

@ -1316,7 +1316,7 @@
}
- (NSArray *)feedIdsForFolderTitle:(NSString *)folderTitle {
if ([folderTitle isEqualToString:@"everything"]) {
if ([folderTitle isEqualToString:@"everything"] || [folderTitle isEqualToString:@"infrequent"]) {
return @[folderTitle];
} else {
return self.dictFolders[folderTitle];
@ -1443,10 +1443,10 @@
}
}
}
} else if ([folder isEqualToString:@"everything"]) {
} else if ([folder isEqualToString:@"everything"] || [folder isEqualToString:@"infrequent"]) {
feedDetailView.storiesCollection.isRiverView = YES;
// add all the feeds from every NON blurblog folder
[feedDetailView.storiesCollection setActiveFolder:@"everything"];
[feedDetailView.storiesCollection setActiveFolder:folder];
for (NSString *folderName in self.feedsViewController.activeFeedLocations) {
if ([folderName isEqualToString:@"river_blurblogs"]) continue;
if ([folderName isEqualToString:@"read_stories"]) continue;
@ -1949,7 +1949,9 @@
(!folderName && [storiesCollection.activeFolder isEqual:@"river_global"])) {
total = 0;
} else if ([folderName isEqual:@"everything"] ||
(!folderName && [storiesCollection.activeFolder isEqual:@"everything"])) {
[folderName isEqual:@"infrequent"] ||
(!folderName && ([storiesCollection.activeFolder isEqual:@"everything"] ||
[storiesCollection.activeFolder isEqual:@"infrequent"]))) {
// TODO: Fix race condition where self.dictUnreadCounts can be changed while being updated.
for (id feedId in self.dictUnreadCounts) {
total += [self unreadCountForFeed:feedId];
@ -2007,7 +2009,9 @@
(!folderName && [storiesCollection.activeFolder isEqual:@"river_global"])) {
// Nothing for global
} else if ([folderName isEqual:@"everything"] ||
(!folderName && [storiesCollection.activeFolder isEqual:@"everything"])) {
[folderName isEqual:@"infrequent"] ||
(!folderName && ([storiesCollection.activeFolder isEqual:@"everything"] ||
[storiesCollection.activeFolder isEqual:@"infrequent"]))) {
for (NSArray *folder in [self.dictFolders allValues]) {
for (id feedId in folder) {
if ([feedId isKindOfClass:[NSString class]] && [feedId startsWith:@"saved:"]) {
@ -2079,7 +2083,7 @@
#pragma mark Mark as read
- (void)markActiveFolderAllRead {
if ([storiesCollection.activeFolder isEqual:@"everything"]) {
if ([storiesCollection.activeFolder isEqual:@"everything"] || [storiesCollection.activeFolder isEqual:@"infrequent"]) {
for (NSString *folderName in self.dictFoldersArray) {
for (id feedId in [self.dictFolders objectForKey:folderName]) {
[self markFeedAllRead:feedId];
@ -2560,7 +2564,8 @@
- (NSString *)extractParentFolderName:(NSString *)folderName {
if ([folderName containsString:@"Top Level"] ||
[folderName isEqual:@"everything"]) {
[folderName isEqual:@"everything"] ||
[folderName isEqual:@"infrequent"]) {
folderName = @"";
}
@ -2577,7 +2582,8 @@
- (NSString *)extractFolderName:(NSString *)folderName {
if ([folderName containsString:@"Top Level"] ||
[folderName isEqual:@"everything"]) {
[folderName isEqual:@"everything"] ||
[folderName isEqual:@"infrequent"]) {
folderName = @"";
}
if ([folderName containsString:@" - "]) {
@ -2788,6 +2794,9 @@
} else if (storiesCollection.isRiverView &&
[storiesCollection.activeFolder isEqualToString:@"everything"]) {
titleLabel.text = [NSString stringWithFormat:@" All Stories"];
} else if (storiesCollection.isRiverView &&
[storiesCollection.activeFolder isEqualToString:@"infrequent"]) {
titleLabel.text = [NSString stringWithFormat:@" Infrequent Site Stories"];
} else if (storiesCollection.isSavedView && storiesCollection.activeSavedStoryTag) {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
titleLabel.text = [NSString stringWithFormat:@" %@", storiesCollection.activeSavedStoryTag];
@ -2827,6 +2836,9 @@
} else if (storiesCollection.isRiverView &&
[storiesCollection.activeFolder isEqualToString:@"everything"]) {
titleImage = [UIImage imageNamed:@"ak-icon-allstories.png"];
} else if (storiesCollection.isRiverView &&
[storiesCollection.activeFolder isEqualToString:@"infrequent"]) {
titleImage = [UIImage imageNamed:@"ak-icon-allstories.png"];
} else if (storiesCollection.isSavedView && storiesCollection.activeSavedStoryTag) {
titleImage = [UIImage imageNamed:@"tag.png"];
} else if ([storiesCollection.activeFolder isEqualToString:@"read_stories"]) {

View file

@ -683,7 +683,11 @@ static UIFont *userLabelFont;
[appDelegate.dictFoldersArray removeObject:@"everything"];
[appDelegate.dictFoldersArray insertObject:@"everything" atIndex:2];
}
// Add Infrequent folder
[appDelegate.dictFoldersArray removeObject:@"infrequent"];
[appDelegate.dictFoldersArray insertObject:@"infrequent" atIndex:3];
// Add Read Stories folder
[appDelegate.dictFoldersArray removeObject:@"read_stories"];
[appDelegate.dictFoldersArray insertObject:@"read_stories" atIndex:appDelegate.dictFoldersArray.count];
@ -1159,6 +1163,8 @@ static UIFont *userLabelFont;
folderName = @"river_blurblogs";
} else if (indexPath.section == 2) {
folderName = @"everything";
} else if (indexPath.section == 3) {
folderName = @"infrequent";
} else {
folderName = [appDelegate.dictFoldersArray objectAtIndex:indexPath.section];
}
@ -1306,7 +1312,7 @@ heightForHeaderInSection:(NSInteger)section {
NSString *folderName = [appDelegate.dictFoldersArray objectAtIndex:section];
BOOL visibleFeeds = [[self.visibleFolders objectForKey:folderName] boolValue];
if (!visibleFeeds && section != 2 && section != 0 &&
if (!visibleFeeds && section != 2 && section != 3 && section != 0 &&
![folderName isEqualToString:@"saved_stories"] &&
![folderName isEqualToString:@"read_stories"]) {
return 0;
@ -1339,6 +1345,8 @@ heightForHeaderInSection:(NSInteger)section {
folder = @"river_blurblogs";
} else if (tag == 2) {
folder = @"everything";
} else if (tag == 3) {
folder = @"infrequent";
} else {
folder = [NSString stringWithFormat:@"%ld", (long)tag];
}
@ -1412,7 +1420,7 @@ heightForHeaderInSection:(NSInteger)section {
}
- (void)markFeedsRead:(NSArray *)feedIds cutoffDays:(NSInteger)days {
if (feedIds.count == 1 && [feedIds.firstObject isEqual:@"everything"]) {
if (feedIds.count == 1 && ([feedIds.firstObject isEqual:@"everything"] || [feedIds.firstObject isEqual:@"infrequent"])) {
[self markEverythingReadWithDays:days];
return;
}

View file

@ -260,6 +260,9 @@
} else if (appDelegate.storiesCollection.isRiverView &&
[appDelegate.storiesCollection.activeFolder isEqualToString:@"everything"]) {
titleImage = [UIImage imageNamed:@"ak-icon-allstories.png"];
} else if (appDelegate.storiesCollection.isRiverView &&
[appDelegate.storiesCollection.activeFolder isEqualToString:@"infrequent"]) {
titleImage = [UIImage imageNamed:@"ak-icon-allstories.png"];
} else if (appDelegate.storiesCollection.isSavedView &&
appDelegate.storiesCollection.activeSavedStoryTag) {
titleImage = [UIImage imageNamed:@"tag.png"];

View file

@ -299,6 +299,11 @@
Search for a keyword or phrase in the folder. Note that only premium users can search feeds.
optional: true
example: "pizza"
- key: infrequent
desc: "Show only stories from infrequently published sites. Specify the number of stories/month (default: 30) or specify <code>false</code>."
optional: true
default: "false"
example: 30
tips:
- >
Counts are broken into three. Add them up for a total, but you shouldn't show or count the hidden stories: