Ejemplo n.º 1
0
        /// <summary>
        /// Web上のストリームをダウンロードする
        /// </summary>
        /// <param name="url">URL</param>
        /// <param name="fileName">保存するファイル名</param>
        /// <param name="doDownloadProgressMinimum">ファイルサイズの最小値(0)をセットするデリゲート</param>
        /// <param name="doSetDownloadProgressMaximum">ファイルサイズをセットするデリゲート</param>
        /// <param name="doSetDownloadProgressValue">ダウンロード済みのファイルサイズをセットするデリゲート</param>
        public static void FetchFile(Uri url, string fileName,
                                     FetchEventHandler fetchEventHandler,
                                     FetchEventHandler fetchingEventHandler,
                                     FetchEventHandler fetchedEventHandler)
        {
            WebStream ws = null;

            try
            {
                ws = new WebStream(url);

                switch (PodcasCo.UserSetting.ProxyUse)
                {
                case UserSetting.ProxyConnect.Unuse:
                    ws.ProxyUse = WebStream.ProxyConnect.Unuse;
                    break;

                case UserSetting.ProxyConnect.OsSetting:
                    ws.ProxyUse = WebStream.ProxyConnect.OsSetting;
                    break;

                case UserSetting.ProxyConnect.OriginalSetting:
                    ws.ProxyUse = WebStream.ProxyConnect.OriginalSetting;
                    break;
                }
                ws.ProxyServer = PodcasCo.UserSetting.ProxyServer;
                ws.ProxyPort   = PodcasCo.UserSetting.ProxyPort;
                ws.TimeOut     = PodcasCoInfo.WebRequestTimeoutMillSec;
                ws.UserAgent   = PodcasCoInfo.UserAgent;

                ws.SetResume(fileName);
                try
                {
                    ws.CreateWebStream();
                    WebFileFetch fetch = new WebFileFetch(ws);
                    fetch.DownLoadBufferSize = PodcasCo.UserSetting.DownLoadBufferSize;
                    if (fetchEventHandler != null)
                    {
                        fetch.Fetch += fetchEventHandler;
                    }
                    if (fetchingEventHandler != null)
                    {
                        fetch.Fetching += fetchingEventHandler;
                    }
                    if (fetchedEventHandler != null)
                    {
                        fetch.Fetched += fetchedEventHandler;
                    }
                    fetch.FetchFile(fileName);
                }
                catch (MismatchFetchFileException)
                {
                    // ダウンロードすべきよりも、すでにダウンロードしているファイルの方が大きい場合は
                    // 一端ファイルを削除し、リジュームを無効にする
                    File.Delete(fileName);
                    ws.RemoveResume();
                    ws.CreateWebStream();
                    WebFileFetch fetch = new WebFileFetch(ws);
                    fetch.DownLoadBufferSize = PodcasCo.UserSetting.DownLoadBufferSize;
                    if (fetchEventHandler != null)
                    {
                        fetch.Fetch += fetchEventHandler;
                    }
                    if (fetchingEventHandler != null)
                    {
                        fetch.Fetching += fetchingEventHandler;
                    }
                    if (fetchedEventHandler != null)
                    {
                        fetch.Fetched += fetchedEventHandler;
                    }
                    fetch.FetchFile(fileName);
                }
                catch (AlreadyFetchFileException)
                {
                    // ファイルがすでに存在する場合は何もしない
                    ;
                }
            }
            finally
            {
                if (ws != null)
                {
                    ws.Close();
                }
            }
        }