Example #1
0
        /// <summary>
        /// Update MangaObject to current version
        /// </summary>
        /// <param name="MangaObject">MangaObject to update</param>
        /// <param name="Updated">Was the MangaObject updated</param>
        /// <returns>Updated MangaObject</returns>
        private MangaObject UpdateMangaObjectVersion(MangaObject MangaObject, ref Boolean Updated)
        {
            Updated = false;

            #region Re-enable LocationObjects

            /*
             * TODO: This is a quick fix and should be removed!
             */
            Updated = MangaObject.Locations.Count(LocObj => !LocObj.Enabled) > 0;
            MangaObject.Locations.ForEach(LocObj => LocObj.Enabled = true);

            Updated = MangaObject.DatabaseLocations.Count(LocObj => !LocObj.Enabled) > 0;
            MangaObject.DatabaseLocations.ForEach(LocObj => LocObj.Enabled = true);
            #endregion

            #region Check for old location object types.
            Regex NameLanguageSplitRegex = new Regex(@"[^\w]");
            foreach (LocationObject LocObj in MangaObject.Locations)
            {
                if (Equals(LocObj.ExtensionLanguage, null))
                {
                    Updated = true;
                    String   Language     = "English";
                    String[] NameLanguage = NameLanguageSplitRegex.Split(LocObj.ExtensionName);
                    if (NameLanguage.Length > 1)
                    {
                        Language = NameLanguage[1];
                    }
                    LocObj.ExtensionLanguage = Language;
                    logger.Info(String.Format("[{0}] Setting language of '{1}' to '{2}'", MangaObject.Name, LocObj.ExtensionName, Language));
                }
            }
            foreach (LocationObject LocObj in MangaObject.DatabaseLocations)
            {
                if (Equals(LocObj.ExtensionLanguage, null))
                {
                    Updated = true;
                    String   Language     = "English";
                    String[] NameLanguage = NameLanguageSplitRegex.Split(LocObj.ExtensionName);
                    if (NameLanguage.Length > 1)
                    {
                        Language = NameLanguage[1];
                    }
                    LocObj.ExtensionLanguage = Language;
                    logger.Info(String.Format("[{0}] Setting language of '{1}' to '{2}'", MangaObject.Name, LocObj.ExtensionName, Language));
                }
            }
            #endregion

            #region Migrate covers to new format.
            foreach (String Cover in MangaObject.Covers)
            {
                Updated = true;
                IExtension Extension = null;
                if (Cover.Contains("mhcdn.net"))
                {
                    Extension = CORE.Extensions["MangaHere", "English"];
                }
                else
                {
                    Extension = CORE.Extensions.FirstOrDefault(_ => Cover.Contains(_.ExtensionDescriptionAttribute.URLFormat));
                }
                if (!Equals(Extension, null))
                {
                    MangaObject.CoverLocations.Add(new LocationObject()
                    {
                        Url               = Cover,
                        Enabled           = true,
                        ExtensionName     = Extension.ExtensionDescriptionAttribute.Name,
                        ExtensionLanguage = Extension.ExtensionDescriptionAttribute.Language,
                    });
                }
                logger.Info(String.Format("[{0}] Migrating cover to location: {1}", MangaObject.Name, Cover));
            }

            // Remove duplicates
            MangaObject.CoverLocations = (from CoverLocation in MangaObject.CoverLocations
                                          group CoverLocation by CoverLocation.Url
                                          into CoverLocationGroups
                                          select CoverLocationGroups.FirstOrDefault()).ToList();
            MangaObject.CoverLocations.RemoveAll(_ => Equals(_, null));
            MangaObject.Covers.Clear();
            #endregion

            return(MangaObject);
        }