Got rid of file watchers.

This commit is contained in:
Lars Brubaker 2015-09-23 13:33:14 -07:00
parent 5de11eb5bf
commit 9a3efa0dbd
3 changed files with 31 additions and 77 deletions

View file

@ -74,7 +74,7 @@ namespace MatterHackers.MatterControl
private PartPreviewMainWindow partPreviewWindow;
private PrintItemWrapper printItem;
private PrintItemWrapper printItemWrapper;
private bool thumbNailHasBeenCreated = false;
@ -129,9 +129,9 @@ namespace MatterHackers.MatterControl
{
UiThread.RunOnIdle(() =>
{
if (printItem != null)
if (printItemWrapper != null)
{
string pathAndFile = printItem.FileLocation;
string pathAndFile = printItemWrapper.FileLocation;
if (File.Exists(pathAndFile))
{
bool shiftKeyDown = Keyboard.IsKeyDown(Keys.ShiftKey);
@ -146,7 +146,7 @@ namespace MatterHackers.MatterControl
}
else
{
QueueRowItem.ShowCantFindFileMessage(printItem);
QueueRowItem.ShowCantFindFileMessage(printItemWrapper);
}
}
});
@ -162,20 +162,20 @@ namespace MatterHackers.MatterControl
public PrintItemWrapper ItemWrapper
{
get { return printItem; }
get { return printItemWrapper; }
set
{
if (ItemWrapper != null)
{
ItemWrapper.FileHasChanged -= item_FileHasChanged;
PrintItemWrapper.FileHasChanged.UnregisterEvent(item_FileHasChanged, ref unregisterEvents);
}
printItem = value;
printItemWrapper = value;
thumbNailHasBeenCreated = false;
if (ItemWrapper != null)
{
ItemWrapper.FileHasChanged += item_FileHasChanged;
PrintItemWrapper.FileHasChanged.RegisterEvent(item_FileHasChanged, ref unregisterEvents);
}
}
}
@ -202,10 +202,6 @@ namespace MatterHackers.MatterControl
unregisterEvents(this, null);
}
if (ItemWrapper != null)
{
ItemWrapper.FileHasChanged -= item_FileHasChanged;
}
base.OnClosed(e);
}
@ -542,8 +538,13 @@ namespace MatterHackers.MatterControl
private void item_FileHasChanged(object sender, EventArgs e)
{
thumbNailHasBeenCreated = false;
Invalidate();
PrintItemWrapper senderItem = sender as PrintItemWrapper;
if (senderItem != null
&& senderItem.FileLocation == printItemWrapper.FileLocation)
{
thumbNailHasBeenCreated = false;
Invalidate();
}
}
private bool MeshIsTooBigToLoad(string fileLocation)

View file

@ -505,10 +505,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
private bool DoAddFileAfterCreatingEditData { get; set; }
public override void OnClosed(EventArgs e)
{
if (printItemWrapper != null)
{
printItemWrapper.FileHasChanged -= ReloadMeshIfChangeExternaly;
}
if (unregisterEvents != null)
{
unregisterEvents(this, null);
@ -1167,8 +1163,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
if (printItemWrapper != null)
{
// remove it first to make sure we don't double add it
printItemWrapper.FileHasChanged -= ReloadMeshIfChangeExternaly;
printItemWrapper.FileHasChanged += ReloadMeshIfChangeExternaly;
PrintItemWrapper.FileHasChanged.UnregisterEvent(ReloadMeshIfChangeExternaly, ref unregisterEvents);
PrintItemWrapper.FileHasChanged.RegisterEvent(ReloadMeshIfChangeExternaly, ref unregisterEvents); ;
// don't load the mesh until we get all the rest of the interface built
meshViewerWidget.LoadDone += new EventHandler(meshViewerWidget_LoadDone);
@ -1877,6 +1873,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
MeshFileIo.Save(asynchMeshGroups, printItemWrapper.FileLocation, outputInfo);
printItemWrapper.ReportFileChange();
if (returnInfo != null
&& returnInfo.destinationLibraryProvider != null)
{
@ -2127,12 +2125,17 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
private void ReloadMeshIfChangeExternaly(Object sender, EventArgs e)
{
if (!editorThatRequestedSave)
PrintItemWrapper senderItem = sender as PrintItemWrapper;
if (senderItem != null
&& senderItem.FileLocation == printItemWrapper.FileLocation)
{
ClearBedAndLoadPrintItemWrapper(printItemWrapper);
}
if (!editorThatRequestedSave)
{
ClearBedAndLoadPrintItemWrapper(printItemWrapper);
}
editorThatRequestedSave = false;
editorThatRequestedSave = false;
}
}
private bool rotateQueueMenu_Click()

View file

@ -42,7 +42,8 @@ namespace MatterHackers.MatterControl.PrintQueue
{
public class PrintItemWrapper
{
public event EventHandler FileHasChanged;
public static RootedObjectEventHandler FileHasChanged = new RootedObjectEventHandler();
public event EventHandler SlicingDone;
public event EventHandler SlicingOutputMessage;
private static string fileNotFound = "File Not Found\n'{0}'".Localize();
@ -61,12 +62,9 @@ namespace MatterHackers.MatterControl.PrintQueue
private long writeTime = 0;
private FileSystemWatcher diskFileWatcher = new FileSystemWatcher();
public PrintItemWrapper(DataStorage.PrintItem printItem, List<ProviderLocatorNode> sourceLibraryProviderLocator = null)
{
this.PrintItem = printItem;
UpdateFileTracking(FileLocation);
if (FileLocation != null)
{
@ -210,8 +208,6 @@ namespace MatterHackers.MatterControl.PrintQueue
set
{
this.PrintItem.FileLocation = value;
UpdateFileTracking(value);
}
}
@ -224,54 +220,9 @@ namespace MatterHackers.MatterControl.PrintQueue
}
}
Stopwatch timeSinceLastFileUpdate = new Stopwatch();
private void UpdateFileTracking(string value)
{
if (value != diskFileWatcher.Filter)
{
if (Directory.Exists(Path.GetDirectoryName(value)))
{
diskFileWatcher.Path = Path.GetDirectoryName(value);
diskFileWatcher.Filter = Path.GetFileName(value);
diskFileWatcher.NotifyFilter = NotifyFilters.LastWrite;
diskFileWatcher.Changed += SetFileChanged;
diskFileWatcher.Created += SetFileChanged;
// Begin watching.
diskFileWatcher.EnableRaisingEvents = true;
}
else
{
diskFileWatcher.EnableRaisingEvents = false;
}
}
}
public void ReportFileChange()
{
if (timeSinceLastFileUpdate.IsRunning)
{
if (timeSinceLastFileUpdate.Elapsed.TotalSeconds > 1)
{
timeSinceLastFileUpdate.Stop();
if (FileHasChanged != null)
{
FileHasChanged(this, null);
}
}
else
{
UiThread.RunOnIdle(ReportFileChange, .05);
}
}
}
private void SetFileChanged(object sender, FileSystemEventArgs e)
{
timeSinceLastFileUpdate.Restart();
UiThread.RunOnIdle(ReportFileChange, .05);
FileHasChanged.CallEvents(this, null);
}
PrintItem printItem;
@ -281,7 +232,6 @@ namespace MatterHackers.MatterControl.PrintQueue
set
{
printItem = value;
UpdateFileTracking(printItem.FileLocation);
}
}