From 8ca576f24ea396b78530a7e17869c39c5a87ec1d Mon Sep 17 00:00:00 2001 From: makc Date: Thu, 9 May 2013 12:48:37 +0200 Subject: [PATCH] full config option, removing old files, sending errors back to FD (failed) --- ColtPlugin/PluginMain.cs | 90 ++++++++++++++++++++++++---- ColtPlugin/Resources/en_US.resX | 2 +- ColtPlugin/Settings.cs | 37 +++++------- ColtPlugin/obj/Debug/ColtPlugin.dll | Bin 12288 -> 13824 bytes 4 files changed, 95 insertions(+), 34 deletions(-) diff --git a/ColtPlugin/PluginMain.cs b/ColtPlugin/PluginMain.cs index 905cbf7..204504e 100644 --- a/ColtPlugin/PluginMain.cs +++ b/ColtPlugin/PluginMain.cs @@ -29,6 +29,8 @@ public class PluginMain : IPlugin private ToolStripMenuItem menuItem; private ToolStripButton toolbarButton; private Boolean active = false; + private FileSystemWatcher watcher; + private String lastErrors = ""; #region Required Properties @@ -129,6 +131,7 @@ public void HandleEvent(Object sender, NotifyEvent e, HandlingPriority prority) if (this.toolbarButton != null) this.toolbarButton.Enabled = as3projectIsOpen; // deactivate if project is closed active &= as3projectIsOpen; + if (watcher != null) watcher.EnableRaisingEvents &= as3projectIsOpen; } else if (cmd == "ASCompletion.ClassPath") { @@ -191,8 +194,11 @@ public void InitLocalization() /// public void AddEventHandlers() { - // Set events you want to listen (combine as flags) EventManager.AddEventHandler(this, EventType.Command); + + watcher = new FileSystemWatcher(); + watcher.NotifyFilter = NotifyFilters.LastWrite; + watcher.Changed += new FileSystemEventHandler(OnFileChange); } #endregion @@ -233,7 +239,7 @@ private void OnClick(Object sender, System.EventArgs e) #endregion - #region Plugin settings stuff (reserved for future use :) + #region Plugin settings stuff /// /// Loads the plugin settings @@ -259,6 +265,26 @@ public void SaveSettings() #endregion + private void OnFileChange(Object sender, FileSystemEventArgs e) + { + if (Path.GetFileName(e.FullPath).Contains("compile_errors.log")) + { +/* This hangs FD :( now if someone could fix this... + * + StreamReader stream = File.OpenText(e.FullPath); + String errors = stream.ReadToEnd(); stream.Close(); + + String message = errors; + if ((lastErrors.Length > 0) && (errors.IndexOf(lastErrors) == 0)) + { + message = errors.Substring(lastErrors.Length); + } + TraceManager.AddAsync(message, -3); + + lastErrors = errors; + */ + } + } /// /// Opens the project in COLT @@ -267,14 +293,51 @@ private void OpenInCOLT() { // our options: parse project.ProjectPath (xml file) or use api AS3Project project = (AS3Project)PluginBase.CurrentProject; + + String configCopy = ""; + if (this.settingObject.FullConfig) + { + // Construct flex config file name (see AS3ProjectBuilder, line 140) + String projectName = project.Name.Replace(" ", ""); + String configFile = Path.Combine("obj", projectName + "Config.xml"); + + if (!File.Exists(project.GetAbsolutePath(configFile))) + { + TraceManager.AddAsync("Required file (" + projectName + "Config.xml) does not exist, project must be built first...", -1); + + EventManager.DispatchEvent(this, new DataEvent(EventType.Command, "ProjectManager.BuildProject", null)); + + return; + } + + // Create config copy with ... commented out + StreamReader src = File.OpenText(project.GetAbsolutePath(configFile)); + String config = src.ReadToEnd(); + src.Close(); + + configCopy = Path.Combine("obj", projectName + "ConfigCopy.xml"); + StreamWriter dst = File.CreateText(project.GetAbsolutePath(configCopy)); + dst.Write(config.Replace("", "/file-specs -->")); + dst.Close(); + } // Create COLT subfolder if does not exist yet - String coltFolderPath = project.GetAbsolutePath("colt"); + String coltFolderPath = project.GetAbsolutePath(this.settingObject.WorkingFolder); if (!Directory.Exists(coltFolderPath)) Directory.CreateDirectory(coltFolderPath); + // While at that, start listening for colt/compile_errors.log changes + String pathToLog = Path.Combine(coltFolderPath, "compile_errors.log"); + if (File.Exists(pathToLog)) + { + StreamReader errorsFile = File.OpenText(pathToLog); + lastErrors = errorsFile.ReadToEnd(); errorsFile.Close(); + } + watcher.Path = coltFolderPath; + watcher.EnableRaisingEvents = true; + // Create COLT project with random name (if we'd update same file - are there file locks? how to reopen in colt?) - String coltFileName = project.GetAbsolutePath("colt/" + System.Guid.NewGuid() + ".colt"); + String coltFileName = project.GetAbsolutePath(Path.Combine(this.settingObject.WorkingFolder, System.Guid.NewGuid() + ".colt")); StreamWriter stream = File.CreateText(coltFileName); @@ -301,8 +364,10 @@ private void OpenInCOLT() stream.WriteLine("liveMethods=annotated"); - // todo: add fd generated config here, -load-config+=... - //stream.WriteLine("compilerOptions=-swf-version\=13"); + if (this.settingObject.FullConfig) + { + stream.WriteLine("compilerOptions=-load-config+\\=\"" + EscapeForCOLT(project.GetAbsolutePath(configCopy)) + "\""); + } stream.WriteLine("target=SWF"); // use project.MovieOptions.Platform switch ?? @@ -323,10 +388,15 @@ private void OpenInCOLT() // Open it with default app (COLT) Process.Start(coltFileName); - /* seems to be same shit ?? - ProcessStartInfo psi = new ProcessStartInfo(coltFileName); - psi.UseShellExecute = true; - Process.Start(psi); */ + + // Remove older *.colt files + foreach (String oldFile in Directory.GetFiles(coltFolderPath, "*.colt")) + { + if (!coltFileName.Contains(Path.GetFileName(oldFile))) + { + File.Delete(oldFile); + } + } } private String EscapeForCOLT(String path) diff --git a/ColtPlugin/Resources/en_US.resX b/ColtPlugin/Resources/en_US.resX index 7ecc2a0..92f45f0 100644 --- a/ColtPlugin/Resources/en_US.resX +++ b/ColtPlugin/Resources/en_US.resX @@ -121,6 +121,6 @@ Open in COLT - COLT FlashDevelop Plugin + COLT Plugin for FlashDevelop. \ No newline at end of file diff --git a/ColtPlugin/Settings.cs b/ColtPlugin/Settings.cs index 63b7c14..47090cd 100644 --- a/ColtPlugin/Settings.cs +++ b/ColtPlugin/Settings.cs @@ -9,38 +9,29 @@ namespace ColtPlugin [Serializable] public class Settings { - private Int32 sampleNumber = 69; - private String sampleText = "This is a sample plugin."; - private Keys sampleShortcut = Keys.Control | Keys.F1; + private String workingFolder = "colt"; + private Boolean fullConfig = false; /// - /// Get and sets the sampleText + /// Get and sets colt folder /// - [Description("A sample string setting."), DefaultValue("This is a sample plugin.")] - public String SampleText + [DisplayName("COLT Working Folder")] + [Description("Path to COLT working folder."), DefaultValue("colt")] + public String WorkingFolder { - get { return this.sampleText; } - set { this.sampleText = value; } + get { return this.workingFolder; } + set { this.workingFolder = value; } } /// - /// Get and sets the sampleNumber + /// Get and sets full config flag /// - [Description("A sample integer setting."), DefaultValue(69)] - public Int32 SampleNumber + [DisplayName("Load Full FD Configuration")] + [Description("Attempt to load full FD configuration in COLT. FD project must be built at least once first."), DefaultValue(false)] + public Boolean FullConfig { - get { return this.sampleNumber; } - set { this.sampleNumber = value; } - } - - /// - /// Get and sets the sampleShortcut - /// - [Description("A sample shortcut setting."), DefaultValue(Keys.Control | Keys.F1)] - public Keys SampleShortcut - { - get { return this.sampleShortcut; } - set { this.sampleShortcut = value; } + get { return this.fullConfig; } + set { this.fullConfig = value; } } } diff --git a/ColtPlugin/obj/Debug/ColtPlugin.dll b/ColtPlugin/obj/Debug/ColtPlugin.dll index 5248e8a71d8c4f773f6515aa816e46c7eac2c5e0..1f6884eccd0dafa45a761965fd4718af922c49c4 100644 GIT binary patch delta 6462 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 delta 4973 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