コード例 #1
0
 internal void Bind(FolderSync folderSync, ServerManifestEntry manifestEntry, bool cacheItem)
 {
     this.cacheItem     = cacheItem;
     this.manifestEntry = manifestEntry;
     this.item          = null;
     this.folderSync    = folderSync;
 }
コード例 #2
0
ファイル: FolderSyncsControl.cs プロジェクト: philprett/psync
        /// <summary>
        /// Provides the custom drawing of the listbox.
        /// Requires the listbox to have the DrawMode property set to OwnerDrawFixed
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lstFolderSyncs_DrawItem(object sender, DrawItemEventArgs e)
        {
            if (e.Index < 0)
            {
                return;
            }
            ListBox    lb         = (ListBox)sender;
            FolderSync folderSync = (FolderSync)lb.Items[e.Index];
            string     text       = folderSync.Name;

            e.DrawBackground();

            Graphics g = e.Graphics;

            if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
            {
                g.FillRectangle(SystemBrushes.Highlight, e.Bounds);
            }
            else
            {
                g.FillRectangle(new SolidBrush(e.BackColor), e.Bounds);
            }
            g.DrawString(text, e.Font, new SolidBrush(e.ForeColor), new PointF(e.Bounds.X, e.Bounds.Y));

            e.DrawFocusRectangle();
        }
コード例 #3
0
        private void SyncOnlineBtn_Click(object sender, EventArgs e)
        {
            var onlineChoose = new OnlineChoose();

            SetNativeEnabled(false);

            onlineChoose.FormClosing += (s, ev) =>
            {
                SetNativeEnabled(true);

                if (onlineChoose.DialogResult == DialogResult.OK)
                {
                    if (onlineChoose.Host)
                    {
                        ReadySync(() => FolderSync.Sync(new ServerSync(onlineChoose.Port)));
                    }
                    else
                    {
                        ReadySync(() => FolderSync.Sync(new ClientSync(onlineChoose.IP, onlineChoose.Port)));
                    }
                }
            };

            onlineChoose.Show();
        }
コード例 #4
0
        public DtoApiBoolResponse SyncStorageServers()
        {
            var response = new FolderSync().RunAllServers();

            return(new DtoApiBoolResponse()
            {
                Value = response
            });
        }
コード例 #5
0
        public static MailboxSyncItemId CreateForExistingItem(FolderSync folderSync, StoreObjectId id)
        {
            MailboxSyncItemId mailboxSyncItemId = new MailboxSyncItemId(id);

            if (folderSync == null || folderSync.ClientState.ContainsKey(mailboxSyncItemId))
            {
                return(mailboxSyncItemId);
            }
            return(null);
        }
コード例 #6
0
ファイル: FolderSyncsControl.cs プロジェクト: philprett/psync
 /// <summary>
 /// Edit the selected FolderSync
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void butEdit_Click(object sender, EventArgs e)
 {
     if (lstFolderSyncs.SelectedItem != null)
     {
         FolderSync            folderSync = (FolderSync)lstFolderSyncs.SelectedItem;
         FormFolderSyncDetails f          = new FormFolderSyncDetails(folderSync);
         if (f.ShowDialog() == DialogResult.OK)
         {
             MainDbContext.DB.SaveChanges();
             RefreshControl();
         }
     }
 }
コード例 #7
0
ファイル: FolderSyncsControl.cs プロジェクト: philprett/psync
 /// <summary>
 /// Delete the selected FolderSync
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void butDelete_Click(object sender, EventArgs e)
 {
     if (lstFolderSyncs.SelectedItem != null)
     {
         FolderSync folderSync = (FolderSync)lstFolderSyncs.SelectedItem;
         if (MessageBox.Show("Do you really want to remove this folder sync?", "Confirmation required", MessageBoxButtons.YesNo) == DialogResult.Yes)
         {
             MainDbContext.DB.FolderSyncs.Remove(folderSync);
             MainDbContext.DB.SaveChanges();
             RefreshControl();
         }
     }
 }
コード例 #8
0
ファイル: FolderSyncsControl.cs プロジェクト: philprett/psync
 private void lstFolderSyncs_SelectedIndexChanged(object sender, EventArgs e)
 {
     if (lstFolderSyncs.SelectedItem != null)
     {
         FolderSync folderSync = (FolderSync)lstFolderSyncs.SelectedItem;
         if (FolderSyncSelected != null)
         {
             FolderSyncSelected(this, new FolderSyncSelectedEventArgs()
             {
                 FolderSync = folderSync
             });
         }
     }
 }
