public CompetitionsApiSyncTarget(CompetitionsApiClient client, string licenseIssuerId = null, bool requireProviderKey = false) { this.client = client; log = LogManager.GetLogger(GetType()); source = new CompetitionsApiSyncSource(client, licenseIssuerId, requireProviderKey); }
private void CountFileTypes(ISyncSource source) { List <ISyncable> list = new List <ISyncable>(source.AllItems.Values); foreach (ISyncable syncable in list) { int? nullable2 = syncable.Properties.NullableIntForKey("Size"); long?nullable = nullable2.HasValue ? new long?((long)nullable2.GetValueOrDefault()) : null; if (syncable.Properties.BooleanForKey("Picture", false)) { this.photoCount++; if (nullable.HasValue) { this.photoSize += (double)nullable.Value; } } else { if (syncable.Properties.BooleanForKey("Has Video", false)) { this.videoCount++; if (nullable.HasValue) { this.videoSize += (double)nullable.Value; } continue; } this.musicCount++; if (nullable.HasValue) { this.musicSize += (double)nullable.Value; } } } }
public ClubsApiSyncTarget(ClubsApiClient client) { this.client = client; log = LogManager.GetLogger(GetType()); source = new ClubsApiSyncSource(client); }
public Task SyncAsync(ISyncSource syncSource) { if (syncSource is null) { throw new ArgumentNullException(nameof(syncSource)); } return(Task.Run(async() => { List <RssItem> added = new(); using (var scope = this._serviceProvider.CreateScope()) { var ctx = scope.ServiceProvider.GetRequiredService <LocalDbContext>(); var syncInfo = ctx.SyncSourceInfos .FirstOrDefault(z => z.SyncSourceId == syncSource.SyncSourceId); added.AddRange(await SyncCoreAsync(ctx, syncSource, syncInfo, CancellationToken.None).ConfigureAwait(false)); ctx.SaveChanges(); } this._serviceProvider.EmitEvent(EventNames.AddedRssItems, this, added); })); }
private static async Task <List <RssItem> > SyncCoreAsync(LocalDbContext ctx, ISyncSource syncSource, SyncSourceInfo syncInfo, CancellationToken cancellationToken) { if (syncInfo is null) { syncInfo = new SyncSourceInfo { SyncSourceId = syncSource.SyncSourceId }; ctx.Add(syncInfo); } var page = await syncSource.TryGetItemsAsync(syncInfo.LastSyncId, cancellationToken) .ConfigureAwait(false); if (page.LastId is int lastId) { syncInfo.LastSyncId = lastId; } var newItems = page.GetItems().Select(z => { var r = new RssItem(); r.UpdateFrom(z); return(r); }).ToList(); return(ctx.AddOrIgnoreRange(newItems)); }
public bool CheckCredentials(ISyncSource source) { if (source.NeedAuthorization && source.Credentials == null) { ISyncSourceProfile logon = null; if (IsXP) logon = new LogonWindowXP(); else logon = new LogonWindow(); logon.ProviderName = source.DisplayName; Bitmap providerImage = source.Image; BitmapSource imageSource = null; if (providerImage != null) { IntPtr HBitmap = providerImage.GetHbitmap(); imageSource = Imaging.CreateBitmapSourceFromHBitmap(HBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); providerImage.Dispose(); logon.ImageSource = imageSource; } (logon as Window).ShowDialog(); bool? b = (logon as Window).DialogResult; if (b == null || b == false) { return false; } if (logon.RememberSettings) { source.ClearCredentials = false; } else source.ClearCredentials = true; source.Credentials = new NetworkCredential(logon.Login, logon.Password); if (logon.HumanNotation) { source.Notation = NameNotation.Human; } else { source.Notation = NameNotation.Formal; } return true; } else return true; }
public DateTime LastSyncTime(ISyncSource source, string FullName) { string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); string appDataSynrcContacts = appData + "/Synrc/Contact Manager/" + source.Name; if (File.Exists(appDataSynrcContacts + "/" + FullName + ".contact")) { Contact contact = new Contact(appDataSynrcContacts + "/" + FullName + ".contact"); if (contact != null && contact.Dates["LastSync"] != null) { return contact.Dates["LastSync"].Value; } } return DateTime.MinValue; }
public void SaveTask(ISyncSource source, bool updateFutureManList, DateTime lastSyncTime) { if (SyncCanceled) return; string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); string appDataSynrcContacts = appData + "/Synrc/Contact Manager/" + source.Name; if (Directory.Exists(appDataSynrcContacts)) Directory.Delete(appDataSynrcContacts, true); DirectoryInfo dirinfo = Directory.CreateDirectory(appDataSynrcContacts); //Dispatcher.BeginInvoke(new VoidDelegate(owner.ClearProgressBar)); //Dispatcher.BeginInvoke(new VoidInt(owner.SetBarLimits), source.Contacts.Count); CurrentTotal = source.Contacts.Count; CurrentItemNum = 0; foreach (Contact contact in source.Contacts.Values) { //if (owner != null) // Dispatcher.BeginInvoke(new VoidString(owner.IncBarPosition), "Saving " + source.Name); if (owner != null) { Dispatcher.Invoke(new SyncProgressEventHandler(owner.Progress), source, "Saving " + source.Name + " (" + CurrentItemNum + "/" + CurrentTotal + ")", CurrentItemNum, CurrentTotal); CurrentItemNum++; } if (contact.Dates["LastSync"] != null) contact.Dates["LastSync"] = lastSyncTime; else contact.Dates.Add(lastSyncTime, "LastSync"); //ClearReplicatedTo(contact, source.Name); contact.Save(appDataSynrcContacts + "/" + contact.FullName + ".contact"); if (updateFutureManList) futureManList.Add(new Man { FullName = contact.FullName, Phone = contact.Phone, EMail = contact.EMail }); } }
private void SyncGMAIL(object sender, RoutedEventArgs e) { //ISyncSource currentProvider = null; if (currentProvider == null) currentProvider = gmail; if (syncEngine != null) { syncEngine.Sync(gmail, currentProvider); } }
private void SyncGMAIL(object sender, RoutedEventArgs e) { if (currentProvider == null) currentProvider = gmail; syncEngine.Sync(gmail, currentProvider); }
private void SyncLiveContacts(object sender, RoutedEventArgs e) { if (currentProvider == null) currentProvider = live; syncEngine.Sync(live, currentProvider); }
private void SyncWindowsContacts(object sender, RoutedEventArgs e) { if (currentProvider == null) currentProvider = vista; syncEngine.Sync(vista, currentProvider); }
// CORE LOGIC private void SyncOutlookPIM(object sender, RoutedEventArgs e) { if (currentProvider == null) currentProvider = outlook; syncEngine.Sync(outlook, currentProvider); }
private void Window_Loaded(object sender, RoutedEventArgs e) { syncEngine = new SyncEngine(this, false); this.lastSyncMessage.Content = "Choose your current provider."; this.lastSyncMessage.Visibility = Visibility.Visible; try { if (!IsNET35Installed()) throw new System.Exception("Windows Live is unavailable. Install .NET 3.5 Framework."); Assembly a = LoadLocalAssembly( System.IO.Path.GetDirectoryName( Assembly.GetExecutingAssembly().Location) + "\\Synrc.WindowsLive.dll"); Type t = a.GetType("Synrc.LiveContactsProvider"); live = Activator.CreateInstance(t, new object[] { this, syncEngine }) as ISyncSource; //live = new LiveContactsProvider(this, syncEngine); } catch (Exception excp) { syncButton.DropDown.Items.Remove(GetSyncMenuItemByName("WindowsLive")); this.lastSyncMessage.Content = excp.Message; this.lastSyncMessage.Visibility = Visibility.Visible; } try { if (!IsOutlookInstalled()) throw new System.Exception("Outlook not installed."); //Assembly a = LoadLocalAssembly("Synrc.Outlook.dll"); //Type t = a.GetType("Synrc.OutlookContactsProvider"); //outlook = Activator.CreateInstance(t, new object[] { this, syncEngine}) as ISyncSource; outlook = new OutlookContactsProvider(this, syncEngine); } catch { syncButton.DropDown.Items.Remove(GetSyncMenuItemByName("Outlook")); } vista = new WindowsContactsProvider(this, syncEngine); gmail = new GmailContactsProvider(this, syncEngine); if (IsNokiaInstalled()) { nokia = new NokiaContactsProvider(this, syncEngine); nokiaDiscoverer = new NokiaDiscoverer(this, nokia as NokiaContactsProvider); this.syncButton.DropDown.Opened += new RoutedEventHandler(DropDown_Opened); nokiaDiscoverer.DiscoveryTask(); } currentProvider = null; //searchContext = syncEngine.Sync(currentProvider, currentProvider); DataContext = searchContext; }
private void SyncWindowsContacts(object sender, RoutedEventArgs e) { //ISyncSource currentProvider = null; if (currentProvider == null) currentProvider = vista; if (syncEngine != null) syncEngine.Sync(vista, currentProvider); }
private void SyncLiveContacts(object sender, RoutedEventArgs e) { //ISyncSource currentProvider = null; if (currentProvider == null) currentProvider = live; if (syncEngine != null) syncEngine.Sync(live, currentProvider); }
public void SyncNokia(object sender, RoutedEventArgs e) { if (currentProvider == null) currentProvider = nokia; syncEngine.Sync(nokia, currentProvider); }
public void SyncNokia(object sender, RoutedEventArgs e) { //ISyncSource currentProvider = null; if (currentProvider == null) currentProvider = nokia; if (syncEngine != null) syncEngine.Sync(nokia, currentProvider); }
public static void Update(string ObjectName, ISyncSource SourceUtils, ISyncStore StoreUtils) { SyncObject sourceObject = new SyncObject(); if (!SourceUtils.GetObject(ObjectName, sourceObject)) { throw new NullReferenceException("目标数据源无此对象:" + ObjectName); } SyncObject storeObject = new SyncObject(); if (!StoreUtils.GetObject(ObjectName, storeObject)) { storeObject.ObjectName = ObjectName; storeObject.ObjectVersion = ""; } if (sourceObject.ObjectVersion == storeObject.ObjectVersion) { //比对版本,一致则退出 return; } //加载本地数据信息 List <SyncDataOP> storeDataList = new List <SyncDataOP>(); StoreUtils.GetObjectDatas(ObjectName, storeDataList); List <SyncData> sourceDataList = new List <SyncData>(); SourceUtils.GetDataList(ObjectName, sourceDataList); //遍历数据源索引 foreach (var item in sourceDataList) { //本地仓储无数据则条件索引 if (!storeDataList.Exists((SyncDataOP s) => s.Key == item.Key)) { SyncDataOP dop = new SyncDataOP(); dop.Key = item.Key; dop.Json = item.Json; dop.Version = item.Version; dop.OP = 1; storeDataList.Add(dop); } else { //已有不同则更新 if (storeDataList.Find((SyncDataOP s) => s.Key == item.Key).Version != item.Version) { storeDataList.Find((SyncDataOP s) => s.Key == item.Key).Version = item.Version; storeDataList.Find((SyncDataOP s) => s.Key == item.Key).Json = item.Json; storeDataList.Find((SyncDataOP s) => s.Key == item.Key).OP = 2; } } } //判断本地仓储是否有删除的 foreach (var item in storeDataList) { if (!sourceDataList.Exists((SyncData s) => s.Key == item.Key)) { item.OP = 3; } } //保存本地存储索引信息 foreach (var item in storeDataList) { SyncData d = new SyncData(); d.Key = item.Key; d.Json = item.Json; d.Version = item.Version; if (item.OP == 0) { continue; } if (item.OP == 1) { StoreUtils.AddData(storeObject.ObjectName, d); } if (item.OP == 2) { StoreUtils.UpdateData(storeObject.ObjectName, d); } if (item.OP == 3) { StoreUtils.DeleteData(storeObject.ObjectName, d); } StoreUtils.AddUserIndex(storeObject, d, item.OP); } //保存本地对象版本信息 if (storeObject.ObjectVersion == "") { storeObject.ObjectVersion = sourceObject.ObjectVersion; StoreUtils.AddObject(storeObject); } else { storeObject.ObjectVersion = sourceObject.ObjectVersion; StoreUtils.UpdateObject(storeObject); } }
public void MergeContacts(ISyncSource local, ISyncSource remote, string FullName, bool copylabels) { Contact localLastSyncContact = LastSyncContact(localSyncSource, FullName); Contact remoteLastSyncContact = LastSyncContact(remoteSyncSource, FullName); Contact m1 = Merge(remoteSyncSource.Contacts[FullName], localSyncSource.Contacts[FullName]); Contact m2 = Merge(remoteSyncSource.Contacts[FullName], localSyncSource.Contacts[FullName]); if (copylabels) { CopyReplicatedToLabelsFromTo(localLastSyncContact, m1); CopyReplicatedToLabelsFromTo(remoteLastSyncContact, m1); CopyReplicatedToLabelsFromTo(localLastSyncContact, m2); CopyReplicatedToLabelsFromTo(remoteLastSyncContact, m2); } else { ClearLabelsFrom(m1); ClearLabelsFrom(m2); } SetReplicatedTo(m1, localSyncSource.Name); SetReplicatedTo(m2, remoteSyncSource.Name); remoteSyncSource.MapUpdated[FullName] = m1; localSyncSource.MapUpdated[FullName] = m2; }
// GUI CALLBACKS public void Progress(ISyncSource source, string s, int c, int max) { if (syncEngine.SyncCanceled) return; this.lastSyncMessage.Visibility = Visibility.Hidden; this.url.Visibility = Visibility.Hidden; this.progressBar.Maximum = max; this.progressBar.Minimum = 0; this.progressBar.Value = c; this.progressBar.Height = 25; this.progressBar.Visibility = System.Windows.Visibility.Visible; this.statusLabel.Content = s; this.statusLabel.Visibility = Visibility.Visible; this.syncButton.IsEnabled = false; }
public Contact LastSyncContact(ISyncSource source, string FullName) { string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); string appDataSynrcContacts = appData + "/Synrc/Contact Manager/" + source.Name; if (File.Exists(appDataSynrcContacts + "/" + FullName + ".contact")) { Contact contact = new Contact(appDataSynrcContacts + "/" + FullName + ".contact"); return contact; } return null; }
public void EndSync(ISyncSource source, ISyncSource destination) // EndSync { //Cursor cur = this.Cursor; //this.Cursor = Cursors.Wait; currentProvider = destination; HideProgressBar(); UpdateItems(); if (source != destination) this.lastSyncMessage.Content = "Last sync was made between " + source.DisplayName + " and " + destination.DisplayName; else this.lastSyncMessage.Content = "Contacts refreshed from " + source.DisplayName; wasGoodSync = true; if (source == destination && noneProvider) { MenuItem mi = GetSyncMenuItemByName(source.Name); mi.FontWeight = FontWeights.Bold; //mi.Header = source.DisplayName + " (Refresh)"; } //this.Cursor = cur; }
public void StartThreads() { CleanupResources(); CurrentTotal = 0; CurrentItemNum = 0; lastSyncSource = localSyncSource; localSyncSource.FetchSem.WaitOne(); fetchThreadLocal = new Thread(localSyncSource.FetchTask); fetchThreadLocal.Priority = ThreadPriority.Highest; fetchThreadLocal.SetApartmentState(ApartmentState.STA); fetchThreadLocal.Start(); remoteSyncSource.FetchSem.WaitOne(); fetchThreadRemote = new Thread(remoteSyncSource.FetchTask); fetchThreadRemote.Priority = ThreadPriority.Highest; fetchThreadRemote.SetApartmentState(ApartmentState.STA); fetchThreadRemote.Start(); SyncSemForLocal.WaitOne(); SyncSemForRemote.WaitOne(); localSyncSource.SyncSem = SyncSemForLocal; remoteSyncSource.SyncSem = SyncSemForRemote; syncThread = new Thread(SyncTask); syncThread.Priority = ThreadPriority.Highest; syncThread.Start(); localSyncSource.UpdateSem.WaitOne(); updateThreadLocal = new Thread(localSyncSource.UpdateTask); updateThreadLocal.Priority = ThreadPriority.Highest; updateThreadLocal.Start(); remoteSyncSource.UpdateSem.WaitOne(); updateThreadRemote = new Thread(remoteSyncSource.UpdateTask); updateThreadRemote.Priority = ThreadPriority.Highest; updateThreadRemote.Start(); LastSyncSaverSem.WaitOne(); lastSyncSaverThread = new Thread(lastSyncSaverThreadTask); lastSyncSaverThread.Priority = ThreadPriority.Highest; lastSyncSaverThread.Start(); }
public void CancelSync(ISyncSource source, string message, string link) { syncEngine.SyncCanceled = true; HideProgressBar(); UpdateItems(); this.lastSyncMessage.Content = message; if (link != null) { this.url.Visibility = Visibility.Visible; Hyperlink o = this.url.Content as Hyperlink; o.NavigateUri = new Uri(link); } //if (!wasGoodSync) // currentProvider = null; //wasGoodSync = false; }
public IList<IMan> Sync(ISyncSource local, ISyncSource remote) { futureManList = new List<IMan>(); cancelSync = false; if (local != remote && local != null && remote != null) { localSyncSource = local; remoteSyncSource = remote; if (!CheckCredentials(localSyncSource)) { cancelSync = true; return futureManList; } if (!CheckCredentials(remoteSyncSource)) { cancelSync = true; return futureManList; } StartThreads(); } else if (local == remote && local != null) { localSyncSource = local; remoteSyncSource = remote; if (!CheckCredentials(localSyncSource)) { cancelSync = true; return futureManList; } StartRetrievingLocal(); } return futureManList; }
public void Init(string providerSpecified, bool noneProvider) { syncEngine = new SyncEngine(this, Owner is EssentialWindow); this.noneProvider = noneProvider; if (noneProvider) { this.lastSyncMessage.Content = "Choose your current provider."; this.lastSyncMessage.Visibility = Visibility.Visible; } try { if (!IsNET35Installed()) throw new System.Exception("Windows Live is unavailable. Install .NET 3.5 Framework."); Assembly a = LoadLocalAssembly( System.IO.Path.GetDirectoryName( Assembly.GetExecutingAssembly().Location) + "\\Synrc.WindowsLive.dll"); Type t = a.GetType("Synrc.LiveContactsProvider"); live = Activator.CreateInstance(t, new object[] { this, syncEngine }) as ISyncSource; //live = new LiveContactsProvider(this, syncEngine); } catch (Exception excp) { syncButton.DropDown.Items.Remove(GetSyncMenuItemByName("WindowsLive")); this.lastSyncMessage.Content = excp.Message; this.lastSyncMessage.Visibility = Visibility.Visible; } try { if (!IsOutlookInstalled()) throw new System.Exception("Outlook not installed."); //Assembly a = LoadLocalAssembly("Synrc.Outlook.dll"); //Type t = a.GetType("Synrc.OutlookContactsProvider"); //outlook = Activator.CreateInstance(t, new object[] { this, syncEngine}) as ISyncSource; outlook = new OutlookContactsProvider(this, syncEngine); } catch (System.IO.FileNotFoundException e) { Process reg = new Process(); reg.StartInfo.FileName = "regsvr32.exe"; reg.StartInfo.Arguments = "/s Redemption.dll"; reg.StartInfo.UseShellExecute = false; reg.StartInfo.CreateNoWindow = true; reg.StartInfo.RedirectStandardOutput = true; reg.Start(); reg.WaitForExit(); reg.Close(); outlook = new OutlookContactsProvider(this, syncEngine); } catch (Exception e) { syncButton.DropDown.Items.Remove(GetSyncMenuItemByName("Outlook")); } vista = new WindowsContactsProvider(this, syncEngine); gmail = new GmailContactsProvider(this, syncEngine); if (IsNokiaInstalled()) { nokia = new NokiaContactsProvider(this, syncEngine); nokiaDiscoverer = new NokiaDiscoverer(this, nokia as NokiaContactsProvider); this.syncButton.DropDown.Opened += new RoutedEventHandler(DropDown_Opened); nokiaDiscoverer.DiscoveryTask(); } if (!noneProvider) { switch (providerSpecified) { case "gmail": currentProvider = gmail; break; case "windows": currentProvider = vista; break; case "live": currentProvider = live; break; case "outlook": currentProvider = outlook; break; default: currentProvider = vista; break; } syncButton.DropDown.Items.Remove(GetSyncMenuItemByName(currentProvider.Name)); searchContext = syncEngine.Sync(currentProvider, currentProvider); } DataContext = searchContext; }
private void CountFileTypes(ISyncSource source) { List<ISyncable> list = new List<ISyncable>(source.AllItems.Values); foreach (ISyncable syncable in list) { int? nullable2 = syncable.Properties.NullableIntForKey("Size"); long? nullable = nullable2.HasValue ? new long?((long) nullable2.GetValueOrDefault()) : null; if (syncable.Properties.BooleanForKey("Picture", false)) { this.photoCount++; if (nullable.HasValue) { this.photoSize += (double) nullable.Value; } } else { if (syncable.Properties.BooleanForKey("Has Video", false)) { this.videoCount++; if (nullable.HasValue) { this.videoSize += (double) nullable.Value; } continue; } this.musicCount++; if (nullable.HasValue) { this.musicSize += (double) nullable.Value; } } } }
private void SyncOutlookPIM(object sender, RoutedEventArgs e) { //ISyncSource currentProvider = null; if (currentProvider == null) currentProvider = outlook; if (syncEngine != null) syncEngine.Sync(outlook, currentProvider); }