2011-11-12 11 views
1

Gmailの未読メール数は、Cocoa(Mac)とPubSubフレームワークを使用して取得しようとしています。私はPubSubとGmailを使って1つか2つのリンクを見てきましたが、これまで私のコードがあります。PubSubを使用してGmailを未読にする

PSClient *client = [PSClient applicationClient]; 
NSURL *url = [NSURL URLWithString:@"https://mail.google.com/mail/feed/atom/inbox"]; 
PSFeed *feed = [client addFeedWithURL:url]; 

[feed setLogin: @"myemailhere"]; 
[feed setPassword: @"mypasswordhere"]; 

NSLog(@"Error: %@", feed.lastError); 

誰かが未読数をどのように取得できるか知っていますか?以下のためのソリューションをあります1と永遠の問題のようです1:

おかげで:)

答えて

3

次の2つの問題を抱えています。

最初の:フィードの更新は非同期で行われます。フィードがリフレッシュされて更新されるタイミングを確認するには、PSFeedRefreshingNotificationとPSFeedEntriesChangedNotificationの通知を聞く必要があります。通知オブジェクトは問題のPSFeedになります。一例として、

-(void)feedRefreshing:(NSNotification*)n 
{ 
    PSFeed *f = [n object]; 
    NSLog(@"Is Refreshing: %@", [f isRefreshing] ? @"Yes" : @"No"); 
    NSLog(@"Feed: %@", f); 
    NSLog(@"XML: %@", [f XMLRepresentation]); 
    NSLog(@"Last Error: %@", [f lastError]); 


    if(![f isRefreshing]) 
    { 
     NSInteger emailCount = 0; 
     NSEnumerator *e = [f entryEnumeratorSortedBy:nil]; 
     id entry = nil; 

     while(entry = [e nextObject]) 
     { 
      emailCount++; 
      NSLog(@"Entry: %@", entry); 
     } 
     NSLog(@"Email Count: %ld", emailCount); 
    } 
} 

-(void)feedUpdated:(NSNotification*)n 
{ 
    NSLog(@"Updated"); 
} 

-(void)pubSubTest 
{ 
    PSClient *client = [PSClient applicationClient]; 
    NSURL *url = [NSURL URLWithString:@"https://mail.google.com/mail/feed/atom/inbox"]; 
    PSFeed *feed = [client addFeedWithURL:url]; 

    [feed setLogin: @"[email protected]"]; 
    [feed setPassword: @"correctPassword"]; 
    NSError *error = nil; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(feedUpdated:) name:PSFeedEntriesChangedNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(feedRefreshing:) name:PSFeedRefreshingNotification object:nil]; 

    [feed refresh:&error]; 
    if(error) 
     NSLog(@"Error: %@", error); 
} 

秒(とはるかに悪い)問題は、PubSubのは、正しく認証されたフィードを処理しないということです。私はhttp://www.dizzey.com/development/fetching-emails-from-gmail-using-cocoa/でこれを見て、自分のシステムで同じ動作を再現しました。このバグが10.7に該当するのか、以前のバージョンのOS Xに影響するのか分かりません。

「回避策」は、NSURLConnectionを使用して未加工フィードXMLの認証取得を実行することです。 initWithData:URL:メソッドを使用して、PSFeedにそれを押し込むことができます。これの非常に深刻な欠点は、あなたが実際にはPubSubingではないことです。タイマーを実行し、必要に応じて手動でフィードを更新する必要があります。

rdar:// problem/10475065(OpenRadar:1430409)というバグを報告するためにできることは、私ができることでした。

アップルが修正する機会を増やすために、重複したバグを提出することをお勧めします。

幸運。

+0

ご協力いただきありがとうございます。私は重複したバグを提出しました。 –

関連する問題