public static void ReplaceTag(string tagName, string[] searchStrings, IMLSection section)
        {

            foreach (string searchReplaceString in searchStrings)
            {
                MessageBox.Show(searchReplaceString);
                string[] replaces = searchReplaceString.Split('|');
                string searchString = replaces[0];
                string replaceString = replaces[1];
                MessageBox.Show(@"Will replace with: " +  replaceString);

                IMLItemList itemList = section.SearchByTag(tagName, searchString);

                section.BeginUpdate();
                

                foreach (IMLItem t in itemList)
                {
                    MessageBox.Show(tagName);
                    t.Tags[tagName] = replaceString;
                    MessageBox.Show((string)t.Tags[tagName]);
                    t.SaveTags();
                }

                section.EndUpdate();

            }


        }
        private static void DownloadNewReleasesFromSource
            (string RssSource, IMLSection MediaSection,
            IMLSection ReleasesSection,
            ConnectionResult connResult, 
            IEnumerable<string> combinedSceneTags)
        {




            WebClient client = new WebClient();
            XmlDocument xDoc = new XmlDocument();
            //Importer.thisProgress.Progress(Importer.CurrentProgress, "Scanning for new releases...");
            Helpers.UpdateProgress("Updating Downloads library" + MediaSection.Name + "Section", "Scanning for new releases..." , null);
            //WebResponse response = Helpers.TryDatabaseRequest(RssSource,MediaSection.Name, "Mininova",null );

            string xmlData = Downloaders.GetUrl(RssSource, null, true);
            if (String.IsNullOrEmpty(xmlData))
                return;

            StringReader reader = new StringReader(xmlData);

            //if (response == null)
            //{
            //MessageBox.Show("Unable to communicate with online source");
            //  return false;
            //}

            //Stream stream = response.GetResponseStream();

            #region try to load online xml stream
            try
            {
                xDoc.Load(reader);
            }
            catch (Exception e)
            {
                MainImportingEngine.ThisProgress.Progress(MainImportingEngine.CurrentProgress, "An error occured while reading the rss document. Please try later.");
                Thread.Sleep(1500);
                MessageBox.Show(e.ToString());

                try
                {
                    xDoc.Load(reader);
                }
                catch (Exception)
                {
                    MainImportingEngine.ThisProgress.Progress(MainImportingEngine.CurrentProgress, "An error occured while reading the rss document. Please try later.");
                    Thread.Sleep(1500);
                    return;
                }

            }
            #endregion


            //MessageBox.Show(xDoc.InnerXml);

            XmlNodeList torrents = xDoc.GetElementsByTagName("item");

            foreach (XmlNode torrent in torrents)
            {

                XmlNodeList tags = torrent.ChildNodes;
                string title = "";
                string year = "";
                string seeds = "";
                string leechers = "";
                string link = "";

                #region loop torrent tags and retrieve their values
                foreach (XmlNode tag in tags)
                {
                    #region retrieve url
                    if (tag.Name == "enclosure")
                    {
                        XmlAttributeCollection attributes = tag.Attributes;
                        foreach (XmlAttribute attribute in attributes)
                        {
                            if (attribute.Name == "url")
                            {
                                //MessageBox.Show("attrib innertext: " + attribute.InnerText);
                                link = attribute.InnerText;
                            }


                        }

                    }
                    #endregion

                    if (tag.Name == "title")
                    {
                        //MessageBox.Show(tag.InnerText);

                        #region parse release name and return film information
                        Regex regex = new Regex(".*?(?<Title>.*?)\\[(?<Year>.*?)\\].*?\\((?<Seeds>.*?)S/(?<Leechers>.*?)L");
                        MatchCollection matches = regex.Matches(tag.InnerText);

                        if (matches.Count == 0)
                        {
                            regex = new Regex("(?<Title>.*?)\\z");
                            matches = regex.Matches(tag.InnerText);

                            if (matches.Count == 0)
                                continue;
                        }


                        Match match = matches[0];

                        #region mine data from match

                        int i = 0;
                        foreach (Group group in match.Groups)
                        {
                            //Console.WriteLine(i);

                            #region retrieve item tags from regex captures
                            foreach (Capture captrue in @group.Captures)
                            {


                                #region extract title
                                if (i == 1) //this is the image's url
                                {
                                    title = captrue.Value;
                                    //MessageBox.Show("Title: " + captrue.Value);
                                }
                                #endregion


                                #region extract year
                                if (i == 2)
                                {
                                    year = captrue.Value;
                                    //MessageBox.Show("Year: " + captrue.Value);
                                }
                                #endregion

                                #region extract Seeds
                                if (i == 3)
                                {
                                    seeds = captrue.Value;
                                    //MessageBox.Show("Seeds: " + captrue.Value);
                                }
                                #endregion

                                #region extract Leechers
                                if (i == 4)
                                {
                                    leechers = captrue.Value;
                                    //MessageBox.Show("Leechers: " + captrue.Value);
                                }
                                #endregion


                            }
                            #endregion

                            i++;
                        }
                        #endregion


                        #endregion

                    }

                }
                #endregion

                #region check if torrent already exists
                IMLItemList items = ReleasesSection.SearchByLocation(link);
                if (items.Count != 0)
                    continue;
                #endregion

                #region add & identify films
                ReleasesSection.BeginUpdate();
                #region create new torrent item
                //MessageBox.Show(link);
                IMLItem Item = ReleasesSection.AddNewItem(title, link);
                Item.Tags["Title"] = title;
                Item.Tags["Year"] = year;
                Item.Tags["Seeds"] = seeds;
                Item.Tags["Peers"] = leechers;
                string imdbid = Helpers.GetTagValueFromItem(Item,"IMDbID");
                Item.SaveTags();
                #endregion

                //MessageBox.Show("Before: " + Item.Name);
                MovieFileMetadataExtractor.ExtractMetadataFromMovieFilename(Item, ref imdbid, combinedSceneTags);
                //MessageBox.Show("After: " + Item.Name);
                Item.Name = Item.Name.Replace('.', ' ');
                Item.Tags["Title"] = Item.Name;
                Item.SaveTags();


                if (Settings.FilmRatingMin != 0)
                {
                    IMDbOperations imdbOP = new IMDbOperations();
                    imdbOP._assistType = IMDbOperations.AssistType.Never;
                    connResult.OSDbIsOnline = false;
                    string tmp = "";
                    Helpers.IdentifyVideo(ref imdbid, ref tmp, ref imdbOP, Item, true, false, "", "", year , connResult, ReleasesSection);
                    tmp = null;


                    #region IMDb Detailer

                    string HasDetails = Helpers.GetTagValueFromItem(Item,"HasDetails");
                    if (HasDetails != "True")
                    {
                        ////MessageBox.Show("About to d/load film details from IMDB...");



                        #region ...now get film details using this iMDBiD...
                        //MessageBox.Show("imdbid before d/loading details is: " + imdbid);
                        //MessageBox.Show("imdbOP._imdbID before d/loading details is: " + imdbOP._imdbID);
                        if (imdbOP.ImdbId != "") imdbid = imdbOP.ImdbId;
                        if (imdbid != "") imdbOP.ImdbId = imdbid;


                        imdbOP.ImdbMovie = null;
                        if (!String.IsNullOrEmpty(imdbOP.ImdbId))
                        {
                            imdbid = imdbOP.ImdbId;
                            //imdbOP._imdbID = imdbid;
                            //////MessageBox.Show("imdbID before getting details is: " + imdbid );
                            //////MessageBox.Show("IMDbOP.imdbid is: " + imdbOP._imdbID);
                            #region ...get the film's details.
                            if (!imdbid.StartsWith("tt"))
                                imdbid = "tt" + imdbid;

                            // _progressText = "Grabbing IMDb ID: " + imdbOP._imdbID;
                            MainImportingEngine.ThisProgress.Progress(MainImportingEngine.CurrentProgress, "Downloading details from IMDb for " + imdbOP.ImdbId + "...");
                            imdbOP.GetIMDbMovieDetails(imdbid, true);
                            #endregion
                        }
                        #endregion


                        #region ...finally if the movie struct is filled, save the film details in the item's fields.
                        if (!String.IsNullOrEmpty(imdbid))
                        {
                            //string Episode = imdbOP._imdbMovie.Episode;

                            //MessageBox.Show(Episode);

                            //MessageBox.Show("title before saving: " + imdbOP._imdbMovie.Title);



                            //MessageBox.Show("... movie struct is filled, about to save details in tags...");
                            imdbOP.SaveIMDbMovieDetails(Item, ReleasesSection , imdbOP);


                            if (Item.Name.StartsWith("\""))
                            {
                                MainImportingEngine.ThisProgress.Progress(MainImportingEngine.CurrentProgress, "This item is a TV episode.");
                                Thread.Sleep(1000);

                                MainImportingEngine.ThisProgress.Progress(MainImportingEngine.CurrentProgress, "Searching for episode information...");


                                imdbOP.SaveEpisodeInfo(imdbid, Item );


                            }



                            //////MessageBox.Show("Saved movie details. continuing to cover art...");
                            //Item.Tags["HasDetails"] = "True";
                            //Item.SaveTags();
                        }
                        #endregion

                    }

                    #endregion
                }
                ReleasesSection.EndUpdate();


                #endregion

                #region Get torrent destination
                string location = Item.Location;
                string destination = "";

                if (String.IsNullOrEmpty(Settings.TorrentsFolder))
                    destination = Debugger.GetPluginPath() + "test.torrent";
                else
                {
                    destination = Settings.TorrentsFolder + title + ".torrent";
                }
                #endregion

                #region check if Title already exists in Releases section
                string Title = Helpers.GetTagValueFromItem(Item,"Title");
                IMLItemList itemsb = ReleasesSection.SearchByTag("Title", Title);
                if (itemsb.Count > 1)
                    continue;
                #endregion

                #region check if Title already exists in Movies section
                IMLItemList itemsc = MediaSection.SearchByTag("Title", Title);
                if (itemsc.Count != 0)
                    continue;
                #endregion

                #region Donwload the torrent
                double review = Convert.ToDouble(Helpers.GetTagValueFromItem(Item,"Review"));

                if (review > Settings.FilmRatingMin || Settings.FilmRatingMin == 0)
                {
                    //MessageBox.Show("destination: " + destination);
                    //MessageBox.Show("location: " + location);
                    #region Download torrent
                    try
                    {
                        client.DownloadFile(location, destination);
                    }
                    catch (Exception e)
                    {
                        Debugger.LogMessageToFile("[RSS torrent downloader] The torrent '" + location + "' could not be downloaded. The erros was: " + e.ToString() );
                    }
                    #endregion

                    #region Start torrent
                    //if (String.IsNullOrEmpty(Importer.TorrentsFolder))
                    //{
                    #region start torrent directly
                    Process p = new Process();
                    p.StartInfo.FileName = destination;

                    p.Start();

                    //while (!p.HasExited)
                    //{
                    //    Application.DoEvents();
                    //    Thread.Sleep(50);
                    //}
                    Thread.Sleep(5000);

                    try
                    {
                        File.Delete(destination);
                    }
                    catch { }
                    #endregion
                    //}
                    #endregion

                }
                #endregion

            }


        }
        private static void CleanEmptyFields(bool cleanEmptyFields, IMLSection section)
        {

            if (!cleanEmptyFields) 
                return;

            //Importer.CurrentProgress++;
            MainImportingEngine.ThisProgress.Progress
                (MainImportingEngine.CurrentProgress, 
                "Cleaning empty library fields...");
            //Thread.Sleep(800);

            string[] tagNames = section.GetTagNames();


            section.BeginUpdate();

            foreach (string tagName in tagNames)
            {
                bool allTagValuesAreEmpty = true;

                //Importer.thisProgress.Progress(100, TagName);
                //Thread.Sleep(1000);

                if (tagName == "ToDelete")
                {

                }

                if (section.GetTagValues(tagName) == null) continue;

                string[] TagValues = section.GetTagValues(tagName);

                foreach (string tagvalue in TagValues.Where(tagvalue => !String.IsNullOrEmpty(tagvalue)))
                    allTagValuesAreEmpty = false;


                if (allTagValuesAreEmpty)
                    section.DeleteTag(tagName);

            }
            section.EndUpdate();


            section.BeginUpdate();

            //Importer.CurrentProgress++;
            MainImportingEngine.ThisProgress.Progress
                (MainImportingEngine.CurrentProgress, 
                "Removing items marked for deletion...");
            
            Thread.Sleep(800);

            IMLItemList itemsToDelete = section.SearchByTag("ToDelete", "true");
            
            foreach (IMLItem t in itemsToDelete)
                section.DeleteItem(t);

            section.EndUpdate();

        }