internal static void DownloadSeriesInformation(IMLItem item, string parentDir,
            ref string seriesName, ref string seriesID, bool fileServerIsOnline,
            bool isUNC, TVDBLib tvdb,string mdfSettingsb, IBaseSystem iBaseSystem )
        {


            if (String.IsNullOrEmpty(seriesName))
                return;

            WebClient client = new WebClient();
            bool foundSeries;

            TVdbTvEpisodeDetailsDownloaderHelpers.NormalizeSeriesName(ref seriesName);


            if (TVdbTvEpisodeDetailsDownloaderHelpers.GetSeriesMatchFromSectionOrTVDb(item, ref seriesName, out seriesID,
                tvdb, mdfSettingsb, iBaseSystem, out foundSeries))
                return;


            GetEpisodeKeysFromItemTagsAndPopulateEpisodeMetadata(item, seriesName, 
                seriesID, fileServerIsOnline, isUNC, tvdb, mdfSettingsb,
                iBaseSystem, client, foundSeries);
     
        
        }
Пример #2
0
        public static bool UpdateMediaSections
            (IBaseSystem iBaseSystem,
            IMLSection section,
            IEnumerable <string> combinedSceneTags)
        {
            string pluginpath
                = Debugger.GetPluginPath();



            MainImportingEngine
            .CurrentProgress = 0;

            MainImportingEngine.GeneralStatus
                = "Starting media updating process...";


            MainImportingEngine.SpecialStatus = "";



            try
            {
                if (
                    !MoviesSectionUpdater
                    .UpdateMoviesSection
                        (pluginpath,
                        iBaseSystem,
                        combinedSceneTags,
                        section))
                {
                    return(true);
                }
            }
            catch (Exception e)
            {
                Debugger.LogMessageToFile
                    (Environment.NewLine +
                    "An unexpected error occured" +
                    " in DoImport() method." +
                    " The error was: " +
                    Environment.NewLine + e
                    + Environment.NewLine);


                MainImportingEngine
                .CurrentProgress = 100;


                MainImportingEngine.ThisProgress.Progress
                    (MainImportingEngine.CurrentProgress,
                    "The import process terminated" +
                    " unexpectidly due to an error.");
            }


            return(true);
        }
Пример #3
0
        public static bool DoImport
            (Importer importer,
            IBaseSystem iBaseSystem,
            IMLSection section,
            IMLImportProgress progress)
        {
            try
            {
                ThisProgress = progress;
                Settings.ImportingStarted   = false;
                Settings.ImportingCompleted = false;


                MediaLocationsRetriever
                .RetrieveMediaLocations
                    (importer);


                if (ImportingEngineHelpers
                    .PerformInitializationTasks(section))
                {
                    return(true);
                }


                var combinedSceneTags =
                    VideoFilenameCleaner
                    .ReadDictionaryReturnAllTags();



                StartMainImportingEngine
                    (importer,
                    iBaseSystem,
                    section,
                    combinedSceneTags);



                ImportingEngineHelpers
                .FinishImport();



                return(true);
            }
            catch (Exception e)
            {
                Debugger.LogMessageToFile
                    ("An unexpected error ocurred " +
                    "in the main import method DoImport(). " +
                    "The error was: " + e);
            }


            return(true);
        }
        private static void GetEpisodeKeysFromItemTagsAndPopulateEpisodeMetadata
            (IMLItem item, string seriesName,
                            string seriesID, bool fileServerIsOnline,
                            bool isUNC, TVDBLib tvdb, string mdfSettingsb,
                            IBaseSystem iBaseSystem, WebClient client,
                            bool foundSeries)
        {

            if (!foundSeries)
            {
                MainImportingEngine.ThisProgress.Progress(MainImportingEngine.CurrentProgress,
                "Series with name " + seriesName + " was not found.");

                Thread.Sleep(2000);
                
                return;
            
            }

            string episodeID = Helpers.GetTagValueFromItem(item, "EpisodeID");

            if (!String.IsNullOrEmpty(episodeID))
                return;
            
            int episodeNumber;
            int seasonNumber;

            if (TVdbTvEpisodeDetailsDownloaderHelpers
                .GetEpisodeKeysFromItemTags
                (item, out episodeNumber, out seasonNumber))
                return;

            if (seasonNumber == 0 || episodeNumber == 0)
                return;

            ITVDBEpisode episode;
            ITVDBSeries series;


            if (TVdbTvEpisodeDetailsDownloaderHelpers
                .GetSeriesAndEpisodeFromTVDb(seriesName, seriesID, tvdb,
                        episodeNumber, seasonNumber,
                        out episode, out series))
                return;


            TVdbTvEpisodeDetailsDownloaderHelpers
                .PopulateEpisodeMetadata
                (item, fileServerIsOnline, isUNC,
                        mdfSettingsb,
                        iBaseSystem, seasonNumber, client,
                        series,
                        episode);



        }
 internal static bool RunMediaSectionsUpdatingEngine
     (Importer importer,
     IBaseSystem iBaseSystem,
     IMLSection section,
     IEnumerable <string> combinedSceneTags)
 {
     return(!MediaUpdaters
            .UpdateMediaSections
                (iBaseSystem, section,
                combinedSceneTags));
 }
 public UpdateMediaSectionsParams(IMLSection section,
     string mdfSettingsa, IBaseSystem iBaseSystem, 
     string mdfSettingsb, string mdfSettingsc, 
     IEnumerable<string> combinedSceneTags)
 {
     Section = section;
     MdfSettingsa = mdfSettingsa;
     Ibs = iBaseSystem;
     MdfSettingsb = mdfSettingsb;
     MdfSettingsc = mdfSettingsc;
     CombinedSceneTags = combinedSceneTags;
 }
Пример #7
0
        public UpdateMediaSectionsParams
            (IMLSection section,
            IBaseSystem iBaseSystem,
            IEnumerable <string> combinedSceneTags)
        {
            Section = section;

            Ibs = iBaseSystem;

            CombinedSceneTags
                = combinedSceneTags;
        }
        public static bool UpdateMediaSections(IBaseSystem iBaseSystem,
            IMLSection section,
            IEnumerable<string> combinedSceneTags)
        {
            string pluginpath
                = Debugger.GetPluginPath();

            MainImportingEngine
                .CurrentProgress = 0;

            MainImportingEngine.GeneralStatus
                = "Starting media updating process...";

            MainImportingEngine.SpecialStatus = "";

            try
            {

                if (
                    !MoviesSectionUpdater
                    .UpdateMoviesSection
                    (pluginpath,
                    iBaseSystem,
                    combinedSceneTags,
                    section))
                    return true;

            }
            catch (Exception e)
            {

                Debugger.LogMessageToFile
                    (Environment.NewLine +
                    "An unexpected error occured" +
                    " in DoImport() method." +
                     " The error was: " +
                    Environment.NewLine + e
                    + Environment.NewLine);

                MainImportingEngine
                    .CurrentProgress = 100;

                MainImportingEngine.ThisProgress.Progress
                    (MainImportingEngine.CurrentProgress,
                    "The import process terminated" +
                    " unexpectidly due to an error.");

            }

            return true;
        }
        public static bool DoImport(Importer importer,
                     IBaseSystem iBaseSystem,
                     IMLSection section,
                     IMLImportProgress progress)
        {
            try
                    {

                        ThisProgress = progress;
                        Settings.ImportingStarted = false;
                        Settings.ImportingCompleted = false;

                        MediaLocationsRetriever
                            .RetrieveMediaLocations
                            (importer);

                        if (ImportingEngineHelpers
                            .PerformInitializationTasks(section))
                            return true;

                        var combinedSceneTags =
                            VideoFilenameCleaner
                            .ReadDictionaryReturnAllTags();

                        StartMainImportingEngine
                            (importer,
                             iBaseSystem,
                             section,
                             combinedSceneTags);

                        ImportingEngineHelpers
                            .FinishImport();

                        return true;

                    }
                    catch (Exception e)
                    {

                        Debugger.LogMessageToFile
                            ("An unexpected error ocurred " +
                             "in the main import method DoImport(). " +
                             "The error was: " + e);
                    }

                    return true;
        }
