private void AddPathItem(List<ItemInfo> list, ItemInfo item)
        {
            if (item == null)
                return;

            list.Add(item);

            if (item.Parent != null)
                this.AddPathItem(list, item.Parent);
        }
 public static List<ItemInfo> SetParent(this List<ItemInfo> list, ItemInfo parent)
 {
     foreach (ItemInfo item in list)
     {
         item.Parent = parent;
     }
     return list;
 }
 public static List<ItemInfo> ToList(this XElement xml)
 {
     List<ItemInfo> res = new List<ItemInfo>();
     if (xml != null && xml.HasElements)
     {
         foreach (XElement element in xml.Nodes())
         {
             ItemInfo item = new ItemInfo();
             item.TcmId = element.Attribute("ID").Value;
             item.ItemType = element.Attributes().Any(x => x.Name == "Type") ? (ItemType)Int32.Parse(element.Attribute("Type").Value) : GetItemType(item.TcmId);
             item.Title = element.Attributes().Any(x => x.Name == "Title") ? element.Attribute("Title").Value : item.TcmId;
             item.MimeType = element.Attributes().Any(x => x.Name == "MIMEType") ? element.Attribute("MIMEType").Value : null;
             item.FromPub = element.Attributes().Any(x => x.Name == "FromPub") ? element.Attribute("FromPub").Value : null;
             item.IsPublished = element.Attributes().Any(x => x.Name == "Icon") && element.Attribute("Icon").Value.EndsWith("P1");
             res.Add(item);
         }
     }
     return res;
 }
        public static void ProcessTridionItem(MappingInfo mapping, ItemInfo item, TridionFolderInfo folder)
        {
            //todo: nested path

            if (item == null || folder == null)
                return;

            if (!folder.ScanForItems)
                return;

            if (mapping.ProjectFolders.Any(projectFolder => projectFolder.ExistsTcmId(item.TcmId)))
                return;

            if (folder.TridionRole == TridionRole.PageLayoutContainer || folder.TridionRole == TridionRole.ComponentLayoutContainer)
            {
                TemplateBuildingBlockData tridionItem = ReadItem(mapping, item.TcmId) as TemplateBuildingBlockData;
                if (tridionItem == null || tridionItem.VersionInfo.RevisionDate == null)
                    return;

                ShowMessage(item.Title + "...");

                ProjectDestinationDialogWindow dialog = new ProjectDestinationDialogWindow();
                dialog.Mapping = mapping;
                dialog.TridionRole = folder.TridionRole;
                dialog.TridionTcmId = item.TcmId;
                dialog.TridionTitle = item.Title;
                dialog.TridionContent = tridionItem.Content;

                bool res = dialog.ShowDialog() == true;
                if (res)
                {
                    ProjectFolderInfo projectFolder = dialog.ProjectFolder;
                    ProjectFileInfo projectFile = dialog.ProjectFile;

                    if (projectFolder != null && projectFile != null)
                    {
                        string path = projectFile.FullPath;
                        DateTime tridionDate = (DateTime) tridionItem.VersionInfo.RevisionDate;
                        DateTime tridionLocalDate = tridionDate.GetLocalTime(mapping.TimeZoneId);
                        SaveVSItem(path, tridionItem.Content);
                        File.SetAttributes(path, FileAttributes.Normal);
                        File.SetLastWriteTime(path, tridionLocalDate);
                        WriteSuccessLog(path + " - Saved to Visual Studio");
                    }
                }

                ShowMessage(String.Empty);
            }

            if (folder.TridionRole == TridionRole.MultimediaComponentContainer)
            {
                ComponentData tridionItem = GetComponent(mapping, item.TcmId);
                if (tridionItem == null || tridionItem.VersionInfo.RevisionDate == null)
                    return;

                ShowMessage(item.Title + "...");

                ProjectBinaryDestinationDialogWindow dialog = new ProjectBinaryDestinationDialogWindow();
                dialog.Mapping = mapping;
                dialog.TridionTcmId = item.TcmId;
                dialog.TridionTitle = item.Title;

                bool res = dialog.ShowDialog() == true;
                if (res)
                {
                    ProjectFolderInfo projectFolder = dialog.ProjectFolder;
                    ProjectFileInfo projectFile = dialog.ProjectFile;

                    if (projectFolder != null && projectFile != null)
                    {
                        string path = projectFile.FullPath;
                        DateTime tridionDate = (DateTime)tridionItem.VersionInfo.RevisionDate;
                        DateTime tridionLocalDate = tridionDate.GetLocalTime(mapping.TimeZoneId);
                        SaveVSBinaryItem(mapping, projectFile.TcmId, path);
                        File.SetAttributes(path, FileAttributes.Normal);
                        File.SetLastWriteTime(path, tridionLocalDate);
                        WriteSuccessLog(path + " - Saved to Visual Studio successfully");
                    }
                }

                ShowMessage(String.Empty);
            }
        }