private UrlTransformResult TransformUrlIfRecognized(string pageUrl, string pageAuth)
        {
            UrlTransformResult urlTransformResult = null;

            frmWait.RunWork(this, (onProgress) => {
                urlTransformResult = UrlTransformer.TransformIfRecognized(pageUrl, pageAuth);
            });
            return(urlTransformResult);
        }
        private bool AddThread(string pageUrl, string pageAuth, string imageAuth, int checkIntervalSeconds, bool oneTimeDownload, string description, UrlTransformResult urlTransformResult)
        {
            if (urlTransformResult != null)
            {
                pageUrl = urlTransformResult.TransformedUrl;
            }
            SiteHelper    siteHelper     = SiteHelper.CreateByUrl(pageUrl);
            string        globalThreadID = siteHelper.GetGlobalThreadID();
            ThreadWatcher watcher        = ThreadList.Items.FirstOrDefault(w => w.GlobalThreadID.Equals(globalThreadID, StringComparison.OrdinalIgnoreCase));

            if (watcher == null)
            {
                description ??= urlTransformResult?.DefaultDescription ?? siteHelper.GetDefaultDescription();
                watcher = ThreadWatcher.Create(siteHelper, pageUrl, pageAuth, imageAuth, oneTimeDownload, checkIntervalSeconds, description);

                AttachWatcherToUI(watcher);
                DisplayDescription(watcher);
                DisplayAddedOn(watcher);

                ThreadList.Add(watcher);
            }
            else
            {
                if (watcher.IsRunning)
                {
                    return(false);
                }

                watcher.PageAuth             = pageAuth;
                watcher.ImageAuth            = imageAuth;
                watcher.CheckIntervalSeconds = checkIntervalSeconds;
                watcher.OneTimeDownload      = oneTimeDownload;

                if (description != null)
                {
                    watcher.Description = description;
                    DisplayDescription(watcher);
                }
            }

            watcher.Start();

            _saveThreadList = true;

            return(true);
        }