/// <summary> /// Saves all plugins contain with <see cref="SnippitInstal"/> to disk /// </summary> /// <param name="si">The <see cref="SnippitInstal"/>that contains the plugin(s) to save</param> /// <param name="Overwrite">If True Any snippits and plugins files will be overwritten</param> /// <remarks>Plugins are saved in Parallel</remarks> public static void SavePlugin(SnippitInstal si, bool Overwrite) { if (si == null) { return; } if (si.profile == null) { return; } if (si.plugin == null) { return; } Parallel.ForEach(si.plugin, plg => { lock (si) { if (plg.ParentProfile == null) { plg.ParentProfile = si.profile; } SavePlugin(plg, Overwrite); } }); }
private static Enums.ExitCodeEnum WriteHotKeys(SnippitInstal si) { HotKeys.HotKeyWriter hkw = new HotKeys.HotKeyWriter(si); hkw.Write(); Enums.ExitCodeEnum retval = hkw.ExitReason; if (hkw.ExitReason == Enums.ExitCodeEnum.NoError) { string PluginKeyFile = hkw.PluginKeyFile; string hkwText = hkw.ToString(); bool WriteHsFiles = true; if (File.Exists(PluginKeyFile)) { string ExistingText = File.ReadAllText(PluginKeyFile); string hkwHash = Util.GetHashString(hkwText); string ExistingTextHash = Util.GetHashString(ExistingText); if (hkwHash == ExistingTextHash) { WriteHsFiles = false; } } if (WriteHsFiles == true) { File.WriteAllText(PluginKeyFile, hkwText, Encoding.UTF8); hkw.SaveCodeToFile(); retval = hkw.ExitReason; if (retval == Enums.ExitCodeEnum.NoError) { retval = Enums.ExitCodeEnum.ReloadRequired; } } } return(retval); }
private static Enums.ExitCodeEnum WriteProfileHash(SnippitInstal si) { Profiles.ProfilesHashWriter pw = new Profiles.ProfilesHashWriter(si); pw.Write(); string sHashFile = Path.Combine(AppCommon.Instance.PathData, "profilehash.txt"); Enums.ExitCodeEnum retval = pw.ExitReason; string pwHashText = pw.ToString(); bool WriteHsFiles = true; if (File.Exists(sHashFile)) { string ExistingText = File.ReadAllText(sHashFile); if (ExistingText == pwHashText) { WriteHsFiles = false; } } if (WriteHsFiles == true) { try { File.WriteAllText(sHashFile, pwHashText, Encoding.UTF8); retval = Enums.ExitCodeEnum.ReloadRequired; } catch (Exception) { return(Enums.ExitCodeEnum.FileWriteError); } } return(retval); }
/// <summary> /// Deletes Plugin from Disk. Also delete all the plugin supporting files such as snippits. /// </summary> /// <param name="plg">The Plugin to delete</param> /// <exception cref="ArgumentNullException"></exception> /// <exception cref="ArgumentException">If <see cref="plugin.ParentProfile"/>is null</exception> public static void DeletePlugin(plugin plg) { if (plg == null) { throw new ArgumentNullException(); } if (plg.ParentProfile == null) { throw new ArgumentException(Properties.Resources.ErrorPluginParentNull); } SnippitInstal inst = new SnippitInstal(); inst.profile = plg.ParentProfile; inst.plugin = new plugin[] { plg }; ReadWrite.DeleteInstal(inst, false, true); }
/// <summary> /// Saves Plugin to Disk /// </summary> /// <param name="pf">The Profile the Plugin Belongs to</param> /// <param name="plg">The Plugin to save</param> /// <param name="Overwrite">If True then all supporting Plugins and Snippits will be overwritten</param> public static void SavePlugin(plugin plg, bool Overwrite) { if (plg == null) { return; } if (plg.ParentProfile == null) { return; } if (string.IsNullOrEmpty(plg.File)) { string strPlgFile = Path.Combine(plg.ParentProfile.codeLanguage.paths.MainDataFullPath, plg.name + @".xml"); plg.File = strPlgFile; } if (File.Exists(plg.File)) { // delete all the old plugin file before saving new again SnippitInstal si = new SnippitInstal(); si.profile = plg.ParentProfile; si.plugin = new plugin[] { plg }; si.File = plg.ParentProfile.File; ReadWrite.DeleteInstal(si, false, false); // delete plugin but leave profile and folders in tact } else { var sPath = Path.GetDirectoryName(plg.File); if (Directory.Exists(sPath) == false) { Directory.CreateDirectory(sPath); } } XmlSerializer writer = new XmlSerializer(typeof(plugin)); FileStream file = File.Create(plg.File); writer.Serialize(file, plg); file.Close(); //ReadWrite.WritePluginHotkeySnippits(plg, Overwrite); //ReadWrite.WritePluginIncludeFiles(plg, Overwrite); //ReadWrite.WritePlugHotStringSnippits(plg, Overwrite); }
private static Enums.ExitCodeEnum WriteHotStrings(SnippitInstal si) { Hotstrings.HotstringWriter hsw = new Hotstrings.HotstringWriter(si); hsw.Write(); Enums.ExitCodeEnum retval = hsw.ExitReason; if (hsw.ExitReason == Enums.ExitCodeEnum.NoError) { string PluginHsFile = hsw.HsIncludeFile; string hswText = hsw.ToString(); bool WriteHsFiles = true; if (File.Exists(PluginHsFile)) { string ExistingText = File.ReadAllText(PluginHsFile); string hswHash = Util.GetHashString(hswText); string ExistingTextHash = Util.GetHashString(ExistingText); if (hswHash == ExistingTextHash) { WriteHsFiles = false; } } if (WriteHsFiles == true) { try { File.WriteAllText(PluginHsFile, hswText, Encoding.UTF8); } catch (Exception) { return(Enums.ExitCodeEnum.FileWriteError); } hsw.SaveSnippitToFile(); retval = hsw.ExitReason; if (retval == Enums.ExitCodeEnum.NoError) { retval = Enums.ExitCodeEnum.ReloadRequired; } } } return(retval); }
private static Enums.ExitCodeEnum WriteIncludePlugins(SnippitInstal si) { Include.IncludeWriter ic = new Include.IncludeWriter(si); ic.Write(); bool WriteHsFiles = true; Enums.ExitCodeEnum retval = ic.ExitReason; if (retval == Enums.ExitCodeEnum.NoError) { string icFile = ic.PluginIncludFile; string icText = ic.ToString(); if (File.Exists(icFile)) { string ExistingText = File.ReadAllText(icFile); string icwHash = Util.GetHashString(icText); string ExistingTextHash = Util.GetHashString(ExistingText); if (icwHash == ExistingTextHash) { WriteHsFiles = false; } } if (WriteHsFiles == true) { try { File.WriteAllText(icFile, icText, Encoding.UTF8); } catch (Exception) { return(Enums.ExitCodeEnum.FileWriteError); } ic.SaveIncludePlugins(); retval = ic.ExitReason; if (retval == Enums.ExitCodeEnum.NoError) { retval = Enums.ExitCodeEnum.ReloadRequired; } } } return(retval); }
private static Enums.ExitCodeEnum WriteDataFiles(SnippitInstal si) { Data.DataWriter dw = new Data.DataWriter(si); dw.Write(); Enums.ExitCodeEnum retval = dw.ExitReason; if ((dw.ExitReason == Enums.ExitCodeEnum.NoError) || (dw.ExitReason == Enums.ExitCodeEnum.NoPlugins)) { string DataIncFile = dw.DataIncludeFile; string DataText = dw.ToString(); bool WriteFiles = true; if (File.Exists(DataIncFile)) { string ExistingTextHash = File.ReadAllText(DataIncFile); string dwHash = Util.GetHashString(DataText); if (dwHash == ExistingTextHash) { WriteFiles = false; } } if (WriteFiles == true) { try { File.WriteAllText(DataIncFile, DataText); } catch (Exception) { return(Enums.ExitCodeEnum.FileWriteError); } dw.WriteDataFiles(); retval = dw.ExitReason; if (retval == Enums.ExitCodeEnum.NoError) { retval = Enums.ExitCodeEnum.ReloadRequired; } } } return(retval); }
private static Enums.ExitCodeEnum WriteEndChars(SnippitInstal si) { if (si.profile == null) { return(Enums.ExitCodeEnum.NoPlugins); } EndChars.EndCharsWriter ecw = new EndChars.EndCharsWriter(si.profile); ecw.Write(); if (ecw.ExitReason == Enums.ExitCodeEnum.NoError) { string ecFile = ecw.EndCharsIncludeFile; string ecText = ecw.ToString(); bool WriteHsFiles = true; if (File.Exists(ecFile)) { string ExistingText = File.ReadAllText(ecFile); string ecwHash = Util.GetHashString(ecText); string ExistingTextHash = Util.GetHashString(ExistingText); if (ecwHash == ExistingTextHash) { WriteHsFiles = false; } } if (WriteHsFiles == true) { try { File.WriteAllText(ecFile, ecText, Encoding.UTF8); } catch (Exception) { return(Enums.ExitCodeEnum.FileWriteError); } } } return(ecw.ExitReason); }
/// <summary> /// Reads the Current Profile from the INI file and creates a new /// <see cref="SnippitInstal"/> Populated with the profile and the Plugins of /// the current Profile /// </summary> /// <returns> /// SnippitInstall Populated with Profile and Plugins. If current Profile in the ini is invalid then Null. /// </returns> /// <remarks> /// Each <see cref="plugin"/> has it <see cref="plugin.ParentProfile"/> set to the current <see cref="profile"/> /// </remarks> public static SnippitInstal ReadCurrentInstall() { profile p = ReadCurrentProfile(); if (p == null) { return(null); } SnippitInstal si = new SnippitInstal(); si.profile = p; si.File = p.File; string PluginPath = p.codeLanguage.paths.MainDataFullPath; if (!Directory.Exists(PluginPath)) { return(si); } var files = Directory.GetFiles(PluginPath, "*.xml"); List <plugin> plgs = new List <plugin>(); foreach (string f in files) { try { plugin plg = plugin.FromFile(f); plg.ParentProfile = si.profile; plgs.Add(plg); } catch (Exception) { } } si.plugin = plgs.ToArray(); return(si); }
/// <summary> /// Deletes all the plugins in the SnipitInstall and the Profile as well if DeleteProfle is true /// </summary> /// <param name="inst">SnippitInstall instance</param> /// <param name="DeleteProfile">If true the profile will also be deleted if all the plugins are deleted for this profile</param> /// <param name="DeleteEmpytFolders">If true then empty folder will be deleted as well</param> public static void DeleteInstal(SnippitInstal inst, bool DeleteProfile, bool DeleteEmpytFolders) { if (inst == null) { return; } if (inst.profile == null) { throw new ArgumentException("Inst.Profile cannot be null"); } // bool hasProfile = inst.profile != null; if (inst.plugin != null) { bool SnipsFolderExist = Directory.Exists(inst.profile.codeLanguage.paths.SnipsFullPath); bool PluginsFolderExist = Directory.Exists(inst.profile.codeLanguage.paths.PluginFullPath); if (Directory.Exists(inst.profile.codeLanguage.paths.PluginFullPath) == true) { string searchP = "*.ahk"; var files = Directory.GetFiles(inst.profile.codeLanguage.paths.PluginFullPath, searchP); Parallel.ForEach(files, f => { File.Delete(f); }); if (DeleteEmpytFolders == true && IsDirectoryEmpty(inst.profile.codeLanguage.paths.PluginFullPath) == true) { Directory.Delete(inst.profile.codeLanguage.paths.PluginFullPath); } } if (Directory.Exists(inst.profile.codeLanguage.paths.PluginIncludeFullPath) == true) { string searchP = "*.ahk"; var files = Directory.GetFiles(inst.profile.codeLanguage.paths.PluginIncludeFullPath, searchP); Parallel.ForEach(files, f => { File.Delete(f); }); if (DeleteEmpytFolders == true && IsDirectoryEmpty(inst.profile.codeLanguage.paths.PluginIncludeFullPath) == true) { Directory.Delete(inst.profile.codeLanguage.paths.PluginIncludeFullPath); } } if (Directory.Exists(inst.profile.codeLanguage.paths.SnippitInlinePath)) { string searchP = "*" + AppCommon.Instance.DefaultSnippitExt; var files = Directory.GetFiles(inst.profile.codeLanguage.paths.SnippitInlinePath, searchP); Parallel.ForEach(files, f => { File.Delete(f); }); if (DeleteEmpytFolders == true && IsDirectoryEmpty(inst.profile.codeLanguage.paths.SnippitInlinePath) == true) { Directory.Delete(inst.profile.codeLanguage.paths.SnippitInlinePath); } } if (inst.plugin != null) { foreach (var plg in inst.plugin) { if (string.IsNullOrEmpty(plg.File) == false && File.Exists(plg.File) == true) { File.Delete(plg.File); } } } //if (Directory.Exists(inst.profile.codeLanguage.paths.MainDataFullPath)) //{ // string searchP = "*.xml"; // var files = Directory.GetFiles(inst.profile.codeLanguage.paths.MainDataFullPath, searchP); // Parallel.ForEach(files, f => { // File.Delete(f); // }); //} if (DeleteEmpytFolders == true && Directory.Exists(inst.profile.codeLanguage.paths.MainDataFullPath)) { if (IsDirectoryEmpty(inst.profile.codeLanguage.paths.MainDataFullPath)) { Directory.Delete(inst.profile.codeLanguage.paths.MainDataFullPath); } } } if (DeleteProfile == true) { // check and see if all the XML file have been removed from the data folder before deleting profile if (Directory.Exists(inst.profile.codeLanguage.paths.MainDataFullPath)) { // if the folder exist we have to test for any valid plugin var files = Directory.GetFiles(inst.profile.codeLanguage.paths.MainDataFullPath, "*.xml"); bool bPluginExist = false; foreach (var file in files) { var vResult = ValidateXml.ValidatePluginFile(file); if (vResult.HasErrors == false) { bPluginExist = true; break; } } if ((bPluginExist == false) && (File.Exists(inst.profile.File))) { File.Delete(inst.profile.File); } } else { if (File.Exists(inst.profile.File)) { File.Delete(inst.profile.File); } } } }
/// <summary> /// Deletes all the plugins in the SnipitInstall and the Profile as well if DeleteProfle is true /// </summary> /// <param name="inst">SnippitInstall instance</param> /// <param name="DeleteProfile">If true the profile will also be deleted if all the plugins are deleted for this profile</param> /// <remarks>Empty Folder will be deleted</remarks> public static void DeleteInstal(SnippitInstal inst, bool DeleteProfile) { ReadWrite.DeleteInstal(inst, DeleteProfile, true); }
static void Main(string[] args) { bool ReloadRequired = false; Enums.ExitCodeEnum ExitReason = Enums.ExitCodeEnum.NoError; SnippitInstal si = ReadWrite.ReadCurrentInstall(); if (si == null) { ExitReason = Enums.ExitCodeEnum.NoInstall; } if (ExitReason <= Enums.ExitCodeEnum.NoError) { if (si.profile == null) { ExitReason = Enums.ExitCodeEnum.NoProfile; } } if (ExitReason <= Enums.ExitCodeEnum.NoError) { var ProfileHashExitReason = WriteProfileHash(si); if (ProfileHashExitReason == Enums.ExitCodeEnum.ReloadRequired) { ReloadRequired = true; ExitReason = Enums.ExitCodeEnum.NoError; } else if (ProfileHashExitReason != Enums.ExitCodeEnum.NoError) { ExitReason = ProfileHashExitReason; } } if (ExitReason <= Enums.ExitCodeEnum.NoError) { var EndCharExitReason = WriteEndChars(si); if (EndCharExitReason == Enums.ExitCodeEnum.ReloadRequired) { ReloadRequired = true; ExitReason = Enums.ExitCodeEnum.NoError; } else if (EndCharExitReason != Enums.ExitCodeEnum.NoError) { ExitReason = EndCharExitReason; } } if (ExitReason <= Enums.ExitCodeEnum.NoError) { var HotStringExitReason = WriteHotStrings(si); if (HotStringExitReason == Enums.ExitCodeEnum.ReloadRequired) { ReloadRequired = true; ExitReason = Enums.ExitCodeEnum.NoError; } else if (HotStringExitReason == Enums.ExitCodeEnum.NoPlugins) { ExitReason = Enums.ExitCodeEnum.NoError; } else if (HotStringExitReason != Enums.ExitCodeEnum.NoError) { ExitReason = HotStringExitReason; } } if (ExitReason <= Enums.ExitCodeEnum.NoError) { var HotKeyExitReason = WriteHotKeys(si); if (HotKeyExitReason == Enums.ExitCodeEnum.ReloadRequired) { ReloadRequired = true; ExitReason = Enums.ExitCodeEnum.NoError; } else if (HotKeyExitReason == Enums.ExitCodeEnum.NoPlugins) { ExitReason = Enums.ExitCodeEnum.NoError; } else if (HotKeyExitReason > Enums.ExitCodeEnum.NoError) { ExitReason = HotKeyExitReason; } } if (ExitReason <= Enums.ExitCodeEnum.NoError) { var IncExitReason = WriteIncludePlugins(si); if (IncExitReason == Enums.ExitCodeEnum.ReloadRequired) { ReloadRequired = true; ExitReason = Enums.ExitCodeEnum.NoError; } else if ((IncExitReason > Enums.ExitCodeEnum.NoError) && (IncExitReason != Enums.ExitCodeEnum.NoPlugins)) { ExitReason = IncExitReason; } } if (ExitReason <= Enums.ExitCodeEnum.NoError) { var DataExitReason = WriteDataFiles(si); if (DataExitReason == Enums.ExitCodeEnum.ReloadRequired) { ReloadRequired = true; ExitReason = Enums.ExitCodeEnum.NoError; } else if ((DataExitReason > Enums.ExitCodeEnum.NoError) && (DataExitReason != Enums.ExitCodeEnum.NoPlugins)) { ExitReason = DataExitReason; } } if (ReloadRequired == true && ExitReason <= Enums.ExitCodeEnum.NoError) { IniHelper.SetWriterExitReason((int)Enums.ExitCodeEnum.ReloadRequired); } else { IniHelper.SetWriterExitReason((int)ExitReason); } Environment.Exit((int)ExitReason); }
internal ProfilesHashWriter(SnippitInstal si) : this() { this.m_CurrentInstal = si; }
internal HotKeyWriter(SnippitInstal si) : this() { this.m_CurrentInstal = si; }
internal IncludeWriter(SnippitInstal si) : this() { this.m_CurrentInstal = si; }
internal DataWriter(SnippitInstal si) : this() { this.m_CurrentInstal = si; }