OSDN Git Service

画像投稿: 複数ファイルのドロップに対応
authorspx <spx268@gmail.com>
Sat, 2 Aug 2014 13:55:02 +0000 (22:55 +0900)
committerspx <spx268@gmail.com>
Sat, 2 Aug 2014 13:55:02 +0000 (22:55 +0900)
OpenTween/MediaSelector.cs
OpenTween/Properties/Resources.Designer.cs
OpenTween/Properties/Resources.en.resx
OpenTween/Properties/Resources.resx
OpenTween/Resources/ChangeLog.txt
OpenTween/Tween.cs

index 7858f17..052e733 100644 (file)
@@ -209,13 +209,18 @@ namespace OpenTween
         /// 投稿するファイルとその投稿先を選択するためのコントロールを表示する。
         /// D&Dをサポートする場合は引数にドロップされたファイル名を指定して呼ぶこと。
         /// </summary>
-        public void BeginSelection(string fileName = null)
+        public void BeginSelection(string[] fileNames = null)
         {
-            if (!string.IsNullOrEmpty(fileName))
+            if (fileNames != null && fileNames.Length > 0)
             {
-                if (!this.Visible)
+                var serviceName = this.ServiceName;
+                if (string.IsNullOrEmpty(serviceName)) return;
+                var service = this.pictureService[serviceName];
+
+                var count = Math.Min(fileNames.Length, service.MaxMediaCount);
+                if (!this.Visible || count > 1)
                 {
-                    // 非表示時のファイル指定は新規選択として扱う
+                    // é\9d\9e表示æ\99\82ã\81¾ã\81\9fã\81¯è¤\87æ\95°ã\81®ã\83\95ã\82¡ã\82¤ã\83«æ\8c\87å®\9aã\81¯æ\96°è¦\8fé\81¸æ\8a\9eã\81¨ã\81\97ã\81¦æ\89±ã\81\86
                     SetImagePageCombo();
 
                     if (this.BeginSelecting != null)
@@ -224,8 +229,21 @@ namespace OpenTween
                     this.Visible = true;
                 }
                 this.Enabled = true;
-                ImagefilePathText.Text = fileName;
-                ImageFromSelectedFile(false);
+
+                if (count == 1)
+                {
+                    ImagefilePathText.Text = fileNames[0];
+                    ImageFromSelectedFile(false);
+                }
+                else
+                {
+                    for (int i = 0; i < count; i++)
+                    {
+                        var index = ImagePageCombo.Items.Count - 1;
+                        if (index == 0) ImagefilePathText.Text = fileNames[i];
+                        ImageFromSelectedFile(index, fileNames[i], false);
+                    }
+                }
             }
             else
             {
@@ -336,31 +354,46 @@ namespace OpenTween
 
         private void ImageFromSelectedFile(bool suppressMsgBox)
         {
-            this.ClearImageSelectedPicture();
+            ImagefilePathText.Text = ImagefilePathText.Text.Trim();
+            ImageFromSelectedFile(-1, ImagefilePathText.Text, suppressMsgBox);
+        }
 
-            try
+        private void ImageFromSelectedFile(int index, string fileName, bool suppressMsgBox)
+        {
+            var serviceName = this.ServiceName;
+            if (string.IsNullOrEmpty(serviceName)) return;
+
+            var selectedIndex = ImagePageCombo.SelectedIndex;
+            if (index < 0) index = selectedIndex;
+
+            if (index >= ImagePageCombo.Items.Count)
+                throw new ArgumentOutOfRangeException("index");
+
+            var imageService = this.pictureService[serviceName];
+            var isSelectedPage = (index == selectedIndex);
+
+            if (isSelectedPage)
+                this.ClearImageSelectedPicture();
+
+            if (string.IsNullOrEmpty(fileName))
             {
-                ImagefilePathText.Text = ImagefilePathText.Text.Trim();
-                var fileName = ImagefilePathText.Text;
-                var serviceName = this.ServiceName;
-                if (string.IsNullOrEmpty(fileName) || string.IsNullOrEmpty(serviceName))
-                {
-                    ClearSelectedImagePage();
-                    return;
-                }
+                ClearImagePage(index);
+                return;
+            }
 
+            try
+            {
                 FileInfo fl = new FileInfo(fileName);
                 string ext = fl.Extension;
-                var imageService = this.pictureService[serviceName];
 
                 if (!imageService.CheckFileExtension(ext))
                 {
                     //画像以外の形式
-                    ClearSelectedImagePage();
+                    ClearImagePage(index);
                     if (!suppressMsgBox)
                     {
                         MessageBox.Show(
-                            string.Format(Properties.Resources.PostPictureWarn3, serviceName, MakeAvailableServiceText(ext, fl.Length), ext),
+                            string.Format(Properties.Resources.PostPictureWarn3, serviceName, MakeAvailableServiceText(ext, fl.Length), ext, fl.Name),
                             Properties.Resources.PostPictureWarn4,
                             MessageBoxButtons.OK,
                             MessageBoxIcon.Warning);
@@ -371,11 +404,11 @@ namespace OpenTween
                 if (!imageService.CheckFileSize(ext, fl.Length))
                 {
                     // ファイルサイズが大きすぎる
-                    ClearSelectedImagePage();
+                    ClearImagePage(index);
                     if (!suppressMsgBox)
                     {
                         MessageBox.Show(
-                            string.Format(Properties.Resources.PostPictureWarn5, serviceName, MakeAvailableServiceText(ext, fl.Length)),
+                            string.Format(Properties.Resources.PostPictureWarn5, serviceName, MakeAvailableServiceText(ext, fl.Length), fl.Name),
                             Properties.Resources.PostPictureWarn4,
                             MessageBoxButtons.OK,
                             MessageBoxIcon.Warning);
@@ -387,23 +420,27 @@ namespace OpenTween
                 {
                     using (var fs = File.OpenRead(fileName))
                     {
-                        ImageSelectedPicture.Image = MemoryImage.CopyFromStream(fs);
+                        var image = MemoryImage.CopyFromStream(fs);
+                        if (isSelectedPage)
+                            ImageSelectedPicture.Image = image;
+                        else
+                            image.Dispose();  //画像チェック後は使わないので破棄する
                     }
-                    SetSelectedImagePage(fileName, MyCommon.UploadFileType.Picture);
+                    SetImagePage(index, fileName, MyCommon.UploadFileType.Picture);
                 }
                 catch (InvalidImageException)
                 {
-                    SetSelectedImagePage(fileName, MyCommon.UploadFileType.MultiMedia);
+                    SetImagePage(index, fileName, MyCommon.UploadFileType.MultiMedia);
                 }
             }
             catch (FileNotFoundException)
             {
-                ClearSelectedImagePage();
+                ClearImagePage(index);
                 if (!suppressMsgBox) MessageBox.Show("File not found.");
             }
             catch (Exception)
             {
-                ClearSelectedImagePage();
+                ClearImagePage(index);
                 if (!suppressMsgBox) MessageBox.Show("The type of this file is not image.");
             }
         }
@@ -577,9 +614,12 @@ namespace OpenTween
 
         private void AddNewImagePage(int selectedIndex)
         {
-            if (this.ServiceName.Equals("Twitter") && selectedIndex < 3)
+            var serviceName = this.ServiceName;
+            if (string.IsNullOrEmpty(serviceName)) return;
+
+            if (selectedIndex < this.pictureService[serviceName].MaxMediaCount - 1)
             {
-                // æ\8a\95稿å\85\88ã\81\8c Twitter ã\81§ã\81\82ã\82\8cã\81°ã\80\81æ\9c\80大 4 æ\9e\9aまで選択できるようにする
+                // æ\8a\95稿å\85\88ã\81®æ\8a\95稿å\8f¯è\83½æ\9e\9aæ\95°まで選択できるようにする
                 var count = ImagePageCombo.Items.Count;
                 if (selectedIndex == count - 1)
                 {
@@ -592,20 +632,36 @@ namespace OpenTween
 
         private void SetSelectedImagePage(string path, MyCommon.UploadFileType type)
         {
-            var idx = ImagePageCombo.SelectedIndex;
-            var item = (SelectedMedia)ImagePageCombo.Items[idx];
+            SetImagePage(-1, path, type);
+        }
+
+        private void SetImagePage(int index, string path, MyCommon.UploadFileType type)
+        {
+            var selectedIndex = ImagePageCombo.SelectedIndex;
+            if (index < 0) index = selectedIndex;
+
+            var item = (SelectedMedia)ImagePageCombo.Items[index];
             item.Path = path;
             item.Type = type;
 
-            AddNewImagePage(idx);
+            AddNewImagePage(index);
         }
 
         private void ClearSelectedImagePage()
         {
-            var item = (SelectedMedia)ImagePageCombo.SelectedItem;
+            ClearImagePage(-1);
+        }
+
+        private void ClearImagePage(int index)
+        {
+            var selectedIndex = ImagePageCombo.SelectedIndex;
+            if (index < 0) index = selectedIndex;
+
+            var item = (SelectedMedia)ImagePageCombo.Items[index];
             item.Path = "";
             item.Type = MyCommon.UploadFileType.Invalid;
-            ImagefilePathText.Text = "";
+
+            if (index == selectedIndex) ImagefilePathText.Text = "";
         }
 
         private void ValidateSelectedImagePage()
index f0b9ada..2402d7c 100644 (file)
@@ -626,6 +626,7 @@ namespace OpenTween.Properties {
         ///   更新履歴
         ///
         ///==== Ver 1.2.3-beta1(2014/xx/xx)
+        /// * FIX: 翻訳機能使用時に発言詳細部のフォント設定が適用されない問題を修正
         ///
         ///==== Ver 1.2.2(2014/07/06)
         /// * このバージョンのOpenTweenは pic.twitter.com に複数枚の画像が含まれている場合の表示に対応していますが、
@@ -636,8 +637,7 @@ namespace OpenTween.Properties {
         ///  - 投稿先に Twitter を選択し、左端のコンボボックスを切り替えることで、最大 4 枚まで選択可能です
         ///  - 投稿するファイルの数・サイズによっては、投稿完了までに若干の時間がかかります
         /// * NEW: GIFMAGAZINE のサムネイル表示に対応
-        ///  - pic.twitter.com に投稿されたアニメーションGIFはTwitterAPI側の対応待ちで当面の間表示はできません
-        /// * CHG [残りの文字列は切り詰められました]&quot;; に類似しているローカライズされた文字列を検索します。
+        ///  - pic.twitter.com に投稿されたアニメーショ [残りの文字列は切り詰められました]&quot;; に類似しているローカライズされた文字列を検索します。
         /// </summary>
         internal static string ChangeLog {
             get {
@@ -1854,6 +1854,7 @@ namespace OpenTween.Properties {
         ///   [投稿先: {0}]
         ///&quot;{2}&quot; の投稿には対応していません。他の投稿先を使用してください。
         ///
+        ///ファイル名: {3}
         ///使用可能な投稿先: {1} に類似しているローカライズされた文字列を検索します。
         /// </summary>
         internal static string PostPictureWarn3 {
@@ -1875,6 +1876,7 @@ namespace OpenTween.Properties {
         ///   [投稿先: {0}]
         ///ファイルが大きすぎます。ファイルサイズを小さくするか、他の投稿先を使用してください。
         ///
+        ///ファイル名: {2}
         ///使用可能な投稿先: {1} に類似しているローカライズされた文字列を検索します。
         /// </summary>
         internal static string PostPictureWarn5 {
index 407c660..35a483d 100644 (file)
@@ -1091,6 +1091,7 @@ Do you want to upload the {1} selected media file(s)?</value>
     <value>[Service: {0}]
 "{2}" is unsupported file type. Use other service.
 
+File: {3}
 Available service: {1}</value>
   </data>
   <data name="PostPictureWarn4" xml:space="preserve">
@@ -1100,6 +1101,7 @@ Available service: {1}</value>
     <value>[Service: {0}]
 File is too large. Reduce the file size, or use other service.
 
+File: {2}
 Available service: {1}</value>
   </data>
   <data name="PostPictureWarn6" xml:space="preserve">
index 1d01276..7de599f 100644 (file)
     <value>[投稿先: {0}]
 "{2}" の投稿には対応していません。他の投稿先を使用してください。
 
+ファイル名: {3}
 使用可能な投稿先: {1}</value>
   </data>
   <data name="PostPictureWarn4" xml:space="preserve">
     <value>[投稿先: {0}]
 ファイルが大きすぎます。ファイルサイズを小さくするか、他の投稿先を使用してください。
 
+ファイル名: {2}
 使用可能な投稿先: {1}</value>
   </data>
   <data name="PostPictureWarn6" xml:space="preserve">
index 201803b..b2a0aa8 100644 (file)
@@ -1,6 +1,8 @@
 更新履歴
 
 ==== Ver 1.2.3-beta1(2014/xx/xx)
+ * CHG: 複数選択状態の画像ファイルをD&Dした際の動作を変更しました
+  - ドロップされたファイルを一度に読み込むようにしました(投稿先の投稿可能枚数までで、現状は pic.twitter.com のみ)
  * FIX: 翻訳機能使用時に発言詳細部のフォント設定が適用されない問題を修正
 
 ==== Ver 1.2.2(2014/07/06)
index 95947d3..bc6426a 100644 (file)
@@ -12391,7 +12391,7 @@ namespace OpenTween
         {
             this.Activate();
             this.BringToFront();
-            ImageSelector.BeginSelection(((string[])e.Data.GetData(DataFormats.FileDrop, false))[0]);
+            ImageSelector.BeginSelection((string[])e.Data.GetData(DataFormats.FileDrop, false));
             StatusText.Focus();
         }