예제 #1
0
        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();
        }
예제 #2
0
        /// <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
        }