Ef9a110e6f84d3ebf3d4672ad090a1de

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.

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 !

22e33503870d8e20493c4dd6b2f9767f

rikkus

May 13, 2009, May 13, 2009 08:49, permalink

No rating. Login to rate!

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);
    }
}
B0f85cd59cfa0870bd8fdcdab23fe9d4

Sancho

May 18, 2009, May 18, 2009 17:01, permalink

No rating. Login to rate!

Good site, admin.

Good site, admin.

Your refactoring





Format Copy from initial code

or Cancel