コード例 #9
0
ファイル: FolderSyncsControl.cs プロジェクト: philprett/psync
 private void butGo_Click(object sender, EventArgs e)
 {
     if (lstFolderSyncs.SelectedItem != null)
     {
         FolderSync folderSync = (FolderSync)lstFolderSyncs.SelectedItem;
         if (FolderSyncSelected != null)
         {
             FolderSyncSelected(this, new FolderSyncSelectedEventArgs()
             {
                 FolderSync = folderSync
             });
         }
     }
 }
コード例 #10
0
 public SyncOperations(FolderSync folderSync, IDictionary changes, bool moreAvailable)
 {
     this.moreAvailable = moreAvailable;
     this.changes       = new List <SyncOperation>(changes.Keys.Count);
     foreach (object obj in changes.Values)
     {
         ServerManifestEntry serverManifestEntry = (ServerManifestEntry)obj;
         if (serverManifestEntry.ChangeType != ChangeType.OutOfFilter)
         {
             SyncOperation syncOperation = new SyncOperation();
             syncOperation.Bind(folderSync, serverManifestEntry, false);
             this.changes.Add(syncOperation);
         }
     }
 }
コード例 #11
0
        private void SyncDriveBtn_Click(object sender, EventArgs e)
        {
            var chooseDrive = new ChooseDrive();

            SetNativeEnabled(false);

            chooseDrive.FormClosing += (s, ev) =>
            {
                SetNativeEnabled(true);

                if (chooseDrive.DialogResult == DialogResult.OK)
                {
                    ReadySync(() => FolderSync.Sync(new DriveSync($"{chooseDrive.GetDrive}Revision/")));
                }
            };

            chooseDrive.Show();
        }
コード例 #12
0
        public void Test_FolderSync()
        {
            using (var testPipeline = new Pipeline())
            {
                var syncer = new FolderSync()
                {
                    SourceDirectory = this.testDataPath, TargetDirectory = this.resultPath, FileFilter = @"*.txt"
                };
                testPipeline.Commands.Add(syncer);

                testPipeline.ExecutePipeline();
            }

            // check
            var sourceFileCount = Directory.EnumerateFiles(this.testDataPath, "*.txt", SearchOption.TopDirectoryOnly).Count();
            var targetFileCount = Directory.EnumerateFiles(this.resultPath, "*.*", SearchOption.TopDirectoryOnly).Count();

            Assert.AreEqual(sourceFileCount, targetFileCount);
        }
コード例 #13
0
ファイル: FsCopy.cs プロジェクト: modulexcite/svn2svn
        public void Sync()
        {
            _svnAdd    = new List <FileSystemInfo>();
            _svnDelete = new List <FileSystemInfo>();

            FolderSync sync = new FolderSync(_args.Source, _args.Destination, FileActions.Ask, FileActions.Ask, FileActions.Ask);

            sync.AskWhatToDo += new AskWhatToDoDelegate(sync_AskWhatToDo);
            sync.ErrorEvent  += new ErrorDelegate(sync_ErrorEvent);
            sync.Sync();

            Console.WriteLine("Applying {0} svn delete changes ...", _svnDelete.Count);
            foreach (FileSystemInfo si in _svnDelete)
            {
                Console.WriteLine(" D {0}", si.FullName);
                if (!_args.simulationOnly)
                {
                    SvnDeleteArgs svnDeleteArgs = new SvnDeleteArgs();
                    svnDeleteArgs.ThrowOnError = true;
                    svnDeleteArgs.Force        = true;
                    _client.Delete(si.FullName, svnDeleteArgs);
                }
            }

            Console.WriteLine("Applying {0} svn add changes ...", _svnAdd.Count);
            foreach (FileSystemInfo si in _svnAdd)
            {
                Console.WriteLine(" A {0}", si.FullName);

                if (!_args.simulationOnly)
                {
                    SvnAddArgs svnAddArgs = new SvnAddArgs();
                    svnAddArgs.ThrowOnError = true;
                    svnAddArgs.Depth        = SvnDepth.Empty;
                    _client.Add(si.FullName, svnAddArgs);
                }
            }
        }
コード例 #14
0
 protected override void SavePreviousState()
 {
     (this.acknowledgeModifications as FirstTimeFolderSync.FirstTimeAcknowledgeModifications).SavePreviousState((ISyncWatermark)base.CurMaxWatermark.Clone(), (this.CurFTSMaxWatermark != null) ? ((ISyncWatermark)this.CurFTSMaxWatermark.Clone()) : null, FolderSync.CloneDictionary(base.CurServerManifest), base.CurFilterId, FolderSync.CloneDictionary(base.CurDelayedServerOperationQueue), (base.CurSnapShotWatermark != null) ? ((ISyncWatermark)base.CurSnapShotWatermark.Clone()) : null, base.CurLastSyncConversationMode);
 }
