public IActionResult Index(TweetForm form) { if (!this.ModelState.IsValid) { return(this.RedirectToAction("Index", "Home")); } // 認証情報から Twitter の資格情報を取得 var rawUserCreds = this.User.Claims.Single(m => m.Type == ClaimTypes.UserData).Value; var userCreds = JsonConvert.DeserializeObject <TwitterCredentials>(rawUserCreds); // そのままではツイートできないので資格情報をセットする Auth.SetCredentials(userCreds); var data = new List <(DateTime Shot, byte[] Binaries)>(); // アップロードされたファイルを扱いやすい形式に変換 foreach (var uploadFile in form.UploadFiles) { using var fs = uploadFile.OpenReadStream(); using var ms = new MemoryStream(); fs.CopyTo(ms); fs.Seek(0, SeekOrigin.Begin); using var bmp = Bitmap.FromStream(fs); var shot = bmp.GetShotDateTime() ?? DateTime.Now; data.Add((shot, ms.ToArray())); } // 撮影日順にデータを並べてからツイート foreach (var datum in data.OrderBy(m => m.Shot)) { if (this.HttpContext.RequestAborted.IsCancellationRequested) { break; } var publishOptions = new PublishTweetOptionalParameters(); publishOptions.MediaBinaries.Add(datum.Binaries); var tweet = string.IsNullOrEmpty(form.Text) ? "[date]" : form.Text; tweet = tweet.Replace("[date]", datum.Shot.ToString("d")); Tweet.PublishTweet(tweet, publishOptions); } this.Notice("ツイートが完了しました"); return(this.RedirectToAction("Index", "Home")); }
public static void CreateTweetForm(Logger logger) { try { var twitterPersistenceService = new TwitterPersistenceService(logger); if (!ProductivityUiHelper.IsTwitterAccountConfigured(twitterPersistenceService, logger)) { MessageBox.Show( PluginResources .ProductivityShareViewPartAction_Execute_In_order_to_share_the_result_you_need_to_configure_your_twitter_account); return; } var productivityService = new ProductivityService(logger); if (productivityService.TotalNumberOfCharacters < Constants.MinimumNumberOfCharacters) { MessageBox.Show( string.Format( PluginResources .ProductivityShareViewPartAction_Execute_In_order_to_share_your_score_you_need_to_translate_at_least__0__characters, Constants.MinimumNumberOfCharacters.ToString("N0"))); return; } var leaderboardApi = new LeaderboardApi(twitterPersistenceService); var versioningService = new VersioningService(leaderboardApi); var tweetMessageService = new TweetMessageService(versioningService); var leaderBoardShareService = new LeaderboardShareService(leaderboardApi, twitterPersistenceService); var twitterShareService = new TwitterShareService(twitterPersistenceService, tweetMessageService); var shareService = new ShareService(productivityService, twitterShareService, leaderBoardShareService, versioningService); if (!leaderboardApi.IsAlive()) { MessageBox.Show(PluginResources.TweetFactory_CreateTweet_SDL_Leaderboard_could_not_be_reached__Please_check_your_internet_connectivity_and_try_again); return; } if (!twitterShareService.IsAlive()) { MessageBox.Show(PluginResources.TweetFactory_CreateTweet_Twitter_could_not_be_reached__Please_check_your_internet_connectivity_and_try_again_); return; } if (!versioningService.IsPluginVersionCompatibleWithLeaderboardVersion()) { MessageBox.Show( string.Format( "In order to share you score you need to update the plugin to the version {0}. Please download the latest version from Open Exchange.", shareService.LeaderboardVersion)); return; } using (var tf = new TweetForm(shareService, tweetMessageService, productivityService)) { tf.ShowDialog(); } } catch (Exception ex) { logger.Debug(ex, "Unexpected exception when opening the share score"); throw; } }