public void Update()
{
Exception retexception = null;
try
{
var oldfeeditems = feeditems.Select(item => (FeedItem)item.Clone()).ToList();
feedxml = Fetch(FeedUri);
var xPathNavigator = feedxml.CreateNavigator();
if (xPathNavigator.NameTable != null)
{
var xmlNamespaceManager = new XmlNamespaceManager(xPathNavigator.NameTable);
xmlNamespaceManager.AddNamespace("atom", "http://www.w3.org/2005/Atom");
SetFeedTitle(xPathNavigator, xmlNamespaceManager);
SetFeedLink(xPathNavigator, xmlNamespaceManager);
SetFeedDescription(xPathNavigator, xmlNamespaceManager);
//Set up the node iterater to jump through all the entries
var xPathExpression = xPathNavigator.Compile("/atom:feed/atom:entry");
xPathExpression.SetContext(xmlNamespaceManager);
var xPathNodeIterator = xPathNavigator.Select(xPathExpression);
feeditems.Clear();
while (xPathNodeIterator.MoveNext())
{
if (xPathNodeIterator.Current != null)
{
if (!xPathNodeIterator.Current.HasChildren) continue;
var item = GetItemFromFeedEntry(xPathNodeIterator, xmlNamespaceManager);
if (!oldfeeditems.Contains(item))
{
item.Updated = true;
}
feeditems.Add(item);
}
}
}
}
catch (WebException ex)
{
retexception = ex;
}
catch (XmlException ex)
{
retexception = ex;
}
catch (NullReferenceException ex)
{
retexception = ex;
}
catch (IOException ex)
{
retexception = ex;
}
if (retexception != null)
{
HasError = true;
ErrorMessage = retexception.Message;
}
else
{
HasError = false;
ErrorMessage = null;
}
Loaded = true;
FireUpdated();
}