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