Exemple #1
0
        public bool OnFLExBridge(object commandObject)
        {
            _mediator.PropertyTable.SetProperty("LastBridgeUsed", "FLExBridge", PropertyTable.SettingsGroup.LocalSettings);
            if (IsDb4oProject)
            {
                var dlg = new Db4oSendReceiveDialog();
                if (dlg.ShowDialog() == DialogResult.Abort)
                {
                    // User clicked on link
                    _mediator.SendMessage("FileProjectSharingLocation", null);
                }
                return(true);
            }

            if (ChangeProjectNameIfNeeded())
            {
                return(true);
            }

            string url;
            var    projectFolder = Cache.ProjectId.ProjectFolder;
            var    savedState    = PrepareToDetectConflicts(projectFolder);
            string dummy;
            var    fullProjectFileName = Path.Combine(projectFolder, Cache.ProjectId.Name + FwFileExtensions.ksFwDataXmlFileExtension);
            bool   dataChanged;
            var    success = FLExBridgeHelper.LaunchFieldworksBridge(fullProjectFileName, Environment.UserName,
                                                                     FLExBridgeHelper.SendReceive, null, out dataChanged, out dummy);

            if (!success)
            {
                ReportDuplicateBridge();
                ProjectLockingService.LockCurrentProject(Cache);
                return(true);
            }

            if (dataChanged)
            {
                var fixer = new FwDataFixer(Cache.ProjectId.Path, new StatusBarProgressHandler(null, null), logger);
                fixer.FixErrorsAndSave();
                bool conflictOccurred = DetectConflicts(projectFolder, savedState);
                var  app          = (LexTextApp)_mediator.PropertyTable.GetValue("App");
                var  newAppWindow = RefreshCacheWindowAndAll(app, fullProjectFileName);

                if (conflictOccurred)
                {
                    //send a message for the reopened instance to display the conflict report, we have been disposed by now
                    newAppWindow.Mediator.SendMessage("ShowConflictReport", null);
                }
            }
            else             //Re-lock project if we aren't trying to close the app
            {
                ProjectLockingService.LockCurrentProject(Cache);
            }
            return(true);
        }