private void MainForm_Load(object sender, EventArgs e) { try { // 起動時のチェック PodcasCoSpecificProcess.StartUpCheck(); } catch (DllNotFoundException ex) { MessageBox.Show(ex.Message); Application.Exit(); return; } try { // 起動時の初期化 PodcasCoSpecificProcess.StartUpInitialize(); StationList.StationListChanged += new EventHandler(StationList_StationListChanged); AddStationFilterComboBoxItem(); // 起動直後には放送局切り替えボックスで"All"を選択する stationFilterComboBox.SelectedIndex = 0; // 放送局リストがある場合 if (StationList.GetStationList().Length > 0) { // ローカルヘッドラインのみの番組表をチェックする CheckHeadlines(CheckHeadlinesOption.LocalOnly); } } catch (XmlException) { MessageBox.Show("設定ファイルが読み込めませんでした", "設定ファイルの解析エラー"); } catch (IOException) { MessageBox.Show("設定ファイルが読み込めませんでした", "設定ファイルの読み込みエラー"); } catch (ArgumentNullException) { MessageBox.Show("設定ファイルが読み込めませんでした", "設定ファイルの読み込みエラー"); } StationList.HeadlineFetching += new FetchEventHandler(StationList_HeadlineFetching); StationList.HeadlineAnalyzing += new HeadlineAnalyzeEventHandler(StationList_HeadlineAnalyzing); #region 起動時自動ダウンロード // クリップする番組の数をカウントする int clipCount = 0; foreach (Station station in StationList.GetStationList()) { // 現在の放送局を設定する StationList.ChangeCurrentStation(station); // 指定の個数の番組を自動ダウンロードし、指定の日数より古い番組を自動削除する if (station.StartupDownload == true && station.StartupDelete == true) { // 指定の個数の番組を自動ダウンロードする if (station.StartupDownloadNum > 0) { // グローバルヘッドラインを取得する station.GlobalHeadline.FetchHeadline(); // グローバル・ローカルの両方の番組 IChannel[] channels = StationList.GetChannelsOfCurrentStationFromAllHeadline(); // 日付で降順ソートする Array.Sort(channels, 0, channels.Length, (IComparer) new ChannelDateComparer()); Array.Reverse(channels, 0, channels.Length); // これより古い日付のものはダウンロードしない DateTime undownloadDate = DateTime.Today.Subtract(new TimeSpan(station.StartupDeleteRemainDay - 1, 0, 0, 0)); for (int i = 0; i < station.StartupDownloadNum && i < channels.Length; ++i) { if (station.ContainLocalHeadline(channels[i]) == false && channels[i].GetDate() > undownloadDate) { // チェックを立てる channels[i].Check = true; ++clipCount; } } } } else if (station.StartupDownload == true && station.StartupDelete == false) { // 指定の個数の番組を自動ダウンロードする if (station.StartupDownloadNum > 0) { // グローバルヘッドラインを取得する station.GlobalHeadline.FetchHeadline(); // グローバル・ローカルの両方の番組 IChannel[] channels = StationList.GetChannelsOfCurrentStationFromAllHeadline(); // 日付で降順ソートする Array.Sort(channels, 0, channels.Length, (IComparer) new ChannelDateComparer()); Array.Reverse(channels, 0, channels.Length); for (int i = 0; i < station.StartupDownloadNum && i < channels.Length; ++i) { if (station.ContainLocalHeadline(channels[i]) == false) { // チェックを立てる channels[i].Check = true; ++clipCount; } } } } } // 現在の放送局を全放送局に戻す StationList.ChangeCurrentStationAt(-1); // ダウンロードする番組が存在する場合 if (clipCount > 0) { // チェックのある番組をダウンロードする ClipPodcast(); } #endregion // 起動時自動ダウンロード #region 起動時自動削除 // クリップする番組の数をカウントする int deleteCount = 0; foreach (Station station in StationList.GetStationList()) { // 指定の日数より古い番組を自動削除する if (station.StartupDelete == true) { // これより古い日付のものは削除する DateTime deleteDate = DateTime.Today.Subtract(new TimeSpan(station.StartupDeleteRemainDay - 1, 0, 0, 0)); foreach (IChannel channel in station.LocalHeadline.GetChannels()) { if (channel.GetDate() <= deleteDate) { channel.Check = true; ++deleteCount; } } } } // 削除する番組が存在する場合 if (deleteCount > 0) { // チェックのある番組を削除する DeletePodcast(); } #endregion // 起動時自動削除 // 番組リストを更新する UpdateChannelList(); SetAnchorControl(); FixWindowSize(); }
/// <summary> /// 番組リストの更新処理 /// </summary> private void UpdateChannelList() { #region UI前処理 // フォームををいったん選択不可にする this.Enabled = false; #endregion #region フィルタリング処理 // 放送局切り替えボックス Allが選択されている場合 if (stationFilterComboBox.SelectedIndex == 0) { // 全放送局を対象とする StationList.ChangeCurrentStationAt(-1); } else { /* * 放送局切り替えボックスに対して、StationList配列の並びは-1となるため、-1を指定 * stationListComboBox => ALL, Station1, Station2 ... * StationList => Station1, Station2 ... */ StationList.ChangeCurrentStationAt(stationFilterComboBox.SelectedIndex - 1); } // クリップ ALLが選択されている場合 if (allClipRadioButton.Checked == true) { currentChannels = StationList.GetChannelsOfCurrentStationFromAllHeadline(); } // クリップ Clipedが選択されている場合 else if (clipedRadioButton.Checked == true) { currentChannels = StationList.GetChannelsOfCurrentStationFromLocalHeadline(); } // クリップ Unclipedが選択されている場合 else if (unclipedRadioButton.Checked == true) { currentChannels = StationList.GetUnclipedChannelsOfCurrentStation(); } else { // ここに到達することはあり得ない Trace.Assert(false, "想定外の動作のため、終了します"); } switch (UserSetting.ChannelSort) { case UserSetting.ChannelSorts.DateOlder: Array.Sort(currentChannels, 0, currentChannels.Length, new DateOlderComparer()); break; case UserSetting.ChannelSorts.DateNewer: Array.Sort(currentChannels, 0, currentChannels.Length, new DateNewerComparer()); break; default: break; } DrawChannelList(currentChannels); mainStatusBar.Text = "Last " + DateTime.Now.ToString() + " - A:" + StationList.GetChannelsOfCurrentStationFromAllHeadline().Length + " C:" + StationList.GetChannelsOfCurrentStationFromLocalHeadline().Length + " U:" + StationList.GetUnclipedChannelsOfCurrentStation().Length; #endregion #region UI後処理 AutoResizeColumnListView(channelListView); // フォームを選択可能に回復する this.Enabled = true; #endregion }