/// <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("未クリップの番組が選択されていません", "情報"); } }
/// <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); } }