private void RefreshMods(object param = null)
 {
     try
     {
         // Refresh only if last updated more than 30 seconds ago
         if (lastUpdated < DateTime.Now.AddSeconds(-30))
         {
             IsLoading = true;
             log.Info("Loading mods from Trovesaurus API");
             TrovesaurusApi.RefreshModList();
             TrovesaurusMods.Clear();
             foreach (TroveMod mod in TrovesaurusApi.ModList)
             {
                 TrovesaurusMods.Add(new TroveModViewModel(mod));
             }
             lastUpdated = DateTime.Now;
             log.Info("Loading mod list complete");
         }
         else
         {
             log.InfoFormat("Please wait {0} to refresh the mod list again", lastUpdated.AddSeconds(30).Subtract(DateTime.Now).Humanize());
         }
     }
     catch (Exception ex)
     {
         log.Error("Error refreshing mods", ex);
     }
     finally
     {
         IsLoading = false;
     }
 }
 public DesignTimeGetMoreModsViewModel() : base()
 {
     foreach (TroveMod mod in JsonConvert.DeserializeObject <List <TroveMod> >(Resources.DesignTimeTroveMods))
     {
         TrovesaurusMods.Add(new TroveModViewModel(mod));
     }
     BuildTypesCollections();
 }
        protected void BuildTypesCollections()
        {
            var textInfo = CultureInfo.CurrentCulture.TextInfo;

            Types.Clear();
            Types.Add(Strings.GetMoreModsViewModel_AllTypes);
            foreach (var type in from m in TrovesaurusMods
                     group m by m.DataObject.Type into g
                     orderby g.First().DataObject.Type
                     select textInfo.ToTitleCase(g.First().DataObject.Type.ToLower()))
            {
                Types.Add(type);
            }

            SubTypes.Clear();
            SubTypes.Add(Strings.GetMoreModsViewModel_AllSubTypes);
            foreach (var subtype in from m in TrovesaurusMods
                     where !string.IsNullOrEmpty(m.DataObject.SubType)
                     group m by m.DataObject.SubType into g
                     orderby g.First().DataObject.SubType
                     select textInfo.ToTitleCase(g.First().DataObject.SubType.ToLower()))
            {
                SubTypes.Add(subtype);
            }

            Formats.Clear();
            Formats.Add(Strings.GetMoreModsViewModel_AllFormats);
            //var formats = TrovesaurusMods.SelectMany(m => m.DataObject.Downloads).GroupBy(d => d.Format);
            foreach (var format in from d in TrovesaurusMods.SelectMany(m => m.DataObject.Downloads)
                     group d by d.Format into g
                     orderby g.First().Format
                     select g.First().Format)
            {
                Formats.Add(format);
            }
        }