public async Task ProcessMediaAsync(MediaFile mediaFile, bool restore)
        {
            string newDir     = m_rootDirectory + FixDirectory(mediaFile.Media.Name) + "S" + mediaFile.Season + "E" + mediaFile.Episode;
            string mediaCheck = FindMediaFileRecursive(newDir);

            if (mediaCheck != string.Empty)
            {
                mediaFile.FilePath = mediaCheck;
                mediaFile.FinishedProcessing();
                m_timer.Stop();
                return;
            }
            m_isRestoring = restore;
            m_mediaFile   = mediaFile;
            Console.WriteLine("Processing Download");
            string nzbLink = await m_usenetIndexer.GetShowLinkByNzbIdAsync(mediaFile.Media.SearchID, mediaFile.Season, mediaFile.Episode, m_downloadIndex);

            if (nzbLink == string.Empty)
            {
                mediaFile.StopAllProcessing();
                return;
            }
            _link = nzbLink;
            Console.WriteLine("Attempting Download");
            int    id;
            string checkId = await m_mediaDatabase.GetValueAsync(mediaFile.Media.SearchID, m_mediaFile.Season, m_mediaFile.Episode);

            if (checkId != string.Empty)
            {
                id = Convert.ToInt32(checkId);
            }
            else
            {
                id = m_nzbManager.DownloadMovieByNzbLink(nzbLink);
                m_mediaDatabase.AddMedia(mediaFile.Media.SearchID, m_mediaFile.Season, m_mediaFile.Episode, id.ToString());
            }
            Console.WriteLine("Downloading");
            mediaFile.Message = "Downloading";
            m_mediaDownload   = new NzbMediaDownload(id, mediaFile);
        }