public override Task ShareItemAsync(Item item, Account account, CancellationToken cancellationToken) { var req = CreateRequest( "POST", new Uri("http://www.flickr.com/services/upload/"), account); // // Add the image // item.Images.First().AddToRequest(req, "photo"); // // Make the description include links // var sb = new StringBuilder(); sb.Append(item.Text); if (item.Links.Count > 0) { sb.AppendLine(); sb.AppendLine(); foreach (var l in item.Links) { sb.AppendFormat("<a href=\"{0}\">{0}</a>", WebEx.HtmlEncode(l.AbsoluteUri)); sb.AppendLine(); } } req.AddMultipartData("description", sb.ToString()); return(req.GetResponseAsync(cancellationToken).ContinueWith(reqTask => { var content = reqTask.Result.GetResponseText(); var doc = new XmlDocument(); doc.LoadXml(content); var stat = doc.DocumentElement.GetAttribute("stat"); if (stat == "fail") { var err = doc.DocumentElement.GetElementsByTagName("err").OfType <XmlElement> ().FirstOrDefault(); if (err != null) { throw new ApplicationException(err.GetAttribute("msg")); } else { throw new ApplicationException("Flickr returned an unknown error."); } } }, cancellationToken)); }