Пример #10
0
        internal static void StartMainImportingEngine
            (Importer importer,
            IBaseSystem iBaseSystem,
            IMLSection section,
            IEnumerable <string> combinedSceneTags)
        {
            GeneralStatus = "Performing media importing...";
            SpecialStatus = String.Empty;



            MediaImportingEngine.ImportMediaFilesMain
                (combinedSceneTags, importer, section);



            MediaImportingEngineHelpers
            .RunMediaSectionsUpdatingEngine
                (importer, iBaseSystem, section,
                combinedSceneTags);
        }
                internal static bool UpdateFilmItem
                    (int itemID,
                     IMLSection moviesSection,
                     string pluginpath,
                     ref int currentItem,
                     int totalItems,
                     IBaseSystem iBaseSystem,
                     IEnumerable<string> combinedSceneTags)
                {



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




                    #region item variables


                    Helpers.UpdateProgress("", "Fetching library item...");
                    Debugger.LogMessageToFile( "Fetching library item...");


                    var item = moviesSection
                        .FindItemByID(itemID);

                    if (item == null)
                        return true;


                    DirectoryInfo parent;


                    string moviehash,
                        imdbid,
                        tmdbID,
                        year,
                        itemTitle,
                        sortTitle,
                        location;



                    SingleMovieItemUpdaterHelpers.InitializeItemKeys
                        (itemID, item, out moviehash, out imdbid,
                         out tmdbID, out year, out itemTitle,
                         out sortTitle, out location);


                

                    #endregion



                    Helpers.UpdateProgress("", "Creating filesystem instance...");

                    Debugger.LogMessageToFile(String.Format
                        ("Creating filesystem instances for media file {0}...",
                        location));


                    try
                    {


                        var fi = new FileInfo
                            (location);

                        parent = fi.Directory;


                    }
                    catch (Exception e)
                    {

                        Debugger.LogMessageToFile(String.Format
                            ("Unable to create filesystem instances" +
                             " for this media file." +
                             "An error occured: {0}", e));

                        return true;
                                                            
                    }





                    if (IdentifyFilmAndDownloadMetadata
                        (combinedSceneTags,
                        item, parent))
                        return true;


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



                    SetFilmItemProcessingFlags
                        .SetUpdateFlag(item);


                    item.SaveTags();
                    currentItem++;
                    return true;

                }
        internal static bool UpdateTvSections
            (IMLSection section, ref bool fileServerChecked,
            ref bool fileServerIsOnline,
            ConnectionResult connectionresult, string mdfSettingsb,
            IBaseSystem ibs, IEnumerable<string> combinedSceneTags)
        {

            TvSectionUpdaterHelpers.CheckIfTvShowsSectionIsSet();


            if (!Settings.EnableTvShowsSectionUpdater ||
                MediaSectionsAllocator.TvEpisodesSection.ItemCount == 0)
                return true;


            #region TV Shows Section varibales

            var currentItem = 1;

            var tvEpisodeItems = 
                MediaSectionsAllocator.TvEpisodesSection.GetAllItemIDs();
                
            var totalItems = tvEpisodeItems.Length;

            MainImportingEngine.CurrentProgress = 0;
            MainImportingEngine.GeneralStatus = "Updating Tv Section";
            MainImportingEngine.SpecialStatus = "";

            if (Settings.SleepValue > 3000) Settings.SleepValue = 3000;

            #endregion



                

            TVDBLib tvdb = TvSectionUpdaterHelpers
                .ConnectToTVDb(connectionresult);

            if (tvdb == null)
                return true;


            TvSectionUpdaterHelpers
                .BeginUpdatingSections();


            foreach (int id in tvEpisodeItems)
            {

                if (!SingleTvEpisodeItemUpdater.UpdateTvEpisodeItem
                    (section, ref fileServerChecked, ref fileServerIsOnline, 
                    connectionresult, mdfSettingsb,ibs, combinedSceneTags,
                    tvdb, totalItems, id, ref currentItem))
                    return false;

            }


            TvSectionUpdaterHelpers.EndUpdatingSections();


            TvSectionUpdaterHelpers.PerformPostUpdatingOperations();


            return true;


        }
 public void Initalize(IBaseSystem baseSystem)
 {
     Ibs = baseSystem;
 }
        internal static bool UpdateMoviesSection
            (string pluginpath, ref bool FileServerChecked,
             ref bool FileServerIsOnline,
             ref ConnectionResult connectionresult,
             IMDbOperations imdbOP, string MDFSettingsa, 
            IBaseSystem IBS, IEnumerable<string> combinedSceneTags)
        {



            if (String.IsNullOrEmpty(Settings.FilmsLibrary))
                Settings.EnableMoviesSectionUpdater = false;




            if (Settings.EnableMoviesSectionUpdater)
            {


                Debugger.LogMessageToFile
                    (Environment.NewLine 
                    + Environment.NewLine 
                    + "Film Updater is enabled.");


                if (MediaSectionsAllocator.MoviesSection.ItemCount != 0)
                {
                    #region Pre-Updating Operations

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

                    #region Movies Section varibales

                    IMLItemList allFilmItems;
                    int TotalItems = MediaSectionsAllocator.MoviesSection.ItemCount;
                    int CurrentItem = 1;
                    MainImportingEngine.CurrentProgress = 0;
                    MainImportingEngine.GeneralStatus = "Updating Movies Section";
                    MainImportingEngine.SpecialStatus = "";


                    if (Settings.SleepValue > 3000) Settings.SleepValue = 3000;

                    #endregion

                    #region Decide selective updating

                    bool SelectiveUpdatingEnabled = false;
                    Debugger.LogMessageToFile("Scanning section for Selective Updating request...");

                    try
                    {
                        foreach (int id in MediaSectionsAllocator.MoviesSection.GetAllItemIDs())
                        {
                            IMLItem Item = MediaSectionsAllocator.MoviesSection.FindItemByID(id);
                            if (Item.Tags["SelectiveUpdating"] != null &&
                                Helpers.GetTagValueFromItem(Item, "SelectiveUpdating") != "")
                                SelectiveUpdatingEnabled = true;
                        }
                    }
                    catch (NullReferenceException)
                    {
                        StatusForm.statusForm.TrayIcon.ShowBalloonTip(10000, "Films section is corrupt.",
                                                                      "MediaFairy was unable to update your Films media section because it's database file is corrupt. Please restore it using an available backup.",
                                                                      ToolTipIcon.Error);
                        Debugger.LogMessageToFile("The media section " + Settings.FilmsLibrary +
                                                  " is corrupt. This section will not be updated.");
                        return false;
                    }

                    #endregion






                    //FilmReleasesDownloader
                    //    .DownloadFilmReleases
                    //    (pluginpath, connectionresult,
                    //    combinedSceneTags,
                    //    SelectiveUpdatingEnabled);






                    #region Cache films section for the chain linking

                    if (!SelectiveUpdatingEnabled && Settings.FilmItemChainLinkerIsEnabled)
                    {
                        allFilmItems = MediaSectionsAllocator.MoviesSection.SearchAll("*");
                    }
                    else allFilmItems = null;

                    #endregion

                    #region Connect to OSdb

                    //connectionresult = Helpers.CheckInternetConnectionAndConnectToOSDb();

                    #endregion

                    #endregion

                    #region Main Updating Loop

                    Debugger.LogMessageToFile("Beginning to update Films section...");
                    MainImportingEngine.ThisProgress.Progress(MainImportingEngine.CurrentProgress, "Preparing to update Movies section...");
                    Thread.Sleep(1000);
                    MediaSectionsAllocator.MoviesSection.BeginUpdate();



                    foreach (int id in MediaSectionsAllocator.MoviesSection.GetAllItemIDs())
                    {
                        if (
                            !SingleMovieItemUpdater.UpdateFilmItem
                            (id, MediaSectionsAllocator.MoviesSection,
                            allFilmItems, ref FileServerChecked,
                            ref FileServerIsOnline, connectionresult, imdbOP,
                            pluginpath, ref CurrentItem, TotalItems,
                            MDFSettingsa, IBS, combinedSceneTags))
                            return false;
                    }



                    MediaSectionsAllocator.MoviesSection.EndUpdate();
                    Debugger.LogMessageToFile("Completing updating of Films section...");

                    #endregion

                    #region Post-Updating Operations

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

                    LibraryCleaners.CleanupSection
                        (Settings.CleanEmptyFields,
                         Settings.CleanSelectedFields,
                         Settings.SelectedFieldsToClean,
                         MediaSectionsAllocator.MoviesSection);


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


                    MeePopupProvider
                        .ImportMeePopupProviderField
                        (MediaSectionsAllocator.MoviesSection);


                    //if (Settings.EnableXmlBackupFilms)
                    //    MediaLibrarySynchronizerBackup
                    //        .LibrarySynchronizerBackupMediaSection
                    //        (MediaSectionsAllocator.MoviesSection,
                    //        Settings.XmlBackupsDirectory);

                    #endregion
                }




            }



            return true;
        }
 internal static bool RunMediaSectionsUpdatingEngine(Importer importer,
      IBaseSystem iBaseSystem,
      IMLSection section,
      IEnumerable<string> combinedSceneTags)
 {
     return !MediaUpdaters
         .UpdateMediaSections
         (iBaseSystem, section,
         combinedSceneTags);
 }
        internal static void GetEpisodeThumbnail(IMLItem item, bool fileServerIsOnline, bool isUNC, string mdfSettingsb,
                                                 IBaseSystem iBaseSystem, ITVDBEpisode episode, WebClient client)
        {

            string imageFile = TVShows.CreateEpisodeThumbsFilePath
                (item, mdfSettingsb, ".jpg", iBaseSystem);


            string imagelocation = imageFile;

            if (File.Exists(imagelocation))
            {
                item.ImageFile = imagelocation;
                item.SaveTags();
                return;
            }

            if (!Settings.WantEpisodeThumbnails)
                return;

            if (String.IsNullOrEmpty(episode.ImageFile))
                return;

            if (!fileServerIsOnline && isUNC)
                return;


            MainImportingEngine.ThisProgress.Progress(MainImportingEngine.CurrentProgress,
                                                      "Downloading episode thumbnail...");

            try
            {
                client.DownloadFile(episode.ImageFile, imagelocation);
                item.ImageFile = imagelocation;
                item.SaveTags();
            }
            catch
            {
                try
                {
                    client.DownloadFile(episode.ImageFile, imagelocation);
                    item.ImageFile = imagelocation;
                    item.SaveTags();
                }
                catch
                {
                }

            }

        }
        internal static void GetSeasonPoster(IMLItem item, string mdfSettingsb, IBaseSystem iBaseSystem, ITVDBEpisode episode,
                                            int seasonNumber)
        {

            if (!Settings.WantSeasonImages) 
                return;

            string imageFile = TVShows.CreateSeasonPostersFilePath
                (item, mdfSettingsb, ".jpg", iBaseSystem);
            
            TvSeriesOperations.DownloadSeriesBanner
                (item, "SeasonImage", seasonNumber, episode.SeasonID, imageFile);
        
        }
        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;
        }
        private static void GetSeriesBanner(IMLItem item, string mdfSettingsb, IBaseSystem ibs)
        {

            if (!Settings.WantSeriesBanners) return;
            
            try
            {
                string imageFile = TVShows.CreateSeriesBannersFilePath(item, mdfSettingsb, ".jpg", ibs);

                Debugger.LogMessageToFile("Downloading Series banner...");

                TvSeriesOperations.DownloadSeriesBanner(item, "SeriesBanner", 0, "", imageFile);
            
            }
            catch (Exception e)
            {
                Debugger.LogMessageToFile(
                "[Series metadata downloader] An unexpected error occured while" +
                " trying to create a Series banner file path. The error was: " + e);

                StatusForm.statusForm.TrayIcon.ShowBalloonTip(5000, "Error creating image file path",
                "MediaFairy encountered an error while trying to create a Series banner file path." +
                " Please see Debug.log for details on this error.",
                ToolTipIcon.Warning);

            }

        }
