private void RefreshTracks(string revquery)
{
byte[] tracksData = client.Fetcher.Fetch(String.Format("/databases/{0}/items", id),
TrackQuery + "&" + revquery);
ContentNode tracksNode = ContentParser.Parse(client.Bag, tracksData);
if (IsUpdateResponse(tracksNode))
{
return;
}
// handle track additions/changes
foreach (ContentNode trackNode in (ContentNode[])tracksNode.GetChild("dmap.listing").Value)
{
Track track = Track.FromNode(trackNode);
Track existing = LookupTrackById(track.Id);
if (existing == null)
{
AddTrack(track);
}
else
{
existing.Update(track);
}
}
if ((byte)tracksNode.GetChild("dmap.updatetype").Value == 1)
{
// handle track deletions
ContentNode deleteList = tracksNode.GetChild("dmap.deletedidlisting");
if (deleteList != null)
{
foreach (ContentNode deleted in (ContentNode[])deleteList.Value)
{
Track track = LookupTrackById((int)deleted.Value);
if (track != null)
{
RemoveTrack(track);
}
}
}
}
}