Пример #1
0
        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);
        }
Пример #2
0
        /// <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);
        }
Пример #5
0
        /// <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));
        }
Пример #8
0
        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"));
        }
Пример #11
0
        /// <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));
        }