Menu

[r1511]: / trunk / GoogleContactsSync / ConflictResolver.cs  Maximize  Restore  History

Download this file

275 lines (229 with data), 10.9 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
using Google.Apis.Calendar.v3.Data;
using Google.Apis.PeopleService.v1.Data;
using System;
using System.Collections.Generic;
using Event = Google.Apis.Calendar.v3.Data.Event;
using Outlook = Microsoft.Office.Interop.Outlook;
namespace GoContactSyncMod
{
internal class ConflictResolver : IConflictResolver, IDisposable
{
private readonly ConflictResolverForm _form;
public ConflictResolver()
{
_form = new ConflictResolverForm();
}
#region IConflictResolver Members
public ConflictResolution Resolve(ContactMatch match, bool isNewMatch)
{
var name = match.ToString();
if (isNewMatch)
{
_form.messageLabel.Text =
"This is the first time these Outlook and Google Contacts \"" + name +
"\" are synced. Choose which you would like to keep.";
_form.skip.Text = "Keep both";
}
else
{
_form.messageLabel.Text =
"Both the Outlook Contact and the Google Person \"" + name +
"\" have been changed. Choose which you would like to keep.";
}
_form.OutlookItemTextBox.Text = string.Empty;
_form.GoogleItemTextBox.Text = string.Empty;
if (match.OutlookContact != null)
{
var item = match.OutlookContact.GetOriginalItemFromOutlook();
_form.OutlookItemTextBox.Text = ContactMatch.GetSummary(item);
}
if (match.GoogleContact != null)
{
_form.GoogleItemTextBox.Text = ContactMatch.GetSummary(match.GoogleContact);
}
return Resolve();
}
public ConflictResolution ResolveDuplicate(OutlookContactInfo outlookContact, List<Person> googleContacts, out Person googleContact)
{
var name = outlookContact.ToString();
_form.messageLabel.Text =
"There are multiple Google Contacts (" + googleContacts.Count + ") matching unique properties for Outlook Contact \"" + name +
"\". Please choose from the combobox below the Google Person you would like to match with Outlook and if you want to keep the Google or Outlook properties of the selected contact.";
_form.OutlookItemTextBox.Text = string.Empty;
_form.GoogleItemTextBox.Text = string.Empty;
var item = outlookContact.GetOriginalItemFromOutlook();
_form.OutlookItemTextBox.Text = ContactMatch.GetSummary(item);
_form.GoogleComboBox.DataSource = googleContacts;
//_form.GoogleComboBox.DisplayMember = "UniqueName";//ToDo: Define unique name
_form.GoogleComboBox.Visible = true;
_form.AllCheckBox.Visible = false;
_form.skip.Text = "Keep both";
var res = Resolve();
googleContact = _form.GoogleComboBox.SelectedItem as Person;
return res;
}
public DeleteResolution ResolveDelete(OutlookContactInfo outlookContact)
{
var name = outlookContact.ToString();
_form.Text = "Google Person deleted";
_form.messageLabel.Text =
"Google Person \"" + name +
"\" doesn't exist anymore. Do you want to delete it also on Outlook side?";
_form.OutlookItemTextBox.Text = string.Empty;
_form.GoogleItemTextBox.Text = string.Empty;
var item = outlookContact.GetOriginalItemFromOutlook();
_form.OutlookItemTextBox.Text = ContactMatch.GetSummary(item);
_form.keepOutlook.Text = "Keep Outlook";
_form.keepGoogle.Text = "Delete Outlook";
_form.skip.Enabled = false;
return ResolveDeletedGoogle();
}
public DeleteResolution ResolveDelete(Person googleContact)
{
var name = ContactMatch.GetName(googleContact);
_form.Text = "Outlook Contact deleted";
_form.messageLabel.Text =
"Outlook Contact \"" + name +
"\" doesn't exist anymore. Do you want to delete it also on Google side?";
_form.OutlookItemTextBox.Text = string.Empty;
_form.GoogleItemTextBox.Text = string.Empty;
_form.GoogleItemTextBox.Text = ContactMatch.GetSummary(googleContact);
_form.keepOutlook.Text = "Keep Google";
_form.keepGoogle.Text = "Delete Google";
_form.skip.Enabled = false;
return ResolveDeletedOutlook();
}
private ConflictResolution Resolve()
{
switch (SettingsForm.Instance.ShowConflictDialog(_form))
{
case System.Windows.Forms.DialogResult.Ignore:
// skip
return _form.AllCheckBox.Checked ? ConflictResolution.SkipAlways : ConflictResolution.Skip;
case System.Windows.Forms.DialogResult.No:
// google wins
return _form.AllCheckBox.Checked ? ConflictResolution.GoogleWinsAlways : ConflictResolution.GoogleWins;
case System.Windows.Forms.DialogResult.Yes:
// outlook wins
return _form.AllCheckBox.Checked ? ConflictResolution.OutlookWinsAlways : ConflictResolution.OutlookWins;
default:
return ConflictResolution.Cancel;
}
}
private DeleteResolution ResolveDeletedOutlook()
{
switch (SettingsForm.Instance.ShowConflictDialog(_form))
{
case System.Windows.Forms.DialogResult.No:
// google wins
return _form.AllCheckBox.Checked ? DeleteResolution.DeleteGoogleAlways : DeleteResolution.DeleteGoogle;
case System.Windows.Forms.DialogResult.Yes:
// outlook wins
return _form.AllCheckBox.Checked ? DeleteResolution.KeepGoogleAlways : DeleteResolution.KeepGoogle;
default:
return DeleteResolution.Cancel;
}
}
private DeleteResolution ResolveDeletedGoogle()
{
switch (SettingsForm.Instance.ShowConflictDialog(_form))
{
case System.Windows.Forms.DialogResult.No:
// google wins
return _form.AllCheckBox.Checked ? DeleteResolution.DeleteOutlookAlways : DeleteResolution.DeleteOutlook;
case System.Windows.Forms.DialogResult.Yes:
// outlook wins
return _form.AllCheckBox.Checked ? DeleteResolution.KeepOutlookAlways : DeleteResolution.KeepOutlook;
default:
return DeleteResolution.Cancel;
}
}
public ConflictResolution Resolve(Outlook.AppointmentItem oa, Google.Apis.Calendar.v3.Data.Event ga, bool isNewMatch)
{
var name = string.Empty;
_form.OutlookItemTextBox.Text = string.Empty;
_form.GoogleItemTextBox.Text = string.Empty;
if (oa != null)
{
name = oa.ToLogString();
_form.OutlookItemTextBox.Text += oa.Body;
}
if (ga != null)
{
name = ga.ToLogString();
_form.GoogleItemTextBox.Text += ga.Description;
}
if (isNewMatch)
{
_form.messageLabel.Text =
"This is the first time these appointments \"" + name +
"\" are synced. Choose which you would like to keep.";
_form.skip.Text = "Keep both";
}
else
{
_form.messageLabel.Text =
"Both the Outlook and Google Appointment \"" + name +
"\" have been changed. Choose which you would like to keep.";
}
return Resolve();
}
public ConflictResolution Resolve(string message, Outlook.AppointmentItem oa, Event ga, bool keepOutlook, bool keepGoogle)
{
_form.OutlookItemTextBox.Text = string.Empty;
_form.GoogleItemTextBox.Text = string.Empty;
if (oa != null)
{
_form.OutlookItemTextBox.Text += oa.Body;
}
if (ga != null)
{
_form.GoogleItemTextBox.Text += ga.Description;
}
_form.keepGoogle.Enabled = keepGoogle;
_form.keepOutlook.Enabled = keepOutlook;
_form.AllCheckBox.Visible = true;
_form.messageLabel.Text = message;
return Resolve();
}
public ConflictResolution Resolve(string message, Outlook.AppointmentItem oa, Google.Apis.Calendar.v3.Data.Event ga, Synchronizer sync)
{
return Resolve(message, oa, ga, true, false);
}
public ConflictResolution Resolve(string message, Google.Apis.Calendar.v3.Data.Event ga, Outlook.AppointmentItem oa, Synchronizer sync)
{
return Resolve(message, oa, ga, false, true);
}
public DeleteResolution ResolveDelete(Outlook.AppointmentItem oa)
{
_form.Text = "Google appointment deleted";
_form.messageLabel.Text =
"Google appointment \"" + oa.ToLogString() +
"\" doesn't exist anymore. Do you want to delete it also on Outlook side?";
_form.GoogleItemTextBox.Text = string.Empty;
_form.OutlookItemTextBox.Text += oa.Body;
_form.keepOutlook.Text = "Keep Outlook";
_form.keepGoogle.Text = "Delete Outlook";
_form.skip.Enabled = false;
return ResolveDeletedGoogle();
}
public DeleteResolution ResolveDelete(Event ga)
{
_form.Text = "Outlook appointment deleted";
_form.messageLabel.Text =
"Outlook appointment \"" + ga.ToLogString() +
"\" doesn't exist anymore. Do you want to delete it also on Google side?";
_form.OutlookItemTextBox.Text = string.Empty;
_form.GoogleItemTextBox.Text += ga.Description;
_form.keepOutlook.Text = "Keep Google";
_form.keepGoogle.Text = "Delete Google";
_form.skip.Enabled = false;
return ResolveDeletedOutlook();
}
public void Dispose()
{
_form.Dispose();
}
#endregion
}
}
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.