public SiteUrl Delete(ItemDto item)
        {
            string[] segments = item == null ? null : new[]
                                                          {
                                                              item.Id.ToString(CultureInfo.InvariantCulture)
                                                          };

            return new SiteUrl(this.Domain, this.HttpPort, false, "Dxt-Admin", "Post", "ConfirmDelete", segments, null);
        }
        public SiteUrl Edit(ItemDto item)
        {
            string id = item != null ? item.Id.ToString(CultureInfo.InvariantCulture) : null;

            string[] segments = new[]
                                    {
                                        id
                                    };

            return new SiteUrl(this.Domain, this.HttpPort, false, "Dxt-Admin", "Post", "Manage", segments, null);
        }
        public SiteUrl Permalink(ItemDto item)
        {
            string[] segments = new[]
                                    {
                                        item.PublishAt.Date.Year.ToString(CultureInfo.InvariantCulture),
                                        item.PublishAt.Date.Month.ToString(CultureInfo.InvariantCulture),
                                        item.PublishAt.Date.Day.ToString(CultureInfo.InvariantCulture),
                                        item.Slug
                                    };

            return new SiteUrl(this.Domain, this.HttpPort, false, null, "Blog", "Post", segments, null);
        }
		public static async Task<bool> Notify(ItemDto item, Uri uri)
		{
			BlogConfigurationDto configuration = configurationService.GetConfiguration();

			using (HttpClient client = new HttpClient())
			{
				string content = await client.GetStringAsync(uri);
				Uri trackbackUrl = GetTrackBackUrlFromPage(content);

				if (trackbackUrl != null)
				{
					SiteUrl itemUrl = item is PostDto
						                  ? urlBuilder.Post.Permalink(item)
						                  : urlBuilder.Page.Permalink(item);

					Dictionary<string, string> form = new Dictionary<string, string>
						                                  {
							                                  { "title", item.Title }, 
							                                  { "url", itemUrl.ToString() }, 
							                                  { "excerpt", item.Excerpt }, 
							                                  { "blog_name", configuration.Name }
						                                  };

					try
					{
						await client.PostAsync(trackbackUrl.ToString(), new FormUrlEncodedContent(form));
						return true;
					}
					catch (Exception ex)
					{
						logger.WarnFormat("Unable to send trackback to '{0}'", ex, uri);
					}

					return false;
				}

				return false;
			}
		}
		public static async Task Notify(ItemDto item, Uri uri)
		{
			SiteUrl itemUrl = item is PostDto
				                  ? urlBuilder.Post.Permalink(item)
				                  : urlBuilder.Page.Permalink(item);

			using (HttpClient client = new HttpClient())
			{
				HttpResponseMessage response = await client.GetAsync(uri);

				KeyValuePair<string, IEnumerable<string>> header = response.Headers.SingleOrDefault(h => h.Key.Equals("x-pingback", StringComparison.OrdinalIgnoreCase) || h.Key.Equals("pingback", StringComparison.OrdinalIgnoreCase));

				string urlToPing = header.Value.FirstOrDefault();

				if (string.IsNullOrEmpty(urlToPing))
				{
					return;
				}

				var xmlRequest = GetXmlRequest(itemUrl, uri);

				await client.PostAsXmlAsync(urlToPing, xmlRequest);
			}
		}
 public SiteUrl Edit(ItemDto item)
 {
     return this.pageUrlBuilder.Edit(item);
 }
 public SiteUrl Delete(ItemDto item)
 {
     return this.pageUrlBuilder.Delete(item);
 }
        private string GetAuthorId(ItemDto item, IEnumerable<WpAuthor> authors)
        {
            string authorId = null;

            // take into account a deleted author
            WpAuthor auth = authors.FirstOrDefault(a => a.user_login == item.Author);
            if (auth.user_id > 0)
            {
                authorId = auth.user_id.ToString();
            }

            return authorId;
        }
        private void ConvertAllowCommentsForItem(int allowComments, ItemDto item)
        {
            // SiteConfiguration conf;

            switch (allowComments)
            {
                case 0:

                    // none and default seem to have the same value...so I return the default
                    // and comments are enabled by default on the posts, the moderation shuould be another thing
                    item.AllowComments = true;
                    break;
                case 1:
                    item.AllowComments = true;
                    break;
                case 2:
                    item.AllowComments = false;
                    break;
                default:

                    // comments are enabled by default on posts
                    item.AllowComments = true;
                    break;
            }
        }
		public PublishedBackgroundTask(ItemDto item, IConfigurationDataService configurationDataService)
		{
			this.configuration = configurationDataService.GetConfiguration();
			this.item = item;
		}
		public PublishedBackgroundTask(ItemDto item)
			: this(item, DexterContainer.Resolve<IConfigurationDataService>())
		{
		}
 public SiteUrl TrackBack(ItemDto item)
 {
     return new SiteUrl(this.Domain, this.HttpPort, false, null, "Services", "Trackback", null, new Dictionary<string, string>
                                                                                                    {
                                                                                                        { "id", item.Id.ToString(CultureInfo.InvariantCulture) },
                                                                                                        { "itemType", "Post" }
                                                                                                    });
 }
		private async Task<bool> IsSpam(TrackBackDto trackBack, ItemDto item)
		{
			string response;
			using (HttpClient client = new HttpClient())
			{
				response = await client.GetStringAsync(trackBack.Url);
			}

			if (string.IsNullOrEmpty(response))
			{
				return false;
			}

			SiteUrl postUrl = this.urlBuilder.Post.Permalink(item);

			return !response.ToLowerInvariant().Contains(postUrl);
		}
 public SiteUrl Permalink(ItemDto item)
 {
     return new SiteUrl(this.Domain, this.HttpPort, false, null, "Blog", "Page", new[] { item.Slug }, null);
 }