From c7f21cfdabc7b8d410ac0cf8b36a090ff65917c3 Mon Sep 17 00:00:00 2001 From: Kimura Youichi Date: Thu, 9 Nov 2017 01:40:59 +0900 Subject: [PATCH] =?utf8?q?=E7=94=BB=E5=83=8F=E6=8A=95=E7=A8=BF=E5=85=88?= =?utf8?q?=E3=81=AE=E3=82=B5=E3=83=BC=E3=83=93=E3=82=B9=E3=81=8B=E3=82=89?= =?utf8?q?=E3=80=8C=E3=81=A4=E3=81=84=E3=81=A3=E3=81=B7=E3=82=8B=E3=83=95?= =?utf8?q?=E3=82=A9=E3=83=88=E3=80=8D=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- OpenTween/Connection/TwipplePhoto.cs | 194 ----------------------------------- OpenTween/MediaSelector.cs | 1 - OpenTween/OpenTween.csproj | 1 - OpenTween/Resources/ChangeLog.txt | 1 + 4 files changed, 1 insertion(+), 196 deletions(-) delete mode 100644 OpenTween/Connection/TwipplePhoto.cs diff --git a/OpenTween/Connection/TwipplePhoto.cs b/OpenTween/Connection/TwipplePhoto.cs deleted file mode 100644 index 334f600d..00000000 --- a/OpenTween/Connection/TwipplePhoto.cs +++ /dev/null @@ -1,194 +0,0 @@ -// OpenTween - Client of Twitter -// Copyright (c) 2013 ANIKITI (@anikiti07) -// (c) 2014 kim_upsilon (@kim_upsilon) -// All rights reserved. -// -// This file is part of OpenTween. -// -// This program is free software; you can redistribute it and/or modify it -// under the terms of the GNU General Public License as published by the Free -// Software Foundation; either version 3 of the License, or (at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with this program. If not, see , or write to -// the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -// Boston, MA 02110-1301, USA. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net; -using System.Net.Http; -using System.Threading.Tasks; -using System.Windows.Forms; -using System.Xml; -using System.Xml.Linq; -using System.Xml.XPath; -using OpenTween.Api; -using OpenTween.Api.DataModel; - -namespace OpenTween.Connection -{ - public sealed class TwipplePhoto : IMediaUploadService - { - private static readonly long MaxFileSize = 4L * 1024 * 1024; - private static readonly IEnumerable SupportedPictureExtensions = new[] - { - ".gif", - ".jpg", - ".png", - }; - - private readonly Twitter twitter; - private readonly TwippleApi twippleApi; - - private TwitterConfiguration twitterConfig; - - #region Constructors - - public TwipplePhoto(Twitter twitter, TwitterConfiguration twitterConfig) - { - this.twitter = twitter ?? throw new ArgumentNullException(nameof(twitter)); - this.twitterConfig = twitterConfig ?? throw new ArgumentNullException(nameof(twitterConfig)); - - this.twippleApi = new TwippleApi(twitter.Api); - } - - #endregion - - public int MaxMediaCount - { - get { return 1; } - } - - public string SupportedFormatsStrForDialog - { - get - { - var filterFormatExtensions = ""; - foreach (var pictureExtension in SupportedPictureExtensions) - { - filterFormatExtensions += '*'; - filterFormatExtensions += pictureExtension; - filterFormatExtensions += ';'; - } - return "Image Files(" + filterFormatExtensions + ")|" + filterFormatExtensions; - } - } - - public bool CanUseAltText => false; - - public bool CheckFileExtension(string fileExtension) - { - return SupportedPictureExtensions.Contains(fileExtension, StringComparer.OrdinalIgnoreCase); - } - - public bool CheckFileSize(string fileExtension, long fileSize) - { - var maxFileSize = this.GetMaxFileSize(fileExtension); - return maxFileSize == null || fileSize <= maxFileSize.Value; - } - - public long? GetMaxFileSize(string fileExtension) - { - return MaxFileSize; - } - - public async Task PostStatusAsync(string text, long? inReplyToStatusId, IMediaItem[] mediaItems) - { - if (mediaItems == null) - throw new ArgumentNullException(nameof(mediaItems)); - - if (mediaItems.Length != 1) - throw new ArgumentOutOfRangeException(nameof(mediaItems)); - - var item = mediaItems[0]; - - if (item == null) - throw new ArgumentException("Err:Media not specified."); - - if (!item.Exists) - throw new ArgumentException("Err:Media not found."); - - var xml = await this.twippleApi.UploadFileAsync(item) - .ConfigureAwait(false); - - var imageUrlElm = xml.XPathSelectElement("/rsp/mediaurl"); - if (imageUrlElm == null) - throw new WebApiException("Invalid API response", xml.ToString()); - - var textWithImageUrl = text + " " + imageUrlElm.Value.Trim(); - - await this.twitter.PostStatus(textWithImageUrl, inReplyToStatusId) - .ConfigureAwait(false); - } - - public int GetReservedTextLength(int mediaCount) - => this.twitterConfig.ShortUrlLength + 1; - - public void UpdateTwitterConfiguration(TwitterConfiguration config) - { - this.twitterConfig = config; - } - - public class TwippleApi - { - private readonly HttpClient http; - - private static readonly Uri UploadEndpoint = new Uri("http://p.twipple.jp/api/upload2"); - - private static readonly Uri OAuthRealm = new Uri("http://api.twitter.com/"); - private static readonly Uri AuthServiceProvider = new Uri("https://api.twitter.com/1.1/account/verify_credentials.json"); - - public TwippleApi(TwitterApi twitterApi) - { - var handler = twitterApi.CreateOAuthEchoHandler(AuthServiceProvider, OAuthRealm); - - this.http = Networking.CreateHttpClient(handler); - this.http.Timeout = Networking.UploadImageTimeout; - } - - /// - /// 画像のアップロードを行います - /// - /// - /// - public async Task UploadFileAsync(IMediaItem item) - { - // 参照: http://p.twipple.jp/wiki/API_Upload2/ja - - using (var request = new HttpRequestMessage(HttpMethod.Post, UploadEndpoint)) - using (var multipart = new MultipartFormDataContent()) - { - request.Content = multipart; - - using (var uploadFromContent = new StringContent(Application.ProductName)) - using (var mediaStream = item.OpenRead()) - using (var mediaContent = new StreamContent(mediaStream)) - { - multipart.Add(uploadFromContent, "upload_from"); - multipart.Add(mediaContent, "media", item.Name); - - using (var response = await this.http.SendAsync(request).ConfigureAwait(false)) - { - var responseText = await response.Content.ReadAsStringAsync() - .ConfigureAwait(false); - - if (!response.IsSuccessStatusCode) - throw new WebApiException(response.StatusCode.ToString(), responseText); - - return XDocument.Parse(responseText); - } - } - } - } - } - } -} \ No newline at end of file diff --git a/OpenTween/MediaSelector.cs b/OpenTween/MediaSelector.cs index c2d934eb..094c82b8 100644 --- a/OpenTween/MediaSelector.cs +++ b/OpenTween/MediaSelector.cs @@ -156,7 +156,6 @@ namespace OpenTween ["Twitter"] = new TwitterPhoto(tw, twitterConfig), ["img.ly"] = new imgly(tw, twitterConfig), ["yfrog"] = new yfrog(tw, twitterConfig), - ["ついっぷるフォト"] = new TwipplePhoto(tw, twitterConfig), ["Imgur"] = new Imgur(tw, twitterConfig), ["Mobypicture"] = new Mobypicture(tw, twitterConfig), }; diff --git a/OpenTween/OpenTween.csproj b/OpenTween/OpenTween.csproj index 4b63e063..52cea07d 100644 --- a/OpenTween/OpenTween.csproj +++ b/OpenTween/OpenTween.csproj @@ -124,7 +124,6 @@ - diff --git a/OpenTween/Resources/ChangeLog.txt b/OpenTween/Resources/ChangeLog.txt index bd5aa959..590cf7bf 100644 --- a/OpenTween/Resources/ChangeLog.txt +++ b/OpenTween/Resources/ChangeLog.txt @@ -1,6 +1,7 @@ 更新履歴 ==== Ver 1.4.1-dev(xxxx/xx/xx) + * CHG: サービスが終了した「ついっぷるフォト」を画像投稿先から削除 * FIX: 投稿欄の複数行表示が次回起動時に保持されない不具合を修正 ==== Ver 1.4.0(2017/10/30) -- 2.11.0