public static void SaveProjects()
{
lock (mProjectBase)
{
bool shouldSync = false;
if (mProjectBase != null && mProjectBase.IsDirty)
{
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.IsDirty && ContentProject != mProjectBase)
{
ContentProject.Save(ContentProject.FullFileName);
shouldSync = true;
}
//Save projects in case they are dirty
foreach (var syncedProject in mSyncedProjects)
{
if (syncedProject.IsDirty)
{
try
{
syncedProject.Save(syncedProject.FullFileName);
}
catch(Exception e)
{
PluginManager.ReceiveError(e.ToString());
syncedProject.IsDirty = true;
}
}
if (syncedProject.ContentProject.IsDirty)
{
syncedProject.ContentProject.Save(syncedProject.ContentProject.FullFileName);
}
}
//Sync all synced projects
if (shouldSync || mHaveNewProjectsBeenSyncedSinceSave)
{
foreach (var syncedProject in mSyncedProjects)
{
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);
syncedProject.ContentProject.Save(syncedProject.ContentProject.FullFileName);
}
mHaveNewProjectsBeenSyncedSinceSave = false;
}
}