public void addAdmissionProgram(int pos, AutoAdmission.AutoAdmissionList autoAdmissionList) { //登録ボタン押した var item = list[pos]; var dateTime = FromUnixTime(item.beginAt); //確認ダイアログ var result = System.Windows.MessageBox.Show($"この番組は開場時間になったら自動で入場します。\n{item.Name} 開場時間 : {dateTime.ToString()}", "登録", MessageBoxButton.YesNo, MessageBoxImage.Information); if (result == MessageBoxResult.Yes) { autoAdmissionList.addAdmission(item.Name, item.ID, item.beginAt, true); } }
public void connectFilterStream(MainWindow page) { //ログイン情報取得 if (Properties.Settings.Default.consumer_key != "") { //スレッド止める時に使うらしい。 tokenSource = new CancellationTokenSource(); cancelToken = tokenSource.Token; var consumer_key = Properties.Settings.Default.consumer_key; var consumer_secret = Properties.Settings.Default.consumer_secret; var access_token = Properties.Settings.Default.access_token; var access_token_secret = Properties.Settings.Default.access_token_secret; var twitter = CoreTweet.Tokens.Create(consumer_key, consumer_secret, access_token, access_token_secret); //ID取得 var account_list = Properties.Settings.Default.account_list; var accountJSONArray = JsonConvert.DeserializeObject <List <NicoFavListJSON> >(account_list); List <long> ids = new List <long>(); foreach (var id in accountJSONArray) { ids.Add(long.Parse(id.ID)); } //FilterStreamの検証用。 //ids = getTakusan23Followers(); //FilterStream Task task = new Task(async() => { try { Console.WriteLine("接続を開始"); var stream = twitter.Streaming.Filter(follow: ids).OfType <StatusMessage>().Select(x => x.Status); foreach (var tw in stream) { //キャンセルされてるか if (!cancelToken.IsCancellationRequested) { //キャンセルされていないときは続ける //本人以外(RTなんかも拾ってしまう)のツイートには反応しない if (ids.Contains(tw.User.Id ?? 0)) { /* * Debug.WriteLine("-------------------"); * Debug.WriteLine(tw.User.Name); * Debug.WriteLine(tw.Text); * Debug.WriteLine("-------------------"); */ //他の配信サイトでも利用できる配信サイトを読み込む otherLive.loadOtherLiveURL(); otherLive.loadOtherLiveClient(); await page.Dispatcher.BeginInvoke((Action)(async() => { //UIスレッドで動く //番組をブラウザで開いたかチェック var opend = false; //レスポンスのEntitiesにニコ生のURLがあるかも? var entities = tw.Entities.Urls; foreach (var url in entities) { if (!string.IsNullOrEmpty(findProgramId(url.ExpandedUrl))) { //ニコ生の場合は番組IDを正規表現で取り出す //生主が予約枠の宣伝ツイートをしたときは予約枠自動入場に追加する。 //でもAPIを叩いて結果を待ってるのは遅いのでとりあえず無条件でブラウザ起動します。回線弱者 lunchBrowser(findProgramId(url.ExpandedUrl)); showNotification(tw); setMicrosoftTimeline(tw); //API叩く。 var result = await nicoLiveProgramInfo.getProgramInfo(findProgramId(url.ExpandedUrl)); if (result.data.status == "reserved") { //設定で切り替えるようにする。 if (Properties.Settings.Default.setting_filterstream_addadmission == "" || Boolean.Parse(Properties.Settings.Default.setting_filterstream_addadmission) == true) { //初期状態ではtrueなので。 //予約枠だあ! autoAdmissionList.addAdmission(result.data.title, findProgramId(url.ExpandedUrl), result.data.beginAt, false); //通知 page.NotifyIcon.ShowBalloonTip("予約枠のツイートを見つけました。予約枠自動入場に追加します。", tw.Text, Hardcodet.Wpf.TaskbarNotification.BalloonIcon.None); } } else { //番組開始ツイートだあ! //履歴追加 programHistory.addHistory(findProgramId(url.ExpandedUrl)); opend = true; //通知 page.NotifyIcon.ShowBalloonTip("番組が開始しました。入場します!", tw.Text, Hardcodet.Wpf.TaskbarNotification.BalloonIcon.None); } } else { if (Properties.Settings.Default.setting_otherlive_mode != "") { //他の配信サイトでも有効の場合はここ if (Boolean.Parse(Properties.Settings.Default.setting_otherlive_mode)) { //ニコ生以外はこっちに来る。 //URLで探す。 foreach (var i in otherLive.urlList) { //forEachで回す if (url.ExpandedUrl.Contains(i)) { //あった! opend = true; //開く launchBrowserOtherLive(url.ExpandedUrl); //履歴追加 programHistory.addOtherLiveHistory(tw, url.ExpandedUrl); //通知 page.NotifyIcon.ShowBalloonTip("番組が開始しました。入場します!", tw.Text, Hardcodet.Wpf.TaskbarNotification.BalloonIcon.None); } } //もし無かったとき if (opend == false) { //クライアント名で探す foreach (var i in otherLive.clientList) { //forEachで回す if (tw.Source.Contains(i)) { //あった! opend = true; launchBrowserOtherLive(url.ExpandedUrl); //履歴追加 programHistory.addOtherLiveHistory(tw, url.ExpandedUrl); //通知 page.NotifyIcon.ShowBalloonTip("番組が開始しました。入場します!", tw.Text, Hardcodet.Wpf.TaskbarNotification.BalloonIcon.None); } } } } } } } if (opend == false) { //上のEntities.urls[]で取れるはずだけど番組IDだけとかでも動くように //ここはニコ生だけ。 if (!string.IsNullOrEmpty(findProgramId(tw.Text))) { //生主が予約枠の宣伝ツイートをしたときは予約枠自動入場に追加する。 //でもAPIを叩いて結果を待ってるのは遅いのでとりあえず無条件でブラウザ起動します。回線弱者 lunchBrowser(findProgramId(tw.Text)); showNotification(tw); setMicrosoftTimeline(tw); //API叩く。 var result = await nicoLiveProgramInfo.getProgramInfo(findProgramId(tw.Text)); if (result.data.status == "reserved") { //予約枠だあ! autoAdmissionList.addAdmission(result.data.title, findProgramId(tw.Text), result.data.beginAt, false); } else { //番組開始ツイートだあ! //履歴追加 programHistory.addHistory(findProgramId(tw.Text)); opend = true; //通知 page.NotifyIcon.ShowBalloonTip("番組が開始しました。入場します!", tw.Text, Hardcodet.Wpf.TaskbarNotification.BalloonIcon.None); } } } })); } } else { //キャンセルされたので終了 return; } } } catch (TwitterException e) { await page.Dispatcher.BeginInvoke((Action)(() => { //ダイアログ System.Windows.Forms.MessageBox.Show("リアルタイム更新を有効にできませんでした。\nTwitter APIの制限にかかった可能性があります。少し待ってみて下さい。", "エラー"); })); } }, cancelToken); task.Start(); } else { //ログインしてね showLoginMessage(); } }