mirror of
https://github.com/viq/NewsBlur.git
synced 2025-09-18 21:43:31 +00:00
Fixing last error. Now to fix everything else that's broken.
This commit is contained in:
parent
bb72b1cc68
commit
ca3309a0ba
20 changed files with 299 additions and 371 deletions
|
@ -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];
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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];
|
||||
}
|
||||
}];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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];
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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];
|
||||
|
||||
|
|
|
@ -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];
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -13,7 +13,6 @@
|
|||
@interface OfflineFetchImages : NSOperation
|
||||
|
||||
@property (nonatomic) NewsBlurAppDelegate *appDelegate;
|
||||
@property (readwrite) ASINetworkQueue *imageDownloadOperationQueue;
|
||||
|
||||
- (BOOL)fetchImages;
|
||||
- (NSArray *)uncachedImageUrls;
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -7,11 +7,10 @@
|
|||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "AFHTTPRequestOperation.h"
|
||||
#import "NewsBlurAppDelegate.h"
|
||||
|
||||
@interface OfflineFetchStories : NSOperation {
|
||||
AFHTTPRequestOperation *request;
|
||||
|
||||
}
|
||||
|
||||
@property (nonatomic) NewsBlurAppDelegate *appDelegate;
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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 */,
|
||||
);
|
||||
|
|
Loading…
Add table
Reference in a new issue