Esempio n. 1
0
        /// <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);
                }
            });
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        /// <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);
        }
Esempio n. 5
0
        /// <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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        /// <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);
        }
Esempio n. 11
0
        /// <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);
                    }
                }
            }
        }
Esempio n. 12
0
 /// <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);
 }
Esempio n. 13
0
        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;
 }
Esempio n. 15
0
 internal HotKeyWriter(SnippitInstal si) : this()
 {
     this.m_CurrentInstal = si;
 }
Esempio n. 16
0
 internal IncludeWriter(SnippitInstal si) : this()
 {
     this.m_CurrentInstal = si;
 }
Esempio n. 17
0
 internal DataWriter(SnippitInstal si) : this()
 {
     this.m_CurrentInstal = si;
 }