private void ExportConversation(string inputFilePath, string outputFilePath, string filterByUser, string filterByKeyword, string[] blacklist, bool report) { var exporterParameters = new ConversationExporterParameters(inputFilePath, outputFilePath, filterByUser, filterByKeyword, blacklist, report); var exporter = new ConversationExporter(); exporter.ExportConversation(exporterParameters); }
/// <summary> /// Helper method to initialise the command line arguments and throw argument null errors. /// </summary> /// <param name="exporterConfiguration"> /// The configuration for the conversation to be exported. /// </param> /// <exception cref="ArgumentNullException"> /// Thrown when input path is null. /// </exception> public static void ManageArguments(ConversationExporterConfiguration exporterConfiguration) { var conversationExporter = new ConversationExporter(); var exporterParameters = new ConversationExporterParameters(exporterConfiguration); conversationExporter.ExportConversation(exporterParameters); }
public void MessageNotMatchingBothFiltersReturnsFalse() { var exporterParameters = new ConversationExporterParameters(null, null, "bob", "pie", null, false); Assert.IsFalse(ConversationModifier.IsInFilters(messages[0].timestamp, messages[0].senderId, messages[0].content, exporterParameters)); Assert.IsFalse(ConversationModifier.IsInFilters(messages[4].timestamp, messages[4].senderId, messages[4].content, exporterParameters)); }
/// <summary> /// Helper function to generate a report of activity as a list. /// </summary> /// <param name="messageCount"> /// Dictionary holding a tally of number of messages sent by each sender. /// </param> /// <param name="report"> /// Boolean marker for whether to include the report after the messages. /// </param> /// <returns> /// A list of message counts for each sender sorted in descending order. /// </returns> public static List <Activity> GenerateReport(List <Message> messages, ConversationExporterParameters exporterParameters) { var activity = new List <Activity>(); if (exporterParameters.Report) { var messageCount = new Dictionary <string, int>(); foreach (Message message in messages) { if (messageCount.ContainsKey(message.senderId)) { messageCount[message.senderId]++; } else { messageCount[message.senderId] = 1; } } foreach (KeyValuePair <string, int> entry in messageCount) { activity.Add(new Activity(entry.Key, entry.Value)); } activity.Sort((x, y) => - x.count.CompareTo(y.count)); } else { activity = null; } return(activity); }
/// <summary> /// Exports the conversation at InputFilePath as JSON to OutputFilePath, where both file paths are stored in <paramref name="exporterParameters"/>. /// </summary> /// <param name="exporterParameters"> /// Class containing all the parameters for the exporter /// </param> /// <exception cref="ArgumentException"> /// Thrown when a path is invalid. /// </exception> /// <exception cref="Exception"> /// Thrown when something bad happens. /// </exception> public void ExportConversation(ConversationExporterParameters exporterParameters) { Conversation conversation = this.ReadConversation(exporterParameters); this.WriteConversation(conversation, exporterParameters.OutputFilePath); Console.WriteLine("Conversation exported from '{0}' to '{1}'", exporterParameters.InputFilePath, exporterParameters.OutputFilePath); }
public void GeneratingReportWithReportBeingFalseReturnsNull() { var exporterParameters = new ConversationExporterParameters(null, null, null, null, null, false); var activity = ConversationModifier.GenerateReport(messages, exporterParameters); Assert.IsNull(activity); }
public void MessageNotContainingFilteredKeywordReturnsFalse() { var timestamp = DateTimeOffset.FromUnixTimeSeconds(1448470912); var senderID = "bob"; var content = "Hell yes! Are we buying some pie ?"; var exporterParameters = new ConversationExporterParameters(null, null, null, "null", null, false); Assert.IsFalse(ConversationModifier.IsInFilters(timestamp, senderID, content, exporterParameters)); }
public void FilteringConversationFiltersReport() { var exporter = new ConversationExporter(); var exporterParameters = new ConversationExporterParameters("chat.txt", null, "bob", null, null, true); var conversation = exporter.ReadConversation(exporterParameters); var activity = conversation.activity.ToList <Activity>(); Assert.That(activity[0].count, Is.EqualTo(3)); Assert.That(activity[0].sender, Is.EqualTo("bob")); }
public void ApplyingMessageModifiersAppliesMessageModifiers() { var exporterParameters = new ConversationExporterParameters(null, null, null, "pie", new string[] { "pie" }, false); var messagesOutput = ConversationModifier.ApplyMessageModifiers(messages[2].timestamp, messages[2].senderId, messages[2].content, exporterParameters); Assert.That(messagesOutput.senderId, Is.EqualTo("bob")); Assert.That(messagesOutput.content, Is.EqualTo("I'm good thanks, do you like \\*redacted\\*?")); messagesOutput = ConversationModifier.ApplyMessageModifiers(messages[3].timestamp, messages[3].senderId, messages[3].content, exporterParameters); Assert.IsNull(messagesOutput); }
public void GeneratingReportGeneratesReport() { var exporterParameters = new ConversationExporterParameters(null, null, null, null, null, true); var activity = ConversationModifier.GenerateReport(messages, exporterParameters); Assert.That(activity[0].count, Is.EqualTo(3)); Assert.That(activity[0].sender, Is.EqualTo("bob")); Assert.That(activity[1].count, Is.EqualTo(2)); Assert.That(activity[1].sender, Is.EqualTo("mike")); Assert.That(activity[2].count, Is.EqualTo(1)); Assert.That(activity[2].sender, Is.EqualTo("angus")); }
/// <summary> /// Helper method to read the conversation from <paramref name="inputFilePath"/>. /// </summary> /// <param name="exporterParameters"> /// Class containing all the parameters for the exporter /// </param>" /// <returns> /// A <see cref="Conversation"/> model representing the conversation. /// </returns> /// <exception cref="ArgumentException"> /// Thrown when the input file could not be found. /// </exception> /// <exception cref="Exception"> /// Thrown when something else went wrong. /// </exception> public Conversation ReadConversation(ConversationExporterParameters exporterParameters) { try { var reader = new StreamReader(new FileStream(exporterParameters.InputFilePath, FileMode.Open, FileAccess.Read), Encoding.ASCII); string conversationName = reader.ReadLine(); var messages = new List <Message>(); string line; while ((line = reader.ReadLine()) != null) { var split = line.Split(' '); var timestamp = DateTimeOffset.FromUnixTimeSeconds(Convert.ToInt64(split[0])); var senderId = split[1]; var content = string.Join(' ', split[2..split.Length]);
/// <summary> /// Helper function to check whether given conversation entry is within given filters. /// </summary> /// <param name="senderId"> /// String username of the message sender. /// </param> /// <param name="content"> /// String contents of the message. /// </param> /// <param name="filterByUser"> /// SenderId by which to filter the conversation. /// </param> /// <param name="filterByKeyword"> /// Keyword by which to filter the conversation. /// </param> /// <returns> /// Returns true iff message passes all filters, false if not. /// </returns> public static bool IsInFilters(DateTimeOffset timestamp, string senderId, string content, ConversationExporterParameters exporterParameters) { if (exporterParameters.FilterByUser != null && senderId != exporterParameters.FilterByUser) { return(false); } if (exporterParameters.FilterByKeyword != null && !content.Contains(exporterParameters.FilterByKeyword)) { return(false); } return(true); }
public static Message ApplyMessageModifiers(DateTimeOffset timestamp, string senderId, string content, ConversationExporterParameters exporterParameters) { if (IsInFilters(timestamp, senderId, content, exporterParameters)) { content = ApplyBlacklist(content, exporterParameters.Blacklist); return(new Message(timestamp, senderId, content)); } else { return(null); } }
public void FilteringByUserAndKeywordFiltersByUserAndKeyword() { var exporterParameters = new ConversationExporterParameters(null, null, "bob", "Hello", null, false); Assert.IsTrue(ConversationModifier.IsInFilters(messages[0].timestamp, messages[0].senderId, messages[0].content, exporterParameters)); }