void LoadUpdates()
{
object s = updatesTree.SaveStatus ();
updatesTree.Clear ();
AddinRepositoryEntry[] reps;
reps = service.Repositories.GetAvailableAddins (RepositorySearchFlags.LatestVersionsOnly);
int count = 0;
foreach (AddinRepositoryEntry arep in reps)
{
if (!Services.InApplicationNamespace (service, arep.Addin.Id))
continue;
// Find whatever version is installed
Addin sinfo = AddinManager.Registry.GetAddin (Addin.GetIdName (arep.Addin.Id));
if (sinfo == null || !sinfo.Enabled || Addin.CompareVersions (sinfo.Version, arep.Addin.Version) <= 0)
continue;
if (IsFiltered (arep.Addin))
continue;
AddinStatus status = AddinStatus.Installed;
if (!sinfo.Enabled || Services.GetMissingDependencies (sinfo).Any())
status |= AddinStatus.Disabled;
updatesTree.AddAddin (arep.Addin, arep, status | AddinStatus.HasUpdate);
count++;
}
labelUpdates.Text = string.Format (Catalog.GetPluralString ("{0} update available", "{0} updates available", count), count);
updatesTabLabel.Text = Catalog.GetString ("Updates");
if (count > 0)
updatesTabLabel.Text += " (" + count + ")";
buttonUpdateAll.Visible = count > 0;
if (count > 0)
updatesTree.RestoreStatus (s);
else
updatesTree.ShowEmptyMessage ();
}