コード例 #15
0
        private Dictionary <StoreObjectId, string> ProcessCommand(Dictionary <string, CommonNode> oldItems, Folder sourceFolder, MailboxSession mailboxSession)
        {
            if (oldItems == null)
            {
                throw new ArgumentNullException("items");
            }
            Dictionary <StoreObjectId, string> dictionary = new Dictionary <StoreObjectId, string>();

            if (oldItems.Count == 0)
            {
                return(dictionary);
            }
            GenericDictionaryData <DerivedData <ISyncItemId>, ISyncItemId, ClientManifestEntry> genericDictionaryData = (GenericDictionaryData <DerivedData <ISyncItemId>, ISyncItemId, ClientManifestEntry>) this.syncState[SyncStateProp.CumulativeClientManifest];

            if (genericDictionaryData != null)
            {
                return(null);
            }
            genericDictionaryData = new GenericDictionaryData <DerivedData <ISyncItemId>, ISyncItemId, ClientManifestEntry>();
            this.syncState[SyncStateProp.CumulativeClientManifest] = genericDictionaryData;
            this.clientManifest        = genericDictionaryData.Data;
            this.clientManifest        = new Dictionary <ISyncItemId, ClientManifestEntry>();
            genericDictionaryData.Data = this.clientManifest;
            GenericDictionaryData <DerivedData <ISyncItemId>, ISyncItemId, FolderSync.ClientStateInformation> genericDictionaryData2 = (GenericDictionaryData <DerivedData <ISyncItemId>, ISyncItemId, FolderSync.ClientStateInformation>) this.syncState[SyncStateProp.ClientState];

            if (genericDictionaryData2 != null)
            {
                return(null);
            }
            genericDictionaryData2 = new GenericDictionaryData <DerivedData <ISyncItemId>, ISyncItemId, FolderSync.ClientStateInformation>();
            this.syncState[SyncStateProp.ClientState] = genericDictionaryData2;
            genericDictionaryData2.Data = new Dictionary <ISyncItemId, FolderSync.ClientStateInformation>();
            MailboxSyncProviderFactory mailboxSyncProviderFactory = new MailboxSyncProviderFactory(mailboxSession, sourceFolder.StoreObjectId);
            ISyncProvider syncProvider = mailboxSyncProviderFactory.CreateSyncProvider(null);
            FolderSync    folderSync   = new FolderSync(syncProvider, this.syncState, ConflictResolutionPolicy.ServerWins, false);

            using (QueryResult queryResult = sourceFolder.ItemQuery(ItemQueryType.None, null, null, ItemSyncUpgrade.queryColumns))
            {
                bool flag = false;
                while (!flag && oldItems.Count > 0)
                {
                    object[][] rows = queryResult.GetRows(10000);
                    flag = (rows.Length == 0);
                    int num = 0;
                    while (num < rows.Length && oldItems.Count > 0)
                    {
                        if (!(rows[num][0] is VersionedId) || !(rows[num][1] is int) || !(rows[num][2] is bool))
                        {
                            throw new ApplicationException("The data returned from the query is unusable!");
                        }
                        VersionedId   versionedId    = (VersionedId)rows[num][0];
                        StoreObjectId objectId       = versionedId.ObjectId;
                        int           changeNumber   = (int)rows[num][1];
                        string        messageClass   = rows[num][3] as string;
                        string        oldIdFromNewId = ItemSyncUpgrade.GetOldIdFromNewId(objectId.ProviderLevelItemId);
                        if (oldIdFromNewId == null)
                        {
                            throw new ApplicationException("The new Id is invalid!");
                        }
                        if (oldItems.ContainsKey(oldIdFromNewId))
                        {
                            CommonNode commonNode = oldItems[oldIdFromNewId];
                            oldItems.Remove(oldIdFromNewId);
                            dictionary.Add(objectId, commonNode.ServerId);
                            ISyncItemId syncItemId = MailboxSyncItemId.CreateForNewItem(objectId);
                            FolderSync.ClientStateInformation clientStateInformation = new FolderSync.ClientStateInformation();
                            clientStateInformation.ClientHasItem    = true;
                            genericDictionaryData2.Data[syncItemId] = clientStateInformation;
                            if (!ItemSyncUpgrade.HasChanged(commonNode.VersionId, versionedId))
                            {
                                bool read;
                                if (commonNode.IsEmail && commonNode.Read != (bool)rows[num][2])
                                {
                                    folderSync.QueueDelayedServerOperation(new ServerManifestEntry(syncItemId)
                                    {
                                        ChangeType = ChangeType.ReadFlagChange
                                    });
                                    read = commonNode.Read;
                                }
                                else
                                {
                                    read = (bool)rows[num][2];
                                }
                                ClientManifestEntry clientManifestEntry = new ClientManifestEntry(syncItemId);
                                clientManifestEntry.Watermark    = MailboxSyncWatermark.CreateForSingleItem();
                                clientManifestEntry.ClientAddId  = "TiSyncStateUpgrade";
                                clientManifestEntry.ChangeType   = ChangeType.Add;
                                clientManifestEntry.MessageClass = messageClass;
                                ((MailboxSyncWatermark)clientManifestEntry.Watermark).UpdateWithChangeNumber(changeNumber, read);
                                this.clientManifest.Add(syncItemId, clientManifestEntry);
                            }
                            else
                            {
                                folderSync.QueueDelayedServerOperation(new ServerManifestEntry(syncItemId)
                                {
                                    ChangeType   = ChangeType.Change,
                                    MessageClass = messageClass
                                });
                            }
                        }
                        num++;
                    }
                }
            }
            if (oldItems.Count > 0)
            {
                foreach (KeyValuePair <string, CommonNode> keyValuePair in oldItems)
                {
                    string        key           = keyValuePair.Key;
                    CommonNode    value         = keyValuePair.Value;
                    byte[]        bytes         = Encoding.Unicode.GetBytes(value.ServerId);
                    StoreObjectId storeObjectId = StoreObjectId.FromProviderSpecificId(bytes, StoreObjectType.Mailbox);
                    dictionary.Add(storeObjectId, value.ServerId);
                    MailboxSyncItemId mailboxSyncItemId = MailboxSyncItemId.CreateForNewItem(storeObjectId);
                    folderSync.QueueDelayedServerOperation(new ServerManifestEntry(mailboxSyncItemId)
                    {
                        ChangeType = ChangeType.Delete
                    });
                    FolderSync.ClientStateInformation clientStateInformation2 = new FolderSync.ClientStateInformation();
                    clientStateInformation2.ClientHasItem          = true;
                    genericDictionaryData2.Data[mailboxSyncItemId] = clientStateInformation2;
                }
            }
            return(dictionary);
        }
