public async Task <ActionResult> Export() { var userId = GetUserId(); var context = this.DbContext; var filters = context.Filters .Include(o => o.FilterProperties) .Where(o => o.UserId == userId) .ToArray(); if (!filters.Any()) { return(RedirectToAction("Index")); } var filterComponent = new MessageFilterComponent(); var document = filterComponent.ToXml(filters); var stream = new System.IO.MemoryStream(); using (var writer = System.Xml.XmlWriter.Create(stream, new System.Xml.XmlWriterSettings { OmitXmlDeclaration = false, Indent = true })) { document.WriteTo(writer); } stream.Position = 0; await Task.Run(() => new TelemetryClient().TrackEvent("ExportFilter")); return(File(stream, "text/xml", string.Format("Export_{0}.xml", DateTime.UtcNow.ToFileTime()))); }
public async Task <ActionResult> Import(ImportViewModel viewModel) { if (!ModelState.IsValid) { return(View(viewModel)); } XDocument document; try { document = XDocument.Load(viewModel.UploadFile.InputStream); } catch (Exception) { ModelState.AddModelError("UploadFile", "Received invalid XML."); return(View(viewModel)); } var userId = GetUserId(); await Task.Run(() => new TelemetryClient().TrackEvent("ImportFilters")); //Use MongoDb to temporarily store instead of the session. var mongoDbComponent = new MongoDbComponent(); var collection = mongoDbComponent.MessageFilters; var filterComponent = new MessageFilterComponent(); var id = await collection.InsertAsync(filterComponent.FromXml(document, userId)); return(RedirectToAction("ImportReview", new { id = id })); }
private void InitializeEditProperties(EditViewModel viewModel, IList <FilterProperty> properties) { System.Diagnostics.Debug.Assert(viewModel != null); System.Diagnostics.Debug.Assert(properties != null); var component = new MessageFilterComponent(); viewModel.CriteriaProperties = new List <EditPropertyViewModel>(); viewModel.ActionProperties = new List <EditPropertyViewModel>(); foreach (var pair in MessageFilterComponent.CriteriaPropertyNames) { var existingProperty = properties .FirstOrDefault(o => o.Name == pair.Value); viewModel.CriteriaProperties.Add(CreateEditPropertyViewModel(component, existingProperty, pair.Value)); } foreach (var pair in MessageFilterComponent.ActionPropertyNames) { var existingProperty = properties .FirstOrDefault(o => o.Name == pair.Value); viewModel.ActionProperties.Add(CreateEditPropertyViewModel(component, existingProperty, pair.Value)); } }
private EditPropertyViewModel CreateEditPropertyViewModel( MessageFilterComponent component, FilterProperty existingProperty, string name ) { System.Diagnostics.Debug.Assert(component != null); var isCheckType = component.GetIsBooleanProperty(name); return(new EditPropertyViewModel { IsIncluded = existingProperty != null && existingProperty.IsIncluded, Id = existingProperty != null ? (int?)existingProperty.FilterPropertyId : null, Timestamp = existingProperty != null ? existingProperty.Timestamp : null, Name = name, Value = existingProperty != null ? existingProperty.Value : string.Empty, IsCheckType = isCheckType, IsChecked = isCheckType && existingProperty != null?string.Equals(existingProperty.Value, "true", StringComparison.OrdinalIgnoreCase) : false }); }
public async Task <ActionResult> ImportReview(string id) { if (string.IsNullOrEmpty(id)) { return(new HttpNotFoundResult("Could not find import file.")); } var userId = GetUserId(); var mongoDbComponent = new MongoDbComponent(); var collection = mongoDbComponent.MessageFilters; //Pull down the file data. var messageFilter = await collection.FindOneByObjectIdUserIdAsync(id, userId); if (messageFilter == null) { return(new HttpNotFoundResult("Could not find import file.")); } var filterComponent = new MessageFilterComponent(); var viewModel = new ReviewViewModel { MessageFilterId = messageFilter.Id.ToString(), Entries = messageFilter.Entries.Select(o => new ChooseMessageFilterEntryViewModel { IsSelected = true, EntryId = filterComponent.GetFilterIdPart(o.IdTag), CriteriaProperties = filterComponent.GetCriteriaProperties(o.Properties).ToList(), ActionProperties = filterComponent.GetActionProperties(o.Properties).ToList() }).ToList(), SelectAll = true }; return(View(viewModel)); }
private async Task <ActionResult> ImportContinue(ReviewViewModel viewModel) { System.Diagnostics.Debug.Assert(viewModel != null); var userId = GetUserId(); var mongoDbComponent = new MongoDbComponent(); var collection = mongoDbComponent.MessageFilters; //Pull down the file data. var messageFilter = await collection.FindOneByObjectIdUserIdAsync(viewModel.MessageFilterId, userId); if (messageFilter == null) { return(new HttpNotFoundResult("Could not find import file.")); } //Throw the selected entry ids into a hashset. var selectedEntries = viewModel.Entries .Where(o => o.IsSelected) .Select(o => o.EntryId) .ToHashSet(); var context = this.DbContext; bool hasAdded = false; var dateCreatedUtc = DateTime.UtcNow; //Add it to the SQL server collection. var filterComponent = new MessageFilterComponent(); foreach (var item in messageFilter.Entries) { var itemId = filterComponent.GetFilterIdPart(item.IdTag); if (!selectedEntries.Contains(itemId)) { continue; } context.Filters.Add(new GMailLabelCleanup.Data.Models.Filters.Filter { UserId = userId, ImportId = itemId, Description = filterComponent.CreateDescription(item), DateCreatedUtc = dateCreatedUtc, FilterProperties = item.Properties.Select(o => new FilterProperty { IsIncluded = true, Name = o.Name, Value = o.Value, DateCreatedUtc = dateCreatedUtc }).ToList() }); hasAdded = true; } if (hasAdded) { await context.SaveChangesAsync(); } //Remove it from the MongoDb storage. await collection.RemoveAsync(messageFilter); return(RedirectToAction("Index")); }