using System;
using DotMSN;

// Author: Einar Egilsson
// http://tech.einaregilsson.com/2007/08/09/who-has-deleted-you-from-msn/ 
class MsnContactChecker
{
  static Messenger msn = new Messenger();
  static bool done = false;

  static void Main(string[] args) {
        
    string user, pass;
    Console.Write("\nMsnContactChecker v1.0\n");
    Console.Write("See ");
    Console.Write("http://tech.einaregilsson.com/2007/08/09/who-has-deleted-you-from-msn/");
    Console.Write(" for details\n");
    Console.Write("\nUsername: ");
    user = Console.ReadLine();
    Console.Write("Password: ");
    pass = Console.ReadLine();

    Console.Write("\nConnecting to MSN...");
    try {
      msn.SynchronizationCompleted += 
        new Messenger.SynchronizationCompletedHandler(OnSynchronizationCompleted);
      msn.Connect(user.Trim(), pass.Trim());
      Console.WriteLine("done");
      Console.Write("Getting contact list...");

      msn.SynchronizeList();
    } catch (Exception ex) {
      Console.WriteLine("Error: " + ex.Message);
      Console.WriteLine("\nPress any key to quit program.");
      Console.Read();
    }
    while (!done) {
      System.Threading.Thread.Sleep(1000);
    }
  }

  static void OnSynchronizationCompleted(Messenger msn, EventArgs e)
  {
    Console.WriteLine("done");
    Console.WriteLine("\nContacts that don't have you in their list:\n");
    int counter = 0;
    foreach (Contact c in msn.ForwardList) {
      counter++;
      if (!c.OnReverseList && c.Mail == c.Name) {
        Console.WriteLine(c.Mail);
      } else if (!c.OnReverseList) {
        Console.WriteLine("{0} ({1})", c.Name, c.Mail);
      }
    }

    if (counter == 0) {
      Console.WriteLine("All your contacts have you on their lists.");
    }
    
    msn.CloseConnection();
    Console.WriteLine("\nPress any key to quit program.");
    Console.Read();
    done = true;
  }
}