コード例 #16
0
        protected override bool GetNewOperations(int windowSize, Dictionary <ISyncItemId, ServerManifestEntry> tempServerManifest)
        {
            if (base.CurSnapShotWatermark == null)
            {
                if (Command.CurrentCommand != null)
                {
                    Command.CurrentCommand.ProtocolLogger.SetProviderSyncType(this.CollectionId, ProviderSyncType.ICS);
                    Command.CurrentCommand.Context.SetDiagnosticValue(AirSyncConditionalHandlerSchema.IcsSync, true);
                }
                return(this.syncProvider.GetNewOperations(base.CurMaxWatermark, null, true, windowSize, null, tempServerManifest));
            }
            FirstTimeSyncProvider firstTimeSyncProvider = this.syncProvider as FirstTimeSyncProvider;

            if (this.CurFTSMaxWatermark == null)
            {
                this.CurFTSMaxWatermark = firstTimeSyncProvider.GetNewFirstTimeSyncWatermark();
            }
            ExTraceGlobals.SyncProcessTracer.Information <ExDateTime>((long)this.GetHashCode(), "FirstTimeFolderSync.GetNewOperations.  Performing FirstTimeSync with MaxWatermark '{0}'", (this.CurFTSMaxWatermark as FirstTimeSyncWatermark).ReceivedDateUtc);
            if (Command.CurrentCommand != null)
            {
                Command.CurrentCommand.ProtocolLogger.SetProviderSyncType(this.CollectionId, ProviderSyncType.IQ);
                Command.CurrentCommand.Context.SetDiagnosticValue(AirSyncConditionalHandlerSchema.ItemQuerySync, true);
            }
            return(firstTimeSyncProvider.FirstTimeSync(base.ClientState, this.CurFTSMaxWatermark as FirstTimeSyncWatermark, FolderSync.ComputeQueryHint(this.filters), windowSize, tempServerManifest));
        }
コード例 #17
0
 public FormFolderSyncDetails(FolderSync folderSync = null)
 {
     InitializeComponent();
     FolderSync = folderSync != null ? folderSync : new FolderSync();
 }
コード例 #18
0
ファイル: FolderSyncsControl.cs プロジェクト: philprett/psync
 } public FolderSyncSelectedEventArgs()
 {
     FolderSync = null;
 }
コード例 #19
0
 public void BindToFolderSync(FolderSync folderSync)
 {
     this.CheckDisposed("BindToFolderSync");
 }
コード例 #20
0
 public FolderSyncControl(FolderSync folderSync)
 {
     InitializeComponent();
     this.folderSync = folderSync;
 }