public static SmileyPack CopyPack(SmileyPack pack, string newName)
        {
            var newPack = AddPack(newName);

            foreach (var smiley in pack.Smileys)
            {
                string oldPath = Path.Combine(GetPath(pack), smiley.FileName);
                string newPath = Path.Combine(GetPath(newPack), smiley.FileName);

                File.Copy(oldPath, newPath);

                var newSmiley = new Smiley();
                newSmiley.FileName = smiley.FileName;
                newSmiley.Image    = GetImage(newPath);

                foreach (string s in smiley.Shortcuts)
                {
                    newSmiley.Shortcuts.Add(s);
                }

                newPack.Smileys.Add(smiley);
            }

            return(newPack);
        }
        public static SmileyPack AddPack(string name)
        {
            var pack = new SmileyPack(name, false);

            Directory.CreateDirectory(GetPath(pack));
            Packs.Add(pack);
            return(pack);
        }
        public static void SetCurrentPack(string packName)
        {
            CurrentPack = Packs.FirstOrDefault(p => p.Name == packName);

            if (CurrentPack == null)
            {
                CurrentPack = Packs.First();
            }
        }
        private static string GetUniquePath(SmileyPack pack, string fileName)
        {
            string pathPrefix = string.Empty;

            while (File.Exists(Path.Combine(GetPath(pack), pathPrefix + fileName)))
            {
                pathPrefix += SmileyNamePrefix;
            }
            return(Path.Combine(GetPath(pack), pathPrefix + fileName));
        }
        public static void SetSmileyImage(SmileyPack containingPack, Smiley smiley, string imagePath)
        {
            string oldFile = Path.Combine(GetPath(containingPack), smiley.FileName);
            string newFile = GetUniquePath(containingPack, Path.GetFileName(imagePath));

            File.Delete(oldFile);
            File.Copy(imagePath, newFile);
            smiley.FileName = Path.GetFileName(newFile);
            smiley.Image    = GetImage(newFile);
        }
        public static void RemoveSmiley(Smiley smiley, SmileyPack pack)
        {
            if (pack.IsDefault)
            {
                throw new ArgumentException("Cannot change a default pack.");
            }

            pack.Smileys.Remove(smiley);
            File.Delete(Path.Combine(CustomSmileysFolder, pack.Name, smiley.FileName));
        }
        public static void DeletePack(SmileyPack pack)
        {
            if (pack.IsDefault)
            {
                throw new ArgumentException("Cannot delete a default pack.");
            }

            Packs.Remove(pack);
            Directory.Delete(GetPath(pack), true);

            CurrentPack = Packs.First();
        }
        public static void Load()
        {
            string currentPackName = CurrentPack == null ? null : CurrentPack.Name;

            Packs.Clear();

            var defaultDirs = new DirectoryInfo(DefaultSmileysFolder).EnumerateDirectories();
            var customDirs  = new DirectoryInfo(CustomSmileysFolder).EnumerateDirectories();

            foreach (var dir in defaultDirs.Concat(customDirs))
            {
                var  doc       = XDocument.Load(Path.Combine(dir.FullName, ManifestFileName));
                bool isDefault = bool.Parse(doc.Root.Attribute(IsDefaultAttributeName).Value);
                var  pack      = new SmileyPack(dir.Name, isDefault);

                foreach (var elem in doc.Root.Elements(SmileyElementName))
                {
                    string   fileName  = elem.Attribute(FileNameAttributeName).Value;
                    string[] shortcuts = elem.Attribute(ShortcutsAttributeName).Value
                                         .Split(SmileyShortcutsSeparator);

                    var smiley = new Smiley();
                    smiley.FileName = fileName;
                    smiley.Image    = GetImage(Path.Combine(GetPath(pack), fileName));

                    foreach (string s in shortcuts)
                    {
                        smiley.Shortcuts.Add(s);
                    }

                    pack.Smileys.Add(smiley);
                }

                Packs.Add(pack);
            }

            if (currentPackName == null)
            {
                CurrentPack = Packs.First();
            }
            else
            {
                SetCurrentPack(currentPackName);
            }
        }
 private static string GetPath(SmileyPack pack)
 {
     return(Path.Combine(pack.IsDefault ? DefaultSmileysFolder : CustomSmileysFolder, pack.Name));
 }
        public static Smiley AddSmiley(string imagePath, IEnumerable <string> shortcuts, SmileyPack pack)
        {
            if (pack.IsDefault)
            {
                throw new ArgumentException("Cannot change a default pack.");
            }

            string fileName = Path.GetFileName(imagePath);
            string newPath  = GetUniquePath(pack, fileName);

            File.Copy(imagePath, newPath);

            var smiley = new Smiley();

            smiley.FileName = Path.GetFileName(newPath);
            smiley.Image    = GetImage(newPath);

            foreach (string s in shortcuts)
            {
                smiley.Shortcuts.Add(s);
            }

            pack.Smileys.Add(smiley);

            return(smiley);
        }