TweetView.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Foundation;
  5. using AppKit;
  6. using TwitterSearch.Portable.Models;
  7. using System.Threading.Tasks;
  8. namespace TwitterSearch.Mac
  9. {
  10. public partial class TweetView : AppKit.NSView
  11. {
  12. #region Constructors
  13. // Called when created from unmanaged code
  14. public TweetView (IntPtr handle) : base (handle)
  15. {
  16. Initialize ();
  17. }
  18. // Called when created directly from a XIB file
  19. [Export ("initWithCoder:")]
  20. public TweetView (NSCoder coder) : base (coder)
  21. {
  22. Initialize ();
  23. }
  24. // Shared initialization code
  25. void Initialize ()
  26. {
  27. }
  28. #endregion
  29. public Tweet Tweet { get; set; }
  30. static Dictionary<string, NSImage> cachedImages = new Dictionary<string, NSImage> ();
  31. async Task LoadImage ()
  32. {
  33. NSData d = await Task.Factory.StartNew<NSData> (() => NSData.FromUrl (new NSUrl (Tweet.Image)));
  34. NSImage i = new NSImage (d);
  35. if (!cachedImages.ContainsKey (Tweet.Image))
  36. cachedImages.Add (Tweet.Image, i);
  37. Image.Image = i;
  38. }
  39. public override async void ViewDidMoveToSuperview ()
  40. {
  41. Title.StringValue = string.Format ("{0} at {1}", Tweet.ScreenName, Tweet.Date);
  42. Text.StringValue = Tweet.Text;
  43. // We don't have SDWebImage to do caching for us
  44. if (cachedImages.ContainsKey (Tweet.Image))
  45. Image.Image = cachedImages [Tweet.Image];
  46. else
  47. await LoadImage ();
  48. }
  49. }
  50. }