PageRenderTime 42ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/InstantImageUploader/Models/ImageUploaderApplication.cs

https://bitbucket.org/ugaya40/instant-image-uploader
C# | 133 lines | 112 code | 21 blank | 0 comment | 15 complexity | 42e4543ce80e0c90ff2fc8a41ec846c8 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Livet;
  6. using System.ComponentModel.Composition;
  7. using System.IO;
  8. using System.Xml.Serialization;
  9. using InstantImageUploader.Properties;
  10. using InstantImageUploader.Views;
  11. using System.Diagnostics;
  12. namespace InstantImageUploader.Models
  13. {
  14. public class ImageUploaderApplication
  15. {
  16. private static ImageUploaderApplication _current;
  17. public static ImageUploaderApplication Current
  18. {
  19. get
  20. {
  21. if (_current == null)
  22. {
  23. _current = new ImageUploaderApplication();
  24. }
  25. return _current;
  26. }
  27. }
  28. [ImportMany]
  29. public IEnumerable<IImageUploader> ImageUploaders
  30. {
  31. get;
  32. set;
  33. }
  34. public void Initialize(bool isSetting)
  35. {
  36. Settings.Default.Reload();
  37. ActiveUploader = ImageUploaders.Where(iu => iu.ImageUploaderName == Settings.Default.ActiveImageUploaderName).FirstOrDefault();
  38. if (!isSetting)
  39. {
  40. var arg = ImageUploaders.Where(iu =>
  41. "u:" + iu.ImageUploaderName == Environment.GetCommandLineArgs()
  42. .FirstOrDefault(n => n.StartsWith("u:"))).FirstOrDefault();
  43. if (arg != null)
  44. {
  45. ActiveUploader = arg;
  46. }
  47. if (ActiveUploader == null)
  48. {
  49. OnRequestShowingSettingWindow();
  50. Environment.Exit(0);
  51. }
  52. ActiveUploader.FailedImageUpload += (sender, e) =>
  53. {
  54. OnFailedImageUpload(e);
  55. Environment.Exit(1);
  56. };
  57. ActiveUploader.SuccessImageUpload += (sender, e) =>
  58. {
  59. OnSuccessImageUpload(e);
  60. Environment.Exit(0);
  61. };
  62. ActiveUploader.Initialize();
  63. }
  64. }
  65. public IImageUploader ActiveUploader
  66. {
  67. get;
  68. private set;
  69. }
  70. public void Upload(string filePath)
  71. {
  72. ActiveUploader.Upload(filePath);
  73. }
  74. public void Exit()
  75. {
  76. Environment.Exit(0);
  77. }
  78. #region FailedImageUploadイベント
  79. public event EventHandler<FailedImageUploadEventArgs> FailedImageUpload;
  80. protected virtual void OnFailedImageUpload(FailedImageUploadEventArgs e)
  81. {
  82. var threadSafeHandler = System.Threading.Interlocked.CompareExchange(ref FailedImageUpload, null, null);
  83. if (threadSafeHandler != null)
  84. {
  85. threadSafeHandler(this, e);
  86. }
  87. }
  88. #endregion
  89. #region SuccessImageUploadイベント
  90. public event EventHandler<SuccessImageUploadEventArgs> SuccessImageUpload;
  91. protected virtual void OnSuccessImageUpload(SuccessImageUploadEventArgs e)
  92. {
  93. var threadSafeHandler = System.Threading.Interlocked.CompareExchange(ref SuccessImageUpload, null, null);
  94. if (threadSafeHandler != null)
  95. {
  96. threadSafeHandler(this, e);
  97. }
  98. }
  99. #endregion
  100. #region RequestShowingSettingWindowイベント
  101. public event EventHandler RequestShowingSettingWindow;
  102. private void OnRequestShowingSettingWindow()
  103. {
  104. var handler = RequestShowingSettingWindow;
  105. if (handler != null)
  106. {
  107. handler(this, EventArgs.Empty);
  108. }
  109. }
  110. #endregion
  111. }
  112. }