//sends messages, checks validation and writes messages on a .csv file private void SendButtonClick() { //lists that hold text found in the text List <string> hashtags = new List <string>(); List <string> mentions = new List <string>(); List <string> quarantined = new List <string>(); List <string> sirs = new List <string>(); Abbreviations abbreviations = new Abbreviations(); //Check if textboxes are empty if (string.IsNullOrWhiteSpace(HeaderTextBox) || (string.IsNullOrWhiteSpace(BodyTextBox))) { MessageBox.Show("Please fill in the header and body textboxes appropriately", "Error", MessageBoxButton.OK, MessageBoxImage.Error); return; } //Check if the message is an Sms with validations else if ((HeaderTextBox[0] == 'S') && (HeaderTextBox.Length == 10)) { for (int id = 1; id < HeaderTextBox.Length; id++) { if (!char.IsDigit(HeaderTextBox[id])) { MessageBox.Show("Message Id should contain only numbers.", "Error", MessageBoxButton.OK, MessageBoxImage.Error); return; } } int findspace = BodyTextBox.IndexOf(" "); string stopAt; //space found then write twitter sender id and continue with message if (findspace > 0) { stopAt = BodyTextBox.Substring(0, findspace); string sms_sender = stopAt; //check for a valid mobile phone number string phoneNumber = @"^(\+[0-9]{15})$"; if (!Regex.IsMatch(sms_sender, phoneNumber) && (sms_sender.Length < 15)) { MessageBox.Show("SMS message body must begin with the senders international phone number.", "Error", MessageBoxButton.OK, MessageBoxImage.Error); return; } //Assign sms sender and body to strings string sms_body = BodyTextBox.Substring(16); //check text length if ((sms_body.Length <= 140) && (sms_body.Length > 0)) { sms_body = abbreviations.ExpandSMS(sms_body); // create new sms message Sms message = new Sms() { Header = HeaderTextBox, Sender = sms_sender, Body = sms_body, MType = "Sms" }; //Save sms message to Json format SaveToFile save = new SaveToFile(); var smslist = save.LoadJsonSms(); smslist.Add(message); string resultJson = JsonConvert.SerializeObject(smslist); File.WriteAllText("sms.json", resultJson); //check if json file exists if (!File.Exists("sms.json")) { MessageBox.Show("Error while saving\n" + save.ErrorCode); } else { MessageBox.Show("Sms Message Send and saved", "Success", MessageBoxButton.OK); save = null; } //prints message MessageBox.Show($"Message type: {message.MType}" + $"\nMessageID: {message.Header}" + $"\nSender: {message.Sender}" + $"\nText: {message.Body}", "Your" + message.MType + "message have been send", MessageBoxButton.OK); } else { MessageBox.Show("Sms text must be up to 140 characters long or empty!", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } else { MessageBox.Show("Sms body should start with a valid international phone number", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } //check if it is a Twitter message with validations else if ((HeaderTextBox[0] == 'T') && (HeaderTextBox.Length == 10)) { for (int id = 1; id < HeaderTextBox.Length; id++) { //valid messageID? if (!char.IsDigit(HeaderTextBox[id])) { MessageBox.Show("Message Id type letter must be followed by 9 numberic characters. Please try again!", "Error", MessageBoxButton.OK, MessageBoxImage.Error); return; } } //checks if the sender twitterID is typed first in body if (BodyTextBox[0] == '@') { int findspace = BodyTextBox.IndexOf(" "); string stopAt; //space found then write twitter sender id and continue with message if (findspace > 0) { stopAt = BodyTextBox.Substring(0, findspace); string tweet_sender_id = stopAt; string tweetid = @"^@?(\w){1,15}$"; if (Regex.IsMatch(tweet_sender_id, tweetid)) { int space = BodyTextBox.IndexOf(" "); string tweet_body = BodyTextBox.Substring(space + 1); if ((tweet_body.Length <= 140) && (tweet_body.Length > 0)) { tweet_body = abbreviations.ExpandTweet(tweet_body); //save any mentions found in tweet body to a list foreach (Match match in Regex.Matches(input: tweet_body, pattern: @"(?<!\w)@\w+")) { mentions.Add(match.Value); File.AppendAllText("mentions.csv", match.Value + Environment.NewLine); } //save any hashtags found in tweet body to a list foreach (Match match in Regex.Matches(input: tweet_body, pattern: @"(?<!\w)#\w+")) { hashtags.Add(match.Value); File.AppendAllText("hashtags.csv", match.Value + Environment.NewLine); } //add new twitter message Tweet message = new Tweet() { Header = HeaderTextBox, Sender = tweet_sender_id, Body = tweet_body, MType = "Tweet" }; //Save file to Json format SaveToFile save = new SaveToFile(); var tweetlist = save.LoadJsonTweet(); tweetlist.Add(message); string resultJson = JsonConvert.SerializeObject(tweetlist); File.WriteAllText("tweet.json", resultJson); //check if json file exists if (!File.Exists("tweet.json")) { MessageBox.Show("Error while saving\n" + save.ErrorCode); } else { MessageBox.Show("Tweet Message Send and saved", "Success", MessageBoxButton.OK); save = null; } //print message MessageBox.Show($"Message type: {message.MType}" + $"\nMessageID: {message.Header}" + $"\nSender: {message.Sender}" + $"\nText: {message.Body}", "Your" + message.MType + "message have been send", MessageBoxButton.OK); //print hashtag list and mention list var hashtagslist = string.Join(Environment.NewLine, hashtags); MessageBox.Show("Trending List:" + Environment.NewLine + hashtagslist, "Hashtag List", MessageBoxButton.OK, MessageBoxImage.Asterisk); var mentionslist = string.Join(Environment.NewLine, mentions); MessageBox.Show("Mention List:" + Environment.NewLine + mentionslist, "Mention List", MessageBoxButton.OK, MessageBoxImage.Asterisk); } else { MessageBox.Show("Tweet text must be no longer than 140 characters and cant be empty!", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } else { MessageBox.Show("Tweet Body must begin with your Twitter ID. @ followed by maximum 15 characters", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } else { MessageBox.Show("Please allow a space after your TwitterID!", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } else { MessageBox.Show("Tweet Body must begin with senders TwitterID. (ex. @AlexAn) ", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } //check for email validations else if ((HeaderTextBox[0] == 'E') && (HeaderTextBox.Length == 10)) { for (int id = 1; id < HeaderTextBox.Length; id++) { //check if the 9 characters are digits if (!char.IsDigit(HeaderTextBox[id])) { MessageBox.Show("Message Id should contain only numbers.", "Error", MessageBoxButton.OK, MessageBoxImage.Error); return; } } int findspace = BodyTextBox.IndexOf(" "); int findFullStop = BodyTextBox.IndexOf(". "); string stopAtFullStop; string stopAt; //space found then write email address and continue with subject if (findspace > 0) { stopAt = BodyTextBox.Substring(0, findspace); string sender_email = stopAt; if (IsValidEmail(sender_email)) { if (findFullStop > 0) { stopAtFullStop = BodyTextBox.Substring(findspace, findFullStop - findspace); string email_subject = stopAtFullStop; string SIRPattern = "^ +[S|s]+[I|i]+[R|r]+ \\d{2}/\\d{2}/\\d{2}$"; if ((Regex.IsMatch(email_subject, SIRPattern)) && (email_subject.Length <= 20)) { string bodyStartAtFullStop = BodyTextBox.Substring(findFullStop + 1); string email_body = bodyStartAtFullStop; if ((email_body.Length <= 1029) && (email_body.Length > 0)) { foreach (Match match in Regex.Matches(input: email_body, pattern: @"\b\d\d-\d\d-\d\d\b|\bTheft\b")) { sirs.Add(match.Value); File.AppendAllText("sir.csv", match.Value + Environment.NewLine); } // add links found to a list foreach (Match match in Regex.Matches(input: email_body, pattern: @"\b(?:https?://|www\.)\S+\b")) { quarantined.Add(match.Value); File.AppendAllText("quarantined.csv", match.Value + Environment.NewLine); } //replace links found within email body email_body = Regex.Replace(email_body, @"\b(?:https?://|www\.)\S+\b", "<URL Quarantined>"); //creates new email message SIR message = new SIR() { Header = HeaderTextBox, Sender = sender_email, Subject = email_subject, Body = email_body, MType = "SIR" }; //Save email message to json SaveToFile save = new SaveToFile(); var sirlist = save.LoadJsonSir(); sirlist.Add(message); string resultJson = JsonConvert.SerializeObject(sirlist); File.WriteAllText("sir.json", resultJson); //check if file exists if (!File.Exists("sir.json")) { MessageBox.Show("Error while saving\n" + save.ErrorCode); } else { MessageBox.Show("SIR Message Send and saved", "Success", MessageBoxButton.OK); save = null; } //print message MessageBox.Show($"Message type: {message.MType}" + $"\nMessageID: {message.Header}" + $"\nSender: {message.Sender}" + $"\nMessage Subject:{message.Subject}" + $"\nText:{message.Body}", "Your" + message.MType + "message have been send", MessageBoxButton.OK); //print quarantined URLs var quarantinedlist = string.Join(Environment.NewLine, quarantined); MessageBox.Show("Quarantined urls List:" + Environment.NewLine + quarantinedlist, "Quarantined URL(s) added to the List", MessageBoxButton.OK, MessageBoxImage.Asterisk); var sirs_list = string.Join(Environment.NewLine, sirs); MessageBox.Show("Sir List:" + Environment.NewLine + sirs_list, "Sir List", MessageBoxButton.OK, MessageBoxImage.Asterisk); } else { MessageBox.Show("SIR Body text must be no longer than 1028 characters!", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } else if (email_subject.Length <= 20) { string bodyStartAtFullStop = BodyTextBox.Substring(findFullStop + 1); string email_body = bodyStartAtFullStop; if (email_body.Length <= 1029) { // add links found to a list foreach (Match match in Regex.Matches(input: email_body, pattern: @"\b(?:https?://|www\.)\S+\b")) { quarantined.Add(match.Value); File.AppendAllText("quarantined.csv", match.Value + Environment.NewLine); } //replace links found within email body email_body = Regex.Replace(email_body, @"\b(?:https?://|www\.)\S+\b", "<URL Quarantined>"); //creates new email message Email message = new Email() { Header = HeaderTextBox, Sender = sender_email, Subject = email_subject, Body = email_body, MType = "Email" }; //Save file to Json format SaveToFile save = new SaveToFile(); var emaillist = save.LoadJsonEmail(); emaillist.Add(message); string resultJson = JsonConvert.SerializeObject(emaillist); File.WriteAllText("email.json", resultJson); //check if file exists if (!File.Exists("email.json")) { MessageBox.Show("Error while saving\n" + save.ErrorCode); } else { MessageBox.Show("Email Message Send and saved", "Success", MessageBoxButton.OK); save = null; } //print message MessageBox.Show($"Message type: {message.MType}" + $"\nMessageID: {message.Header}" + $"\nSender: {message.Sender}" + $"\nMessage Subject:{message.Subject}" + $"\nText:{message.Body}", "Your" + message.MType + "message have been send", MessageBoxButton.OK); //print quarantined URLs var quarantinedlist = string.Join(Environment.NewLine, quarantined); MessageBox.Show("Quarantined urls List:" + Environment.NewLine + quarantinedlist, "Quarantined URLs List", MessageBoxButton.OK, MessageBoxImage.Asterisk); } else { MessageBox.Show("Email Body text must be no longer than 1028 characters!", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } else { MessageBox.Show("Email Subject must be no longer than 20 characters!", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } else { MessageBox.Show("Please mind that subject should be less than 20 characters long, and remember to seperate subject and message with a full stop and a space!", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } else { MessageBox.Show("Email Body must begin with a valid Email address.", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } else { MessageBox.Show("Email Body must begin with a valid Email address followed by a space.", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } else { MessageBox.Show("MessageID is not valid. Please enter a valid messageID maximum 10 characters long.\n" + "First character will indicate the message type and the rest must be numeric characters.\n" + "ex. S123456789 for SMS, T876543210 for Tweets, E147258360 for Emails!", "Error", MessageBoxButton.OK, MessageBoxImage.Error); return; } }