216 lines
8.0 KiB
C#
216 lines
8.0 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
using System.IO;
|
|
|
|
namespace OutlookCaseHelper
|
|
{
|
|
public partial class Form1 : Form
|
|
{
|
|
private NotifyIcon trayIcon = null!;
|
|
private ContextMenuStrip trayMenu = null!;
|
|
private OutlookHelper outlookHelper;
|
|
private System.Windows.Forms.Timer monitorTimer = null!;
|
|
|
|
public Form1()
|
|
{
|
|
InitializeComponent();
|
|
this.WindowState = FormWindowState.Minimized;
|
|
this.ShowInTaskbar = false;
|
|
outlookHelper = new OutlookHelper();
|
|
InitializeTray();
|
|
InitializeTimer();
|
|
}
|
|
|
|
private void InitializeTray()
|
|
{
|
|
trayMenu = new ContextMenuStrip();
|
|
trayMenu.Items.Add("Create Rule (Selected Email)", null, ProcessEmail_Click);
|
|
trayMenu.Items.Add("Remove Rule (Selected Email)", null, RemoveRuleFromSelected_Click);
|
|
trayMenu.Items.Add("Remove Rule (Manual ID)", null, RemoveRule_Click);
|
|
trayMenu.Items.Add("-");
|
|
trayMenu.Items.Add("Exit", null, Exit_Click);
|
|
|
|
trayIcon = new NotifyIcon();
|
|
trayIcon.Icon = new Icon(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "casenew.ico"));
|
|
trayIcon.ContextMenuStrip = trayMenu;
|
|
trayIcon.Text = "Outlook Case Manager";
|
|
trayIcon.Visible = true;
|
|
trayIcon.MouseDoubleClick += TrayIcon_MouseDoubleClick;
|
|
}
|
|
|
|
private void InitializeTimer()
|
|
{
|
|
monitorTimer = new System.Windows.Forms.Timer();
|
|
monitorTimer.Interval = 60000; // verifica a cada 60 segundos
|
|
monitorTimer.Tick += MonitorTimer_Tick;
|
|
monitorTimer.Start();
|
|
}
|
|
|
|
private void MonitorTimer_Tick(object? sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
outlookHelper.ProcessActiveRules();
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
private void ProcessEmail_Click(object? sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
var trackingId = outlookHelper.GetSelectedEmailTrackingId();
|
|
if (string.IsNullOrEmpty(trackingId))
|
|
{
|
|
MessageBox.Show(
|
|
"No email selected or ID not found in subject.\n\nExpected format: Title - TrackingID#1111111111111111",
|
|
"Warning",
|
|
MessageBoxButtons.OK,
|
|
MessageBoxIcon.Warning);
|
|
return;
|
|
}
|
|
|
|
bool success = outlookHelper.CreateFolderAndMoveEmails(trackingId);
|
|
if (success)
|
|
{
|
|
var activeCount = outlookHelper.GetActiveRules().Count;
|
|
MessageBox.Show(
|
|
$"Rule created! Emails moved and monitoring started.\n\nTrackingID: {trackingId}\nActive rules: {activeCount}",
|
|
"Success",
|
|
MessageBoxButtons.OK,
|
|
MessageBoxIcon.Information);
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show(
|
|
"Error processing email. Make sure Outlook is open.",
|
|
"Error",
|
|
MessageBoxButtons.OK,
|
|
MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show($"Error: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
|
|
private void RemoveRule_Click(object? sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
var form = new InputForm("Enter TrackingID to remove:", "Remove Rule");
|
|
if (form.ShowDialog() == DialogResult.OK && !string.IsNullOrEmpty(form.TrackingId))
|
|
{
|
|
bool success = outlookHelper.RemoveRuleAndMoveToClosed(form.TrackingId);
|
|
if (success)
|
|
{
|
|
MessageBox.Show(
|
|
"Rule removed!\n\nFolder moved to: Inbox > Cases > Closed\nMonitoring stopped.",
|
|
"Success",
|
|
MessageBoxButtons.OK,
|
|
MessageBoxIcon.Information);
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show(
|
|
"Error removing rule. Check if folder exists.",
|
|
"Error",
|
|
MessageBoxButtons.OK,
|
|
MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show($"Error: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
|
|
private void RemoveRuleFromSelected_Click(object? sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
var trackingId = outlookHelper.GetSelectedEmailTrackingId();
|
|
if (string.IsNullOrEmpty(trackingId))
|
|
{
|
|
MessageBox.Show(
|
|
"No email selected or ID not found in subject.\n\nExpected format: Title - TrackingID#1111111111111111",
|
|
"Warning",
|
|
MessageBoxButtons.OK,
|
|
MessageBoxIcon.Warning);
|
|
return;
|
|
}
|
|
|
|
bool success = outlookHelper.RemoveRuleAndMoveToClosed(trackingId);
|
|
if (success)
|
|
{
|
|
MessageBox.Show(
|
|
$"Rule removed!\n\nFolder moved to: Inbox > Cases > Closed\nTrackingID: {trackingId}\nMonitoring stopped.",
|
|
"Success",
|
|
MessageBoxButtons.OK,
|
|
MessageBoxIcon.Information);
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show(
|
|
"Error removing rule. Check if folder exists and Outlook is open.",
|
|
"Error",
|
|
MessageBoxButtons.OK,
|
|
MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show($"Error: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
|
|
private void TrayIcon_MouseDoubleClick(object? sender, MouseEventArgs e)
|
|
{
|
|
ProcessEmail_Click(null, EventArgs.Empty);
|
|
}
|
|
|
|
private void Exit_Click(object? sender, EventArgs e)
|
|
{
|
|
monitorTimer.Stop();
|
|
trayIcon.Visible = false;
|
|
Application.Exit();
|
|
}
|
|
|
|
private class InputForm : Form
|
|
{
|
|
private TextBox txtInput;
|
|
public string TrackingId { get; private set; } = "";
|
|
|
|
public InputForm(string prompt, string title)
|
|
{
|
|
this.Text = title;
|
|
this.Width = 400;
|
|
this.Height = 150;
|
|
this.StartPosition = FormStartPosition.CenterScreen;
|
|
|
|
var label = new Label { Text = prompt, Left = 20, Top = 20, Width = 360, Height = 30 };
|
|
txtInput = new TextBox { Left = 20, Top = 60, Width = 340, Height = 30 };
|
|
|
|
var btnOk = new Button { Text = "OK", Left = 200, Top = 100, Width = 80, DialogResult = DialogResult.OK };
|
|
var btnCancel = new Button { Text = "Cancel", Left = 290, Top = 100, Width = 80, DialogResult = DialogResult.Cancel };
|
|
|
|
this.Controls.Add(label);
|
|
this.Controls.Add(txtInput);
|
|
this.Controls.Add(btnOk);
|
|
this.Controls.Add(btnCancel);
|
|
|
|
this.AcceptButton = btnOk;
|
|
this.CancelButton = btnCancel;
|
|
}
|
|
|
|
protected override void OnFormClosing(FormClosingEventArgs e)
|
|
{
|
|
TrackingId = txtInput.Text;
|
|
base.OnFormClosing(e);
|
|
}
|
|
}
|
|
}
|
|
} |