public static bool LoadMovieCache([NotNull] FileInfo loadFrom, iMovieSource cache)
        {
            Logger.Info("Loading Cache from: {0}", loadFrom.FullName);
            if (!loadFrom.Exists)
            {
                return(true); // that's ok
            }

            try
            {
                XElement x = XElement.Load(loadFrom.FullName);
                bool     r = ProcessMovieXml(x, cache);
                if (r)
                {
                    cache.UpdatesDoneOk();
                }

                return(r);
            }
            catch (Exception e)
            {
                Logger.Warn(e, "Problem on Startup loading File");
                LoadErr = loadFrom.Name + " : " + e.Message;
                return(false);
            }
        }
        private static bool ProcessMovieXml(XElement x, iMovieSource cache)
        {
            try
            {
                string?time = x.Attribute("time")?.Value;
                if (time != null)
                {
                    cache.LatestUpdateTimeIs(time);
                }
                else
                {
                    Logger.Error("Could not obtain update time from XML");
                }

                foreach (CachedMovieInfo si in x.Descendants("Movie").Select(seriesXml => new CachedMovieInfo(seriesXml)))
                {
                    // The <cachedSeries> returned by GetSeries have
                    // less info than other results from
                    // thetvdb.com, so we need to smartly merge
                    // in a <Series> if we already have some/all
                    // info on it (depending on which one came
                    // first).
                    cache.Update(si);
                }

                /*foreach (XElement episodeXml in x.Descendants("Episode"))
                 * {
                 *  Episode e = new Episode(episodeXml);
                 *  if (e.Ok())
                 *  {
                 *      cache.AddOrUpdateEpisode(e);
                 *  }
                 *  else
                 *  {
                 *      Logger.Error($"problem with XML recieved {episodeXml}");
                 *  }
                 * }
                 *
                 * foreach (XElement banners in x.Descendants("BannersCache"))
                 * {
                 *  //this wil not be found in a standard response from the TVDB website
                 *  //will only be in the response when we are reading from the cache
                 *  ProcessXmlBannerCache(banners, cache);
                 * }*/
            }
            catch (XmlException e)
            {
                string message = "Error processing data from Cache (top level).";
                message += "\r\n" + x;
                message += "\r\n" + e.Message;

                Logger.Error(message);
                Logger.Error(x.ToString());
                throw new CacheLoadException(message);
            }
            return(true);
        }