public IList<IStatus> RepsonseHandler(string responseText)
{
IList<IStatus> Output = null;
bool multipleStatus = responseText.Contains("statuses type=\"array\"");
XElement xmlElement = XElement.Load(new XmlTextReader(new StringReader(responseText)));
if(!multipleStatus)
{
IStatus status = Status.ParseStatusXML(responseText);
status.User = User.ParseUserXml(xmlElement.Element("user").ToString());
if(status != null)
{
Output = new List<IStatus>();
Output.Add(status);
}
}
else
{
Output = new List<IStatus>();
//Query for count of statuses to make sure we have some
var query = from c in xmlElement.Descendants("status")
select c;
if (query.Count() > 0)
{
Output = new List<IStatus>();
foreach (var status in query)
{
IStatus currentStatus = Status.ParseStatusXML(status.ToString());
currentStatus.User = User.ParseUserXml(status.Element("user").ToString());
Output.Add(currentStatus);
}
}
}
return Output;
}
//TODO: Figure out a better way to handle this
public IList<IUser> RepsonseHandler(string responseText, string DoesNothing)
{
IList<IUser> Output = null;
bool multipleUsers = responseText.Contains("users type=\"array\"");
XElement xmlElement = XElement.Load(new XmlTextReader(new StringReader(responseText)));
if (!multipleUsers)
{
IUser user = User.ParseUserXml(responseText);
user.Status = Status.ParseStatusXML(xmlElement.Element("status").ToString());
if (user != null)
{
Output = new List<IUser>();
Output.Add(user);
}
}
else
{
Output = new List<IUser>();
//Query for count of statuses to make sure we have some
var query = from c in xmlElement.Descendants("user")
select c;
if (query.Count() > 0)
{
Output = new List<IUser>();
foreach (var user in query)
{
IUser currentUser = User.ParseUserXml(user.ToString());
currentUser.Status = Status.ParseStatusXML(user.Element("status").ToString());
Output.Add(currentUser);
}
}
}
return Output;
}
Refactorings
No refactoring yet !
rikkus
May 13, 2009, May 13, 2009 08:49, permalink
Implement Status.Load as you see fit. Obviously you'll want to load User from the "user" element contained within.
public IEnumerable<IStatus> ResponseHandler(string responseText, string unused)
{
return ResponseHandler(responseText);
}
public IEnumerable<IStatus> ResponseHandler(string responseText)
{
var element = XElement.Parse(responseText);
if (element.Name == "statuses")
{
foreach (var statusElement in element.Descendants("status"))
{
yield return Status.Load(statusElement);
}
}
else
{
yield return Status.Load(element);
}
}
I have some code for a Twitter library I'm writing and I need to return a list of a specific type depending on the return XML. I know there has got to be a better way to do it than I currently am.