Esempio n. 1
0
        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"));
        }
Esempio n. 2
0
        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;
            }
        }