Fixing last error. Now to fix everything else that's broken.

This commit is contained in:
Samuel Clay 2017-04-03 16:07:01 -07:00
parent bb72b1cc68
commit ca3309a0ba
20 changed files with 299 additions and 371 deletions

View file

@ -99,7 +99,7 @@
[appDelegate.dictSocialProfile objectForKey:@"user_id"],
page];
[appDelegate.manager GET:urlString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[appDelegate.networkManager GET:urlString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[self finishLoadActivities:responseObject];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[appDelegate informError:error];

View file

@ -100,13 +100,7 @@
}];
} else {
[self.navigationController popViewControllerAnimated:YES];
if ([type isEqualToString:@"google"]) {
if (error.length) {
[appDelegate.firstTimeUserAddSitesViewController importFromGoogleReaderFailed:error];
} else {
[appDelegate.firstTimeUserAddSitesViewController importFromGoogleReader];
}
} else if ([type isEqualToString:@"facebook"]) {
if ([type isEqualToString:@"facebook"]) {
if (error.length) {
[self showError:error];
} else {

View file

@ -31,7 +31,6 @@
#import "NBBarButtonItem.h"
#import "UIImage+Resize.h"
#import "TMCache.h"
#import "AFHTTPRequestOperation.h"
#import "DashboardViewController.h"
#import "StoriesCollection.h"
#import "NSNull+JSON.h"
@ -565,36 +564,35 @@
- (void)cacheStoryImages:(NSArray *)storyImageUrls {
NSBlockOperation *cacheImagesOperation = [NSBlockOperation blockOperationWithBlock:^{
for (NSString *storyImageUrl in storyImageUrls) {
// NSLog(@"Fetching image: %@", storyImageUrl);
NSMutableURLRequest *request = [NSMutableURLRequest
requestWithURL:[NSURL URLWithString:storyImageUrl]];
[request addValue:@"image/*" forHTTPHeaderField:@"Accept"];
[request setTimeoutInterval:5.0];
AFHTTPRequestOperation *requestOperation = [[AFHTTPRequestOperation alloc]
initWithRequest:request];
[requestOperation setResponseSerializer:[AFImageResponseSerializer serializer]];
[requestOperation start];
[requestOperation waitUntilFinished];
NSLog(@"Fetching image: %@", storyImageUrl);
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager.requestSerializer setTimeoutInterval:5];
manager.responseSerializer = [AFImageResponseSerializer serializer];
UIImage *image = (UIImage *)requestOperation.responseObject;
if (!image || image.size.height < 50 || image.size.width < 50) {
[appDelegate.cachedStoryImages setObject:[NSNull null]
[manager GET:storyImageUrl parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
UIImage *image = (UIImage *)responseObject;
if (!image || image.size.height < 50 || image.size.width < 50) {
[appDelegate.cachedStoryImages setObject:[NSNull null]
forKey:storyImageUrl];
// continue;
return;
}
CGSize maxImageSize = CGSizeMake(300, 300);
image = [image imageByScalingAndCroppingForSize:maxImageSize];
[appDelegate.cachedStoryImages setObject:image
forKey:storyImageUrl];
continue;
}
CGSize maxImageSize = CGSizeMake(300, 300);
image = [image imageByScalingAndCroppingForSize:maxImageSize];
[appDelegate.cachedStoryImages setObject:image
forKey:storyImageUrl];
if (self.isDashboardModule) {
[appDelegate.dashboardViewController.storiesModule
showStoryImage:storyImageUrl];
} else {
[appDelegate.feedDetailViewController
showStoryImage:storyImageUrl];
}
if (self.isDashboardModule) {
[appDelegate.dashboardViewController.storiesModule
showStoryImage:storyImageUrl];
} else {
[appDelegate.feedDetailViewController
showStoryImage:storyImageUrl];
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
}
}];
[cacheImagesOperation setQualityOfService:NSQualityOfServiceBackground];

View file

@ -30,7 +30,7 @@
{
self = [super initWithFrame:frame];
if (self) {
appDelegate = (NewsBlurAppDelegate *)[[UIApplication sharedApplication] delegate];
}
return self;
}
@ -73,8 +73,6 @@
#pragma mark Get Interactions
- (void)fetchInteractionsDetail:(int)page {
self.appDelegate = (NewsBlurAppDelegate *)[[UIApplication sharedApplication] delegate];
// if there is no social profile, we are DONE
// if ([[appDelegate.dictSocialProfile allKeys] count] == 0) {
// self.pageFinished = YES;
@ -103,11 +101,11 @@
[appDelegate.dictSocialProfile objectForKey:@"user_id"],
page];
appDelegate.manager GET:urlString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[appDelegate.networkManager GET:urlString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[self finishLoadInteractions:responseObject];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[appDelegate informError:error];
}
}];
}
}

View file

@ -112,16 +112,16 @@ SFSafariViewControllerDelegate> {
NSURL * activeOriginalStoryURL;
NSString * activeShareType;
NSDictionary * activeComment;
int feedDetailPortraitYCoordinate;
int originalStoryCount;
NSInteger feedDetailPortraitYCoordinate;
NSInteger originalStoryCount;
NSInteger selectedIntelligence;
int savedStoriesCount;
int totalUnfetchedStoryCount;
int remainingUnfetchedStoryCount;
int latestFetchedStoryDate;
int latestCachedImageDate;
int totalUncachedImagesCount;
int remainingUncachedImagesCount;
NSInteger savedStoriesCount;
NSInteger totalUnfetchedStoryCount;
NSInteger remainingUnfetchedStoryCount;
NSInteger latestFetchedStoryDate;
NSInteger latestCachedImageDate;
NSInteger totalUncachedImagesCount;
NSInteger remainingUncachedImagesCount;
NSMutableDictionary * recentlyReadStories;
NSMutableSet * recentlyReadFeeds;
NSMutableArray * readStories;
@ -221,15 +221,15 @@ SFSafariViewControllerDelegate> {
@property (readwrite) NSURL * activeOriginalStoryURL;
@property (readwrite) NSDictionary * activeComment;
@property (readwrite) NSString * activeShareType;
@property (readwrite) int feedDetailPortraitYCoordinate;
@property (readwrite) int originalStoryCount;
@property (readwrite) int savedStoriesCount;
@property (readwrite) int totalUnfetchedStoryCount;
@property (readwrite) int remainingUnfetchedStoryCount;
@property (readwrite) int totalUncachedImagesCount;
@property (readwrite) int remainingUncachedImagesCount;
@property (readwrite) int latestFetchedStoryDate;
@property (readwrite) int latestCachedImageDate;
@property (readwrite) NSInteger feedDetailPortraitYCoordinate;
@property (readwrite) NSInteger originalStoryCount;
@property (readwrite) NSInteger savedStoriesCount;
@property (readwrite) NSInteger totalUnfetchedStoryCount;
@property (readwrite) NSInteger remainingUnfetchedStoryCount;
@property (readwrite) NSInteger totalUncachedImagesCount;
@property (readwrite) NSInteger remainingUncachedImagesCount;
@property (readwrite) NSInteger latestFetchedStoryDate;
@property (readwrite) NSInteger latestCachedImageDate;
@property (readwrite) NSInteger selectedIntelligence;
@property (readwrite) NSMutableDictionary * recentlyReadStories;
@property (readwrite) NSMutableSet * recentlyReadFeeds;

View file

@ -29,7 +29,6 @@
#import "FontSettingsViewController.h"
#import "FeedChooserViewController.h"
#import "UserProfileViewController.h"
#import "AFHTTPRequestOperation.h"
#import "InteractionsModule.h"
#import "ActivityModule.h"
#import "FirstTimeUserViewController.h"
@ -424,31 +423,14 @@
}
NSLog(@" -> APNS token: %@", token);
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/notifications/apns_token/",
self.url]];
ASIFormDataRequest *_request = [ASIFormDataRequest requestWithURL:url];
__weak ASIFormDataRequest *request = _request;
[request setValidatesSecureCertificate:NO];
[request setResponseEncoding:NSUTF8StringEncoding];
[request setDefaultResponseEncoding:NSUTF8StringEncoding];
[params setObject:token
forKey:@"apns_token"];
[request setFailedBlock:^(void) {
NSString *url = [NSString stringWithFormat:@"%@/notifications/apns_token/", self.url];
NSMutableDictionary *params = [NSMutableDictionary dictionary];
[params setObject:token forKey:@"apns_token"];
[networkManager POST:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@" -> APNS: %@", responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"Failed to set APNS token");
}];
[request setCompletionBlock:^(void) {
NSString *responseString = [request responseString];
NSData *responseData=[responseString dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
NSDictionary *results = [NSJSONSerialization
JSONObjectWithData:responseData
options:kNilOptions
error:&error];
NSLog(@" -> APNS: %@/%@", results, error);
}];
[request setTimeOutSeconds:30];
[request startAsynchronous];
}
- (BOOL)application:(UIApplication *)application
@ -1287,7 +1269,7 @@
NSLog(@"Logging out...");
NSString *urlString = [NSString stringWithFormat:@"%@/reader/logout?api=1",
self.url];
[appDelegate.networkManager GET:urlString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[networkManager GET:urlString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[MBProgressHUD hideHUDForView:self.view animated:YES];
[self showLogin];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
@ -1325,7 +1307,7 @@
- (void)refreshUserProfile:(void(^)())callback {
NSString *urlString = [NSString stringWithFormat:@"%@/social/load_user_profile",
self.url];
[appDelegate.networkManager GET:urlString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[networkManager GET:urlString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
self.dictUserProfile = [responseObject objectForKey:@"user_profile"];
self.dictSocialServices = [responseObject objectForKey:@"services"];
callback();
@ -2109,42 +2091,34 @@
- (void)markStoryAsRead:(NSString *)storyHash inFeed:(NSString *)feed withCallback:(void(^)())callback {
NSString *urlString = [NSString stringWithFormat:@"%@/reader/mark_story_hashes_as_read",
self.url];
NSURL *url = [NSURL URLWithString:urlString];
__block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[params setObject:storyHash
forKey:@"story_hash"];
[request setCompletionBlock:^{
NSMutableDictionary *params = [NSMutableDictionary dictionary];
[params setObject:storyHash forKey:@"story_hash"];
[networkManager POST:urlString parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"Marked as read: %@", storyHash);
callback();
}];
[request setFailedBlock:^{
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"Failed marked as read, queueing: %@", storyHash);
NSMutableDictionary *stories = [NSMutableDictionary dictionary];
[stories setObject:@[storyHash] forKey:feed];
[self queueReadStories:stories];
callback();
}];
[request setDelegate:self];
[request startAsynchronous];
}
- (void)markStoryAsStarred:(NSString *)storyHash withCallback:(void(^)())callback {
NSString *urlString = [NSString stringWithFormat:@"%@/reader/mark_story_hash_as_starred",
self.url];
NSURL *url = [NSURL URLWithString:urlString];
__block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[params setObject:storyHash
forKey:@"story_hash"];
[request setCompletionBlock:^{
NSMutableDictionary *params = [NSMutableDictionary dictionary];
[params setObject:storyHash forKey:@"story_hash"];
[networkManager POST:urlString parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"Marked as starred: %@", storyHash);
callback();
}];
[request setFailedBlock:^{
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"Failed marked as starred: %@", storyHash);
callback();
}];
[request setDelegate:self];
[request startAsynchronous];
}
- (void)markStoriesRead:(NSDictionary *)stories inFeeds:(NSArray *)feeds cutoffTimestamp:(NSInteger)cutoff {
@ -2193,18 +2167,6 @@
}
}
- (void)requestFailedMarkStoryRead:(NSError *)error {
// [self informError:@"Failed to mark story as read"];
NSArray *feedIds = [request.userInfo objectForKey:@"feeds"];
NSDictionary *stories = [request.userInfo objectForKey:@"stories"];
[self markStoriesRead:stories inFeeds:feedIds cutoffTimestamp:0];
}
- (void)finishMarkAllAsRead:(NSDictionary *)params {
}
- (void)finishMarkAsRead:(NSDictionary *)story {
if (!storyPageControl.previousPage || !storyPageControl.currentPage || !storyPageControl.nextPage) return;
for (StoryDetailViewController *page in @[storyPageControl.previousPage,
@ -2817,6 +2779,22 @@
#pragma mark -
#pragma mark Classifiers
- (void)failedClassifierSave:(NSURLSessionDataTask *)task {
BaseViewController *view;
if (self.trainerViewController.isViewLoaded && self.trainerViewController.view.window) {
view = self.trainerViewController;
} else {
view = self.storyPageControl.currentPage;
}
NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response;
if (response.statusCode == 503) {
[view informError:@"In maintenance mode"];
} else {
[view informError:@"The server barfed!"];
}
}
- (void)toggleAuthorClassifier:(NSString *)author feedId:(NSString *)feedId {
int authorScore = [[[[storiesCollection.activeClassifiers objectForKey:feedId]
objectForKey:@"authors"]
@ -2841,23 +2819,19 @@
NSString *urlString = [NSString stringWithFormat:@"%@/classifier/save",
self.url];
NSURL *url = [NSURL URLWithString:urlString];
__block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
__weak ASIFormDataRequest *_request = request;
NSMutableDictionary *params = [NSMutableDictionary dictionary];
[params setObject:author
forKey:authorScore >= 1 ? @"like_author" :
authorScore <= -1 ? @"dislike_author" :
@"remove_like_author"];
forKey:authorScore >= 1 ? @"like_author" :
authorScore <= -1 ? @"dislike_author" :
@"remove_like_author"];
[params setObject:feedId forKey:@"feed_id"];
[request setCompletionBlock:^{
[self.feedsViewController refreshFeedList:feedId];
}];
[request setFailedBlock:^{
[self requestClassifierResponse:_request withFeed:feedId];
}];
[request setDelegate:self];
[request startAsynchronous];
[networkManager POST:urlString parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[self.feedsViewController refreshFeedList:feedId];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[self failedClassifierSave:task];
}];
[self recalculateIntelligenceScores:feedId];
[self.feedDetailViewController.storyTitlesTable reloadData];
}
@ -2889,22 +2863,18 @@
NSString *urlString = [NSString stringWithFormat:@"%@/classifier/save",
self.url];
NSURL *url = [NSURL URLWithString:urlString];
__block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
__weak ASIFormDataRequest *_request = request;
NSMutableDictionary *params = [NSMutableDictionary dictionary];
[params setObject:tag
forKey:tagScore >= 1 ? @"like_tag" :
tagScore <= -1 ? @"dislike_tag" :
@"remove_like_tag"];
forKey:tagScore >= 1 ? @"like_tag" :
tagScore <= -1 ? @"dislike_tag" :
@"remove_like_tag"];
[params setObject:feedId forKey:@"feed_id"];
[request setCompletionBlock:^{
[networkManager POST:urlString parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[self.feedsViewController refreshFeedList:feedId];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[self failedClassifierSave:task];
}];
[request setFailedBlock:^{
[self requestClassifierResponse:_request withFeed:feedId];
}];
[request setDelegate:self];
[request startAsynchronous];
[self recalculateIntelligenceScores:feedId];
[self.feedDetailViewController.storyTitlesTable reloadData];
@ -2941,23 +2911,19 @@
NSString *urlString = [NSString stringWithFormat:@"%@/classifier/save",
self.url];
NSURL *url = [NSURL URLWithString:urlString];
__block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
__weak ASIFormDataRequest *_request = request;
NSMutableDictionary *params = [NSMutableDictionary dictionary];
[params setObject:title
forKey:titleScore >= 1 ? @"like_title" :
titleScore <= -1 ? @"dislike_title" :
@"remove_like_title"];
forKey:titleScore >= 1 ? @"like_title" :
titleScore <= -1 ? @"dislike_title" :
@"remove_like_title"];
[params setObject:feedId forKey:@"feed_id"];
[request setCompletionBlock:^{
[self.feedsViewController refreshFeedList:feedId];
}];
[request setFailedBlock:^{
[self requestClassifierResponse:_request withFeed:feedId];
}];
[request setDelegate:self];
[request startAsynchronous];
[networkManager POST:urlString parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[self.feedsViewController refreshFeedList:feedId];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[self failedClassifierSave:task];
}];
[self recalculateIntelligenceScores:feedId];
[self.feedDetailViewController.storyTitlesTable reloadData];
}

View file

@ -20,7 +20,6 @@
#import "UserProfileViewController.h"
#import "StoryDetailViewController.h"
#import "StoryPageControl.h"
#import "AFHTTPRequestOperation.h"
#import "MBProgressHUD.h"
#import "Base64.h"
#import "SBJson4.h"

View file

@ -726,7 +726,8 @@
[appDelegate.networkManager POST:urlString parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[self finishMarkAsSaved:responseObject withParams:params];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[appDelegate informError:error];
[self markStory:params asSaved:NO];
[appDelegate failedMarkAsSaved:params];
}];
}
@ -743,33 +744,22 @@
appDelegate.dictFolders = allFolders;
}
- (void)failedMarkAsSaved:(NSURLResponse *)response {
[self markStory:request.userInfo asSaved:NO];
[appDelegate failedMarkAsSaved:response];
}
- (void)syncStoryAsUnsaved:(NSDictionary *)story {
- (void)syncStoryAsUnsaved:(NSDictionary *)story {
NSString *urlString = [NSString stringWithFormat:@"%@/reader/mark_story_as_unstarred",
self.appDelegate.url];
NSURL *url = [NSURL URLWithString:urlString];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
NSMutableDictionary *params = [NSMutableDictionary dictionary];
[params setObject:[story
objectForKey:@"story_hash"]
forKey:@"story_id"];
objectForKey:@"story_hash"]
forKey:@"story_id"];
[params setObject:[story
objectForKey:@"story_feed_id"]
forKey:@"feed_id"];
[request setDidFinishSelector:@selector(finishMarkAsUnsaved:)];
[request setDidFailSelector:@selector(requestFailed:)];
[request setUserInfo:@{@"story_feed_id":[story
objectForKey:@"story_feed_id"],
@"story_hash":[story
objectForKey:@"story_hash"]}];
[request setDelegate:self];
[request startAsynchronous];
objectForKey:@"story_feed_id"]
forKey:@"feed_id"];
[appDelegate.networkManager POST:urlString parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[self finishMarkAsUnsaved:responseObject withParams:params];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[self markStory:params asSaved:YES];
[appDelegate failedMarkAsUnsaved:params];
}];
}
- (void)finishMarkAsUnsaved:(NSDictionary *)results withParams:(NSDictionary *)params {

View file

@ -15,7 +15,6 @@
#import "UserProfileViewController.h"
#import "ShareViewController.h"
#import "StoryPageControl.h"
#import "AFHTTPRequestOperation.h"
#import "Base64.h"
#import "Utilities.h"
#import "NSString+HTML.h"
@ -1979,10 +1978,9 @@ shouldStartLoadWithRequest:(NSURLRequest *)request
@"Copying..." : @"Saving..."];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
AFHTTPRequestOperation *requestOperation = [[AFHTTPRequestOperation alloc]
initWithRequest:urlRequest];
[requestOperation setResponseSerializer:[AFImageResponseSerializer serializer]];
[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager setResponseSerializer:[AFImageResponseSerializer serializer]];
[manager GET:url.absoluteString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
UIImage *image = responseObject;
if (buttonIndex == actionSheetCopyImageIndex) {
[UIPasteboard generalPasteboard].image = image;
@ -1991,11 +1989,10 @@ shouldStartLoadWithRequest:(NSURLRequest *)request
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
[self flashCheckmarkHud:@"saved"];
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[MBProgressHUD hideHUDForView:self.webView animated:YES];
[self informError:@"Could not fetch image"];
}];
[requestOperation start];
}
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {

View file

@ -10,10 +10,11 @@
#import "BaseViewController.h"
#import "THCircularProgressView.h"
#import "NBNotifier.h"
#import "StoryDetailViewController.h"
@interface StoryPageControl : BaseViewController
<UIScrollViewDelegate, UIPopoverControllerDelegate, UIPopoverPresentationControllerDelegate, UIGestureRecognizerDelegate> {
NewsBlurAppDelegate *appDelegate;
THCircularProgressView *circularProgressView;
UIButton *buttonPrevious;
UIButton *buttonNext;

View file

@ -27,7 +27,6 @@
@implementation StoryPageControl
@synthesize appDelegate;
@synthesize currentPage, nextPage, previousPage;
@synthesize circularProgressView;
@synthesize separatorBarButton;
@ -65,6 +64,7 @@
- (void)viewDidLoad {
[super viewDidLoad];
appDelegate = [NewsBlurAppDelegate sharedAppDelegate];
currentPage = [[StoryDetailViewController alloc]
initWithNibName:@"StoryDetailViewController"
bundle:nil];
@ -557,7 +557,7 @@
}
- (BOOL)isPhoneOrCompact {
return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone || self.appDelegate.isCompactWidth;
return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone || appDelegate.isCompactWidth;
}
- (void)updateTraverseBackground {
@ -621,15 +621,15 @@
if (newIndex > 0 && newIndex >= [appDelegate.storiesCollection.activeFeedStoryLocations count]) {
pageController.pageIndex = -2;
if (self.appDelegate.storiesCollection.feedPage < 100 &&
!self.appDelegate.feedDetailViewController.pageFinished &&
!self.appDelegate.feedDetailViewController.pageFetching) {
[self.appDelegate.feedDetailViewController fetchNextPage:^() {
if (appDelegate.storiesCollection.feedPage < 100 &&
!appDelegate.feedDetailViewController.pageFinished &&
!appDelegate.feedDetailViewController.pageFetching) {
[appDelegate.feedDetailViewController fetchNextPage:^() {
// NSLog(@"Fetched next page, %d stories", [appDelegate.activeFeedStoryLocations count]);
[self applyNewIndex:newIndex pageController:pageController];
}];
} else if (!self.appDelegate.feedDetailViewController.pageFinished &&
!self.appDelegate.feedDetailViewController.pageFetching) {
} else if (!appDelegate.feedDetailViewController.pageFinished &&
!appDelegate.feedDetailViewController.pageFetching) {
[appDelegate.navigationController
popToViewController:[appDelegate.navigationController.viewControllers
objectAtIndex:0]
@ -979,7 +979,7 @@
buttonNext.enabled = YES;
NSInteger nextIndex = [appDelegate.storiesCollection indexOfNextUnreadStory];
NSInteger unreadCount = [appDelegate unreadCount];
BOOL pageFinished = self.appDelegate.feedDetailViewController.pageFinished;
BOOL pageFinished = appDelegate.feedDetailViewController.pageFinished;
if ((nextIndex == -1 && unreadCount > 0 && !pageFinished) ||
nextIndex != -1) {
[buttonNext setTitle:[@"Next" uppercaseString] forState:UIControlStateNormal];
@ -1153,10 +1153,10 @@
- (IBAction)toggleFontSize:(id)sender {
UINavigationController *fontSettingsNavigationController = self.appDelegate.fontSettingsNavigationController;
UINavigationController *fontSettingsNavigationController = appDelegate.fontSettingsNavigationController;
[fontSettingsNavigationController popToRootViewControllerAnimated:NO];
[self.appDelegate showPopoverWithViewController:fontSettingsNavigationController contentSize:CGSizeZero barButtonItem:self.fontSettingsButton];
[appDelegate showPopoverWithViewController:fontSettingsNavigationController contentSize:CGSizeZero barButtonItem:self.fontSettingsButton];
}
- (void)setFontStyle:(NSString *)fontStyle {
@ -1220,10 +1220,10 @@
#pragma mark Story Traversal
- (IBAction)doNextUnreadStory:(id)sender {
FeedDetailViewController *fdvc = self.appDelegate.feedDetailViewController;
FeedDetailViewController *fdvc = appDelegate.feedDetailViewController;
NSInteger nextLocation = [appDelegate.storiesCollection locationOfNextUnreadStory];
NSInteger unreadCount = [appDelegate unreadCount];
BOOL pageFinished = self.appDelegate.feedDetailViewController.pageFinished;
BOOL pageFinished = appDelegate.feedDetailViewController.pageFinished;
[self.loadingIndicator stopAnimating];

View file

@ -80,37 +80,29 @@
MBProgressHUD *HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
HUD.labelText = @"Loading trainer...";
NSString *feedId = [self feedId];
NSURL *url = [NSURL URLWithString:[NSString
stringWithFormat:@"%@/reader/feeds_trainer?feed_id=%@",
self.appDelegate.url, feedId]];
__weak __typeof(&*self)weakSelf = self;
AFHTTPRequestOperation *request = [[AFHTTPRequestOperation alloc] initWithRequest:[NSURLRequest requestWithURL:url]];
[request setResponseSerializer:[AFJSONResponseSerializer serializer]];
[request setCompletionBlockWithSuccess:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {
__strong __typeof(&*weakSelf)strongSelf = weakSelf;
if (!strongSelf) return;
[MBProgressHUD hideHUDForView:strongSelf.view animated:YES];
NSDictionary *results = [responseObject objectAtIndex:0];
NSString *urlString = [NSString stringWithFormat:@"%@/reader/feeds_trainer?feed_id=%@",
self.appDelegate.url, feedId];
[appDelegate.networkManager GET:urlString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[MBProgressHUD hideHUDForView:self.view animated:YES];
NSDictionary *results = responseObject;
NSMutableDictionary *newClassifiers = [[results objectForKey:@"classifiers"] mutableCopy];
[appDelegate.storiesCollection.activeClassifiers setObject:newClassifiers
forKey:feedId];
appDelegate.storiesCollection.activePopularAuthors = [results objectForKey:@"feed_authors"];
appDelegate.storiesCollection.activePopularTags = [results objectForKey:@"feed_tags"];
[self renderTrainer];
} failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) {
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"Failed fetch trainer: %@", error);
[self informError:@"Could not load trainer"];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC),
dispatch_get_main_queue(), ^() {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[appDelegate hidePopover];
} else {
[appDelegate.navigationController dismissViewControllerAnimated:YES completion:nil];
}
});
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[appDelegate hidePopover];
} else {
[appDelegate.navigationController dismissViewControllerAnimated:YES completion:nil];
}
});
}];
[request start];
} else {
[self renderTrainer];
}

View file

@ -23,7 +23,6 @@
@synthesize activitiesArray;
@synthesize activitiesUsername;
@synthesize userProfile;
@synthesize request;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
@ -37,8 +36,6 @@
- (void)dealloc {
self.profileTable.dataSource = nil;
self.profileTable.delegate = nil;
request.delegate = nil;
[request cancel];
}
- (void)viewDidLoad {

View file

@ -13,7 +13,6 @@
@interface OfflineFetchImages : NSOperation
@property (nonatomic) NewsBlurAppDelegate *appDelegate;
@property (readwrite) ASINetworkQueue *imageDownloadOperationQueue;
- (BOOL)fetchImages;
- (NSArray *)uncachedImageUrls;

View file

@ -14,7 +14,6 @@
#import "Utilities.h"
@implementation OfflineFetchImages
@synthesize imageDownloadOperationQueue;
@synthesize appDelegate;
- (void)main {
@ -29,27 +28,18 @@
- (BOOL)fetchImages {
if (self.isCancelled) {
NSLog(@"Images cancelled.");
[imageDownloadOperationQueue cancelAllOperations];
return NO;
}
// NSLog(@"Fetching images...");
NSArray *urls = [self uncachedImageUrls];
if (imageDownloadOperationQueue) {
[imageDownloadOperationQueue cancelAllOperations];
imageDownloadOperationQueue = nil;
}
imageDownloadOperationQueue = [[ASINetworkQueue alloc] init];
imageDownloadOperationQueue.maxConcurrentOperationCount = 8;
imageDownloadOperationQueue.delegate = self;
if (![[[NSUserDefaults standardUserDefaults]
objectForKey:@"offline_image_download"] boolValue] ||
![[[NSUserDefaults standardUserDefaults]
objectForKey:@"offline_allowed"] boolValue] ||
[urls count] == 0) {
NSLog(@"Finished caching images. %d total", appDelegate.totalUncachedImagesCount);
NSLog(@"Finished caching images. %ld total", (long)appDelegate.totalUncachedImagesCount);
dispatch_async(dispatch_get_main_queue(), ^{
[appDelegate.feedsViewController showDoneNotifier];
[appDelegate.feedsViewController hideNotifier];
@ -68,29 +58,31 @@
}
NSMutableArray *downloadRequests = [NSMutableArray array];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager.requestSerializer setTimeoutInterval:5];
manager.responseSerializer = [AFImageResponseSerializer serializer];
dispatch_group_t group = dispatch_group_create();
for (NSArray *urlArray in urls) {
NSString *urlString = [urlArray objectAtIndex:0];
NSString *storyHash = [urlArray objectAtIndex:1];
NSString *storyTimestamp = [urlArray objectAtIndex:2];
dispatch_group_enter(group);
[appDelegate.networkManager GET:urlString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[self storeCachedImage:responseObject storyHash:storyHash storyTimestamp:storyTimestamp];
UIImage *image = (UIImage *)responseObject;
[self storeCachedImage:urlString withImage:image storyHash:storyHash storyTimestamp:storyTimestamp];
dispatch_group_leave(group);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[self storeFailedImage:storyHash];
dispatch_group_leave(group);
}];
[downloadRequests addObject:request];
}
[imageDownloadOperationQueue setQueueDidFinishSelector:@selector(cachedImageQueueFinished:)];
[imageDownloadOperationQueue setShouldCancelAllRequestsOnFailure:NO];
[imageDownloadOperationQueue go];
dispatch_group_notify(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW,
(unsigned long)NULL), ^{
[self cachedImageQueueFinished];
});
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
[imageDownloadOperationQueue addOperations:downloadRequests waitUntilFinished:YES];
for (ASIHTTPRequest *request in downloadRequests) {
[request setRawResponseData:nil];
}
[imageDownloadOperationQueue reset];
// dispatch_async(dispatch_get_main_queue(), ^{
// [appDelegate.feedsViewController hideNotifier];
// });
@ -153,33 +145,25 @@
});
}
- (void)storeCachedImage:(ASIHTTPRequest *)request {
- (void)storeCachedImage:(NSString *)imageUrl withImage:(UIImage *)image storyHash:(NSString *)storyHash storyTimestamp:(NSInteger)storyTimestamp {
if (self.isCancelled) {
NSLog(@"Image cancelled.");
[request clearDelegatesAndCancel];
return;
}
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW,
(unsigned long)NULL), ^{
NSString *storyHash = [[request userInfo] objectForKey:@"story_hash"];
int storyTimestamp = [[[request userInfo] objectForKey:@"story_timestamp"] intValue];
if ([request responseStatusCode] == 200) {
NSData *responseData = [request responseData];
NSString *md5Url = [Utilities md5:[[request originalURL] absoluteString]];
NSData *responseData = UIImageJPEGRepresentation(image, 0.6);
NSString *md5Url = [Utilities md5:imageUrl];
// NSLog(@"Storing image: %@ (%d bytes - %d in queue)", storyHash, [responseData length], [imageDownloadOperationQueue requestsCount]);
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cacheDirectory = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"story_images"];
NSString *fullPath = [cacheDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", md5Url, [[[request originalURL] absoluteString] pathExtension]]];
[fileManager createFileAtPath:fullPath contents:responseData attributes:nil];
} else {
NSLog(@"Failed to fetch: %@ / %@", [[request originalURL] absoluteString], storyHash);
}
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cacheDirectory = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"story_images"];
NSString *fullPath = [cacheDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", md5Url, [imageUrl pathExtension]]];
[fileManager createFileAtPath:fullPath contents:responseData attributes:nil];
[appDelegate.database inDatabase:^(FMDatabase *db) {
[db executeUpdate:@"UPDATE cached_images SET "
@ -212,7 +196,7 @@
}];
}
- (void)cachedImageQueueFinished:(ASINetworkQueue *)queue {
- (void)cachedImageQueueFinished {
NSLog(@"Queue finished: %d total (%d remaining)", appDelegate.totalUncachedImagesCount, appDelegate.remainingUncachedImagesCount);
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
[self fetchImages];

View file

@ -7,11 +7,10 @@
//
#import <Foundation/Foundation.h>
#import "AFHTTPRequestOperation.h"
#import "NewsBlurAppDelegate.h"
@interface OfflineFetchStories : NSOperation {
AFHTTPRequestOperation *request;
}
@property (nonatomic) NewsBlurAppDelegate *appDelegate;

View file

@ -11,7 +11,6 @@
#import "NewsBlurViewController.h"
#import "FMDatabase.h"
#import "FMDatabaseAdditions.h"
#import "AFHTTPRequestOperation.h"
#import "SBJson4.h"
#import "NSObject+SBJSON.h"
@ -66,31 +65,22 @@
}
__block NSCondition *lock = [NSCondition new];
__weak __typeof(&*self)weakSelf = self;
[lock lock];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/reader/river_stories?include_hidden=true&page=0&h=%@",
self.appDelegate.url, [hashes componentsJoinedByString:@"&h="]]];
if (request) request = nil;
request = [[AFHTTPRequestOperation alloc] initWithRequest:[NSURLRequest requestWithURL:url]];
[request setResponseSerializer:[AFJSONResponseSerializer serializer]];
[request setCompletionBlockWithSuccess:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {
__strong __typeof(&*weakSelf)strongSelf = weakSelf;
if (!strongSelf) return;
[strongSelf storeAllUnreadStories:responseObject withHashes:hashes];
NSString *urlString = [NSString stringWithFormat:@"%@/reader/river_stories?include_hidden=true&page=0&h=%@",
self.appDelegate.url, [hashes componentsJoinedByString:@"&h="]];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
[manager GET:urlString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[self storeAllUnreadStories:responseObject withHashes:hashes];
[lock signal];
} failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) {
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"Failed fetch all unreads: %@", error);
[lock signal];
}];
[request setCompletionQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, (unsigned long)NULL)];
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
[request start];
[request waitUntilFinished];
[request.outputStream close];
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
[lock waitUntilDate:[NSDate dateWithTimeIntervalSinceNow:30]];
[lock unlock];

View file

@ -9,12 +9,10 @@
#import <Foundation/Foundation.h>
#import "NewsBlurAppDelegate.h"
#import "FMDatabaseQueue.h"
#import "AFHTTPRequestOperation.h"
@interface OfflineSyncUnreads : NSOperation
@property (nonatomic) NewsBlurAppDelegate *appDelegate;
@property (nonatomic) AFHTTPRequestOperation *request;
- (void)storeUnreadHashes:(NSDictionary *)results;

View file

@ -11,12 +11,10 @@
#import "NewsBlurViewController.h"
#import "FMResultSet.h"
#import "FMDatabase.h"
#import "AFHTTPRequestOperation.h"
@implementation OfflineSyncUnreads
@synthesize appDelegate;
@synthesize request;
- (void)main {
appDelegate = [NewsBlurAppDelegate sharedAppDelegate];
@ -27,27 +25,21 @@
});
__block NSCondition *lock = [NSCondition new];
__weak __typeof(&*self)weakSelf = self;
[lock lock];
NSURL *url = [NSURL URLWithString:[NSString
stringWithFormat:@"%@/reader/unread_story_hashes?include_timestamps=true",
self.appDelegate.url]];
request = [[AFHTTPRequestOperation alloc] initWithRequest:[NSURLRequest requestWithURL:url]];
[request setResponseSerializer:[AFJSONResponseSerializer serializer]];
[request setCompletionBlockWithSuccess:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {
__strong __typeof(&*weakSelf)strongSelf = weakSelf;
NSLog(@"Syncing stories success: %@-%@", weakSelf, strongSelf);
if (!strongSelf) return;
[strongSelf storeUnreadHashes:responseObject];
NSString *urlString = [NSString stringWithFormat:@"%@/reader/unread_story_hashes?include_timestamps=true",
self.appDelegate.url];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
[manager GET:urlString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"Syncing stories success");
[self storeUnreadHashes:responseObject];
[lock signal];
} failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) {
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"Failed fetch all story hashes: %@", error);
[lock signal];
}];
[request setCompletionQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, (unsigned long)NULL)];
[request start];
[lock waitUntilDate:[NSDate dateWithTimeIntervalSinceNow:30]];
[lock unlock];
@ -57,7 +49,7 @@
- (void)storeUnreadHashes:(NSDictionary *)results {
if (self.isCancelled) {
// NSLog(@"Canceled storing unread hashes");
[request cancel];
// [request cancel];
return;
}

View file

@ -276,6 +276,21 @@
FF22FE7716E557D80046165A /* toolbar_tall_background@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FF22FE7516E557D80046165A /* toolbar_tall_background@2x.png */; };
FF26125418C00FEC0055FF4D /* AddressBook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF26125318C00FEC0055FF4D /* AddressBook.framework */; };
FF265F12187B6D4F0080C332 /* fitvid.js in Resources */ = {isa = PBXBuildFile; fileRef = FF265F10187B6B230080C332 /* fitvid.js */; };
FF2924BF1E92DF7C00FCFA63 /* AFAutoPurgingImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = FF29249F1E92DF7C00FCFA63 /* AFAutoPurgingImageCache.m */; };
FF2924C01E92DF7C00FCFA63 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FF2924A11E92DF7C00FCFA63 /* AFHTTPSessionManager.m */; };
FF2924C11E92DF7C00FCFA63 /* AFImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = FF2924A31E92DF7C00FCFA63 /* AFImageDownloader.m */; };
FF2924C21E92DF7C00FCFA63 /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FF2924A51E92DF7C00FCFA63 /* AFNetworkActivityIndicatorManager.m */; };
FF2924C31E92DF7C00FCFA63 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FF2924A81E92DF7C00FCFA63 /* AFNetworkReachabilityManager.m */; };
FF2924C41E92DF7C00FCFA63 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = FF2924AA1E92DF7C00FCFA63 /* AFSecurityPolicy.m */; };
FF2924C51E92DF7C00FCFA63 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = FF2924AC1E92DF7C00FCFA63 /* AFURLRequestSerialization.m */; };
FF2924C61E92DF7C00FCFA63 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = FF2924AE1E92DF7C00FCFA63 /* AFURLResponseSerialization.m */; };
FF2924C71E92DF7C00FCFA63 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FF2924B01E92DF7C00FCFA63 /* AFURLSessionManager.m */; };
FF2924C81E92DF7C00FCFA63 /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = FF2924B21E92DF7C00FCFA63 /* UIActivityIndicatorView+AFNetworking.m */; };
FF2924C91E92DF7C00FCFA63 /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = FF2924B41E92DF7C00FCFA63 /* UIButton+AFNetworking.m */; };
FF2924CA1E92DF7C00FCFA63 /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = FF2924B71E92DF7C00FCFA63 /* UIImageView+AFNetworking.m */; };
FF2924CB1E92DF7C00FCFA63 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = FF2924BA1E92DF7C00FCFA63 /* UIProgressView+AFNetworking.m */; };
FF2924CC1E92DF7C00FCFA63 /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = FF2924BC1E92DF7C00FCFA63 /* UIRefreshControl+AFNetworking.m */; };
FF2924CD1E92DF7C00FCFA63 /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = FF2924BE1E92DF7C00FCFA63 /* UIWebView+AFNetworking.m */; };
FF29708B16DD7AA400E92F85 /* segment_active.png in Resources */ = {isa = PBXBuildFile; fileRef = FF29708916DD7AA400E92F85 /* segment_active.png */; };
FF29708C16DD7AA400E92F85 /* segment_inactive.png in Resources */ = {isa = PBXBuildFile; fileRef = FF29708A16DD7AA400E92F85 /* segment_inactive.png */; };
FF29708E16DD7C8A00E92F85 /* segment_left_selected.png in Resources */ = {isa = PBXBuildFile; fileRef = FF29708D16DD7C8A00E92F85 /* segment_left_selected.png */; };
@ -479,16 +494,6 @@
FFCDD90117F65A71000C6483 /* NBSwipeableCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FFCDD90017F65A71000C6483 /* NBSwipeableCell.m */; };
FFD1D7311459B63500E46F89 /* BaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FFD1D7301459B63500E46F89 /* BaseViewController.m */; };
FFD6604C1BACA45D006E4B8D /* THCircularProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = FFD6604B1BACA45D006E4B8D /* THCircularProgressView.m */; };
FFD660611BACA46D006E4B8D /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = FFD6604F1BACA46D006E4B8D /* AFHTTPRequestOperation.m */; };
FFD660621BACA46D006E4B8D /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FFD660511BACA46D006E4B8D /* AFHTTPRequestOperationManager.m */; };
FFD660631BACA46D006E4B8D /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FFD660531BACA46D006E4B8D /* AFHTTPSessionManager.m */; };
FFD660641BACA46D006E4B8D /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FFD660561BACA46D006E4B8D /* AFNetworkReachabilityManager.m */; };
FFD660651BACA46D006E4B8D /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = FFD660581BACA46D006E4B8D /* AFSecurityPolicy.m */; };
FFD660661BACA46D006E4B8D /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = FFD6605A1BACA46D006E4B8D /* AFURLConnectionOperation.m */; };
FFD660671BACA46D006E4B8D /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = FFD6605C1BACA46D006E4B8D /* AFURLRequestSerialization.m */; };
FFD660681BACA46D006E4B8D /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = FFD6605E1BACA46D006E4B8D /* AFURLResponseSerialization.m */; };
FFD660691BACA46D006E4B8D /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FFD660601BACA46D006E4B8D /* AFURLSessionManager.m */; };
FFD6606C1BACA49C006E4B8D /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = FFD6606B1BACA49C006E4B8D /* UIImageView+AFNetworking.m */; };
FFD887F01445F1E800385399 /* AddSiteAutocompleteCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FFD887EE1445F1E800385399 /* AddSiteAutocompleteCell.m */; };
FFDCA0BB16E80877000D8E0C /* GCOAuth.m in Sources */ = {isa = PBXBuildFile; fileRef = FFDCA0B716E80877000D8E0C /* GCOAuth.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
FFDCA0BC16E80877000D8E0C /* NSData+Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = FFDCA0B916E80877000D8E0C /* NSData+Base64.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
@ -911,6 +916,39 @@
FF22FE7516E557D80046165A /* toolbar_tall_background@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "toolbar_tall_background@2x.png"; sourceTree = "<group>"; };
FF26125318C00FEC0055FF4D /* AddressBook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBook.framework; path = System/Library/Frameworks/AddressBook.framework; sourceTree = SDKROOT; };
FF265F10187B6B230080C332 /* fitvid.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; name = fitvid.js; path = static/fitvid.js; sourceTree = SOURCE_ROOT; };
FF29249E1E92DF7C00FCFA63 /* AFAutoPurgingImageCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFAutoPurgingImageCache.h; sourceTree = "<group>"; };
FF29249F1E92DF7C00FCFA63 /* AFAutoPurgingImageCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFAutoPurgingImageCache.m; sourceTree = "<group>"; };
FF2924A01E92DF7C00FCFA63 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPSessionManager.h; sourceTree = "<group>"; };
FF2924A11E92DF7C00FCFA63 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPSessionManager.m; sourceTree = "<group>"; };
FF2924A21E92DF7C00FCFA63 /* AFImageDownloader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFImageDownloader.h; sourceTree = "<group>"; };
FF2924A31E92DF7C00FCFA63 /* AFImageDownloader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFImageDownloader.m; sourceTree = "<group>"; };
FF2924A41E92DF7C00FCFA63 /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFNetworkActivityIndicatorManager.h; sourceTree = "<group>"; };
FF2924A51E92DF7C00FCFA63 /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFNetworkActivityIndicatorManager.m; sourceTree = "<group>"; };
FF2924A61E92DF7C00FCFA63 /* AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFNetworking.h; sourceTree = "<group>"; };
FF2924A71E92DF7C00FCFA63 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFNetworkReachabilityManager.h; sourceTree = "<group>"; };
FF2924A81E92DF7C00FCFA63 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFNetworkReachabilityManager.m; sourceTree = "<group>"; };
FF2924A91E92DF7C00FCFA63 /* AFSecurityPolicy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFSecurityPolicy.h; sourceTree = "<group>"; };
FF2924AA1E92DF7C00FCFA63 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFSecurityPolicy.m; sourceTree = "<group>"; };
FF2924AB1E92DF7C00FCFA63 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLRequestSerialization.h; sourceTree = "<group>"; };
FF2924AC1E92DF7C00FCFA63 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLRequestSerialization.m; sourceTree = "<group>"; };
FF2924AD1E92DF7C00FCFA63 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLResponseSerialization.h; sourceTree = "<group>"; };
FF2924AE1E92DF7C00FCFA63 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLResponseSerialization.m; sourceTree = "<group>"; };
FF2924AF1E92DF7C00FCFA63 /* AFURLSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLSessionManager.h; sourceTree = "<group>"; };
FF2924B01E92DF7C00FCFA63 /* AFURLSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLSessionManager.m; sourceTree = "<group>"; };
FF2924B11E92DF7C00FCFA63 /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIActivityIndicatorView+AFNetworking.h"; sourceTree = "<group>"; };
FF2924B21E92DF7C00FCFA63 /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIActivityIndicatorView+AFNetworking.m"; sourceTree = "<group>"; };
FF2924B31E92DF7C00FCFA63 /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+AFNetworking.h"; sourceTree = "<group>"; };
FF2924B41E92DF7C00FCFA63 /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIButton+AFNetworking.m"; sourceTree = "<group>"; };
FF2924B51E92DF7C00FCFA63 /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+AFNetworking.h"; sourceTree = "<group>"; };
FF2924B61E92DF7C00FCFA63 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+AFNetworking.h"; sourceTree = "<group>"; };
FF2924B71E92DF7C00FCFA63 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+AFNetworking.m"; sourceTree = "<group>"; };
FF2924B81E92DF7C00FCFA63 /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIKit+AFNetworking.h"; sourceTree = "<group>"; };
FF2924B91E92DF7C00FCFA63 /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIProgressView+AFNetworking.h"; sourceTree = "<group>"; };
FF2924BA1E92DF7C00FCFA63 /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIProgressView+AFNetworking.m"; sourceTree = "<group>"; };
FF2924BB1E92DF7C00FCFA63 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIRefreshControl+AFNetworking.h"; sourceTree = "<group>"; };
FF2924BC1E92DF7C00FCFA63 /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIRefreshControl+AFNetworking.m"; sourceTree = "<group>"; };
FF2924BD1E92DF7C00FCFA63 /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIWebView+AFNetworking.h"; sourceTree = "<group>"; };
FF2924BE1E92DF7C00FCFA63 /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIWebView+AFNetworking.m"; sourceTree = "<group>"; };
FF29708916DD7AA400E92F85 /* segment_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = segment_active.png; sourceTree = "<group>"; };
FF29708A16DD7AA400E92F85 /* segment_inactive.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = segment_inactive.png; sourceTree = "<group>"; };
FF29708D16DD7C8A00E92F85 /* segment_left_selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = segment_left_selected.png; sourceTree = "<group>"; };
@ -1207,27 +1245,6 @@
FFD1D7301459B63500E46F89 /* BaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BaseViewController.m; sourceTree = "<group>"; };
FFD6604A1BACA45D006E4B8D /* THCircularProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = THCircularProgressView.h; path = "Other Sources/THCircularProgressView.h"; sourceTree = "<group>"; };
FFD6604B1BACA45D006E4B8D /* THCircularProgressView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = THCircularProgressView.m; path = "Other Sources/THCircularProgressView.m"; sourceTree = "<group>"; };
FFD6604E1BACA46D006E4B8D /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPRequestOperation.h; sourceTree = "<group>"; };
FFD6604F1BACA46D006E4B8D /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPRequestOperation.m; sourceTree = "<group>"; };
FFD660501BACA46D006E4B8D /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPRequestOperationManager.h; sourceTree = "<group>"; };
FFD660511BACA46D006E4B8D /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPRequestOperationManager.m; sourceTree = "<group>"; };
FFD660521BACA46D006E4B8D /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPSessionManager.h; sourceTree = "<group>"; };
FFD660531BACA46D006E4B8D /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPSessionManager.m; sourceTree = "<group>"; };
FFD660541BACA46D006E4B8D /* AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFNetworking.h; sourceTree = "<group>"; };
FFD660551BACA46D006E4B8D /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFNetworkReachabilityManager.h; sourceTree = "<group>"; };
FFD660561BACA46D006E4B8D /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFNetworkReachabilityManager.m; sourceTree = "<group>"; };
FFD660571BACA46D006E4B8D /* AFSecurityPolicy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFSecurityPolicy.h; sourceTree = "<group>"; };
FFD660581BACA46D006E4B8D /* AFSecurityPolicy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFSecurityPolicy.m; sourceTree = "<group>"; };
FFD660591BACA46D006E4B8D /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLConnectionOperation.h; sourceTree = "<group>"; };
FFD6605A1BACA46D006E4B8D /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLConnectionOperation.m; sourceTree = "<group>"; };
FFD6605B1BACA46D006E4B8D /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLRequestSerialization.h; sourceTree = "<group>"; };
FFD6605C1BACA46D006E4B8D /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLRequestSerialization.m; sourceTree = "<group>"; };
FFD6605D1BACA46D006E4B8D /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLResponseSerialization.h; sourceTree = "<group>"; };
FFD6605E1BACA46D006E4B8D /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLResponseSerialization.m; sourceTree = "<group>"; };
FFD6605F1BACA46D006E4B8D /* AFURLSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLSessionManager.h; sourceTree = "<group>"; };
FFD660601BACA46D006E4B8D /* AFURLSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLSessionManager.m; sourceTree = "<group>"; };
FFD6606A1BACA49C006E4B8D /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+AFNetworking.h"; sourceTree = "<group>"; };
FFD6606B1BACA49C006E4B8D /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+AFNetworking.m"; sourceTree = "<group>"; };
FFD887ED1445F1E800385399 /* AddSiteAutocompleteCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddSiteAutocompleteCell.h; sourceTree = "<group>"; };
FFD887EE1445F1E800385399 /* AddSiteAutocompleteCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AddSiteAutocompleteCell.m; sourceTree = "<group>"; };
FFDCA0B616E80877000D8E0C /* GCOAuth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCOAuth.h; sourceTree = "<group>"; };
@ -2383,27 +2400,39 @@
FFD6604D1BACA46D006E4B8D /* AFNetworking */ = {
isa = PBXGroup;
children = (
FFD6606A1BACA49C006E4B8D /* UIImageView+AFNetworking.h */,
FFD6606B1BACA49C006E4B8D /* UIImageView+AFNetworking.m */,
FFD6604E1BACA46D006E4B8D /* AFHTTPRequestOperation.h */,
FFD6604F1BACA46D006E4B8D /* AFHTTPRequestOperation.m */,
FFD660501BACA46D006E4B8D /* AFHTTPRequestOperationManager.h */,
FFD660511BACA46D006E4B8D /* AFHTTPRequestOperationManager.m */,
FFD660521BACA46D006E4B8D /* AFHTTPSessionManager.h */,
FFD660531BACA46D006E4B8D /* AFHTTPSessionManager.m */,
FFD660541BACA46D006E4B8D /* AFNetworking.h */,
FFD660551BACA46D006E4B8D /* AFNetworkReachabilityManager.h */,
FFD660561BACA46D006E4B8D /* AFNetworkReachabilityManager.m */,
FFD660571BACA46D006E4B8D /* AFSecurityPolicy.h */,
FFD660581BACA46D006E4B8D /* AFSecurityPolicy.m */,
FFD660591BACA46D006E4B8D /* AFURLConnectionOperation.h */,
FFD6605A1BACA46D006E4B8D /* AFURLConnectionOperation.m */,
FFD6605B1BACA46D006E4B8D /* AFURLRequestSerialization.h */,
FFD6605C1BACA46D006E4B8D /* AFURLRequestSerialization.m */,
FFD6605D1BACA46D006E4B8D /* AFURLResponseSerialization.h */,
FFD6605E1BACA46D006E4B8D /* AFURLResponseSerialization.m */,
FFD6605F1BACA46D006E4B8D /* AFURLSessionManager.h */,
FFD660601BACA46D006E4B8D /* AFURLSessionManager.m */,
FF29249E1E92DF7C00FCFA63 /* AFAutoPurgingImageCache.h */,
FF29249F1E92DF7C00FCFA63 /* AFAutoPurgingImageCache.m */,
FF2924A01E92DF7C00FCFA63 /* AFHTTPSessionManager.h */,
FF2924A11E92DF7C00FCFA63 /* AFHTTPSessionManager.m */,
FF2924A21E92DF7C00FCFA63 /* AFImageDownloader.h */,
FF2924A31E92DF7C00FCFA63 /* AFImageDownloader.m */,
FF2924A41E92DF7C00FCFA63 /* AFNetworkActivityIndicatorManager.h */,
FF2924A51E92DF7C00FCFA63 /* AFNetworkActivityIndicatorManager.m */,
FF2924A61E92DF7C00FCFA63 /* AFNetworking.h */,
FF2924A71E92DF7C00FCFA63 /* AFNetworkReachabilityManager.h */,
FF2924A81E92DF7C00FCFA63 /* AFNetworkReachabilityManager.m */,
FF2924A91E92DF7C00FCFA63 /* AFSecurityPolicy.h */,
FF2924AA1E92DF7C00FCFA63 /* AFSecurityPolicy.m */,
FF2924AB1E92DF7C00FCFA63 /* AFURLRequestSerialization.h */,
FF2924AC1E92DF7C00FCFA63 /* AFURLRequestSerialization.m */,
FF2924AD1E92DF7C00FCFA63 /* AFURLResponseSerialization.h */,
FF2924AE1E92DF7C00FCFA63 /* AFURLResponseSerialization.m */,
FF2924AF1E92DF7C00FCFA63 /* AFURLSessionManager.h */,
FF2924B01E92DF7C00FCFA63 /* AFURLSessionManager.m */,
FF2924B11E92DF7C00FCFA63 /* UIActivityIndicatorView+AFNetworking.h */,
FF2924B21E92DF7C00FCFA63 /* UIActivityIndicatorView+AFNetworking.m */,
FF2924B31E92DF7C00FCFA63 /* UIButton+AFNetworking.h */,
FF2924B41E92DF7C00FCFA63 /* UIButton+AFNetworking.m */,
FF2924B51E92DF7C00FCFA63 /* UIImage+AFNetworking.h */,
FF2924B61E92DF7C00FCFA63 /* UIImageView+AFNetworking.h */,
FF2924B71E92DF7C00FCFA63 /* UIImageView+AFNetworking.m */,
FF2924B81E92DF7C00FCFA63 /* UIKit+AFNetworking.h */,
FF2924B91E92DF7C00FCFA63 /* UIProgressView+AFNetworking.h */,
FF2924BA1E92DF7C00FCFA63 /* UIProgressView+AFNetworking.m */,
FF2924BB1E92DF7C00FCFA63 /* UIRefreshControl+AFNetworking.h */,
FF2924BC1E92DF7C00FCFA63 /* UIRefreshControl+AFNetworking.m */,
FF2924BD1E92DF7C00FCFA63 /* UIWebView+AFNetworking.h */,
FF2924BE1E92DF7C00FCFA63 /* UIWebView+AFNetworking.m */,
);
name = AFNetworking;
path = "Other Sources/AFNetworking";
@ -2934,15 +2963,11 @@
787A0CDB11CE65330056422D /* FeedDetailViewController.m in Sources */,
FF2EB7B51AA65504002549A7 /* IASKSettingsStore.m in Sources */,
7842ECF811D44A530066CF9D /* StoryDetailViewController.m in Sources */,
FFD6606C1BACA49C006E4B8D /* UIImageView+AFNetworking.m in Sources */,
7843F50511EEB1A000675F64 /* FeedDetailTableCell.m in Sources */,
784B50ED127E3F68008F90EA /* LoginViewController.m in Sources */,
FF5ACC241DE5F0C000FBD044 /* NotificationsViewController.m in Sources */,
FF2EB7B41AA65504002549A7 /* IASKSettingsReader.m in Sources */,
FFD660691BACA46D006E4B8D /* AFURLSessionManager.m in Sources */,
FFCDD8FE17F6368F000C6483 /* MCSwipeTableViewCell.m in Sources */,
FFD660681BACA46D006E4B8D /* AFURLResponseSerialization.m in Sources */,
FFD660611BACA46D006E4B8D /* AFHTTPRequestOperation.m in Sources */,
78095EC9128F30B500230C8E /* OriginalStoryViewController.m in Sources */,
FF1C4E171A3FB1F4000995E3 /* NBActivityItemSource.m in Sources */,
17C4954B1C129863004805A7 /* UISearchBar+Field.m in Sources */,
@ -2956,6 +2981,7 @@
FF9B8BB217F2351A0036A41C /* NBBarButtonItem.m in Sources */,
FF2D8CE514893BC000057B80 /* MoveSiteViewController.m in Sources */,
433323CD158968ED0025064D /* FirstTimeUserViewController.m in Sources */,
FF2924C41E92DF7C00FCFA63 /* AFSecurityPolicy.m in Sources */,
FF8D1ED01BAA311000725D8A /* SBJson4StreamWriter.m in Sources */,
43763AD1158F90B100B3DBE2 /* FontSettingsViewController.m in Sources */,
439DAB201590DA350019B0EB /* FeedsMenuViewController.m in Sources */,
@ -2963,15 +2989,15 @@
FFA045B519CA49D700618DC4 /* SSWAnimator.m in Sources */,
437AA8CA159394E2005463F5 /* ShareViewController.m in Sources */,
FF8D1ECC1BAA311000725D8A /* SBJson4Parser.m in Sources */,
FFD660661BACA46D006E4B8D /* AFURLConnectionOperation.m in Sources */,
FF2EB7B01AA65504002549A7 /* IASKAppSettingsViewController.m in Sources */,
431B856815A0C45200DCE497 /* FriendsListViewController.m in Sources */,
FFD660621BACA46D006E4B8D /* AFHTTPRequestOperationManager.m in Sources */,
431B856E15A0D91E00DCE497 /* UserProfileViewController.m in Sources */,
FF8D1EDB1BAA3CCD00725D8A /* JNWThrottledBlock.m in Sources */,
FF2EB7B31AA65504002549A7 /* IASKSpecifierValuesViewController.m in Sources */,
431B858115A23C6B00DCE497 /* ProfileBadge.m in Sources */,
437F974C15ACA0ED0007136B /* DashboardViewController.m in Sources */,
FF2924C71E92DF7C00FCFA63 /* AFURLSessionManager.m in Sources */,
FF2924CD1E92DF7C00FCFA63 /* UIWebView+AFNetworking.m in Sources */,
437F976F15AE21290007136B /* ActivityModule.m in Sources */,
437F977215AE70E30007136B /* InteractionsModule.m in Sources */,
43A4C3D715B00966008787B5 /* ABTableViewCell.m in Sources */,
@ -2979,17 +3005,21 @@
43A4C3DA15B00966008787B5 /* GTMNString+HTML.m in Sources */,
43A4C3DC15B00966008787B5 /* main.m in Sources */,
43A4C3DD15B00966008787B5 /* MBProgressHUD.m in Sources */,
FF2924CA1E92DF7C00FCFA63 /* UIImageView+AFNetworking.m in Sources */,
43A4C3E115B00966008787B5 /* NSString+HTML.m in Sources */,
FF6282151A11613900271FDB /* UserTagsViewController.m in Sources */,
FF2EB7BD1AA65504002549A7 /* IASKSwitch.m in Sources */,
43A4C3E315B00966008787B5 /* StringHelper.m in Sources */,
FF1F13D518A9C2BE00FDA816 /* TMMemoryCache.m in Sources */,
FF2924C91E92DF7C00FCFA63 /* UIButton+AFNetworking.m in Sources */,
43A4C3E415B00966008787B5 /* TransparentToolbar.m in Sources */,
FFD660651BACA46D006E4B8D /* AFSecurityPolicy.m in Sources */,
FFD6604C1BACA45D006E4B8D /* THCircularProgressView.m in Sources */,
FF2924C61E92DF7C00FCFA63 /* AFURLResponseSerialization.m in Sources */,
FFA0484419CA73B700618DC4 /* UIView+ViewController.m in Sources */,
17432C891C534BC6003F8FD6 /* FeedChooserViewCell.m in Sources */,
43A4C3E515B00966008787B5 /* UIView+TKCategory.m in Sources */,
FF2924C11E92DF7C00FCFA63 /* AFImageDownloader.m in Sources */,
FF2924C31E92DF7C00FCFA63 /* AFNetworkReachabilityManager.m in Sources */,
43F6A79D15B0CDC60092EE91 /* ActivityCell.m in Sources */,
FF3FA88D1BB2677C001F7C32 /* NBCopyLinkActivity.m in Sources */,
17432C831C53438D003F8FD6 /* FeedChooserViewController.m in Sources */,
@ -2998,13 +3028,11 @@
43ABBCAA15B53A1400EA3111 /* InteractionCell.m in Sources */,
FF2EB7BE1AA65504002549A7 /* IASKTextField.m in Sources */,
FF8D1ECF1BAA311000725D8A /* SBJson4StreamTokeniser.m in Sources */,
FFD660641BACA46D006E4B8D /* AFNetworkReachabilityManager.m in Sources */,
FF5ACC2E1DE63C6D00FBD044 /* MultiSelectSegmentedControl.m in Sources */,
FF8D1ED81BAA33BA00725D8A /* NSObject+SBJSON.m in Sources */,
FF2EB7B11AA65504002549A7 /* IASKAppSettingsWebViewController.m in Sources */,
FF1F13D418A9C2BE00FDA816 /* TMDiskCache.m in Sources */,
FF2EB7BB1AA65504002549A7 /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
FFD660631BACA46D006E4B8D /* AFHTTPSessionManager.m in Sources */,
43D818A315B940C200733444 /* DataUtilities.m in Sources */,
FF03AFFD19F881380063002A /* ARChromeActivity.m in Sources */,
4383DCD615BB8B88007E6611 /* SmallActivityCell.m in Sources */,
@ -3018,6 +3046,8 @@
438FEDE815D5B15F00E3B3C9 /* FollowGrid.m in Sources */,
FF8D1ED21BAA311000725D8A /* SBJson4Writer.m in Sources */,
43B232C015D5F61700D035B4 /* AuthorizeServicesViewController.m in Sources */,
FF2924BF1E92DF7C00FCFA63 /* AFAutoPurgingImageCache.m in Sources */,
FF2924C21E92DF7C00FCFA63 /* AFNetworkActivityIndicatorManager.m in Sources */,
FF2EB7B71AA65504002549A7 /* IASKSettingsStoreUserDefaults.m in Sources */,
FF2EB7BA1AA65504002549A7 /* IASKPSSliderSpecifierViewCell.m in Sources */,
43CE0F5F15DADB7F00608ED8 /* SiteCell.m in Sources */,
@ -3026,6 +3056,7 @@
FFDE35CC161B8F870034BFDE /* FolderTitleView.m in Sources */,
FFDE35DA161D12250034BFDE /* UnreadCountView.m in Sources */,
FFDE35EA162799B90034BFDE /* FeedDetailMenuViewController.m in Sources */,
FF2924C01E92DF7C00FCFA63 /* AFHTTPSessionManager.m in Sources */,
FF4130A3162E10CF00DDB6A7 /* MenuTableViewCell.m in Sources */,
17432C7F1C533FBC003F8FD6 /* MenuViewController.m in Sources */,
17E635AF1C548C580075338E /* FeedChooserItem.m in Sources */,
@ -3033,10 +3064,12 @@
FF67D3B2168924C40057A7DA /* TrainerViewController.m in Sources */,
FF1660CD16D6FD8A00AF8541 /* SmallInteractionCell.m in Sources */,
FF8D1ECE1BAA311000725D8A /* SBJson4StreamParserState.m in Sources */,
FF2924CB1E92DF7C00FCFA63 /* UIProgressView+AFNetworking.m in Sources */,
FF4151C016DED9660013E84B /* UIBarButtonItem+Image.m in Sources */,
FF8D1ED11BAA311000725D8A /* SBJson4StreamWriterState.m in Sources */,
FF5ACC271DE5FA3E00FBD044 /* NotificationFeedCell.m in Sources */,
FFA045B619CA49D700618DC4 /* SSWDirectionalPanGestureRecognizer.m in Sources */,
FF2924CC1E92DF7C00FCFA63 /* UIRefreshControl+AFNetworking.m in Sources */,
FF1F13D318A9C2BE00FDA816 /* TMCache.m in Sources */,
FF22FE5E16E53ADC0046165A /* Underscore+Functional.m in Sources */,
17C074961C14C46B00CFCDB7 /* ThemeManager.m in Sources */,
@ -3049,8 +3082,8 @@
FF753CCF175858FC00344EC9 /* FMDatabaseAdditions.m in Sources */,
FF753CD0175858FC00344EC9 /* FMDatabasePool.m in Sources */,
FF753CD1175858FC00344EC9 /* FMDatabaseQueue.m in Sources */,
FF2924C81E92DF7C00FCFA63 /* UIActivityIndicatorView+AFNetworking.m in Sources */,
FF753CD3175858FC00344EC9 /* FMResultSet.m in Sources */,
FFD660671BACA46D006E4B8D /* AFURLRequestSerialization.m in Sources */,
FF6618C8176184560039913B /* NBNotifier.m in Sources */,
FF03AFF319F87F2E0063002A /* TUSafariActivity.m in Sources */,
FF03B00A19F987E00063002A /* NJKWebViewProgressView.m in Sources */,
@ -3061,6 +3094,7 @@
FF855B5B1794B0670098D48A /* OfflineSyncUnreads.m in Sources */,
FF855B5E1794B0760098D48A /* OfflineFetchStories.m in Sources */,
FF855B611794B0830098D48A /* OfflineFetchImages.m in Sources */,
FF2924C51E92DF7C00FCFA63 /* AFURLRequestSerialization.m in Sources */,
FF8D1EA71BAA304E00725D8A /* Reachability.m in Sources */,
FFCDD90117F65A71000C6483 /* NBSwipeableCell.m in Sources */,
);