aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Scripting/Tango.Scripting.IDE/Properties/Settings.Designer.cs
blob: 2a0fdc6a9304310756c28747173345333f23bf9d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.42000
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace Tango.Scripting.IDE.Properties
{
    
    
    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
    {
        
        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
        
        public static Settings Default
        {
            get
            {
                return defaultInstance;
            }
        }
    }
}
/ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Tango.Core.Helpers;
using Tango.FileSystem.Network;
using Tango.Logging;

namespace Tango.FileSystem
{
    public class FileSystemManager
    {
        public FileSystemItemDTO GetRoot()
        {
            FileSystemItemDTO folder = new FileSystemItemDTO();
            folder.Path = "This PC";
            folder.IsRoot = true;
            folder.Type = FileSystemItemType.Folder;
            folder.Items = DriveInfo.GetDrives().Where(x => x.DriveType == DriveType.Fixed || x.DriveType == DriveType.Removable || x.DriveType == DriveType.Network).Select(x => new FileSystemItemDTO()
            {
                Path = x.RootDirectory.FullName,
                DriveType = x.DriveType,
                DriveLabel = $"{x.VolumeLabel} ({x.Name.Replace("\\", "")})",
                Type = FileSystemItemType.Drive,
            }).Cast<FileSystemItemDTO>().ToList();

            return folder;
        }

        public FileSystemItemDTO GetFolder(GetFileSystemItemRequest request)
        {
            List<FileSystemItemDTO> items = new List<FileSystemItemDTO>();

            if (request.SpecialFolder.HasValue)
            {
                request.Path = Environment.GetFolderPath(request.SpecialFolder.Value);
            }

            if (String.IsNullOrWhiteSpace(request.Path))
            {
                return GetRoot();
            }

            try
            {
                if (request.Path.Count(x => x == '%') == 2)
                {
                    var variable = Regex.Match(request.Path, "(?<=%)(.*?)(?=%)").Value;
                    request.Path = request.Path.Replace($"%{variable}%", Environment.ExpandEnvironmentVariables($"%{variable}%"));
                }
            }
            catch
            {
                throw new ArgumentException("Could not parse environment variable.");
            }

            request.Path = Path.GetFullPath(request.Path);

            if (!Directory.Exists(request.Path))
            {
                throw new DirectoryNotFoundException("The specified directory could not be located.");
            }

            foreach (var directory in Directory.GetDirectories(request.Path))
            {
                items.Add(new FileSystemItemDTO()
                {
                    Path = directory,
                    Type = FileSystemItemType.Folder,
                    DateModified = Directory.GetLastWriteTimeUtc(directory),
                    DateCreated = Directory.GetCreationTimeUtc(directory),
                });
            }

            if (!request.FoldersOnly)
            {
                foreach (var file in Directory.GetFiles(request.Path, request.Filter != null ? request.Filter : "*.*"))
                {
                    items.Add(new FileSystemItemDTO()
                    {
                        Path = file,
                        Type = FileSystemItemType.File,
                        DateModified = File.GetLastWriteTimeUtc(file),
                        DateCreated = File.GetCreationTimeUtc(file),
                        Size = new FileInfo(file).Length
                    });
                }
            }

            return new FileSystemItemDTO()
            {
                Path = request.Path,
                Type = request.Path.Length == 3 ? FileSystemItemType.Drive : FileSystemItemType.Folder,
                Items = items
            };
        }

        public Task<FileSystemItem> GetFolder(String path, bool foldersOnly = false, String filter = "*.*")
        {
            return Task.Factory.StartNew<FileSystemItem>(() =>
            {
                return FileSystemItem.FromDTO(GetFolder(new GetFileSystemItemRequest()
                {
                    Path = path,
                    FoldersOnly = foldersOnly,
                    Filter = filter,
                }));
            });
        }

