<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>ImageLoadOperation.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -10,6 +10,11 @@ require 'osx/cocoa'
 require 'md5'
 require 'cgi'
 
+def gravatar_url(email, size=36)
+  hash = MD5.hexdigest(email.downcase)
+  NSURL.URLWithString(&quot;http://www.gravatar.com/avatar.php?gravatar_id=#{hash}&amp;size=#{size}&quot;)
+end
+
 class CommitsController &lt; OSX::NSObject
   ib_outlet :commits_table
   ib_outlet :branch_select
@@ -21,10 +26,14 @@ class CommitsController &lt; OSX::NSObject
     @current_commit_offset = 0
     @offset = 50
     @active_commit = nil
-	  @branch = :master
+    @branch = :master
+    @icon_queue = NSOperationQueue.alloc.init
+    @icon_url_map = {}
     @icons = Hash.new do |hash, email|
-      gravatar = NSURL.URLWithString(&quot;http://www.gravatar.com/avatar.php?gravatar_id=#{MD5.hexdigest(email.downcase)}&amp;size=36&quot;)
-      hash[email] = NSImage.alloc.initWithContentsOfURL(gravatar)
+      url = gravatar_url(email)
+      @icon_url_map[url] = email
+      @icon_queue.addOperation(ImageLoadOperation.alloc.initWithURL_delegate(url, self))
+      hash[email] = NSImage.imageNamed(NSImageNameUser)
     end
     
     if(fetch_git_repository)
@@ -106,6 +115,22 @@ class CommitsController &lt; OSX::NSObject
   def webView_contextMenuItemsForElement_defaultMenuItems(view, element, defaultMenuItems)
     nil
   end
+  
+  def imageLoadForURL_didFinishLoading(url, image)
+    email = @icon_url_map[url]
+    @icons[email] = image
+    # indices = NSMutableIndexSet.indexSet
+    # @commits.each_with_index do |commit, idx|
+    #   if commit.author.email == email
+    #     indices.addIndex(idx)
+    #   end
+    # end
+    @commits_table.setNeedsDisplay(true)
+  end
+  
+  def imageLoadForURL_didFailWithError(url, error)
+    STDERR.puts &quot;Async image load failed for URL: #{url}\n#{error}&quot;
+  end
 
   def select_latest_commit
     @commits_table.selectRowIndexes_byExtendingSelection(NSIndexSet.indexSetWithIndex(0), false)</diff>
      <filename>CommitsController.rb</filename>
    </modified>
    <modified>
      <diff>@@ -7,6 +7,7 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
+		0A4023590D949E0E00659E01 /* ImageLoadOperation.rb in Resources */ = {isa = PBXBuildFile; fileRef = 0A4023580D949E0E00659E01 /* ImageLoadOperation.rb */; };
 		0ABA3B1B0D89E53E004B6667 /* nub in Resources */ = {isa = PBXBuildFile; fileRef = 0ABA3B1A0D89E53E004B6667 /* nub */; };
 		283254680D8B792500D99366 /* lib in Resources */ = {isa = PBXBuildFile; fileRef = 283254650D8B792500D99366 /* lib */; };
 		285BB47C0D8306C60027980C /* mime-types in Resources */ = {isa = PBXBuildFile; fileRef = 285BB4690D8306C60027980C /* mime-types */; };
@@ -52,6 +53,7 @@
 
 /* Begin PBXFileReference section */
 		089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = &quot;&lt;group&gt;&quot;; };
+		0A4023580D949E0E00659E01 /* ImageLoadOperation.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = ImageLoadOperation.rb; sourceTree = &quot;&lt;group&gt;&quot;; };
 		0ABA3B1A0D89E53E004B6667 /* nub */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = nub; sourceTree = &quot;&lt;group&gt;&quot;; };
 		1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = &quot;&lt;absolute&gt;&quot;; };
 		283254650D8B792500D99366 /* lib */ = {isa = PBXFileReference; lastKnownFileType = folder; path = lib; sourceTree = &quot;&lt;group&gt;&quot;; };
@@ -104,6 +106,7 @@
 			children = (
 				285BB5450D849EA60027980C /* ApplicationController.rb */,
 				285BB5460D849EA60027980C /* CommitsController.rb */,
+				0A4023580D949E0E00659E01 /* ImageLoadOperation.rb */,
 				285BB5470D849EA60027980C /* InfoWindowController.rb */,
 				4D922CA60D8889DB002A5539 /* CommitSummaryCell.h */,
 				4D922CA70D8889DB002A5539 /* CommitSummaryCell.m */,
@@ -232,7 +235,7 @@
 /* Begin PBXProject section */
 		29B97313FDCFA39411CA2CEA /* Project object */ = {
 			isa = PBXProject;
-			buildConfigurationList = 4D7A7B570ABF745500C2D4C0 /* Build configuration list for PBXProject &quot;gitnub&quot; */;
+			buildConfigurationList = 4D7A7B570ABF745500C2D4C0 /* Build configuration list for PBXProject &quot;GitNub&quot; */;
 			compatibilityVersion = &quot;Xcode 2.4&quot;;
 			hasScannedForEncodings = 0;
 			mainGroup = 29B97314FDCFA39411CA2CEA /* GitNub */;
@@ -269,6 +272,7 @@
 				288CB41D0D878A1C0092B5CC /* Info.xib in Resources */,
 				0ABA3B1B0D89E53E004B6667 /* nub in Resources */,
 				283254680D8B792500D99366 /* lib in Resources */,
+				0A4023590D949E0E00659E01 /* ImageLoadOperation.rb in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -367,7 +371,7 @@
 /* End XCBuildConfiguration section */
 
 /* Begin XCConfigurationList section */
-		4D7A7B570ABF745500C2D4C0 /* Build configuration list for PBXProject &quot;gitnub&quot; */ = {
+		4D7A7B570ABF745500C2D4C0 /* Build configuration list for PBXProject &quot;GitNub&quot; */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
 				4D7A7B580ABF745500C2D4C0 /* Debug */,</diff>
      <filename>GitNub.xcodeproj/project.pbxproj</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>d054f6d8a2f5bd2bf912f92b2acc122e959526c1</id>
    </parent>
  </parents>
  <author>
    <name>Kevin Ballard</name>
    <email>kevin@sb.org</email>
  </author>
  <url>http://github.com/kballard/gitnub/commit/5ff35a947aa9cb8ee3decf08011292d1c1de8599</url>
  <id>5ff35a947aa9cb8ee3decf08011292d1c1de8599</id>
  <committed-date>2008-03-21T20:22:11-07:00</committed-date>
  <authored-date>2008-03-21T20:22:11-07:00</authored-date>
  <message>Implement async load of gravatar images</message>
  <tree>4641b08565a56d0d822152974af0afcf5d803672</tree>
  <committer>
    <name>Kevin Ballard</name>
    <email>kevin@sb.org</email>
  </committer>
</commit>
