internal static bool GetSeriesKeysFromLocalMatch
            (string seriesName, out string seriesID, 
            IMLItemList seriesItems)
        {


            Debugger.LogMessageToFile
                ("The Series with name "
                + seriesName +
                "was found in media section.");

            IMLItem seriesItem = seriesItems[0];



            seriesID = (string)seriesItem.Tags["SeriesID"];
            //seriesID = seriesItem.Location;
            
            Debugger.LogMessageToFile
                ("SeriesID: " + seriesID);
            

            var notListed
                = (string) seriesItem
                .Tags["NotListed"];


            bool foundSeries = notListed != "true";

            return foundSeries;
        
        }
        internal static void LinkFilmItemChains
            (IMLSection moviesSection,
             IMLItemList allFilmItems,
             IMLItem Item)
        {

            if (!MeediFier.Settings
                .FilmItemChainLinkerIsEnabled)
                return;


            if (allFilmItems == null
                || allFilmItems.Count <= 0)
                return;


            MainImportingEngine.ThisProgress.Progress
                (MainImportingEngine.CurrentProgress,
                 "scanning for un-linked files...");


            Application.DoEvents();


            foreach (IMLItem item in allFilmItems)
            {


                string itemImdbID = Helpers
                    .GetTagValueFromItem
                    (item, "ImdbID");

                string itemToCompareImdbID = Helpers
                    .GetTagValueFromItem
                    (Item, "ImdbID");



                if (item.Location == Item.Location
                    || itemImdbID != itemToCompareImdbID)
                    continue;


                if (item.Location.StartsWith("|")
                    || Item.Location.StartsWith("|"))
                    continue;

                Item.Location =
                    "|" + Item.Location +
                    "|" + item.Location + "|";

                Item.SaveTags();

                moviesSection.DeleteItem(item);
            }


        }
        internal static bool PerformSecondaryFilmItemUpdating
            (IMLSection moviesSection,
             IMLItemList allFilmItems, IMLItem item)
        {

            if (MeediFier.Helpers.UserCancels
                (MainImportingEngine
                .SpecialStatus, item))
                return false;


            //VideoSusbtitleDownloader
            //    .DownloadSubtitleForVideoParent
            //    (moviehash, imdbid, Item,
            //     location, connectionresult,
            //    Settings.UseSameSubtitlesFolder,
            //    Settings.SubtitlesFolder, true);
             

            //MediaArchivers
            //    .ArchiveFilm
            //    (Item, parent,
            //    Settings.ArchiveLocation);


            if (MeediFier.Helpers.UserCancels
                (MainImportingEngine
                .SpecialStatus, item))
                return false;


            FilmItemChainLinker
                .LinkFilmItemChains
                (moviesSection,
                 allFilmItems, item);


            if (MeediFier.Helpers.UserCancels
                (MainImportingEngine
                .SpecialStatus, item))
                return false;


            FilmItemProccessSigner
                .SignFilmItemProcess(item);



            return true;

        }
        internal static bool GetSeriesKeysFromTVDb(IMLItem item, ref string seriesName,
            out string seriesID, TVDBLib tvdb, string mdfSettingsb,
            IBaseSystem iBaseSystem, IMLItemList seriesItems,
            out bool foundSeries)
        {
            IList<ITVDBSeries> seriesResults;

            if (SearchTVDbForSeries
                (seriesName, tvdb, out seriesResults))
            {
                seriesID = null;
                foundSeries = false;
                return true;
            }


            foundSeries = IfSeriesWasFoundPopulateSeriesDetailsElseMarkAsNotListed
                (item, ref seriesName, out seriesID, mdfSettingsb, iBaseSystem, seriesItems, seriesResults);

            return false;
        }
        internal static bool IfSeriesWasFoundPopulateSeriesDetailsElseMarkAsNotListed
            (IMLItem item, ref string seriesName,
             out string seriesID, string mdfSettingsb,
             IBaseSystem ibs, IMLItemList seriesItems,
             IList<ITVDBSeries> seriesResults)
        {

            bool foundSeries = false;


            if (seriesResults.Count > 0)
            {

                foundSeries = true;

                ITVDBSeries series = seriesResults[0];

                seriesID = seriesResults[0].ID;

                Debugger.LogMessageToFile("SeriesID found : " + seriesID);

                seriesName = series.SeriesName;

                Debugger.LogMessageToFile("SeriesName found : " + seriesName);

                if (seriesItems.Count == 0)
                    PopulateSeriesDetails
                        (item, mdfSettingsb, ibs, series);


            }
            else
            {
                MarkSeriesAsNotListed(item, seriesName);
                seriesID = null;
            }


            
            return foundSeries;
        
        
        
        }
        internal static bool UpdateFilmItem
            (int itemID, IMLSection moviesSection,
             IMLItemList allFilmItems, 
             ref bool fileServerChecked,
             ref bool fileServerIsOnline, 
             ConnectionResult connectionresult,
             IMDbOperations imdbOp, string pluginpath,
             ref int currentItem, int totalItems,
             string mdfSettingsa, IBaseSystem ibs,
             IEnumerable<string> combinedSceneTags) 
        {


            MainImportingEngine.CurrentProgress 
                = ImportingEngineHelpers
                .ComputeProgress
                (currentItem, totalItems);




            #region Pre-updaters

            IMLItem item
                = moviesSection
                .FindItemByID(itemID);

            if (item == null)
                return true;

            MainImportingEngine.SpecialStatus
                = "Updating " + item.Name + "...";

            Debugger.LogMessageToFile
                (Environment.NewLine +
                "Starting to work with library item:" +
                 " " + item.Name +" with ID: " + itemID);


            Debugger.LogMessageToFile
                ("Initializing item variables...");


            string imdbid = Helpers.GetTagValueFromItem(item, "ImdbID");
            string tmdbID = Helpers.GetTagValueFromItem(item, "TMDbID");

            string filmYear = Helpers.GetTagValueFromItem(item, "Year");
            string itemTitle = Helpers.GetTagValueFromItem(item, "Title");
            string sortTitle = Helpers.GetTagValueFromItem(item, "SortTitle");


            bool isMultipart = false;
            string location = item.Location;
            string[] multipart = null;
            bool isUNC = false;

            DirectoryInfo parent;
            DirectoryInfo root;
            string videoFilename;


            MultipartFilmLibraryItemDetector
                .DetectMultipartItemRetrieveFirstItemLocation
                (ref location, ref isMultipart, ref multipart);


            if (!FilmItemUpdaterHelpers
                .RetrievePathLocations
                (location, out videoFilename,
                out parent, out root))
                return false;


            bool updateFilmItem;
            if (FilmItemUpdaterHelpers
                .PerformPreupdatingDiagnostics
                (moviesSection, ref fileServerChecked, 
                ref fileServerIsOnline, root, location, 
                item, ref isUNC, out updateFilmItem))
                return updateFilmItem;

            #endregion




            #region Primary Updating

            Debugger.LogMessageToFile
                ("Identification of film '"
                + itemTitle + "' is complete." +
                 " Continuing to download online data.");


            if (Helpers.GetTagValueFromItem
                (item, "MediaFairy-processed") != "--processed--")
            {

                #region Identifiers

                bool b;
                if (FilmItemUpdaterHelpers.ExtractLocalMetadataForFilmItem
                    (fileServerIsOnline, ref imdbOp,
                    pluginpath, combinedSceneTags,
                    parent, isUNC, item,
                    ref imdbid, out b))
                    return b;


                imdbOp.ImdbMovie = null;
                imdbOp.ImdbId = imdbid;


                //#region Set IsExactMatched flag for the video fingerprint uploader

                //try
                //{
                //    Year = Helpers.GetTagValueFromItem(Item, "Year");
                //}
                //catch
                //{
                //}

                //if (!String.IsNullOrEmpty(Year))
                //    isExactMatched = true;

                //if (!String.IsNullOrEmpty(imdbid))
                //    isExactMatched = true;

                //#endregion

                if (Helpers.UserCancels
                    (MainImportingEngine
                    .SpecialStatus, item))
                    return false;


                if (
                    !VideoFingerprintIdentifier
                    .VideoFingerprintIdentifier
                    .IdentifyVideo(ref imdbid, 
                    ref tmdbID, ref imdbOp,
                    item, fileServerIsOnline,
                    isUNC, location, parent.FullName,
                    filmYear, connectionresult, moviesSection)
                    )
                {

                    Debugger.LogMessageToFile
                        ("Unable to identify this video. Continuing to next item.");
                    return true;

                }
                Debugger.LogMessageToFile
                    ("Video identification was succesfull!");


                if (Helpers.UserCancels
                    (MainImportingEngine.SpecialStatus, item))
                    return false;


                

                #endregion


                #region Set Updating Flags




                #endregion


                #region extract important fields for online searches

                string imdbidTmp = Helpers.GetTagValueFromItem(item, "ImdbID");

                #region Get IMDbID

                if (!String.IsNullOrEmpty(imdbidTmp))
                {
                    imdbid = Helpers.GetTagValueFromItem(item, "ImdbID");
                    imdbOp.ImdbId = Helpers.GetTagValueFromItem(item, "ImdbID");
                }
                else
                {
                    if (!String.IsNullOrEmpty(imdbOp.ImdbId))
                        imdbid = imdbOp.ImdbId;
                    else imdbOp.ImdbId = imdbid;

                    item.Tags["ImdbID"] = imdbOp.ImdbId;
                }

                //MessageBox.Show("Item tag imdbid: " + Helpers.GetTagValueFromItem(Item,"ImdbID"]);

                #endregion

                #region Get ItemTitle

                itemTitle = Helpers.GetTagValueFromItem(item, "Title");

                if (String.IsNullOrEmpty(itemTitle))
                {
                    if (!String.IsNullOrEmpty(item.Name))
                    {
                        itemTitle = item.Name;
                    }
                    else return true;
                }

                #endregion

                #endregion

                #region Metadata Downloaders

                //MessageBox.Show("Can work online:" + connectionresult.CanWorkOnline);

                if (connectionresult.InternetConnectionAvailable
                    || !Settings.ConnectionDiagnosticsEnabled)
                {



                        #region download details


                       imdbid = FilmItemUpdaterHelpers.IMDbDetailer
                           (moviesSection, imdbOp,
                           item, itemTitle, imdbid);
                        


                    OSoperations.GetDetailsFromOSdb
                        (imdbid, item, connectionresult.OSDbIsOnline,
                        !imdbOp.NotListed);
    

                    #endregion


                        if (Helpers.UserCancels
                            (MainImportingEngine
                            .SpecialStatus, item))
                            return false;


                        #region Get ItemTitle

                        if (!String.IsNullOrEmpty(Helpers.GetTagValueFromItem(item, "Title")))
                        {
                            itemTitle = Helpers.GetTagValueFromItem(item, "Title");
                        }
                        else if (!String.IsNullOrEmpty(item.Name))
                        {
                            itemTitle = item.Name;
                        }
                        else return true;

                        #endregion

                        #region Set SortTitle

                        if (!String.IsNullOrEmpty
                            (itemTitle) 
                            && String.IsNullOrEmpty
                            (sortTitle))
                        {
                            if (itemTitle.StartsWith("The"))
                            {
                                sortTitle = itemTitle.Remove(0, 4) + ", The ";
                                Debugger.LogMessageToFile
                                    ("Set item's SortTitle to: '" + sortTitle + "'.");
                            }
                            else sortTitle = itemTitle;

                            item.Tags["SortTitle"] = sortTitle;
                            item.SaveTags();
                        }

                        #endregion



                    if (!FilmItemUpdaterHelpers
                            .DownloadFilmDetailsExtra(item))
                            return false;


                    location = FilmItemUpdaterHelpers
                            .PerformFilmOrganizing
                            (fileServerChecked, fileServerIsOnline,
                            connectionresult, currentItem, itemTitle,
                            multipart, location, isMultipart, item);


                    if (Helpers.UserCancels
                            (MainImportingEngine
                            .SpecialStatus, item))
                            return false;


                        //MovieDescriptorWriter
                        //    .WriteMovieDescriptor
                        //    (item, itemTitle, imdbid, 
                        //    parent.FullName,
                        //    fileServerIsOnline, isUNC);



                        if (Helpers.UserCancels
                            (MainImportingEngine
                            .SpecialStatus, item))
                            return false;



                        if (!DownloadFilmCoverAndBakdropArt
                            (fileServerIsOnline, mdfSettingsa, 
                            ibs, item, isUNC, itemTitle, location,
                            parent, videoFilename))
                            return false;


                }

                #endregion
            }

            #endregion




            if (!FilmItemSecondaryUpdater
                .PerformSecondaryFilmItemUpdating
                (moviesSection, allFilmItems, item))
                return false;



            item.SaveTags();
            currentItem++;

            return true;

        }