Пример #20
0
 public void Initalize(IBaseSystem baseSystem)
 {
     Ibs = baseSystem;
     return;
 }
        public UpdateMediaSectionsParams(IMLSection section,
            IBaseSystem iBaseSystem, 
            IEnumerable<string> combinedSceneTags)
        {
            Section = section;

            Ibs = iBaseSystem;

            CombinedSceneTags
                = combinedSceneTags;
        }
        internal static void DownloadMusicArtistBackdropFromMeedioFr
            (IMLItem Item,string MDFSettingsc,
             IBaseSystem IBS,
             ConnectionResult connectionresult)
        {

            #region Return if disabled
            if (!MediaFairy.Settings.ArtistBackdropsEnabled)
                return;
            Debugger.LogMessageToFile
                ("[Artist fanart downloader]" +
                 " Artist fanart downloader is enabled");
            #endregion

            if (!connectionresult.InternetConnectionAvailable && MediaFairy.Settings.ConnectionDiagnosticsEnabled)
                return;

            #region Retrieve Artist
            string Artist = Helpers.GetTagValueFromItem(Item, "Artist");
            if (String.IsNullOrEmpty(Artist))
                return;
            Debugger.LogMessageToFile("[Artist fanart downloader] Artist: " + Artist);
            #endregion


            string Fanart = Helpers.GetTagValueFromItem(Item, "fanart");
            if (String.IsNullOrEmpty(Fanart))
            {
                Debugger.LogMessageToFile("[Artist fanart downloader] Library tag 'fanart' is empty for this item. Proceeding to download image...");
            }
            else
            {
                Debugger.LogMessageToFile("[Artist fanart downloader] Library tag 'fanart' was found populated for this item. Checking if image file exists...");
                if (File.Exists(Fanart))
                {
                    Debugger.LogMessageToFile("[Artist fanart downloader] Image file exists! Continuing to next item");
                    return;
                }
                else
                {
                    Debugger.LogMessageToFile("[Artist fanart downloader] Image file found in tag 'fanart' does not exist. Proceeding to download image...");
                    Item.Tags["fanart"] = "";
                    Item.SaveTags();
                    Fanart = "";
                }
            }

            Debugger.LogMessageToFile("[Artist fanart downloader] Artist fanart retrieved from library tag: " + Fanart);

            //MessageBox.Show("Step 3");

            #region Normalize Artist name
            string ArtistNorm = Artist.ToLower();
            
            if (ArtistNorm.StartsWith("the"))
                ArtistNorm = ArtistNorm.Remove(0,4);

            ArtistNorm = ArtistNorm.Replace(" ", "%20");
            //MessageBox.Show(ArtistNorm);
            #endregion

            string ImageURL = "http://www.meediofr.org/~dmdocuments/music/artist_backdrops/" + ArtistNorm + ".jpg";

            //MessageBox.Show("Step 5");

            string ImageFile = Music.CreateArtistFanartFilePath(Item, MDFSettingsc, ".jpg", IBS);
            Debugger.LogMessageToFile("[Artist fanart downloader] Fanart file path created by MetadataFolders: " + ImageFile);


            if (File.Exists(ImageFile))
            {
                Debugger.LogMessageToFile("[Artist fanart downloader] Fanart image already exists. Will now save it's path to library tag 'fanart'");
                Item.Tags["fanart"] = ImageFile;
                Item.SaveTags();
                return;
            }
            else
            {
                Debugger.LogMessageToFile("[Artist fanart downloader] Fanart image does not exist for this Artist. Proceeding to download image...");
            }

            //MessageBox.Show("Step 6");

            Helpers.UpdateProgress("Updating Music section...", "Searching meediofr.org for fanart image for artist: " + Artist + "...", Item);
            Debugger.LogMessageToFile("[Artist fanart downloader] Searching meediofr.org for fanart image for artist: " + Artist + "...");
            if (!Helpers.RemoteFileExists(ImageURL))
            {
                Debugger.LogMessageToFile("[Artist fanart downloader] The remote image path constructed was not found on the server. Continuing to next item...");
                return;
            }

            WebClient client = new WebClient();
            try
            {
                Helpers.UpdateProgress("Updating Music Section...", "Downloading fanart image for Artist '" + Artist + "'...", Item);
                Debugger.LogMessageToFile("[Artist fanart downloader] Downloading fanart image for Artist '" + Artist + "'...");
                client.DownloadFile(ImageURL, ImageFile);
                Item.Tags["fanart"] = ImageFile;
                Item.SaveTags();
            }
            catch (Exception e)
            {
                StatusForm.statusForm.TrayIcon.ShowBalloonTip(10000, "Error downloading image", "MediaFairy encountered an error while trying to download an artist fanart image. Please see Debug.log for details on this error.", ToolTipIcon.Warning);
                Debugger.LogMessageToFile("[Artist fanart downloader] An unexpected error occured while trying to download an artist fanart image. The error was: " + e.ToString() );
            }



        }
        internal static void PopulateSeriesDetails(IMLItem item,
                string mdfSettingsb, IBaseSystem ibs, ITVDBSeries series)
        {

            Debugger.LogMessageToFile("Populating Series Details...");


            GetMainDetails(item, series);


            GetSeriesBanner(item, mdfSettingsb, ibs);


            //TODO: Add Series Posters downloading feature
            //if (Importer.WantSeriesPosters)
            //{
            //    try
            //    {

            //        string ImageFile = MetaDataFolders.TVShows.CreateSeasonPostersFilePath(Item, MDFSettingsb, ".jpg", IBS);
            //        //MessageBox.Show(ImageFile);
            //        Debugger.LogMessageToFile("Downloading Series Poster...");
            //        TvSeriesOperations.DownloadSeriesBanner(SeriesItem, "SeriesPoster", 0, "", ImageFile);
            //    }
            //    catch (Exception e)
            //    {
            //        Debugger.LogMessageToFile("[Series metadata downloader] An unexpected error occured while trying to create a Series Poster file path. The error was: " + e.ToString());
            //        StatusForm.statusForm.TrayIcon.ShowBalloonTip(5000, "Error creating image file path", "MediaFairy encountered an error while trying to create a Series Poster file path. Please see Debug.log for details on this error.", ToolTipIcon.Warning);
            //    }

            //}


            GetSeriesFanart(item, mdfSettingsb, ibs);


        }
        private static bool PerformMusicSectionUpdate(ref bool fileServerIsChecked, ref bool fileServerIsOnline,
                            ConnectionResult connectionresult, string mediaDataFoldersSettingsMusic,
                            IBaseSystem iBaseSystem, List<string[]> albumsWithCoverArt, bool connectedToiTunes,
                            int tracksRemainingToIdentifyCount, List<string> albumsWithoutCoverArt,
                            int allTracksToIdentifyCount, int musicDnsIdentificationTime)
        {


            MediaSectionsAllocator.MusicSection.BeginUpdate();
            
            MainImportingEngine.ThisProgress.Progress
                (0, "Preparing to update Music Section...");
            
            Thread.Sleep(1000);

            #region Section variables

            Debugger.LogMessageToFile("Creating section variables...");
            int currentItem = 1;
            int[] allItems = MediaSectionsAllocator.MusicSection.GetAllItemIDs();
            int totalItemCount = allItems.Length;

            #endregion

            MediaSectionsAllocator.MusicSection.BeginUpdate();

            foreach (int id in allItems)
            {
                if (!MusicTrackItemUpdater.UpdateMusicTrackItem(ref fileServerIsChecked, ref fileServerIsOnline,
                                                                connectionresult, mediaDataFoldersSettingsMusic, iBaseSystem,
                                                                allTracksToIdentifyCount,
                                                                connectedToiTunes, totalItemCount, id, ref albumsWithCoverArt,
                                                                ref albumsWithoutCoverArt, ref tracksRemainingToIdentifyCount,
                                                                ref musicDnsIdentificationTime, ref currentItem))
                    return false;
            }


            MediaSectionsAllocator.MusicSection.EndUpdate();

            return true;
        
        
        }
        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 UpdateMusicSection(ref bool fileServerIsChecked,
            ref bool fileServerIsOnline, ConnectionResult connectionresult,
            string mediaDataFoldersSettingsMusic, IBaseSystem iBaseSystem)
        {


            Debugger.LogMessageToFile("Checking for valid Music Section...");

            if (String.IsNullOrEmpty(Settings.MusicLibrary))
                Settings.EnableMusicSectionUpdater = false;

            if (!Settings.EnableMusicSectionUpdater)
                return true;

            if (MediaSectionsAllocator.MusicSection.ItemCount == 0)
                return true;

            #region Music Section varibales

            Debugger.LogMessageToFile("Creating album cover lists...");
            var albumsWithoutCoverArt = new List<string>();
            var albumsWithCoverArt = new List<string[]>();

            int allTracksToIdentifyCount = 0;
            int tracksRemainingToIdentifyCount = 0;

            MainImportingEngine.CurrentProgress = 0;
            MainImportingEngine.GeneralStatus = "Updating Music Section";
            MainImportingEngine.SpecialStatus = "";
            //Debugger.LogMessageToFile("Creating iTunes instance...");
            //IiTunes iTunesApp;
            if (Settings.SleepValue > 3000) Settings.SleepValue = 3000;

            #endregion

            int musicDnsIdentificationTime = 0;
            //    MusicDnsIdentificationTimeCalculator.CalculateMusicDnsIdentificationTime
            //        (connectionresult, out tracksRemainingToIdentifyCount,
            //         ref allTracksToIdentifyCount);

            #region Synchronize with ITunes

            const bool connectedToiTunes = false;

            //if (Settings.WantItunesSync)
            //{
            //    Debugger.LogMessageToFile("Launching iTunes...");

            //    #region Launch itunes

            //    try
            //    {
            //        //Importer.CurrentProgress++;
            //        MainImportingEngine.ThisProgress.Progress
            //            (MainImportingEngine.CurrentProgress, 
            //            "Launching iTunes...");

            //        connectedToiTunes = true;
            //    }
            //    catch (Exception)
            //    {
            //        StatusForm.statusForm.TrayIcon.ShowBalloonTip(10000, "Unable to connect to iTunes",
            //        "MediaFairy was unable to detect a valid iTunes installation. " +
            //        "If you don't have iTunes installed, please disable the iTunes synchronization feature.",
            //        ToolTipIcon.Warning);
            //        connectedToiTunes = false;
            //    }
            //} 

            #endregion

            if (!PerformMusicSectionUpdate(ref fileServerIsChecked,
                ref fileServerIsOnline, connectionresult,
                mediaDataFoldersSettingsMusic, iBaseSystem,
                albumsWithCoverArt, connectedToiTunes,
                tracksRemainingToIdentifyCount, albumsWithoutCoverArt,
                allTracksToIdentifyCount, musicDnsIdentificationTime))
                return false;


            LibraryCleaners.CleanupSection(Settings.CleanEmptyFields, Settings.CleanSelectedFields,
                                           Settings.SelectedFieldsToClean, MediaSectionsAllocator.MusicSection);


            MeePopupProvider.ImportMeePopupProviderField(MediaSectionsAllocator.MusicSection);


            //if (Settings.EnableXmlBackupMusic)
            //    MediaLibrarySynchronizerBackup
            //        .LibrarySynchronizerBackupMediaSection
            //        (MediaSectionsAllocator.MusicSection,
            //         Settings.XmlBackupsDirectory);



            return true;
    
        }
        internal static bool GetSeriesMatchFromSectionOrTVDb(IMLItem item, ref string seriesName, out string SeriesID,
                                                            TVDBLib tvdb, string mdfSettingsb, IBaseSystem IBS,
                                                            out bool foundSeries)
        {


            var seriesItems = SearchForSeriesInSection(seriesName);


            if (seriesItems.Count > 0)
            {
                foundSeries = GetSeriesKeysFromLocalMatch(seriesName, out SeriesID, seriesItems);

                if (string.IsNullOrEmpty(SeriesID))
                {
                    if (GetSeriesKeysFromTVDb(item, ref seriesName, out SeriesID, tvdb,
                            mdfSettingsb, IBS, seriesItems, out foundSeries))
                        return true;
                }

            }
            else
            {
                if (GetSeriesKeysFromTVDb(item, ref seriesName, out SeriesID, tvdb,
                                            mdfSettingsb, IBS, seriesItems, out foundSeries))
                    return true;
            }

            return false;
    
        
        }
        internal static bool DownloadBackdropFromTheMovieDb
            (IMLItem item, string videofilename, 
             string location, string itemTitle,
             string parent, bool fileServerIsOnline,
             bool isUNC,string mdfSettingsa, 
             IBaseSystem ibs)
        {


            try
            {


                #region return cases



                if (MeediFier.Settings.WantToDisableSources
                    && !MeediFier.Settings.TMDbIsOnline)
                    return false;

                if (!MeediFier.Settings.FilmBackdropArtDownloaderIsEnabled)
                    return false;

                if (isUNC && !fileServerIsOnline)
                    return false;
                #endregion



                #region set item variables
               


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



                if (imdbid.Length == 8 && imdbid.StartsWith("tt"))
                {
                    imdbid = imdbid.Remove(0,2);
                    imdbid = "0" + imdbid;
                    imdbid = "tt" + imdbid;
                    item.Tags["ImdbID"] = imdbid;
                    item.SaveTags();
                }


                string fanart 
                    = Helpers.GetTagValueFromItem
                    (item, "fanart");

                string lastUpdated
                    = Helpers.GetTagValueFromItem
                    (item, "LastUpdated");



                #endregion


                #region check if image file in item's location exists
                if (!String.IsNullOrEmpty(fanart))
                {
                    if (File.Exists(fanart))
                        return true;
                }

                #endregion


                Application.DoEvents();


                const string ext = ".jpg";

                string imageFile = Movies.CreateFanartFilePath
                    (item, mdfSettingsa, ext, ibs);


                #region look for backdrop in item's location and save to image tag


                if (File.Exists(imageFile))
                {
                    item.Tags["fanart"] = imageFile;
                    item.SaveTags();
                    return true;

                }

                #endregion

                #region Check Last Updated date
                if (!String.IsNullOrEmpty(lastUpdated))
                {

                    DateTime todayDate = DateTime.Today;


                    DateTime updatedDate 
                        = DateTime.Parse
                        (Helpers.GetTagValueFromItem
                        (item, "LastUpdated"));


                    if (todayDate.DayOfYear
                        < (updatedDate.DayOfYear + 2))
                        return false;


                }
                #endregion



                var previewImages = new List<string>();

                List<string> imageUrls
                    = GetFilmBackdropsFromTMDb
                    (item, ref previewImages);


                if (imageUrls.Count == 0 || previewImages.Count == 0)
                {

                    Debugger.LogMessageToFile
                        ("The image URLs list is empty. " +
                         "No online backdrops were found for this film.");
                
                    return false;
                
                }

                string posterUrl
                    = ImageSelectionEngine.UserSelectsImage
                    (item, imageUrls, 
                    previewImages,"backdrop");


                #region Download, save and import backdrop

                #region download the image

                Helpers.UpdateProgress
                    ("Updating Movies Section",
                    "Downloading backdrop " +
                    "from themoviedb.org...", item);



                byte[] imageData
                    = MeediFier.Downloaders.TrytoDownloadData
                    (posterUrl, "Movies",
                    "TheMovieDatabase", item);



                if (imageData == null)
                    return false;




                #endregion

                #region save the image & update tags

                if ( String.IsNullOrEmpty
                    (ImageFileConstructor.SaveImage
                    (imageData, item, false,
                    "fanart", imageFile)))
                    return false;


                if (MeediFier.Settings.ResizeFilmBackdrops)
                {


                    Helpers.UpdateProgress
                        ("Updating Movies Section",
                        "Resizing image...", item);


                    ImageResizer.ResizeImage
                        (imageFile, imageFile, 
                         MeediFier.Settings.FilmBackdropWidth,
                         MeediFier.Settings.FilmBackdropHeight, false);


                }
                return true;

                #endregion


                #endregion

            }
            catch (Exception e)
            {
                Debugger.LogMessageToFile
                    ("The backdrops downloading method" +
                     " returned an unexpected error: " + e);

                return false;
            }


        }
        internal static void GetEpisodeDetailsAndImages(IMLItem item, bool fileServerIsOnline, bool isUNC, string mdfSettingsb,
                                                       IBaseSystem iBaseSystem, WebClient client, int seasonNumber,
                                                       ITVDBEpisode episode, ITVDBSeries series)
        {

            PopulateEpisodeDetails
                (item, episode, series);

            GetEpisodeThumbnail(item, fileServerIsOnline, isUNC, mdfSettingsb,
                                iBaseSystem, episode, client);

            GetSeasonPoster
                (item, mdfSettingsb, iBaseSystem, episode, seasonNumber);

        }
        internal static bool UpdateMusicTrackItem(ref bool fileServerChecked,
            ref bool fileServerIsOnline, ConnectionResult connectionresult,
            string mdfSettingsc, IBaseSystem iBaseSystem, int allTracksToIdentify,
            bool connectedToiTunes, int totalItems, int id, 
            ref List<string[]> albumsWithCover,
            ref List<string> albumsWithoutcover,
            ref int tracksToIdentify, 
            ref int remainingTime, 
            ref int currentItem)
        {


            #region item varibales
            Debugger.LogMessageToFile("Retrieving item's key tags...");
            IMLItem item = MediaSectionsAllocator.MusicSection.FindItemByID(id);
            string artist = Helpers.GetTagValueFromItem(item, "Artist");
            string album = Helpers.GetTagValueFromItem(item, "Album");
            album = MusicTrackItemUpdaterHelpers.NormalizeAlbumName(item, album);
            string title = Helpers.GetTagValueFromItem(item, "Title");
            string location = item.Location;
            bool isUNC = false;

            int i = location.LastIndexOf('\\');
            string parent = location.Substring(0, i);
            parent = parent + "\\";
            i = parent.LastIndexOf('\\');
            string root = parent.Substring(0, i);
            root = root + "\\";

            string parentDirectory = parent;

            #endregion

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

 

            #region validate filename

            //try
            //{
               
            //    Debugger.LogMessageToFile("Validating filename...");
            //    Helpers.CheckFileServer(Settings.WantFileserverDiagnostics, location, ref isUNC,
            //            ref fileServerChecked, root, ref fileServerIsOnline);
            //}
            //catch (Exception)
            //{
            //    return true;
            //}

            #endregion


            if (MissingItemRemover.DeleteMissingItem(Settings.DeleteMissing,
               isUNC, fileServerIsOnline, location,
               MediaSectionsAllocator.MusicSection, item))
               return true;


            try
            {

                var audioDuration = MusicTrackItemUpdaterHelpers.ExtractAudioDuration(item);

                if (Helpers.UserCancels(MainImportingEngine.SpecialStatus, item))
                    return false;
      
                if (!MusicTrackItemUpdaterHelpers.PerformAudioIdentificationAndDownloadAlbumCoverArt
                      (fileServerIsOnline, connectionresult, mdfSettingsc, 
                      iBaseSystem, allTracksToIdentify, ref albumsWithCover, 
                      ref albumsWithoutcover, ref tracksToIdentify,
                      ref remainingTime, parentDirectory, isUNC, location, 
                      audioDuration, item, ref artist, ref title, ref album)) 
                      return false;
      

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


                MusicTrackItemUpdaterHelpers
                    .OrganizeAudioFile
                    (artist, album, title, item);


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


                //SongLyricsDonwloader
                //    .DownloadSongLyrics
                //    (item, connectionresult);


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

                //MeedioFrMusicArtistBackdropDownloader
                //    .DownloadMusicArtistBackdropFromMeedioFr
                //    (item, mdfSettingsc,
                //    iBaseSystem, connectionresult);



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






                #region update iTunes library

                //if (Settings.WantItunesSync)
                //{
                //    if (connectedToiTunes)
                //    {

                //        IiTunes iTunesApp = new iTunesAppClass();
                //        IITLibraryPlaylist playlist = iTunesApp.LibraryPlaylist;

                //        MainImportingEngine.ThisProgress.Progress(MainImportingEngine.CurrentProgress,
                //                                                    "Adding audio track " + item.Name +
                //                                                    " to iTunes library...");


                //        try
                //        {
                //            playlist.AddFile(item.Location);
                //        }
                //        catch (Exception e)
                //        {
                //            MessageBox.Show(e.ToString());
                //        }
                //    }
                //}

                #endregion





                item.SaveTags();
            
            }
            catch (Exception e)
            {
                Debugger.LogMessageToFile(
                "An uncexpected error occurred in the Music Updater method. The error was: " + e);
                StatusForm.statusForm.TrayIcon.ShowBalloonTip(10000, "Error updating Music Section",
                "An uncexpected error occurred in the Music Updater method." +
                Environment.NewLine + "Please see Debug.log for details.",
                ToolTipIcon.Error);

                return true;
            }

            currentItem++;
        
            
            
            
            
            return true;
    
        
        }
        internal static void PopulateEpisodeMetadata(IMLItem item, bool fileServerIsOnline, bool isUNC, string mdfSettingsb,
                                                    IBaseSystem iBaseSystem, int seasonNumber, WebClient client,
                                                    ITVDBSeries series, ITVDBEpisode episode)
        {
            if (episode == null)
                return;

            if (String.IsNullOrEmpty(episode.ID.Trim()) ||
                episode.ID == null) 
                return;

            Debugger.LogMessageToFile("Found episode named " +
                                      episode.EpisodeName + "with ID " +
                                      episode.ID + ".");

            Debugger.LogMessageToFile("Writing series tags...");

            item.Tags["SeriesName"] = series.SeriesName;
            item.Tags["SeriesIMDbID"] = series.IMDb_ID;
            item.Tags["SeriesID"] = series.ID;


            GetEpisodeDetailsAndImages(item, fileServerIsOnline, isUNC,
                                                                             mdfSettingsb, iBaseSystem, client,
                                                                             seasonNumber, episode, series);


        }
        internal static bool LocateOrDownloadFimCoverArt
            (IMLItem item, string location, string itemTitle,
             string videoFilename, string parentDirectory,
             bool fileServerIsOnline, bool isUNC,
             string metadataFoldersSettingsA, IBaseSystem ibs)
        {



            Application.DoEvents();

            if (!MeediFier.Settings.FilmCoverArtDownloaderIsEnabled)
                return false;

            if (isUNC && !fileServerIsOnline)
                return false;



            Application.DoEvents();

            if (ImageFileExistsInItemLocatiohn
                (item, fileServerIsOnline, isUNC))
                return true;

            Application.DoEvents();


            var imageFile = ConstructMoviePosterFilePath
                (item, metadataFoldersSettingsA, ibs);

            if (String.IsNullOrEmpty(imageFile))
                return false;

            Application.DoEvents();


           

            if (LookForPosterInItemLocation
                (item, fileServerIsOnline, isUNC, imageFile))
                return true;


            return SearchForAndDownloadFilmCoverArtFromMultipleSources
                (item, location, videoFilename,
                 metadataFoldersSettingsA, ibs, imageFile);


        }
