Esempio n. 1
0
        static void SaveVideo_Step3(DownloadList saveItems, string url, bool?enque)
        {
            // check for valid url and cut off additional parameter
            if (String.IsNullOrEmpty(url) ||
                !Helpers.UriUtils.IsValidUri((url.IndexOf(MPUrlSourceFilter.SimpleUrl.ParameterSeparator) > 0) ? url.Substring(0, url.IndexOf(MPUrlSourceFilter.SimpleUrl.ParameterSeparator)) : url))
            {
                ServiceRegistration.Get <IDialogManager>().ShowDialog("[OnlineVideos.Error]", "[OnlineVideos.UnableToDownloadVideo]", DialogType.OkDialog, false, DialogButtonType.Ok);
                return;
            }

            saveItems.CurrentItem.Url = url;
            if (string.IsNullOrEmpty(saveItems.CurrentItem.Title))
            {
                saveItems.CurrentItem.Title = saveItems.CurrentItem.VideoInfo.Title;
            }

            if (!string.IsNullOrEmpty(saveItems.CurrentItem.OverrideFolder))
            {
                if (!string.IsNullOrEmpty(saveItems.CurrentItem.OverrideFileName))
                {
                    saveItems.CurrentItem.LocalFile = Path.Combine(saveItems.CurrentItem.OverrideFolder, saveItems.CurrentItem.OverrideFileName);
                }
                else
                {
                    saveItems.CurrentItem.LocalFile = Path.Combine(saveItems.CurrentItem.OverrideFolder, saveItems.CurrentItem.Util.GetFileNameForDownload(saveItems.CurrentItem.VideoInfo, saveItems.CurrentItem.Category, url));
                }
            }
            else
            {
                saveItems.CurrentItem.LocalFile = Path.Combine(Path.Combine(OnlineVideoSettings.Instance.DownloadDir, saveItems.CurrentItem.Util.Settings.Name), saveItems.CurrentItem.Util.GetFileNameForDownload(saveItems.CurrentItem.VideoInfo, saveItems.CurrentItem.Category, url));
            }

            if (saveItems.DownloadItems != null && saveItems.DownloadItems.Count > 1)
            {
                saveItems.CurrentItem.LocalFile = string.Format(@"{0}\{1} - {2}#{3}{4}",
                                                                Path.GetDirectoryName(saveItems.CurrentItem.LocalFile),
                                                                Path.GetFileNameWithoutExtension(saveItems.CurrentItem.LocalFile),
                                                                (saveItems.DownloadItems.IndexOf(saveItems.CurrentItem) + 1).ToString().PadLeft((saveItems.DownloadItems.Count).ToString().Length, '0'),
                                                                (saveItems.DownloadItems.Count).ToString(),
                                                                Path.GetExtension(saveItems.CurrentItem.LocalFile));
            }

            saveItems.CurrentItem.LocalFile = Helpers.FileUtils.GetNextFileName(saveItems.CurrentItem.LocalFile);
            saveItems.CurrentItem.ThumbFile = string.IsNullOrEmpty(saveItems.CurrentItem.VideoInfo.ThumbnailImage) ? saveItems.CurrentItem.VideoInfo.Thumb : saveItems.CurrentItem.VideoInfo.ThumbnailImage;

            // make sure the target dir exists
            if (!(Directory.Exists(Path.GetDirectoryName(saveItems.CurrentItem.LocalFile))))
            {
                Directory.CreateDirectory(Path.GetDirectoryName(saveItems.CurrentItem.LocalFile));
            }

            if (enque == true)
            {
                DownloadManager.Instance.Add(saveItems.CurrentItem.Util.Settings.Name, saveItems);
            }
            else if (enque == false)
            {
                DownloadManager.Instance.Add(null, saveItems);
            }

            System.Threading.Thread downloadThread = new System.Threading.Thread((System.Threading.ParameterizedThreadStart) delegate(object o)
            {
                DownloadList dlList = o as DownloadList;
                try
                {
                    IDownloader dlHelper = null;
                    if (dlList.CurrentItem.Url.ToLower().StartsWith("mms://"))
                    {
                        dlHelper = new MMSDownloader();
                    }
                    else
                    {
                        dlHelper = new MPUrlSourceFilter.Downloader();
                    }
                    dlList.CurrentItem.Downloader = dlHelper;
                    dlList.CurrentItem.Start      = DateTime.Now;
                    Log.Info("Starting download of '{0}' to '{1}' from Site '{2}'", dlList.CurrentItem.Url, dlList.CurrentItem.LocalFile, dlList.CurrentItem.Util.Settings.Name);
                    Exception exception = dlHelper.Download(dlList.CurrentItem);
                    if (exception != null)
                    {
                        Log.Warn("Error downloading '{0}', Msg: {1}", dlList.CurrentItem.Url, exception.Message);
                    }
                    SaveSubtitles(dlList.CurrentItem.VideoInfo, Path.ChangeExtension(dlList.CurrentItem.LocalFile, ".srt"));
                    OnDownloadFileCompleted(dlList, exception);
                }
                catch (System.Threading.ThreadAbortException)
                {
                    // the thread was aborted on purpose, let it finish gracefully
                    System.Threading.Thread.ResetAbort();
                }
                catch (Exception ex)
                {
                    Log.Warn("Error downloading '{0}', Msg: {1}", dlList.CurrentItem.Url, ex.Message);
                    OnDownloadFileCompleted(dlList, ex);
                }
            });
            downloadThread.IsBackground = true;
            downloadThread.Name         = "OVDownload";
            downloadThread.Start(saveItems);

            /* // todo : show download started notification?
             * GUIDialogNotify dlgNotify = (GUIDialogNotify)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_NOTIFY);
             * if (dlgNotify != null)
             * {
             *      dlgNotify.Reset();
             *      dlgNotify.SetImage(SiteImageExistenceCache.GetImageForSite("OnlineVideos", type: "Icon"));
             *      dlgNotify.SetHeading(Translation.Instance.DownloadStarted);
             *      dlgNotify.SetText(saveItems.CurrentItem.Title);
             *      dlgNotify.DoModal(GUIWindowManager.ActiveWindow);
             * }*/
        }
		static void SaveVideo_Step3(DownloadList saveItems, string url, bool? enque)
		{
			// check for valid url and cut off additional parameter
			if (String.IsNullOrEmpty(url) ||
                !Helpers.UriUtils.IsValidUri((url.IndexOf(MPUrlSourceFilter.SimpleUrl.ParameterSeparator) > 0) ? url.Substring(0, url.IndexOf(MPUrlSourceFilter.SimpleUrl.ParameterSeparator)) : url))
			{
				ServiceRegistration.Get<IDialogManager>().ShowDialog("[OnlineVideos.Error]", "[OnlineVideos.UnableToDownloadVideo]", DialogType.OkDialog, false, DialogButtonType.Ok);
				return;
			}

			saveItems.CurrentItem.Url = url;
			if (string.IsNullOrEmpty(saveItems.CurrentItem.Title)) saveItems.CurrentItem.Title = saveItems.CurrentItem.VideoInfo.Title;

			if (!string.IsNullOrEmpty(saveItems.CurrentItem.OverrideFolder))
			{
				if (!string.IsNullOrEmpty(saveItems.CurrentItem.OverrideFileName))
					saveItems.CurrentItem.LocalFile = Path.Combine(saveItems.CurrentItem.OverrideFolder, saveItems.CurrentItem.OverrideFileName);
				else
					saveItems.CurrentItem.LocalFile = Path.Combine(saveItems.CurrentItem.OverrideFolder, saveItems.CurrentItem.Util.GetFileNameForDownload(saveItems.CurrentItem.VideoInfo, saveItems.CurrentItem.Category, url));
			}
			else
			{
				saveItems.CurrentItem.LocalFile = Path.Combine(Path.Combine(OnlineVideoSettings.Instance.DownloadDir, saveItems.CurrentItem.Util.Settings.Name), saveItems.CurrentItem.Util.GetFileNameForDownload(saveItems.CurrentItem.VideoInfo, saveItems.CurrentItem.Category, url));
			}

			if (saveItems.DownloadItems != null && saveItems.DownloadItems.Count > 1)
			{
				saveItems.CurrentItem.LocalFile = string.Format(@"{0}\{1} - {2}#{3}{4}",
					Path.GetDirectoryName(saveItems.CurrentItem.LocalFile),
					Path.GetFileNameWithoutExtension(saveItems.CurrentItem.LocalFile),
					(saveItems.DownloadItems.IndexOf(saveItems.CurrentItem) + 1).ToString().PadLeft((saveItems.DownloadItems.Count).ToString().Length, '0'),
					(saveItems.DownloadItems.Count).ToString(),
					Path.GetExtension(saveItems.CurrentItem.LocalFile));
			}

			saveItems.CurrentItem.LocalFile = Helpers.FileUtils.GetNextFileName(saveItems.CurrentItem.LocalFile);
			saveItems.CurrentItem.ThumbFile = string.IsNullOrEmpty(saveItems.CurrentItem.VideoInfo.ThumbnailImage) ? saveItems.CurrentItem.VideoInfo.Thumb : saveItems.CurrentItem.VideoInfo.ThumbnailImage;

			// make sure the target dir exists
			if (!(Directory.Exists(Path.GetDirectoryName(saveItems.CurrentItem.LocalFile))))
			{
				Directory.CreateDirectory(Path.GetDirectoryName(saveItems.CurrentItem.LocalFile));
			}

			if (enque == true)
				DownloadManager.Instance.Add(saveItems.CurrentItem.Util.Settings.Name, saveItems);
			else if (enque == false)
				DownloadManager.Instance.Add(null, saveItems);

			System.Threading.Thread downloadThread = new System.Threading.Thread((System.Threading.ParameterizedThreadStart)delegate(object o)
			{
				DownloadList dlList = o as DownloadList;
				try
				{
					IDownloader dlHelper = null;
					if (dlList.CurrentItem.Url.ToLower().StartsWith("mms://")) dlHelper = new MMSDownloader();
					else dlHelper = new MPUrlSourceFilter.Downloader();
					dlList.CurrentItem.Downloader = dlHelper;
					dlList.CurrentItem.Start = DateTime.Now;
					Log.Info("Starting download of '{0}' to '{1}' from Site '{2}'", dlList.CurrentItem.Url, dlList.CurrentItem.LocalFile, dlList.CurrentItem.Util.Settings.Name);
					Exception exception = dlHelper.Download(dlList.CurrentItem);
					if (exception != null) Log.Warn("Error downloading '{0}', Msg: {1}", dlList.CurrentItem.Url, exception.Message);
					SaveSubtitles(dlList.CurrentItem.VideoInfo, Path.ChangeExtension(dlList.CurrentItem.LocalFile, ".srt"));
					OnDownloadFileCompleted(dlList, exception);
				}
				catch (System.Threading.ThreadAbortException)
				{
					// the thread was aborted on purpose, let it finish gracefully
					System.Threading.Thread.ResetAbort();
				}
				catch (Exception ex)
				{
					Log.Warn("Error downloading '{0}', Msg: {1}", dlList.CurrentItem.Url, ex.Message);
					OnDownloadFileCompleted(dlList, ex);
				}
			});
			downloadThread.IsBackground = true;
			downloadThread.Name = "OVDownload";
			downloadThread.Start(saveItems);

			/* // todo : show download started notification?
			GUIDialogNotify dlgNotify = (GUIDialogNotify)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_NOTIFY);
			if (dlgNotify != null)
			{
				dlgNotify.Reset();
				dlgNotify.SetImage(SiteImageExistenceCache.GetImageForSite("OnlineVideos", type: "Icon"));
				dlgNotify.SetHeading(Translation.Instance.DownloadStarted);
				dlgNotify.SetText(saveItems.CurrentItem.Title);
				dlgNotify.DoModal(GUIWindowManager.ActiveWindow);
			}*/
		}