示例#1
0
        private VSCodeWorkspace ParseVSCodeUri(string uri, VSCodeInstance vscodeInstance, bool isWorkspace = false)
        {
            if (uri != null && uri is string)
            {
                string unescapeUri   = Uri.UnescapeDataString(uri);
                var    typeWorkspace = WorkspacesHelper.ParseVSCodeUri.GetWorkspaceEnvironment(unescapeUri);
                if (typeWorkspace.WorkspaceEnvironment.HasValue)
                {
                    var folderName = Path.GetFileName(unescapeUri);

                    // Check we haven't returned '' if we have a path like C:\
                    if (string.IsNullOrEmpty(folderName))
                    {
                        DirectoryInfo dirInfo = new DirectoryInfo(unescapeUri);
                        folderName = dirInfo.Name.TrimEnd(':');
                    }

                    return(new VSCodeWorkspace()
                    {
                        Path = uri,
                        WorkspaceType = isWorkspace ? WorkspaceType.WorkspaceFile : WorkspaceType.ProjectFolder,
                        RelativePath = typeWorkspace.Path,
                        FolderName = folderName,
                        ExtraInfo = typeWorkspace.MachineName,
                        WorkspaceEnvironment = typeWorkspace.WorkspaceEnvironment.Value,
                        VSCodeInstance = vscodeInstance,
                    });
                }
            }

            return(null);
        }
示例#2
0
        private List <VSCodeWorkspace> GetWorkspacesInVscdb(VSCodeInstance vscodeInstance, string filePath)
        {
            var dbFileResults = new List <VSCodeWorkspace>();
            SqliteConnection sqliteConnection = null;

            try
            {
                sqliteConnection = new SqliteConnection($"Data Source={filePath};Mode=ReadOnly;");
                sqliteConnection.Open();

                if (sqliteConnection.State == System.Data.ConnectionState.Open)
                {
                    var sqlite_cmd = sqliteConnection.CreateCommand();
                    sqlite_cmd.CommandText = "SELECT value FROM ItemTable WHERE key LIKE 'history.recentlyOpenedPathsList'";

                    var sqlite_datareader = sqlite_cmd.ExecuteReader();

                    if (sqlite_datareader.Read())
                    {
                        string entries = sqlite_datareader.GetString(0);
                        if (!string.IsNullOrEmpty(entries))
                        {
                            VSCodeStorageEntries vscodeStorageEntries = JsonSerializer.Deserialize <VSCodeStorageEntries>(entries);
                            if (vscodeStorageEntries.Entries != null)
                            {
                                vscodeStorageEntries.Entries = vscodeStorageEntries.Entries.Where(x => x != null).ToList();
                                foreach (var entry in vscodeStorageEntries.Entries)
                                {
                                    bool isWorkspaceFile = false;
                                    var  uri             = entry.FolderUri;
                                    if (entry.Workspace != null && entry.Workspace.ConfigPath != null)
                                    {
                                        isWorkspaceFile = true;
                                        uri             = entry.Workspace.ConfigPath;
                                    }

                                    var workspace = ParseVSCodeUri(uri, vscodeInstance, isWorkspaceFile);
                                    if (workspace != null)
                                    {
                                        dbFileResults.Add(workspace);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                var message = $"Failed to retrieve workspaces from db: {filePath}";
                Log.Exception(message, e, GetType());
            }
            finally
            {
                sqliteConnection?.Close();
            }

            return(dbFileResults);
        }
示例#3
0
        private List <VSCodeWorkspace> GetWorkspacesInJson(VSCodeInstance vscodeInstance, string filePath)
        {
            var storageFileResults = new List <VSCodeWorkspace>();

            var fileContent = File.ReadAllText(filePath);

            try
            {
                VSCodeStorageFile vscodeStorageFile = JsonSerializer.Deserialize <VSCodeStorageFile>(fileContent);

                if (vscodeStorageFile != null && vscodeStorageFile.OpenedPathsList != null)
                {
                    // for previous versions of vscode
                    if (vscodeStorageFile.OpenedPathsList.Workspaces3 != null)
                    {
                        foreach (var workspaceUri in vscodeStorageFile.OpenedPathsList.Workspaces3)
                        {
                            var workspace = ParseVSCodeUri(workspaceUri, vscodeInstance);
                            if (workspace != null)
                            {
                                storageFileResults.Add(workspace);
                            }
                        }
                    }

                    // vscode v1.55.0 or later
                    if (vscodeStorageFile.OpenedPathsList.Entries != null)
                    {
                        foreach (var entry in vscodeStorageFile.OpenedPathsList.Entries)
                        {
                            bool isWorkspaceFile = false;
                            var  uri             = entry.FolderUri;
                            if (entry.Workspace != null && entry.Workspace.ConfigPath != null)
                            {
                                isWorkspaceFile = true;
                                uri             = entry.Workspace.ConfigPath;
                            }

                            var workspace = ParseVSCodeUri(uri, vscodeInstance, isWorkspaceFile);
                            if (workspace != null)
                            {
                                storageFileResults.Add(workspace);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                var message = $"Failed to deserialize {filePath}";
                Log.Exception(message, ex, GetType());
            }

            return(storageFileResults);
        }
示例#4
0
        private VSCodeWorkspace parseVSCodeUri(string uri, VSCodeInstance vscodeInstance)
        {
            if (uri != null && uri is String)
            {
                string unescapeUri   = Uri.UnescapeDataString(uri);
                var    typeWorkspace = ParseVSCodeUri.GetTypeWorkspace(unescapeUri);
                if (typeWorkspace.TypeWorkspace.HasValue)
                {
                    var folderName = Path.GetFileName(unescapeUri);
                    return(new VSCodeWorkspace()
                    {
                        Path = uri,
                        RelativePath = typeWorkspace.Path,
                        FolderName = folderName,
                        ExtraInfo = typeWorkspace.MachineName,
                        TypeWorkspace = typeWorkspace.TypeWorkspace.Value,
                        VSCodeInstance = vscodeInstance
                    });
                }
            }

            return(null);
        }