Пример #33
0
        internal static bool UpdateMoviesSection
            (string pluginpath,
            IBaseSystem iBaseSystem,
            IEnumerable <string> combinedSceneTags,
            IMLSection section)
        {
            if (section.ItemCount == 0)
            {
                return(true);
            }



            Debugger.LogMessageToFile
                (Environment.NewLine
                + Environment.NewLine
                + "Film Updater is enabled.");



            #region Pre-Updating Operations


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


            int totalItems
                = section.ItemCount;


            int currentItem = 1;


            MainImportingEngine
            .CurrentProgress = 0;


            MainImportingEngine
            .GeneralStatus
                = "Updating Movies Section";


            MainImportingEngine
            .SpecialStatus = "";


            #endregion



            #region Main Updating Loop


            Debugger.LogMessageToFile
                ("Beginning to update" +
                " Films section...");



            section.BeginUpdate();



            foreach (int id in section.GetAllItemIDs())
            {
                if (!SingleMovieItemUpdater
                    .UpdateFilmItem
                        (id, section,
                        pluginpath,
                        ref currentItem,
                        totalItems,
                        iBaseSystem,
                        combinedSceneTags))
                {
                    return(false);
                }
            }



            section.EndUpdate();


            Debugger.LogMessageToFile
                ("Completing updating" +
                " of Films section...");


            #endregion



            return(true);
        }
        internal static bool SearchForAndDownloadFilmCoverArtFromMultipleSources
            (IMLItem item, string location,
             string videoFilename, 
             string mdfSettingsa,
             IBaseSystem ibs,
             string imageFile)
        {


            #region initialize variables


            string movieName = Helpers.GetTagValueFromItem(item, "Title");
            string releaseYear = Helpers.GetTagValueFromItem(item, "Year");
            #endregion

            string title = Helpers.GetTagValueFromItem(item, "Title");


            var imageUrls = new List<string>();
            var previewImages = new List<string>();
            //PreviewImages = ImageUrls;





            //TODO: Skip searching secondary sources if cover art is found from the first source.

            #region Add the image URLs from all sources



            if (MeediFier.Settings.PosterPrimarySource == "TheMovieDatabase")
            {

                if (MeediFier.Settings.TMDbPostersEnabled)
                {

                    if (imageUrls.Count == 0 || MeediFier.Settings.AlwaysPromptForImages)
                    {

                        //imageUrls.AddRange(TMDbFilmCoverArtScraper.GetFilmPostersFromTMDb(item, ref previewImages));
                        
                        //tmp = "";
                        //tmp = GetFilmPosterFromTMDb(Item);
                        //if (!String.IsNullOrEmpty(tmp))
                        //    ImageUrls.Add(tmp);
                    
                    }
                
                }


                if (MeediFier.Settings.ImpAwardsPostersEnabled)
                {
                    if (imageUrls.Count == 0 || MeediFier.Settings.AlwaysPromptForImages)
                    {
                        List<string> tmpList = ImpAwardsFilmCoverArtDownloader.GetPoster(item, movieName, releaseYear, "Both");
                        imageUrls.AddRange(tmpList);
                        previewImages.AddRange(tmpList);
                    }
                }

            }
            else
            {


                if (MeediFier.Settings.ImpAwardsPostersEnabled)
                {
                    if (imageUrls.Count == 0 || MeediFier.Settings.AlwaysPromptForImages)
                    {
                        List<string> tmpList = ImpAwardsFilmCoverArtDownloader.GetPoster(item, movieName, releaseYear, "Both");
                        imageUrls.AddRange(tmpList);
                        previewImages.AddRange(tmpList);
                    }
                }

                if (MeediFier.Settings.TMDbPostersEnabled)
                {
                    if (imageUrls.Count == 0 || MeediFier.Settings.AlwaysPromptForImages)
                    {

                        //imageUrls.AddRange(TMDbFilmCoverArtScraper.GetFilmPostersFromTMDb(item, ref previewImages));
                        //tmp = "";
                        //tmp = GetFilmPosterFromTMDb(Item);
                        //if (!String.IsNullOrEmpty(tmp))
                        //    ImageUrls.Add(tmp);
                    }
                }

            }

            if (MeediFier.Settings.IMDbPostersEnabled)
            {
                if (imageUrls.Count == 0 || MeediFier.Settings.AlwaysPromptForImages)
                {
                    string tmp = IMDbCoverArtScraper.GetFilmPosterFromIMDb
                        (item);


                    if (!String.IsNullOrEmpty(tmp))
                    {
                        imageUrls.Add(tmp);
                        previewImages.Add(tmp);
                    }
                }
            }

            #endregion



            if (imageUrls.Count == 0 || previewImages.Count == 0)
            {
                Debugger.LogMessageToFile("The image URLs list is empty. No online posters were found for this film.");
                return false;
            }



            string posterUrl 
                = ImageSelectionEngine
                .UserSelectsImage
                (item, imageUrls,
                previewImages,
                "poster");



            #region Download Image

            Helpers.UpdateProgress
                ("Updating Films Section...", 
                "Downloading film poster for "
                + title + "...", item);


            byte[] imageData = MeediFier.Downloaders
                .TrytoDownloadData(posterUrl, "Movies", "", item);



            if (imageData == null)
                return false;

            #endregion



            #region Save Image
            //if (SaveImage(imageData, Item, Importer.PosterNamingMethod, Importer.WhereToSavePoster, Importer.PosterFolder, true, VideoFilename, filepath, "", "") != "")
            if (ImageFileConstructor.SaveImage(imageData, item,true,"",imageFile) != "")
            {
                if (MeediFier.Settings.ResizeFilmPosters)
                {

                    Helpers.UpdateProgress
                        ("Updating Movies Section", 
                         "Resizing image...", item);
                    
                    ImageResizer.ResizeImage
                        (imageFile, imageFile, MeediFier.Settings.FilmPosterWidth, 
                         MeediFier.Settings.FilmPosterHeight, false);
                
                }

                item.SaveTags();
                return true;
            }


            return false;

            #endregion


        }
        internal static void StartMainImportingEngine(Importer importer,
                     IBaseSystem iBaseSystem,
                     IMLSection section, 
                     IEnumerable<string> combinedSceneTags)
        {
            GeneralStatus = "Performing media importing...";
                    SpecialStatus = String.Empty;

                    MediaImportingEngine.ImportMediaFilesMain
                        (combinedSceneTags, importer, section);

                    MediaImportingEngineHelpers
                        .RunMediaSectionsUpdatingEngine
                        (importer, iBaseSystem, section,
                        combinedSceneTags);
        }
        private static string ConstructMoviePosterFilePath(IMLItem item, string metadataFoldersSettingsA, IBaseSystem ibs)
        {
            const string ext = ".jpg";
            string imageFile;

            try
            {
                imageFile = Movies.CreatePosterFilePath(item, metadataFoldersSettingsA, ext, ibs);
            }
            catch (Exception)
            {
                Debugger.LogMessageToFile("[Media Image Downloader] " +
                                          "The Media Image Downloader was unable to construct the file path" +
                                          " for a movie poster image. Movie Poster Metadata Folders were not set.");
                return String.Empty;
            }

            return imageFile;
        }
        internal static bool UpdateTvEpisodeItem
            (IMLSection section, ref bool fileServerChecked, 
             ref bool fileServerIsOnline,
             ConnectionResult connectionresult,
             string mdfSettingsb, IBaseSystem iBaseSystem,
             IEnumerable<string> combinedSceneTags, 
             TVDBLib tvdb, int totalItems, int id,
             ref int currentItem)
        {



            #region item variables

            IMLItem item = MediaSectionsAllocator.TvEpisodesSection.FindItemByID(id);
            string seriesID = string.Empty;

            //TODO: This var should be removed!
            const bool isMultipart = false;
            
            string location = item.Location;

            //TODO: This var must be removed!
            string[] multipart = new string[] {};
            
            bool isUNC = false;

            DirectoryInfo root;

            var parentDir = GetParentAndRootDirectories(location, out root);

            SingleTvEpisodeItemUpdaterHelpers.UpdateProgressTexts(totalItems, currentItem, item);

            #endregion

            try
            {


                #region Skip Not Listed item
                if (Helpers.GetTagValueFromItem(item, "NotListed") == "true")
                    return true;

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



                FileServerDiagnostic.CheckFileServer
                    (Settings.WantFileserverDiagnostics,
                    location, ref isUNC, ref fileServerChecked,
                    root.FullName, ref fileServerIsOnline);



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

                #region Delete Missing Item

                if (MissingItemRemover.DeleteMissingItem(Settings.DeleteMissing, isUNC, fileServerIsOnline, location,
                                                         section, item))
                    return true;

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


                if (EpisodeFileMetadataExtractor.ExtractMetadataFromEpisodeFilename
                        (item, location, section, MediaSectionsAllocator.TvEpisodesSection,
                        true, combinedSceneTags))
                    return true;
                

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



                #region Calculate Video Hash

                TvSeriesOperations.CalculateVideoHash(item, fileServerIsOnline, isUNC, location);
                
                if (Helpers.UserCancels(MainImportingEngine.SpecialStatus, item))
                    return false;

                #endregion


                #region Perform Online Tasks
                
                
                if (!SingleTvEpisodeItemUpdaterHelpers.PerfrormOnlineTasks
                    (fileServerChecked, fileServerIsOnline, 
                    connectionresult, mdfSettingsb, iBaseSystem, tvdb,
                    currentItem, location,
                    isMultipart, multipart, item, isUNC,
                    seriesID, parentDir))
                    return false;

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

                #endregion



                SingleTvEpisodeItemUpdaterHelpers.SetProccesedFlag(item);

                SingleTvEpisodeItemUpdaterHelpers.ProceedToNextItem(ref currentItem, item);
            

            }
            catch (Exception e)
            {     
                SingleTvEpisodeItemUpdaterHelpers.LogException(e, item);
            }


            return true;
    
         
        
        }
        internal static bool UpdateFilmItem
            (int itemID,
            IMLSection moviesSection,
            string pluginpath,
            ref int currentItem,
            int totalItems,
            IBaseSystem iBaseSystem,
            IEnumerable <string> combinedSceneTags)
        {
            MainImportingEngine
            .CurrentProgress =
                ImportingEngineHelpers
                .ComputeProgress
                    (currentItem, totalItems);



            #region item variables


            Helpers.UpdateProgress("", "Fetching library item...");
            Debugger.LogMessageToFile("Fetching library item...");


            var item = moviesSection
                       .FindItemByID(itemID);

            if (item == null)
            {
                return(true);
            }


            DirectoryInfo parent;


            string moviehash,
                   imdbid,
                   tmdbID,
                   year,
                   itemTitle,
                   sortTitle,
                   location;



            SingleMovieItemUpdaterHelpers.InitializeItemKeys
                (itemID, item, out moviehash, out imdbid,
                out tmdbID, out year, out itemTitle,
                out sortTitle, out location);



            #endregion



            Helpers.UpdateProgress("", "Creating filesystem instance...");

            Debugger.LogMessageToFile(String.Format
                                          ("Creating filesystem instances for media file {0}...",
                                          location));


            try
            {
                var fi = new FileInfo
                             (location);

                parent = fi.Directory;
            }
            catch (Exception e)
            {
                Debugger.LogMessageToFile(String.Format
                                              ("Unable to create filesystem instances" +
                                              " for this media file." +
                                              "An error occured: {0}", e));

                return(true);
            }



            if (IdentifyFilmAndDownloadMetadata
                    (combinedSceneTags,
                    item, parent))
            {
                return(true);
            }


            if (Helpers.UserCancels
                    (MainImportingEngine.SpecialStatus))
            {
                return(false);
            }



            SetFilmItemProcessingFlags
            .SetUpdateFlag(item);


            item.SaveTags();
            currentItem++;
            return(true);
        }