Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Full support for Google Reader Sync and ASIHTTP* class

  • Loading branch information...
commit 9d25a33cea87e38fce4e2f26637e4f08691b3412 1 parent d2d4ed0
Salvatore Ansani authored
View
1  AppController.h
@@ -141,6 +141,7 @@
-(IBAction)refreshAllFolderIcons:(id)sender;
-(IBAction)refreshSelectedSubscriptions:(id)sender;
-(IBAction)forceRefreshSelectedSubscriptions:(id)sender;
+-(IBAction)updateRemoteSubscriptions:(id)sender;
-(IBAction)refreshAllSubscriptions:(id)sender;
-(IBAction)cancelAllRefreshes:(id)sender;
-(IBAction)moreStyles:(id)sender;
View
20 AppController.m
@@ -921,7 +921,7 @@ -(NSMenu *)folderMenu
[folderMenu addItem:copyOfMenuItemWithAction(@selector(showXMLSource:))];
[folderMenu addItem:[NSMenuItem separatorItem]];
[folderMenu addItem:copyOfMenuItemWithAction(@selector(syncWithGoogleReader:))];
-
+ [folderMenu addItem:copyOfMenuItemWithAction(@selector(forceRefreshSelectedSubscriptions:))];
return folderMenu;
}
@@ -2797,7 +2797,7 @@ -(ToolbarItem *)toolbarItemWithIdentifier:(NSString *)theIdentifier
*/
-(BOOL)isConnecting
{
- return [[RefreshManager sharedManager] totalConnections] > 0;
+ return [[RefreshManager sharedManager] isConnecting];
}
/* refreshOnTimer
@@ -2843,6 +2843,7 @@ -(void)createNewGoogleReaderSubscription:(NSString *)url underFolder:(NSInteger)
NSInteger folderId = [db addGoogleReaderFolder:title underParent:parentId afterChild:predecessorId subscriptionURL:url];
[db commitTransaction];
+
/*
if (folderId != -1)
{
@@ -3739,6 +3740,7 @@ -(void)searchArticlesWithString:(NSString *)theSearchString
*/
-(IBAction)refreshAllFolderIcons:(id)sender
{
+ LOG_EXPR([foldersTree folders:0]);
if (![self isConnecting])
[[RefreshManager sharedManager] refreshFolderIconCacheForSubscriptions:[foldersTree folders:0]];
}
@@ -3759,8 +3761,17 @@ -(IBAction)refreshAllSubscriptions:(id)sender
-(IBAction)forceRefreshSelectedSubscriptions:(id)sender {
NSLog(@"Force Refresh");
+ [[RefreshManager sharedManager] forceRefreshSubscriptionForFolders:[foldersTree selectedFolders]];
+}
+
+-(IBAction)updateRemoteSubscriptions:(id)sender {
+ NSLog(@"updateRemoteSubscriptions");
+ [[GoogleReader sharedManager] loadSubscriptions:nil];
+ [[GoogleReader sharedManager] updateViennaSubscriptionsWithGoogleSubscriptions:[foldersTree folders:0]];
+
}
+
/* refreshSelectedSubscriptions
* Refresh one or more subscriptions selected from the folders list. The selection we obtain
* may include non-RSS folders so these have to be trimmed out first.
@@ -4142,6 +4153,11 @@ -(BOOL)validateCommonToolbarAndMenuItems:(SEL)theAction validateFlag:(BOOL *)val
*validateFlag = IsRSSFolder(folder) && isMainWindowVisible;
return YES;
}
+ if (theAction == @selector(forceRefreshSelectedSubscriptions:)) {
+ Folder * folder = [db folderFromID:[foldersTree actualSelection]];
+ *validateFlag = IsGoogleReaderFolder(folder);
+ return YES;
+ }
if (theAction == @selector(viewNextUnread:))
{
*validateFlag = [db countOfUnread] > 0;
View
34 Folder.m
@@ -352,18 +352,29 @@ -(NSImage *)image
return [[Folder _iconArray] objectAtIndex:MA_TrashFolderIcon];
if (IsSearchFolder(self))
return [[Folder _iconArray] objectAtIndex:MA_SearchFolderIcon];
- if (IsGoogleReaderFolder(self))
- return [[Folder _iconArray] objectAtIndex:MA_GoogleReaderFolderIcon];
- if (IsRSSFolder(self))
+ // if (IsGoogleReaderFolder(self))
+ // return [[Folder _iconArray] objectAtIndex:MA_GoogleReaderFolderIcon];
+ if (IsRSSFolder(self) || IsGoogleReaderFolder(self))
{
// Try the folder icon cache.
NSImage * imagePtr = nil;
if ([self feedURL])
- {
- NSString * homePageSiteRoot = [[[self homePage] baseURL] convertStringToValidPath];
+ {
+ NSString * homePageSiteRoot;
+ if (IsRSSFolder(self)) {
+ homePageSiteRoot = [[[self homePage] baseURL] convertStringToValidPath];
+ } else {
+ homePageSiteRoot = [[[self feedURL] baseURL] convertStringToValidPath];
+ }
imagePtr = [[FolderImageCache defaultCache] retrieveImage:homePageSiteRoot];
}
- return (imagePtr) ? imagePtr : [[Folder _iconArray] objectAtIndex:MA_RSSFeedIcon];
+ NSImage *altIcon;
+ if (IsRSSFolder(self)) {
+ altIcon = [[Folder _iconArray] objectAtIndex:MA_RSSFeedIcon];
+ } else {
+ altIcon = [[Folder _iconArray] objectAtIndex:MA_GoogleReaderFolderIcon];
+ }
+ return (imagePtr) ? imagePtr : altIcon;
}
// Use the generic folder icon for anything else
@@ -375,7 +386,7 @@ -(NSImage *)image
*/
-(BOOL)hasCachedImage
{
- if (!IsRSSFolder(self))
+ if (!IsRSSFolder(self) && !IsGoogleReaderFolder(self))
return NO;
NSImage * imagePtr = nil;
if ([self feedURL])
@@ -393,6 +404,8 @@ -(NSImage *)standardImage
{
if (IsRSSFolder(self))
return [[Folder _iconArray] objectAtIndex:MA_RSSFeedIcon];
+ if (IsGoogleReaderFolder(self))
+ return [[Folder _iconArray] objectAtIndex:MA_GoogleReaderFolderIcon];
return [self image];
}
@@ -404,7 +417,12 @@ -(void)setImage:(NSImage *)iconImage
{
if ([self feedURL] != nil && iconImage != nil)
{
- NSString * homePageSiteRoot = [[[self homePage] baseURL] convertStringToValidPath];
+ NSString * homePageSiteRoot;
+ if (IsRSSFolder(self)) {
+ homePageSiteRoot = [[[self homePage] baseURL] convertStringToValidPath];
+ } else if (IsGoogleReaderFolder(self)) {
+ homePageSiteRoot = [[[self feedURL] baseURL] convertStringToValidPath];
+ }
[[FolderImageCache defaultCache] addImage:iconImage forURL:homePageSiteRoot];
}
}
View
6 FoldersTree.m
@@ -29,8 +29,6 @@
#import "PopupButton.h"
#import "ViennaApp.h"
#import "BrowserView.h"
-#import "GRSSetFolderOperation.h"
-#import "GRSRenameFolderOperation.h"
// Private functions
@interface FoldersTree (Private)
@@ -1072,12 +1070,14 @@ -(void)outlineView:(NSOutlineView *)olv setObjectValue:(id)object forTableColumn
NSString * oldName = [folder name];
[db setFolderName:[folder itemId] newName:newName];
+ /*
GRSRenameFolderOperation * op = [[GRSRenameFolderOperation alloc] init];
[op setFolder:folder];
[op setOldName:oldName];
[op setNewName:newName];
[operationQueue addOperation:op];
[op release];
+ */
}
}
}
@@ -1242,12 +1242,14 @@ -(BOOL)moveFolders:(NSArray *)array withGoogleSync:(BOOL)sync
if (sync)
{
+ /*
GRSSetFolderOperation * op = [[GRSSetFolderOperation alloc] init];
[op setFolder:[node folder]];
[op setOldParent:[oldParent folder]];
[op setNewParent:[newParent folder]];
[operationQueue addOperation:op];
[op release];
+ */
}
if (newParentId == oldParentId)
View
2  GoogleReader.h
@@ -46,6 +46,6 @@
-(void)disableTag:(NSString *)tagName;
-(void)renameTagFrom:(NSString *)oldName to:(NSString *)newName;
-(void)renameFeed:(NSString *)feedURL to:(NSString *)newName;
--(void)refreshFeed:(Folder*)thisFolder;
+-(ASIHTTPRequest*)refreshFeed:(Folder*)thisFolder shouldIgnoreArticleLimit:(BOOL)ignoreLimit;
@end
View
17 GoogleReader.m
@@ -87,13 +87,17 @@ - (NSString *) URLEncodedString_ch:(NSString*)sourceString {
return output;
}
--(void)refreshFeed:(Folder*)thisFolder {
-
+-(ASIHTTPRequest*)refreshFeed:(Folder*)thisFolder shouldIgnoreArticleLimit:(BOOL)ignoreLimit
+{
//This is a workaround throw a BAD folderupdate value on DB
- NSString *folderLastUpdate = [thisFolder lastUpdateString];
+ NSString *folderLastUpdate = ignoreLimit ? @"0" : [thisFolder lastUpdateString];
if ([folderLastUpdate isEqualToString:@"(null)"]) folderLastUpdate=@"0";
- __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://www.google.com/reader/api/0/stream/contents/feed/%@?client=scroll&comments=false&likes=false&r=n&n=100&ot=%@&T=%@&access_token=%@",[self URLEncodedString_ch:[thisFolder feedURL]],folderLastUpdate, token, oAuthObject.accessToken]]];
+ NSInteger articleLimit = ignoreLimit ? 10000 : 100;
+
+ __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://www.google.com/reader/api/0/stream/contents/feed/%@?client=scroll&comments=false&likes=false&r=n&n=%i&ot=%@&T=%@&access_token=%@", [self URLEncodedString_ch:[thisFolder feedURL]],articleLimit,folderLastUpdate, token, oAuthObject.accessToken]]];
+
+ LOG_EXPR([request url]);
[request setUserInfo:[NSDictionary dictionaryWithObject:thisFolder forKey:@"folder"]];
[request setCompletionBlock:^{
@@ -243,8 +247,8 @@ -(void)refreshFeed:(Folder*)thisFolder {
[request setFailedBlock:^{
LOG_EXPR([request error]);
}];
- [nq addOperation:request];
- [nq go];
+
+ return request;
}
@@ -268,6 +272,7 @@ -(void)completeUpdateViennaSubscriptionsWithGoogleSubscriptions:(NSNotification*
// Get Google subscriptions
for (NSDictionary * feed in subscriptions)
{
+ LOG_EXPR(feed);
NSString * feedID = [feed objectForKey:@"id"];
NSString * feedURL = [feedID stringByReplacingOccurrencesOfString:@"feed/" withString:@""];
View
11 RefreshManager.h
@@ -20,23 +20,21 @@
#import <Cocoa/Cocoa.h>
#import "Database.h"
-#import "AsyncConnection.h"
#import "FeedCredentials.h"
-#import "GRSRefreshOperation.h"
#import "Constants.h"
+#import "ASINetworkQueue.h"
-@interface RefreshManager : NSObject <GRSRefreshDelegate> {
+@interface RefreshManager : NSObject {
NSUInteger maximumConnections;
NSUInteger countOfNewArticles;
- NSMutableArray * connectionsArray;
NSMutableArray * refreshArray;
NSMutableArray * authQueue;
NSTimer * pumpTimer;
FeedCredentials * credentialsController;
BOOL hasStarted;
NSString * statusMessageDuringRefresh;
- NSOperationQueue *operationQueue;
SyncTypes syncType;
+ ASINetworkQueue *networkQueue;
}
+(RefreshManager *)sharedManager;
@@ -48,8 +46,9 @@
-(void)refreshSubscriptionsAfterUnsubscribe:(NSArray *)foldersArray ignoringSubscriptionStatus:(BOOL)ignoreSubStatus;
-(void)refreshSubscriptionsAfterDelete:(NSArray *)foldersArray ignoringSubscriptionStatus:(BOOL)ignoreSubStatus;
-(void)refreshSubscriptionsAfterMerge:(NSArray *)foldersArray ignoringSubscriptionStatus:(BOOL)ignoreSubStatus;
+-(void)forceRefreshSubscriptionForFolders:(NSArray*)foldersArray;
-(void)cancelAll;
+-(BOOL)isConnecting;
-(NSUInteger)countOfNewArticles;
--(NSUInteger)totalConnections;
-(NSString *)statusMessageDuringRefresh;
@end
View
283 RefreshManager.m
@@ -27,10 +27,11 @@
#import "Preferences.h"
#import "Constants.h"
#import "ViennaApp.h"
-#import "AGKeychain.h"
#import "GoogleReader.h"
#import "Constants.h"
#import "AppController.h"
+#import "ASIHTTPRequest.h"
+#import "VTPG_Common.h"
// Singleton
static RefreshManager * _refreshManager = nil;
@@ -39,7 +40,9 @@
typedef enum {
MA_Refresh_NilType = -1,
MA_Refresh_Feed,
- MA_Refresh_FavIcon
+ MA_Refresh_FavIcon,
+ MA_Refresh_GoogleFeed,
+ MA_ForceRefresh_Google_Feed
} RefreshTypes;
// Private functions
@@ -49,14 +52,14 @@ -(void)refreshFavIcon:(Folder *)folder;
-(void)getCredentialsForFolder;
-(void)setFolderErrorFlag:(Folder *)folder flag:(BOOL)theFlag;
-(void)setFolderUpdatingFlag:(Folder *)folder flag:(BOOL)theFlag;
--(void)pumpSubscriptionRefresh:(Folder *)folder;
+-(void)pumpSubscriptionRefresh:(Folder *)folder shouldForceRefresh:(BOOL)force;
-(void)pumpFolderIconRefresh:(Folder *)folder;
--(void)refreshFeed:(Folder *)folder fromURL:(NSURL *)url withLog:(ActivityItem *)aItem;
+-(void)refreshFeed:(Folder *)folder fromURL:(NSURL *)url withLog:(ActivityItem *)aItem shouldForceRefresh:(BOOL)force;
-(void)beginRefreshTimer;
-(void)refreshPumper:(NSTimer *)aTimer;
--(void)addConnection:(AsyncConnection *)conn;
--(void)removeConnection:(AsyncConnection *)conn;
--(void)folderIconRefreshCompleted:(AsyncConnection *)connector;
+-(void)addConnection:(ASIHTTPRequest *)conn;
+-(void)removeConnection:(ASIHTTPRequest *)conn;
+-(void)folderIconRefreshCompleted:(ASIHTTPRequest *)connector;
-(NSString *)getRedirectURL:(NSData *)data;
@end
@@ -140,12 +143,15 @@ -(id)init
maximumConnections = [[Preferences standardPreferences] integerForKey:MAPref_RefreshThreads];
countOfNewArticles = 0;
refreshArray = [[NSMutableArray alloc] initWithCapacity:10];
- connectionsArray = [[NSMutableArray alloc] initWithCapacity:maximumConnections];
authQueue = [[NSMutableArray alloc] init];
hasStarted = NO;
statusMessageDuringRefresh = nil;
- operationQueue = [[NSOperationQueue alloc] init];
-
+ networkQueue = [[ASINetworkQueue alloc] init];
+ [networkQueue setShouldCancelAllRequestsOnFailure:NO];
+ networkQueue.delegate = self;
+ [networkQueue setRequestDidFinishSelector:@selector(nqRequestFinished:)];
+ [networkQueue setRequestDidStartSelector:@selector(nqRequestStarted:)];
+
NSNotificationCenter * nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(handleGotAuthenticationForFolder:) name:@"MA_Notify_GotAuthenticationForFolder" object:nil];
[nc addObserver:self selector:@selector(handleCancelAuthenticationForFolder:) name:@"MA_Notify_CancelAuthenticationForFolder" object:nil];
@@ -154,6 +160,19 @@ -(id)init
return self;
}
+- (void)nqRequestFinished:(ASIHTTPRequest *)request {
+ NSLog(@"Nuova richiesta accodata. CODA: %i",[networkQueue requestsCount]);
+ statusMessageDuringRefresh = [NSString stringWithFormat:@"Queue: (%i) - %@",[networkQueue requestsCount],NSLocalizedString(@"Refreshing subscriptions...", nil)];
+ [[NSNotificationCenter defaultCenter] postNotificationName:@"MA_Notify_RefreshStatus" object:nil];
+}
+
+- (void)nqRequestStarted:(ASIHTTPRequest *)request {
+ NSLog(@"Richiesta terminata. CODA: %i",[networkQueue requestsCount]);
+ statusMessageDuringRefresh = [NSString stringWithFormat:@"Queue: (%i) - %@",[networkQueue requestsCount],NSLocalizedString(@"Refreshing subscriptions...", nil)];
+ [[NSNotificationCenter defaultCenter] postNotificationName:@"MA_Notify_RefreshStatus" object:nil];
+}
+
+
/* sharedManager
* Returns the single instance of the refresh manager.
*/
@@ -183,7 +202,14 @@ -(void)handleWillDeleteFolder:(NSNotification *)nc
if ([item folder] == folder)
[refreshArray removeObjectAtIndex:index];
}
-
+ for (ASIHTTPRequest *theRequest in [networkQueue operations]) {
+ if ([[theRequest userInfo] objectForKey:@"folder"] == folder) {
+ // [theRequest clearDelegatesAndCancel];
+ [self removeConnection:theRequest];
+ break;
+ }
+ }
+/*
index = [connectionsArray count];
while (--index >= 0)
{
@@ -195,7 +221,33 @@ -(void)handleWillDeleteFolder:(NSNotification *)nc
break;
}
}
+ */
+ }
+}
+
+
+-(void)forceRefreshSubscriptionForFolders:(NSArray*)foldersArray
+{
+ statusMessageDuringRefresh = NSLocalizedString(@"Forcing Refresh subscriptions...", nil);
+
+ for (Folder * folder in foldersArray)
+ {
+ if (IsGroupFolder(folder))
+ [self forceRefreshSubscriptionForFolders:[[Database sharedDatabase] arrayOfFolders:[folder itemId]]];
+ else if (IsGoogleReaderFolder(folder))
+ {
+ if (![self isRefreshingFolder:folder ofType:MA_Refresh_GoogleFeed] && ![self isRefreshingFolder:folder ofType:MA_ForceRefresh_Google_Feed])
+ {
+ RefreshItem * newItem = [[RefreshItem alloc] init];
+ [newItem setFolder:folder];
+ [newItem setType:MA_ForceRefresh_Google_Feed];
+ [refreshArray addObject:newItem];
+ [newItem release];
+ }
+ }
}
+ [self beginRefreshTimer];
+
}
/* refreshSubscriptions
@@ -209,24 +261,30 @@ -(void)refreshSubscriptions:(NSArray *)foldersArray ignoringSubscriptionStatus:(
{
if (IsGroupFolder(folder))
[self refreshSubscriptions:[[Database sharedDatabase] arrayOfFolders:[folder itemId]] ignoringSubscriptionStatus:NO];
- else if (IsRSSFolder(folder))
+ else if (IsRSSFolder(folder) || IsGoogleReaderFolder(folder))
{
if (!IsUnsubscribed(folder) || ignoreSubStatus)
{
- if (![self isRefreshingFolder:folder ofType:MA_Refresh_Feed])
+ if (![self isRefreshingFolder:folder ofType:MA_Refresh_Feed] && ![self isRefreshingFolder:folder ofType:MA_Refresh_GoogleFeed])
{
RefreshItem * newItem = [[RefreshItem alloc] init];
[newItem setFolder:folder];
- [newItem setType:MA_Refresh_Feed];
+ if (IsRSSFolder(folder)) {
+ [newItem setType:MA_Refresh_Feed];
+ } else if (IsGoogleReaderFolder(folder)) {
+ [newItem setType:MA_Refresh_GoogleFeed];
+ } else {
+ NSAssert(false, @"Refreshed folder should be RSS or GoogleReader");
+ }
[refreshArray addObject:newItem];
[newItem release];
}
}
- } else if(IsGoogleReaderFolder(folder)) {
+ } /* else if(IsGoogleReaderFolder(folder)) {
NSLog(@"Refreshing a GOOGLE READER feed");
[self setFolderUpdatingFlag:folder flag:YES];
[[GoogleReader sharedManager] refreshFeed:folder];
- }
+ } */
}
[self beginRefreshTimer];
@@ -293,8 +351,9 @@ -(void)refreshFolderIconCacheForSubscriptions:(NSArray *)foldersArray
{
if (IsGroupFolder(folder))
[self refreshFolderIconCacheForSubscriptions:[[Database sharedDatabase] arrayOfFolders:[folder itemId]]];
- else if (IsRSSFolder(folder))
+ else if (IsRSSFolder(folder) || IsGoogleReaderFolder(folder))
{
+ NSLog(@"Ricarico l'icona per il folder %@",[folder name]);
[self refreshFavIcon:folder];
}
}
@@ -310,7 +369,7 @@ -(void)refreshFavIcon:(Folder *)folder
// Do nothing if there's no homepage associated with the feed
// or if the feed already has a favicon.
- if ([folder homePage] == nil || [[folder homePage] isBlank] || [folder hasCachedImage])
+ if (IsRSSFolder(folder) && ([folder homePage] == nil || [[folder homePage] isBlank] || [folder hasCachedImage]))
return;
if (![self isRefreshingFolder:folder ofType:MA_Refresh_FavIcon])
@@ -357,19 +416,15 @@ -(void)cancelAll
// Let the cancel method take care of that.
// Don't cancel until we've enumerated the whole array, however,
// because it can have the side effect of changing the array.
+ /*
for (AsyncConnection * connection in connectionsArray)
{
[connection performSelector:@selector(cancel) withObject:nil afterDelay:0.0];
}
+ */
+ [networkQueue cancelAllOperations];
}
-/* totalConnections
- * Returns the current number of concurrent active connections.
- */
--(NSUInteger)totalConnections
-{
- return [connectionsArray count];
-}
/* countOfNewArticles
*/
@@ -480,7 +535,8 @@ -(void)beginRefreshTimer
*/
-(void)refreshPumper:(NSTimer *)aTimer
{
- while (([connectionsArray count] < maximumConnections) && ([refreshArray count] > 0))
+ // while (([connectionsArray count] < maximumConnections) && ([refreshArray count] > 0))
+ while ([refreshArray count] > 0)
{
RefreshItem * item = [refreshArray objectAtIndex:0];
switch ([item type])
@@ -490,9 +546,14 @@ -(void)refreshPumper:(NSTimer *)aTimer
break;
case MA_Refresh_Feed:
- [self pumpSubscriptionRefresh:[item folder]];
+ case MA_Refresh_GoogleFeed:
+ [self pumpSubscriptionRefresh:[item folder] shouldForceRefresh:NO];
break;
-
+
+ case MA_ForceRefresh_Google_Feed:
+ [self pumpSubscriptionRefresh:[item folder] shouldForceRefresh:YES];
+ break;
+
case MA_Refresh_FavIcon:
[self pumpFolderIconRefresh:[item folder]];
break;
@@ -500,7 +561,8 @@ -(void)refreshPumper:(NSTimer *)aTimer
[refreshArray removeObjectAtIndex:0];
}
- if ([connectionsArray count] == 0 && [refreshArray count] == 0 && hasStarted)
+ // if ([connectionsArray count] == 0 && [refreshArray count] == 0 && hasStarted)
+ if ([networkQueue requestsCount] == 0 && hasStarted)
{
[pumpTimer invalidate];
[pumpTimer release];
@@ -515,7 +577,7 @@ -(void)refreshPumper:(NSTimer *)aTimer
* Pick the folder at the head of the refresh array and spawn a connection to
* refresh that folder.
*/
--(void)pumpSubscriptionRefresh:(Folder *)folder
+-(void)pumpSubscriptionRefresh:(Folder *)folder shouldForceRefresh:(BOOL)force
{
// If this folder needs credentials, add the folder to the list requiring authentication
// and since we can't progress without it, skip this folder on the connection
@@ -551,21 +613,48 @@ -(void)pumpSubscriptionRefresh:(Folder *)folder
// through the database.
[self setFolderUpdatingFlag:folder flag:YES];
- // Additional detail for the log
+ if (IsGoogleReaderFolder(folder)) {
+ // Additional detail for the log
+ [aItem appendDetail:[NSString stringWithFormat:NSLocalizedString(@"Connecting to Google Reader to retrieve %@", nil), urlString]];
+ } else {
+ // Additional detail for the log
[aItem appendDetail:[NSString stringWithFormat:NSLocalizedString(@"Connecting to %@", nil), urlString]];
+ }
+
+ // Kick off the connection
+ [self refreshFeed:folder fromURL:url withLog:aItem shouldForceRefresh:force];
- // Kick off the connection
- [self refreshFeed:folder fromURL:url withLog:aItem];
}
/* refreshFeed
* Refresh a folder's newsfeed using the specified URL.
*/
--(void)refreshFeed:(Folder *)folder fromURL:(NSURL *)url withLog:(ActivityItem *)aItem
+-(void)refreshFeed:(Folder *)folder fromURL:(NSURL *)url withLog:(ActivityItem *)aItem shouldForceRefresh:(BOOL)force
{
- AsyncConnection * conn = [[AsyncConnection alloc] init];
+ //AsyncConnection * conn = [[AsyncConnection alloc] init];
+ ASIHTTPRequest *myRequest;
+
+ if (IsRSSFolder(folder)) {
+ myRequest = [[ASIHTTPRequest alloc] initWithURL:url];
+ [myRequest addRequestHeader:@"If-Modified-Since" value:[folder lastUpdateString]];
+ [myRequest setUserInfo:[NSDictionary dictionaryWithObjectsAndKeys:folder, @"folder", aItem, @"log", nil]];
+ [myRequest setDelegate:self];
+ [myRequest setDidFinishSelector:@selector(folderRefreshCompleted:)];
+ [myRequest setFailedBlock:^{
+ LOG_EXPR([myRequest error]);
+ Folder * folder = (Folder *)[[myRequest userInfo] objectForKey:@"folder"];
+ [self setFolderErrorFlag:folder flag:YES];
+ [aItem appendDetail:[NSString stringWithFormat:@"%@ %@",NSLocalizedString(@"Error retrieving RSS feed:", nil),[[myRequest error] localizedDescription ]]];
+ [self syncFinishedForFolder:folder];
+ }];
+ } else if (IsGoogleReaderFolder(folder)) {
+ myRequest = [[GoogleReader sharedManager] refreshFeed:folder shouldIgnoreArticleLimit:force];
+ }
+ [self addConnection:myRequest];
+
+ /*
@try
{
NSMutableDictionary * headers = [NSMutableDictionary dictionary];
@@ -588,6 +677,7 @@ -(void)refreshFeed:(Folder *)folder fromURL:(NSURL *)url withLog:(ActivityItem *
{
[conn release];
}
+ */
}
/* pumpFolderIconRefresh
@@ -599,8 +689,25 @@ -(void)pumpFolderIconRefresh:(Folder *)folder
NSString * name = [[folder name] isEqualToString:[Database untitledFeedFolderName]] ? [folder feedURL] : [folder name];
ActivityItem * aItem = [[ActivityLog defaultLog] itemByName:name];
- [aItem appendDetail:NSLocalizedString(@"Retrieving folder image", nil)];
+ NSString * favIconPath;
+ if (IsRSSFolder(folder)) {
+ [aItem appendDetail:NSLocalizedString(@"Retrieving folder image", nil)];
+ favIconPath = [NSString stringWithFormat:@"http://%@/favicon.ico", [[[folder homePage] trim] baseURL]];
+ } else if (IsGoogleReaderFolder(folder)) {
+ [aItem appendDetail:NSLocalizedString(@"Retrieving folder image for Google Reader Feed", nil)];
+ favIconPath = [NSString stringWithFormat:@"http://s2.googleusercontent.com/s2/favicons?domain=%@&alt=feed", [[[folder feedURL] trim] baseURL]];
+ } else {
+ NSAssert(false,@"Retrieving Favicon is only supported on RSS or GR feeds!");
+ }
+
+ ASIHTTPRequest *myRequest = [[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:favIconPath]];
+ [myRequest setUserInfo:[NSDictionary dictionaryWithObjectsAndKeys:folder, @"folder", aItem, @"log", nil]];
+ [myRequest setDelegate:self];
+ [myRequest setDidFinishSelector:@selector(folderIconRefreshCompleted:)];
+ [self addConnection:myRequest];
+
+ /*
AsyncConnection * conn = [[AsyncConnection alloc] init];
@try
@@ -621,6 +728,7 @@ -(void)pumpFolderIconRefresh:(Folder *)folder
{
[conn release];
}
+ */
}
- (void)syncFinishedForFolder:(Folder *)folder
@@ -639,37 +747,44 @@ - (void)syncFinishedForFolder:(Folder *)folder
/* folderRefreshCompleted
* Called when a folder refresh completed.
*/
--(void)folderRefreshCompleted:(AsyncConnection *)connector
+-(void)folderRefreshCompleted:(ASIHTTPRequest *)connector
{
- Folder * folder = (Folder *)[connector contextData];
+ //Folder * folder = (Folder *)[connector contextData];
+ Folder * folder = (Folder *)[[connector userInfo] objectForKey:@"folder"];
NSInteger folderId = [folder itemId];
Database * db = [Database sharedDatabase];
+ ActivityItem *connectorItem = [[connector userInfo] objectForKey:@"log"];
/*if ([[Preferences standardPreferences] syncGoogleReader])
{
} else
- */
- {
+
+ { */
[self syncFinishedForFolder:folder];
- }
+ //}
//[self setFolderUpdatingFlag:folder flag:NO];
+ // I Think this should be handled directly!
+ /*
if ([connector status] == MA_Connect_NeedCredentials)
{
if (![authQueue containsObject:folder])
[authQueue addObject:folder];
[self getCredentialsForFolder];
}
- else if ([connector status] == MA_Connect_PermanentRedirect)
+ // else if ([connector status] == MA_Connect_PermanentRedirect)
+ else */
+ if ([connector responseStatusCode] == 301)
{
// We got a permanent redirect from the feed so change the feed URL
// to the new location.
- [db setFolderFeedURL:folderId newFeedURL:[connector URLString]];
- [[connector aItem] appendDetail:[NSString stringWithFormat:NSLocalizedString(@"Feed URL updated to %@", nil), [connector URLString]]];
+ [db setFolderFeedURL:folderId newFeedURL:[[connector url] absoluteString]];
+ [connectorItem appendDetail:[NSString stringWithFormat:NSLocalizedString(@"Feed URL updated to %@", nil), [[connector url] absoluteString]]];
return;
}
- else if ([connector status] == MA_Connect_Stopped)
+ //else if ([connector status] == MA_Connect_Stopped)
+ else if ([connector isCancelled])
{
// Stopping the connection isn't an error, so clear any
// existing error flag.
@@ -682,35 +797,41 @@ -(void)folderRefreshCompleted:(AsyncConnection *)connector
if ([folder flags] & MA_FFlag_CheckForImage)
[self refreshFavIcon:folder];
}
- else if ([connector status] == MA_Connect_URLIsGone)
+ //else if ([connector status] == MA_Connect_URLIsGone)
+ else if ([connector responseStatusCode] == 410)
{
// We got HTTP 410 which means the feed has been intentionally
// removed so unsubscribe the feed.
[db setFolderFlag:folderId flagToSet:MA_FFlag_Unsubscribed];
[[NSNotificationCenter defaultCenter] postNotificationName:@"MA_Notify_FoldersUpdated" object:[NSNumber numberWithInt:folderId]];
}
+ /*
else if ([connector status] == MA_Connect_Failed)
{
// Mark the feed as failed
[self setFolderErrorFlag:folder flag:YES];
}
- else if ([connector status] == MA_Connect_Succeeded)
+ */
+ //else if ([connector status] == MA_Connect_Succeeded)
+ else if ([connector responseStatusCode] == 200)
{
- NSData * receivedData = [connector receivedData];
+ // NSData * receivedData = [connector receivedData];
+ NSData * receivedData = [connector responseData];
// Check whether this is an HTML redirect. If so, create a new connection using
// the redirect.
NSString * redirectURL = [self getRedirectURL:receivedData];
if (redirectURL != nil)
{
- if ([redirectURL isEqualToString:[connector URLString]])
+ if ([redirectURL isEqualToString:[[connector url] absoluteString]])
{
// To prevent an infinite loop, don't redirect to the same URL.
- [[connector aItem] appendDetail:[NSString stringWithFormat:NSLocalizedString(@"Improper infinitely looping URL redirect to %@", nil), [connector URLString]]];
+ //[[connector aItem] appendDetail:[NSString stringWithFormat:NSLocalizedString(@"Improper infinitely looping URL redirect to %@", nil), [connector URLString]]];
+ [connectorItem appendDetail:[NSString stringWithFormat:NSLocalizedString(@"Improper infinitely looping URL redirect to %@", nil), [[connector url] absoluteString]]];
}
else
{
- [self refreshFeed:folder fromURL:[NSURL URLWithString:redirectURL] withLog:[connector aItem]];
+ [self refreshFeed:folder fromURL:[NSURL URLWithString:redirectURL] withLog:connectorItem shouldForceRefresh:NO];
[self removeConnection:connector];
return;
}
@@ -754,14 +875,14 @@ -(void)folderRefreshCompleted:(AsyncConnection *)connector
{
// Mark the feed as failed
[self setFolderErrorFlag:folder flag:YES];
- [[connector aItem] setStatus:NSLocalizedString(@"Error parsing XML data in feed", nil)];
+ [connectorItem setStatus:NSLocalizedString(@"Error parsing XML data in feed", nil)];
[newFeed release];
[self removeConnection:connector];
return;
}
// Log number of bytes we received
- [[connector aItem] appendDetail:[NSString stringWithFormat:NSLocalizedString(@"%ld bytes received", nil), [receivedData length]]];
+ [connectorItem appendDetail:[NSString stringWithFormat:NSLocalizedString(@"%ld bytes received", nil), [receivedData length]]];
// Extract the latest title and description
NSString * feedTitle = [newFeed title];
@@ -862,7 +983,7 @@ -(void)folderRefreshCompleted:(AsyncConnection *)connector
while (([db folderFromName:feedTitle]) != nil)
feedTitle = [NSString stringWithFormat:@"%@ (%i)", oldFeedTitle, index++];
- [[connector aItem] setName:feedTitle];
+ [connectorItem setName:feedTitle];
[db setFolderName:folderId newName:feedTitle];
}
if (feedDescription != nil)
@@ -885,11 +1006,11 @@ -(void)folderRefreshCompleted:(AsyncConnection *)connector
// Send status to the activity log
if (newArticlesFromFeed == 0)
- [[connector aItem] setStatus:NSLocalizedString(@"No new articles available", nil)];
+ [connectorItem setStatus:NSLocalizedString(@"No new articles available", nil)];
else
{
NSString * logText = [NSString stringWithFormat:NSLocalizedString(@"%d new articles retrieved", nil), newArticlesFromFeed];
- [[connector aItem] setStatus:logText];
+ [connectorItem setStatus:logText];
}
// Done with this connection
@@ -902,7 +1023,7 @@ -(void)folderRefreshCompleted:(AsyncConnection *)connector
// Add to count of new articles so far
countOfNewArticles += newArticlesFromFeed;
}
- [self removeConnection:connector];
+ //[self removeConnection:connector];
}
/* getRedirectURL
@@ -995,13 +1116,17 @@ -(NSString *)getRedirectURL:(NSData *)data
/* folderIconRefreshCompleted
* Called when a folder icon refresh completed.
*/
--(void)folderIconRefreshCompleted:(AsyncConnection *)connector
+-(void)folderIconRefreshCompleted:(ASIHTTPRequest *)connector
{
- Folder * folder = [connector contextData];
+ // Folder * folder = [connector contextData];
+ Folder * folder = (Folder *)[[connector userInfo] objectForKey:@"folder"];
+
[self setFolderUpdatingFlag:folder flag:NO];
- if ([connector status] == MA_Connect_Succeeded)
+ //if ([connector status] == MA_Connect_Succeeded)
+ if ([connector responseStatusCode] == 200)
{
- NSImage * iconImage = [[NSImage alloc] initWithData:[connector receivedData]];
+ //NSImage * iconImage = [[NSImage alloc] initWithData:[connector receivedData]];
+ NSImage * iconImage = [[NSImage alloc] initWithData:[connector responseData]];
if (iconImage != nil && [iconImage isValid])
{
[iconImage setScalesWhenResized:YES];
@@ -1026,8 +1151,20 @@ -(void)folderIconRefreshCompleted:(AsyncConnection *)connector
* Add the specified connection to the array of connections
* that we manage.
*/
--(void)addConnection:(AsyncConnection *)conn
+-(void)addConnection:(ASIHTTPRequest *)conn
{
+ if (![[networkQueue operations] containsObject:conn]) {
+ [networkQueue addOperation:conn];
+ if (!hasStarted)
+ {
+ countOfNewArticles = 0;
+ [[NSNotificationCenter defaultCenter] postNotificationName:@"MA_Notify_RefreshStatus" object:nil];
+ hasStarted = YES;
+ [networkQueue go];
+ }
+
+ }
+/*
if (![connectionsArray containsObject:conn])
{
[connectionsArray addObject:conn];
@@ -1038,15 +1175,23 @@ -(void)addConnection:(AsyncConnection *)conn
hasStarted = YES;
}
}
-
+ */
}
/* removeConnection
* Removes the specified connection from the array of connections
* that we manage.
*/
--(void)removeConnection:(AsyncConnection *)conn
+-(void)removeConnection:(ASIHTTPRequest *)conn
{
+ NSAssert([networkQueue requestsCount] > 0, @"Calling removeConnection with zero active connection count");
+ if ([[networkQueue operations] containsObject:conn])
+ {
+ // Close the connection before we release as otherwise it leaks
+ [conn clearDelegatesAndCancel];
+ }
+
+ /*
NSAssert([connectionsArray count] > 0, @"Calling removeConnection with zero active connection count");
if ([connectionsArray containsObject:conn])
{
@@ -1054,8 +1199,15 @@ -(void)removeConnection:(AsyncConnection *)conn
[conn close];
[connectionsArray removeObject:conn];
}
+ */
}
+-(BOOL)isConnecting
+{
+ return [networkQueue requestsCount] > 0;
+}
+
+
/* dealloc
* Clean up after ourselves.
*/
@@ -1064,9 +1216,8 @@ -(void)dealloc
[[NSNotificationCenter defaultCenter] removeObserver:self];
[pumpTimer release];
[authQueue release];
- [connectionsArray release];
[refreshArray release];
- [operationQueue release];
+ [networkQueue release];
[super dealloc];
}
@end
View
4 SyncPreferences.h
@@ -14,8 +14,6 @@
NSButton * syncButton;
NSButton * mergeButton;
NSButton * createButton;
- NSTextField * username;
- NSSecureTextField * password;
SyncMerge * merge;
NSModalSession modalSession;
}
@@ -23,8 +21,6 @@
@property (assign) IBOutlet NSButton *syncButton;
@property (assign) IBOutlet NSButton *mergeButton;
@property (assign) IBOutlet NSButton *createButton;
-@property (assign) IBOutlet NSTextField *username;
-@property (assign) IBOutlet NSSecureTextField *password;
-(IBAction)changeSyncGoogleReader:(id)sender;
-(IBAction)mergeSubscriptions:(id)sender;
View
38 SyncPreferences.m
@@ -9,14 +9,11 @@
#import "SyncPreferences.h"
#import "GoogleReader.h"
#import "Preferences.h"
-#import "AGKeyChain.h"
#import "SyncMerge.h"
@implementation SyncPreferences
@synthesize syncButton, mergeButton, createButton;
-@synthesize username;
-@synthesize password;
-(id)init
{
@@ -35,40 +32,14 @@ -(id)initWithWindow:(NSWindow *)window
return self;
}
--(void)savePassword:(NSString *)pass forUser:(NSString *)user
-{
- if (![AGKeychain checkForExistanceOfKeychainItem:@"Vienna: GoogleReaderSync" withItemKind:@"application password" forUsername:user])
- [AGKeychain addKeychainItem:@"Vienna: GoogleReaderSync" withItemKind:@"application password" forUsername:user withPassword:pass];
- else
- [AGKeychain modifyKeychainItem:@"Vienna: GoogleReaderSync" withItemKind:@"application password" forUsername:user withNewPassword:pass];
-}
-(void)windowWillClose:(NSNotification *)notification
{
Preferences *prefs = [Preferences standardPreferences];
[prefs setSyncGoogleReader:([syncButton state] == NSOnState)];
- [prefs setGoogleUsername:[username stringValue]];
- [prefs savePreferences];
-
- [self savePassword:password.stringValue forUser:username.stringValue];
+ [prefs savePreferences];
}
--(BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor
-{
- Preferences *prefs = [Preferences standardPreferences];
- NSString *val = [fieldEditor string];
-
- if (control.tag == 0) // Username
- {
- [prefs setGoogleUsername:val];
- if ([[password stringValue] length] > 0)
- [self savePassword:[password stringValue] forUser:val];
- }
- else if (control.tag == 1 && [[username stringValue] length] > 0) // Password
- [self savePassword:val forUser:[username stringValue]];
-
- return YES;
-}
-(IBAction)changeSyncGoogleReader:(id)sender
{
@@ -106,11 +77,6 @@ - (void)windowDidLoad
Preferences * prefs = [Preferences standardPreferences];
[syncButton setState:[prefs syncGoogleReader] ? NSOnState : NSOffState];
- [username setStringValue:[prefs googleUsername]];
-
- NSString *pass = [AGKeychain getPasswordFromKeychainItem:@"Vienna: GoogleReaderSync" withItemKind:@"application password" forUsername:[prefs googleUsername]];
- if ([pass length] > 0)
- [password setStringValue:pass];
}
-(void)handleGoogleAuthFailed:(NSNotification *)nc
@@ -134,8 +100,6 @@ -(void)dealloc
[syncButton release];
[mergeButton release];
[createButton release];
- [username release];
- [password release];
[merge release];
}
View
10 TreeNode.m
@@ -271,7 +271,15 @@ -(Folder *)folder
*/
-(NSString *)nodeName
{
- return folder ? [folder name] : @"";
+ // return folder ? [folder name] : @"";
+ if (folder != nil) {
+ if (IsGoogleReaderFolder(folder)) {
+ return [NSString stringWithFormat:@"[G] %@",[folder name]];
+ } else {
+ return [folder name];
+ }
+ }
+ return @"";
}
/* countOfChildren
View
42 Vienna.xcodeproj/project.pbxproj
@@ -30,19 +30,14 @@
61975EBA0B41E0A0001F65FF /* EmptyTrashWarning.m in Sources */ = {isa = PBXBuildFile; fileRef = 61975EB80B41E0A0001F65FF /* EmptyTrashWarning.m */; };
61975F030B41F145001F65FF /* EmptyTrashWarning.nib in Resources */ = {isa = PBXBuildFile; fileRef = 61975F010B41F145001F65FF /* EmptyTrashWarning.nib */; };
61A2CB610A8AC68C006348E8 /* revised.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 61A2CB600A8AC68C006348E8 /* revised.tiff */; };
- 6615BE3613E4AE9D00BCCDEE /* GRSRefreshOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 6615BE3513E4AE9D00BCCDEE /* GRSRefreshOperation.m */; };
6624683713C5D09400C85417 /* SyncPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 6624683613C5D09300C85417 /* SyncPreferences.m */; };
6624683913C5D0B500C85417 /* SyncPreferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6624683813C5D0A200C85417 /* SyncPreferences.xib */; };
6624683B13C5F83000C85417 /* sync.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 6624683A13C5F81F00C85417 /* sync.tiff */; };
662468B113C60A2800C85417 /* JSONKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 662468B013C60A2800C85417 /* JSONKit.m */; };
664F87C713C62DFE00E266DE /* GoogleReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 664F87C613C62DFE00E266DE /* GoogleReader.m */; };
667A4C9B13D8352A0023F2A7 /* libz.1.2.5.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 667A4C9A13D8352A0023F2A7 /* libz.1.2.5.dylib */; };
- 668B5CA313E249E80093B887 /* GRSSetFolderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 668B5CA213E249E80093B887 /* GRSSetFolderOperation.m */; };
- 668B5CA713E253630093B887 /* GRSOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 668B5CA613E253630093B887 /* GRSOperation.m */; };
66A5CDB013F8471300DF7A79 /* SyncMerge.xib in Resources */ = {isa = PBXBuildFile; fileRef = 66A5CDAF13F8471300DF7A79 /* SyncMerge.xib */; };
- 66EA017613EA2DB4007EDEAF /* GRSRenameFolderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 66EA017513EA2DB4007EDEAF /* GRSRenameFolderOperation.m */; };
66EA343813F77D7E00F68393 /* SyncMerge.m in Sources */ = {isa = PBXBuildFile; fileRef = 66EA343713F77D7E00F68393 /* SyncMerge.m */; };
- 66FBBAF213C8763200ED51E5 /* AGKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 66FBBAF113C8763200ED51E5 /* AGKeychain.m */; };
8D15AC2F0486D014006FF6A4 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165FFE840EACC02AAC07 /* InfoPlist.strings */; };
8D15AC320486D014006FF6A4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4B0FDCFA73011CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
8D15AC340486D014006FF6A4 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */; };
@@ -375,8 +370,6 @@
61D9A5300B4200890087C312 /* sv */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = sv; path = sv.lproj/EmptyTrashWarning.nib; sourceTree = "<group>"; };
61D9A5310B4200960087C312 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = zh_CN; path = zh_CN.lproj/EmptyTrashWarning.nib; sourceTree = "<group>"; };
61D9A5320B4200A30087C312 /* zh_TW */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = zh_TW; path = zh_TW.lproj/EmptyTrashWarning.nib; sourceTree = "<group>"; };
- 6615BE3413E4AE9D00BCCDEE /* GRSRefreshOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GRSRefreshOperation.h; sourceTree = "<group>"; };
- 6615BE3513E4AE9D00BCCDEE /* GRSRefreshOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GRSRefreshOperation.m; sourceTree = "<group>"; };
6624683513C5D09200C85417 /* SyncPreferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SyncPreferences.h; sourceTree = "<group>"; };
6624683613C5D09300C85417 /* SyncPreferences.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SyncPreferences.m; sourceTree = "<group>"; };
6624683813C5D0A200C85417 /* SyncPreferences.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SyncPreferences.xib; sourceTree = "<group>"; };
@@ -386,17 +379,9 @@
664F87C513C62DFE00E266DE /* GoogleReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GoogleReader.h; sourceTree = "<group>"; };
664F87C613C62DFE00E266DE /* GoogleReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GoogleReader.m; sourceTree = "<group>"; };
667A4C9A13D8352A0023F2A7 /* libz.1.2.5.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.1.2.5.dylib; path = usr/lib/libz.1.2.5.dylib; sourceTree = SDKROOT; };
- 668B5CA113E249E80093B887 /* GRSSetFolderOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GRSSetFolderOperation.h; sourceTree = "<group>"; };
- 668B5CA213E249E80093B887 /* GRSSetFolderOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GRSSetFolderOperation.m; sourceTree = "<group>"; };
- 668B5CA513E253630093B887 /* GRSOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GRSOperation.h; sourceTree = "<group>"; };
- 668B5CA613E253630093B887 /* GRSOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GRSOperation.m; sourceTree = "<group>"; };
66A5CDAF13F8471300DF7A79 /* SyncMerge.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SyncMerge.xib; sourceTree = "<group>"; };
- 66EA017413EA2DB4007EDEAF /* GRSRenameFolderOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GRSRenameFolderOperation.h; sourceTree = "<group>"; };
- 66EA017513EA2DB4007EDEAF /* GRSRenameFolderOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GRSRenameFolderOperation.m; sourceTree = "<group>"; };
66EA343613F77D7E00F68393 /* SyncMerge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SyncMerge.h; sourceTree = "<group>"; };
66EA343713F77D7E00F68393 /* SyncMerge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SyncMerge.m; sourceTree = "<group>"; };
- 66FBBAF013C8763200ED51E5 /* AGKeychain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AGKeychain.h; sourceTree = "<group>"; };
- 66FBBAF113C8763200ED51E5 /* AGKeychain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AGKeychain.m; sourceTree = "<group>"; };
8D15AC360486D014006FF6A4 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D15AC370486D014006FF6A4 /* Vienna.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Vienna.app; sourceTree = BUILT_PRODUCTS_DIR; };
AA01BA210B05251900CD0695 /* da */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = da; path = da.lproj/InfoWindow.nib; sourceTree = "<group>"; };
@@ -1050,7 +1035,6 @@
isa = PBXGroup;
children = (
EA43C70614A370CB00F2D843 /* DebugHelper */,
- 66FC94EF13CFE07700F768DC /* AGKeychain */,
662468AE13C609F900C85417 /* JSONKit */,
6624689213C6063200C85417 /* ASIHTTPRequest */,
AAC022070E898A0700BA9002 /* Documents & Tools */,
@@ -1265,14 +1249,6 @@
isa = PBXGroup;
children = (
EACB097314A0EF9F00F48809 /* OAUTH2 */,
- 668B5CA513E253630093B887 /* GRSOperation.h */,
- 668B5CA613E253630093B887 /* GRSOperation.m */,
- 668B5CA113E249E80093B887 /* GRSSetFolderOperation.h */,
- 668B5CA213E249E80093B887 /* GRSSetFolderOperation.m */,
- 6615BE3413E4AE9D00BCCDEE /* GRSRefreshOperation.h */,
- 6615BE3513E4AE9D00BCCDEE /* GRSRefreshOperation.m */,
- 66EA017413EA2DB4007EDEAF /* GRSRenameFolderOperation.h */,
- 66EA017513EA2DB4007EDEAF /* GRSRenameFolderOperation.m */,
664F87C513C62DFE00E266DE /* GoogleReader.h */,
664F87C613C62DFE00E266DE /* GoogleReader.m */,
);
@@ -1313,15 +1289,6 @@
name = JSONKit;
sourceTree = "<group>";
};
- 66FC94EF13CFE07700F768DC /* AGKeychain */ = {
- isa = PBXGroup;
- children = (
- 66FBBAF013C8763200ED51E5 /* AGKeychain.h */,
- 66FBBAF113C8763200ED51E5 /* AGKeychain.m */,
- );
- name = AGKeychain;
- sourceTree = "<group>";
- };
AA1A282E0C09BE59005968DC /* Toolbar Buttons */ = {
isa = PBXGroup;
children = (
@@ -2368,11 +2335,6 @@
6624683713C5D09400C85417 /* SyncPreferences.m in Sources */,
662468B113C60A2800C85417 /* JSONKit.m in Sources */,
664F87C713C62DFE00E266DE /* GoogleReader.m in Sources */,
- 66FBBAF213C8763200ED51E5 /* AGKeychain.m in Sources */,
- 668B5CA313E249E80093B887 /* GRSSetFolderOperation.m in Sources */,
- 668B5CA713E253630093B887 /* GRSOperation.m in Sources */,
- 6615BE3613E4AE9D00BCCDEE /* GRSRefreshOperation.m in Sources */,
- 66EA017613EA2DB4007EDEAF /* GRSRenameFolderOperation.m in Sources */,
66EA343813F77D7E00F68393 /* SyncMerge.m in Sources */,
EACB097914A0EFDA00F48809 /* GTMOAuth2Authentication.m in Sources */,
EACB097A14A0EFDA00F48809 /* GTMOAuth2SignIn.m in Sources */,
@@ -2770,6 +2732,7 @@
52BA64020DE9E2FF0008B3E1 /* Development */ = {
isa = XCBuildConfiguration;
buildSettings = {
+ BUILD_NUMBER = 2602;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
PRODUCT_NAME = Release;
};
@@ -2778,6 +2741,7 @@
52BA64030DE9E2FF0008B3E1 /* Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
+ BUILD_NUMBER = 2602;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
PRODUCT_NAME = Release;
};
@@ -2786,6 +2750,7 @@
AA4F9AB30855422400C18279 /* Development */ = {
isa = XCBuildConfiguration;
buildSettings = {
+ BUILD_NUMBER = 2600;
FRAMEWORK_SEARCH_PATHS = (
"$(SRCROOT)",
"$(BUILT_PRODUCTS_DIR)",
@@ -2814,6 +2779,7 @@
AA4F9AB40855422400C18279 /* Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
+ BUILD_NUMBER = 2600;
FRAMEWORK_SEARCH_PATHS = (
"$(SRCROOT)",
"$(BUILT_PRODUCTS_DIR)",
Please sign in to comment.
Something went wrong with that request. Please try again.