private void Save(string pageUrl, ContentItem item)
        {
            CurrentUrl = pageUrl;

            var partition = Parser.GetPartition();

            var resource = DataProvider.Get <WebResource>().ByRemoteIdentifier(partition, item.Id).Take(1).ToList().FirstOrDefault();

            if (resource != null)
            {
                if (resource.Score != resource.GetScore())
                {
                    resource.Score = resource.GetScore();
                    DataProvider.Save(resource);
                }
            }

            if (resource == null)
            {
                resource       = new WebResource(partition, pageUrl, item);
                resource.Score = resource.GetScore();

                if (ShouldSave == null || ShouldSave(resource))
                {
                    resource = DataProvider.Save(resource);
                }
            }
            else if (resource.Status != FileStatusTypes.DownloadFailed)
            {
                return;
            }

            try {
                if (DownloadFiles && resource.IsDownloadable())
                {
                    if (item.Data == null)
                    {
                        item.Data = Download(resource, item.FileUrl);
                    }

                    if (item.Data != null)
                    {
                        Upload(resource, item.Data);
                    }
                }
            }
            catch (Exception exception) {
                Trace.TraceError(exception.ToString());
                resource.Status     = FileStatusTypes.Error;
                resource.StatusText = exception.ToString();
                DataProvider.Save(resource);
                throw;
            }
        }