private void PrepareSyncedProjects(string projectFileName) { SetInitWindowText("Loading synced projects Entities"); for (int i = ProjectManager.GlueProjectSave.SyncedProjects.Count - 1; i > -1; i--) { string projectName; if (FileManager.IsRelative(ProjectManager.GlueProjectSave.SyncedProjects[i])) { projectName = FileManager.RelativeDirectory + ProjectManager.GlueProjectSave.SyncedProjects[i]; projectName = FileManager.RemoveDotDotSlash(projectName); } else { projectName = ProjectManager.GlueProjectSave.SyncedProjects[i]; } bool succeeded = AddSyncedProjectToProjectManager(projectName); if (!succeeded) { ProjectManager.GlueProjectSave.SyncedProjects.RemoveAt(i); } } if (!projectFileName.Equals(ProjectLoader.Self.LastLoadedFilename)) { lock (ProjectManager.SyncedProjects) { foreach (ProjectBase syncedProject in ProjectManager.SyncedProjects) { try { ProjectSyncer.SyncProjects(ProjectManager.ProjectBase, syncedProject, false); } catch (Exception e) { MessageBox.Show("Error syncing project:\n\n" + syncedProject.Name + "\n\nThe main project will still function properly - Glue just won't be able " + "to maintain the synced project. Error details:\n\n" + e.ToString()); } } } } }
public static void SaveProjects() { lock (mProjectBase) { bool shouldSync = false; // IsDirty means that the project has items that haven't // been updated to the "evaluated" list, not if it needs to // be saved. //if (mProjectBase != null && mProjectBase.IsDirty) if (mProjectBase != null) { bool succeeded = true; try { mProjectBase.Save(mProjectBase.FullFileName); } catch (UnauthorizedAccessException) { MessageBox.Show("Could not save the file because the file is in use"); succeeded = false; } if (succeeded) { shouldSync = true; } } if (ContentProject != null && ContentProject != mProjectBase) { ContentProject.Save(ContentProject.FullFileName); shouldSync = true; } //Save projects in case they are dirty foreach (var syncedProject in mSyncedProjects) { try { syncedProject.Save(syncedProject.FullFileName); } catch (Exception e) { PluginManager.ReceiveError(e.ToString()); syncedProject.IsDirty = true; } if (syncedProject.ContentProject != syncedProject) { syncedProject.ContentProject.Save(syncedProject.ContentProject.FullFileName); } } //Sync all synced projects if (shouldSync || mHaveNewProjectsBeenSyncedSinceSave) { var syncedProjects = mSyncedProjects.ToArray(); foreach (var syncedProject in syncedProjects) { ProjectSyncer.SyncProjects(mProjectBase, syncedProject, false); } } // It may be that only the synced projects have changed, so we have to save those: foreach (var syncedProject in mSyncedProjects) { syncedProject.Save(syncedProject.FullFileName); if (syncedProject != syncedProject.ContentProject) { syncedProject.ContentProject.Save(syncedProject.ContentProject.FullFileName); } } mHaveNewProjectsBeenSyncedSinceSave = false; } }