Esempio n. 1
0
        /// <summary>
        /// チェックした番組をダウンロードし、RSSを作成する
        /// </summary>
        private void ClipPodcast()
        {
            // 選択された番組のリスト
            ArrayList alSelectedGlobalChannels = new ArrayList();

            // 選択された番組で未クリップの番組のリストを作る
            foreach (IChannel channel in StationList.GetUnclipedChannelsOfCurrentStation())
            {
                if (channel.Check == true)
                {
                    alSelectedGlobalChannels.Add(channel);
                }
            }

            // 選択された未クリップの番組がある場合のみ
            if (alSelectedGlobalChannels.Count != 0)
            {
                ClippingForm clippingForm = new ClippingForm();
                clippingForm.ShowDialog();
                clippingForm.Dispose();
            }
            // 選択された未クリップの番組が無い場合は警告を出す
            else
            {
                MessageBox.Show("未クリップの番組が選択されていません", "情報");
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 番組をクリップする
        /// </summary>
        /// <param name="clippingForm">ClippingForm</param>
        public static void ClippingPodcast(ClippingForm clippingForm)
        {
            // すでにクリップした番組
            int alreadyClippingFiles = 0;

            // クリップできない番組があったか
            bool cannotCliped = false;

            // クリップできなかった番組の情報
            string cannotClipedString = string.Empty;

            // 選択された番組のリスト
            ArrayList alSelectedGlobalChannels = new ArrayList();

            // 選択された番組で未クリップの番組のリストを作る
            foreach (IChannel channel in GetUnclipedChannelsOfCurrentStation())
            {
                if (channel.Check == true)
                {
                    alSelectedGlobalChannels.Add(channel);
                }
            }

            if (clippingForm != null)
            {
                clippingForm.OnFile(new FileEventArgs(0, alSelectedGlobalChannels.Count));
            }

            foreach (IChannel channel in (IChannel[])alSelectedGlobalChannels.ToArray(typeof(IChannel)))
            {
                try
                {
                    // URLがnullの場合に対処
                    if (channel.GetPlayUrl() == null)
                    {
                        throw new WebException();
                    }

                    string directoryName = UserSetting.PodcastClipDirectoryPath
                                           + @"\" + channel.ParentHeadline.ParentStation.LocalHeadline.GetId();

                    if (Directory.Exists(directoryName) == false)
                    {
                        Directory.CreateDirectory(directoryName);
                    }

                    string generateFilePath = directoryName + @"\"
                                              + Path.GetFileNameWithoutExtension(channel.GetPlayUrl().LocalPath)
                                              + "-" + channel.GetHash().ToString("x")
                                              + Path.GetExtension(channel.GetPlayUrl().LocalPath);

                    PodcasCoUtility.FetchFile(channel.GetPlayUrl(), generateFilePath,
                                              new FetchEventHandler(clippingForm.ClipReceiver),
                                              new FetchEventHandler(clippingForm.ClippingReceiver),
                                              null);

                    // 番組をローカルヘッドラインに加える
                    IChannel localChannel = (IChannel)channel.Clone(channel.ParentHeadline.ParentStation.LocalHeadline);
                    localChannel.SetPlayUrl(new Uri(generateFilePath));
                    localChannel.ParentHeadline.ParentStation.LocalHeadline.AddChannel(localChannel);

                    // ダウンロードした番組の元のグローバル番組からはチェックを外す
                    channel.Check = false;
                }
                catch (WebException)
                {
                    cannotCliped        = true;
                    cannotClipedString += channel.ParentHeadline.ParentStation.Name + " - " + channel.GetTitle() + "\n";
                }
                catch (UriFormatException)
                {
                    cannotCliped        = true;
                    cannotClipedString += channel.ParentHeadline.ParentStation.Name + " - " + channel.GetTitle() + "\n";
                }
                catch (SocketException)
                {
                    cannotCliped        = true;
                    cannotClipedString += channel.ParentHeadline.ParentStation.Name + " - " + channel.GetTitle() + "\n";
                }

                if (clippingForm != null)
                {
                    clippingForm.OnFiling(new FileEventArgs(++alreadyClippingFiles, alSelectedGlobalChannels.Count));
                }
            }

            // RSSを作成
            StationList.GenerateRssLocalHeadlines();

            if (cannotCliped == true)
            {
                throw new ClippingException(cannotClipedString);
            }
        }