> Can you resend your patches in GNU diff unified format? (diff -u) It > makes them much easier to read. Attached. > If you check out dashboard from a few months ago, there's a contact > renderer in the old addressbook backend. If you were interested you > could look at this and create a renderer from it. (There's a screenshot > of it in http://nat.org/dashboard/rewrite.png) Okay. Thanks, I'll look at this. -- Matt Jones
Index: backends/EvolutionAddressbookBackend.cs =================================================================== RCS file: /cvs/gnome/dashboard/backends/EvolutionAddressbookBackend.cs,v retrieving revision 1.9 diff -u -r1.9 EvolutionAddressbookBackend.cs --- backends/EvolutionAddressbookBackend.cs 16 Feb 2004 09:21:22 -0000 1.9 +++ backends/EvolutionAddressbookBackend.cs 22 Feb 2004 18:47:43 -0000 @@ -14,10 +14,12 @@ using Evolution; namespace Dashboard { - public class EvolutionAddressbookBackend : Backend { + public class EvolutionAddressbookBackend : BackendSimple { Evolution.Book addressbook; bool lazy_initted = false; + + string address_book_location = "file:///home/matt/.evolution/addressbook/local/OnThisComputer/1076640723 2454 0 localhost localdomain"; public override bool Startup () { @@ -43,10 +45,34 @@ } +// private string GetAddressbookUri() +// { +// GConf.Client client = new GConf.Client (); +// string uri; +// +// ArrayList rawxml = (ArrayList)client.Get ("/apps/evolution/addressbook/sources" ); +// +// foreach (string temp in rawxml ) +// Console.WriteLine( temp ); +// temp = (string)rawxml[0]; +// +// Console.WriteLine( "Got key " + temp ); +// +// return ""; +// +// } + private void LazyInit () { addressbook = new Evolution.Book (); - addressbook.LoadLocalAddressbook (); + // addressbook.LoadLocalAddressbook (); + + // string temp = GetAddressbookUri(); + +// public static unsafe bool GetAddressbooks(Evolution.SourceList addressbook_sources) +// public Source(string xml) + + addressbook.LoadUri(address_book_location, true); lazy_initted = true; } @@ -59,71 +85,109 @@ LazyInit (); foreach (Clue c in cp.Clues) + { this.ProcessClue (result, c); + foreach ( Match match in ProcessClueSimple( c ) ) + result.AddMatch( match ); + } - return resultset; + return result; + } + + protected override ArrayList ProcessClueSimple( Clue clue ) + { + ArrayList contacts; + ArrayList matches = new ArrayList(); + + contacts = FindContacts ( clue ); + + foreach (Contact contact in contacts ) + matches.Add(GenerateMatchForContact( contact, clue )); + + return matches; } private void ProcessClue (BackendResult result, Clue c) { ArrayList contacts; + ArrayList resultset = new ArrayList(); - Console.WriteLine ("Evolution 2.0 addressbook backend got clue: " + c.ToString ()); + // Console.WriteLine ("Evolution 2.0 addressbook backend got clue: " + c.ToString ()); contacts = FindContacts (c); foreach (Contact contact in contacts) { Match m = GenerateMatchForContact (contact, c); - GenerateCluesForContact (resultpoiewjfoiewjfoiewjfoiewjfoiewjfoiewjf this is broken FIXME + GenerateCluesForContact ( resultset, contact, m ); } - GenerateClues (resultset, contacts, c); + GenerateClues (result, contacts, c); } private ArrayList FindContacts (Clue c) { - BookQuery query = BuildQuery (c); return new ArrayList (addressbook.GetContacts (query)); } - private void GenerateResult (BackendResult result, ArrayList contacts, Clue c) - { - } - private void GenerateClues (BackendResult result, ArrayList contacts, Clue c) { ArrayList clues = new ArrayList (); foreach (Contact contact in contacts) - GenerateCluesForContact (clues, contact, c); + { + Match m = GenerateMatchForContact(contact, c); + GenerateCluesForContact (clues, contact, m); + } result.AddChainedClues (clues); } private void GenerateCluesForContact (ArrayList clues, Contact contact, Match triggering_match) { - AddClue (clues, c, contact.FullName, "full_name"); - AddClue (clues, c, contact.Email1, "email"); - + + try + { + AddClue (clues, triggering_match, contact.FullName, "full_name"); + } + catch {} + + try + { + if ( contact.Email1.Length > 0 ) + AddClue (clues, triggering_match, contact.Email1, "email"); + } + catch {} + if (contact.ImAim.Length > 0) - AddClue (clues, c, contact.ImAim [0], "aim_name"); + AddClue (clues, triggering_match, contact.ImAim [0], "aim_name"); if (contact.ImMsn.Length > 0) - AddClue (clues, c, contact.ImMsn [0], "msn_name"); + AddClue (clues, triggering_match, contact.ImMsn [0], "msn_name"); if (contact.ImIcq.Length > 0) - AddClue (clues, c, contact.ImIcq [0], "icq_name"); + AddClue (clues, triggering_match, contact.ImIcq [0], "icq_name"); if (contact.ImJabber.Length > 0) - AddClue (clues, c, contact.ImJabber [0], "jabber_name"); + AddClue (clues, triggering_match, contact.ImJabber [0], "jabber_name"); if (contact.ImYahoo.Length > 0) - AddClue (clues, c, contact.ImYahoo [0], "yahoo_name"); + AddClue (clues, triggering_match, contact.ImYahoo [0], "yahoo_name"); - AddClue (clues, c, contact.HomepageUrl, "url"); - AddClue (clues, c, contact.BlogUrl, "rss"); + try + { + if ( contact.HomepageUrl.Length > 0) + AddClue (clues, triggering_match, contact.HomepageUrl, "url"); + } + catch {} + + try + { + if ( contact.BlogUrl.Length > 0 ) + AddClue (clues, triggering_match, contact.BlogUrl, "rss"); + } + catch {} } private void AddClue (ArrayList clues, Match triggering_match, string field, string field_name) @@ -132,39 +196,179 @@ clues.Add (new Clue (field_name, field, 10, triggering_match)); } - private BackendMatch GenerateMatchForContact (Contact contact) + private Match GenerateMatchForContact (Contact contact, Clue c) { - BackendMatch result = new BackendMatch (); + Match result = new Match ( "Contact", c ); - if (contact.FullName != null && contact.FullName != "") - result.AddItem (new BackendMatchItem ("Name", contact.FullName, "text", "xml")); + try + { + if (contact.FullName != null && contact.FullName != "") + result["Name"] = contact.FullName; + } + catch {} + + try + { + if (contact.Email1 != null && contact.Email1 != "") + result["EMail"] = contact.Email1; + } + catch {} - if (contact.Email1 != null && contact.Email1 != "") - result.AddItem (new BackendMatchItem ("EMail", contact.Email1, "text", "xml")); + ArrayList phonenumbers = GetContactPhoneNumbers( contact ); + try + { + if ( phonenumbers[0] != null) + result["Phone"] = phonenumbers[0]; + } + catch {} + + return result; + } - if (contact.PrimaryPhone != null && contact.PrimaryPhone != "") - result.AddItem (new BackendMatchItem ("Phone", contact.PrimaryPhone, "text", "xml")); + private ArrayList GetContactPhoneNumbers( Contact contact ) + { + ArrayList numbers = new ArrayList(); + + try + { + if (contact.PrimaryPhone != null && contact.PrimaryPhone != "") + numbers.Add( contact.PrimaryPhone ); + } + catch {} + + try + { + if (contact.AssistantPhone != null && contact.AssistantPhone != "") + numbers.Add( contact.AssistantPhone ); + } + catch {} + + try + { + if (contact.BusinessPhone != null && contact.BusinessPhone != "") + numbers.Add( contact.BusinessPhone ); + } + catch {} - return result; + try + { + if (contact.BusinessPhone2 != null && contact.BusinessPhone2 != "") + numbers.Add( contact.BusinessPhone ); + } + catch {} + + try + { + if (contact.BusinessFax != null && contact.BusinessFax != "") + numbers.Add( contact.BusinessFax ); + } + catch {} + + try + { + if (contact.CallbackPhone != null && contact.CallbackPhone != "") + numbers.Add( contact.CallbackPhone ); + } + catch {} + + try + { + if (contact.CarPhone != null && contact.CarPhone != "") + numbers.Add( contact.CarPhone ); + } + catch {} + + try + { + if (contact.CompanyPhone != null && contact.CompanyPhone != "") + numbers.Add( contact.CompanyPhone ); + } + catch {} + + try + { + if (contact.CallbackPhone != null && contact.CallbackPhone != "") + numbers.Add( contact.CallbackPhone ); + } + catch {} + + try + { + if (contact.CallbackPhone != null && contact.CallbackPhone != "") + numbers.Add( contact.CallbackPhone ); + } + catch {} + + try + { + if (contact.HomePhone != null && contact.HomePhone != "") + numbers.Add( contact.HomePhone ); + } + catch {} + + try + { + if (contact.HomePhone2 != null && contact.HomePhone2 != "") + numbers.Add( contact.HomePhone2 ); + } + catch {} + + try + { + if (contact.IsdnPhone != null && contact.IsdnPhone != "") + numbers.Add( contact.IsdnPhone ); + } + catch {} + + try + { + if (contact.MobilePhone != null && contact.MobilePhone != "") + numbers.Add( contact.MobilePhone ); + } + catch {} + + try + { + if (contact.OtherPhone != null && contact.OtherPhone != "") + numbers.Add( contact.OtherPhone ); + } + catch {} + + try + { + if (contact.OtherFax != null && contact.OtherFax != "") + numbers.Add( contact.OtherFax ); + } + catch {} + + try + { + if (contact.Pager != null && contact.Pager != "") + numbers.Add( contact.Pager ); + } + catch {} + + return numbers; + } private BookQuery BuildQuery (Clue c) { - if (c.Type == "*" || c.Type == "keyword") + if (c.Type == "*" || c.Type == "keyword" || c.Type == "aim_name") // FIXME: frontend should be passing in a wildcard clue type, not an aim_name clue type return BookQuery.AnyFieldContains (c.Text); // if (c.Type == "phone") -// return BookQuery.Andv (BookQuery.FieldTest (ContactField.PhonePrimary, BookQueryTest.Is, Clue.Text), -// BookQuery.FieldTest (ContactField.PhoneBusiness, BookQueryTest.Is, Clue.Text), -// BookQuery.FieldTest (ContactField.PhoneHome, BookQueryTest.Is, Clue.Text), -// BookQuery.FieldTest (ContactField.PhoneHome2, BookQueryTest.Is, Clue.Text), -// BookQuery.FieldTest (ContactField.PhoneHomeFax, BookQueryTest.Is, Clue.Text), -// BookQuery.FieldTest (ContactField.PhoneMobile, BookQueryTest.Is, Clue.Text), -// BookQuery.FieldTest (ContactField.PhonePager, BookQueryTest.Is, Clue.Text)); +// return BookQuery.Or (BookQuery.FieldTest (ContactField.PhonePrimary, BookQueryTest.Contains, Clue.Text), +// BookQuery.FieldTest (ContactField.PhoneBusiness, BookQueryTest.Contains, Clue.Text), +// BookQuery.FieldTest (ContactField.PhoneHome, BookQueryTest.Contains, Clue.Text), +// BookQuery.FieldTest (ContactField.PhoneHome2, BookQueryTest.Contains, Clue.Text), +// BookQuery.FieldTest (ContactField.PhoneHomeFax, BookQueryTest.Contains, Clue.Text), +// BookQuery.FieldTest (ContactField.PhoneMobile, BookQueryTest.Contains, Clue.Text), +// BookQuery.FieldTest (ContactField.PhonePager, BookQueryTest.Contains, Clue.Text)); ContactField field = MapClueTypeToField (c); - return BookQuery.FieldTest (MapClueTypeToField (c), BookQueryTest.Is, c.Text); + return BookQuery.FieldTest (MapClueTypeToField (c), BookQueryTest.Contains, c.Text); } private ContactField MapClueTypeToField (Clue c) Index: renderers/Makefile.am =================================================================== RCS file: /cvs/gnome/dashboard/renderers/Makefile.am,v retrieving revision 1.4 diff -u -r1.4 Makefile.am --- renderers/Makefile.am 20 Feb 2004 01:44:02 -0000 1.4 +++ renderers/Makefile.am 22 Feb 2004 18:47:43 -0000 @@ -10,7 +10,8 @@ IMLogMatchRenderer.dll \ MailMessageMatchRenderer.dll \ BugzillaBugMatchRenderer.dll \ - DefaultMatchRenderer.dll + DefaultMatchRenderer.dll \ + ContactMatchRenderer.dll # These do not work. broken_renderers = @@ -20,7 +21,8 @@ $(srcdir)/IMLogMatchRenderer.cs \ $(srcdir)/MailMessageMatchRenderer.cs \ $(srcdir)/BugzillaBugMatchRenderer.cs \ - $(srcdir)/DefaultMatchRenderer.cs + $(srcdir)/DefaultMatchRenderer.cs \ + $(srcdir)/ContactMatchRenderer.cs all: $(renderers)
Attachment:
ContactMatchRenderer.cs
Description: Binary data
Index: evolution/Contact.custom =================================================================== RCS file: /cvs/gnome/evolution-sharp/evolution/Contact.custom,v retrieving revision 1.2 diff -u -r1.2 Contact.custom --- evolution/Contact.custom 4 Feb 2004 18:17:31 -0000 1.2 +++ evolution/Contact.custom 22 Feb 2004 18:51:09 -0000 @@ -30,6 +30,18 @@ } } + public string FullName { + get { + GLib.Value val = new GLib.Value (Handle, "full_name"); + GetProperty("full_name", val); + string ret = (string) val; + return ret; + } + set { + SetProperty("full_name", new GLib.Value(value)); + } + } + public string GivenName { get { GLib.Value val = new GLib.Value (Handle, "given_name");