PageRenderTime 94ms CodeModel.GetById 20ms RepoModel.GetById 1ms app.codeStats 0ms

/Twitpic/TwitpicUploader.cs

https://bitbucket.org/ugaya40/instant-image-uploader
C# | 120 lines | 103 code | 17 blank | 0 comment | 7 complexity | 6f876d4c192283a107b80e11b1c65641 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.ComponentModel.Composition;
  6. using InstantImageUploader.Models;
  7. using ImageUploader.Extensions.Twitpic.Properties;
  8. using Codeplex.OAuth;
  9. using System.Reactive.Linq;
  10. using ImageUploader.Extensions.Twitpic;
  11. using System.Xml.Linq;
  12. using System.Diagnostics;
  13. using System.IO;
  14. namespace ImageUploader.Extensions.Twitpic
  15. {
  16. [Export(typeof(IImageUploader))]
  17. public class TwitpicUploader : IImageUploader
  18. {
  19. internal const string CONSUMER_KEY = "0eRp9Vt6k88OTvy1UrnqGQ";
  20. internal const string CONSUMER_SECRET = "ZIFuRWCjkHqI1CZ04ULdJxDabx00CGJacgcpQiGlOk8";
  21. private AccessToken _accessToken;
  22. public void Initialize()
  23. {
  24. Settings.Default.Reload();
  25. if ((!string.IsNullOrEmpty(Settings.Default.AccessTokenKey))
  26. && (!string.IsNullOrEmpty(Settings.Default.AccessTokenSecret)))
  27. {
  28. AccessToken = new AccessToken(Settings.Default.AccessTokenKey, Settings.Default.AccessTokenSecret);
  29. }
  30. }
  31. public void Upload(string imageFilePath)
  32. {
  33. Observable.Defer(() =>
  34. {
  35. var client = new TwitpicClient(CONSUMER_KEY, CONSUMER_SECRET, AccessToken);
  36. return client.UploadPicture("UploadPicture", string.Empty, File.ReadAllBytes(imageFilePath));
  37. })
  38. .Retry(3)
  39. .Select(result => (string)XElement.Parse(result).Element("url"))
  40. .Subscribe(url =>
  41. {
  42. Process.Start(url);
  43. OnSuccessImageUpload(null);
  44. }, (Exception ex) => OnFailedImageUpload("Twitpicへのアップロードに失敗しました"));
  45. }
  46. public Type SettingWindowType
  47. {
  48. get { return typeof(SettingWindow); }
  49. }
  50. public AccessToken AccessToken
  51. {
  52. get
  53. {
  54. return _accessToken;
  55. }
  56. set
  57. {
  58. _accessToken = value;
  59. Settings.Default.AccessTokenKey = _accessToken.Key;
  60. Settings.Default.AccessTokenSecret = _accessToken.Secret;
  61. Settings.Default.Save();
  62. }
  63. }
  64. public event EventHandler<SuccessImageUploadEventArgs> SuccessImageUpload;
  65. private void OnSuccessImageUpload(string messageForUser)
  66. {
  67. var handler = SuccessImageUpload;
  68. if (handler != null)
  69. {
  70. handler(this, new SuccessImageUploadEventArgs(messageForUser));
  71. }
  72. }
  73. public event EventHandler<FailedImageUploadEventArgs> FailedImageUpload;
  74. private void OnFailedImageUpload(string messageForUser)
  75. {
  76. var handler = FailedImageUpload;
  77. if (handler != null)
  78. {
  79. handler(this, new FailedImageUploadEventArgs(messageForUser));
  80. }
  81. }
  82. public string ImageUploaderName
  83. {
  84. get { return "Twitpic"; }
  85. }
  86. public string Description
  87. {
  88. get { return "Twitpic用アップローダです。"; }
  89. }
  90. public string Author
  91. {
  92. get { return "Masanori Onoue (ugaya40)"; }
  93. }
  94. public string Url
  95. {
  96. get { return "http://ugaya40.net"; }
  97. }
  98. public bool IsNeedSetting
  99. {
  100. get { return AccessToken == null; }
  101. }
  102. }
  103. }