        public Task<FileSystemItem> GetFolder(Environment.SpecialFolder specialFolder, bool foldersOnly = false, String filter = "*.*")
        {
            return Task.Factory.StartNew<FileSystemItem>(() =>
            {
                return FileSystemItem.FromDTO(GetFolder(new GetFileSystemItemRequest()
                {
                    SpecialFolder = specialFolder,
                    FoldersOnly = foldersOnly,
                    Filter = filter,
                }));
            });
        }

        public void Delete(String path)
        {
            if (Directory.Exists(path))
            {
                Directory.Delete(path, true);
            }
            else if (File.Exists(path))
            {
                File.Delete(path);
            }
            else
            {
                throw new FileNotFoundException("Could not locate the specified file or directory.");
            }
        }

        public void Move(MoveRequest request)
        {
            if (Directory.Exists(request.Destination))
            {
                throw new IOException($"'{Path.GetFileName(request.Destination)}' already exists on the target folder.");
            }

            if (File.Exists(request.Source))
            {
                File.Move(request.Source, request.Destination);
            }
            else if (Directory.Exists(request.Source))
            {
                Directory.Move(request.Source, request.Destination);
            }
            else
            {
                throw new FileNotFoundException("Could not locate the source file or folder.");
            }
        }

        public void Copy(CopyRequest request)
        {
            if (File.Exists(request.Source))
            {
                if (request.Source == request.Destination)
                {
                    while (File.Exists(request.Destination))
                    {
                        request.Destination = Path.Combine(Path.GetDirectoryName(request.Destination), Path.GetFileNameWithoutExtension(request.Destination)) + " copy" + Path.GetExtension(request.Destination);
                    }
                }
                File.Copy(request.Source, request.Destination, true);
            }
            else if (Directory.Exists(request.Source))
            {
                Directory.CreateDirectory(Path.GetDirectoryName(request.Destination));
                PathHelper.CopyDirectory(request.Source, request.Destination, true);
            }
            else
            {
                throw new FileNotFoundException("Could not locate the source file or folder.");
            }
        }

        public FileSystemItemDTO CreateFolder(String path, String folderName)
        {
            String fullPath = Path.Combine(path, folderName);

            if (Directory.Exists(fullPath))
            {
                throw new IOException("The specified directory name already exists.");
            }

            Directory.CreateDirectory(fullPath);

            return GetFolder(new GetFileSystemItemRequest()
            {
                Path = fullPath
            });
        }

        public long PerformDiskSpaceOptimization()
        {
            var tempDir = Path.GetTempPath();
            var logsFolder = FileLogger.DefaultLogsFolder;

            long sizeBefore = GetDirectorySize(new DirectoryInfo(tempDir)) + GetDirectorySize(new DirectoryInfo(logsFolder));

            foreach (var file in Directory.GetFiles(tempDir, "*.*", SearchOption.AllDirectories))
            {
                try
                {
                    FileInfo fileInfo = new FileInfo(file);
                    if (fileInfo.LastWriteTime < DateTime.Now.AddDays(-1))
                    {
                        File.Delete(file);
                    }
                }
                catch { }
            }

            foreach (var file in Directory.GetFiles(logsFolder, "*.*", SearchOption.AllDirectories))
            {
                try
                {
                    FileInfo fileInfo = new FileInfo(file);
                    if (fileInfo.LastWriteTime < DateTime.Now.AddDays(-2))
                    {
                        File.Delete(file);
                    }
                }
                catch { }
            }

            long sizeAfter = GetDirectorySize(new DirectoryInfo(tempDir)) + GetDirectorySize(new DirectoryInfo(logsFolder));

            return Math.Max(sizeBefore - sizeAfter, 0);
        }

        public static long GetDirectorySize(DirectoryInfo d)
        {
            long size = 0;
            // Add file sizes.
            FileInfo[] fis = d.GetFiles();
            foreach (FileInfo fi in fis)
            {
                size += fi.Length;
            }
            // Add subdirectory sizes.
            DirectoryInfo[] dis = d.GetDirectories();
            foreach (DirectoryInfo di in dis)
            {
                size += GetDirectorySize(di);
            }
            return size;
        }
    }
}