Skip to content

Commit

Permalink
fix(group): 修复启动时无法显示保存的书签列表
Browse files Browse the repository at this point in the history
  • Loading branch information
czfadmin committed Apr 11, 2024
1 parent f9aec50 commit 3d6139f
Show file tree
Hide file tree
Showing 8 changed files with 260 additions and 184 deletions.
23 changes: 9 additions & 14 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -144,12 +144,6 @@
"icon": "$(bookmark)",
"category": "Bookmark Manager (BM)"
},
{
"command": "bookmark-manager.addBookmark",
"title": "%bookmark-manager.addBookmark%",
"icon": "$(diff-insert)",
"category": "Bookmark Manager (BM)"
},
{
"command": "bookmark-manager.viewAsTree",
"title": "%bookmark-manager.viewAsTree%",
Expand Down Expand Up @@ -626,6 +620,11 @@
"when": "view == bookmark-manager.universal",
"group": "inline@3"
},
{
"command": "bookmark-manager.addBookmarkGroup",
"when": "view == bookmark-manager && viewItem === workspace",
"group": "itemContextGroup@1"
},
{
"command": "bookmark-manager.changeBookmarkGroupLabel",
"when": "view == bookmark-manager && viewItem === custom",
Expand All @@ -644,12 +643,12 @@
{
"command": "bookmark-manager.setAsDefaultActivedGroup",
"when": "view == bookmark-manager && viewItem === custom",
"group": "itemContextGroup@1"
"group": "itemContextGroup@2"
},
{
"command": "bookmark-manager.deleteBookmarkGroup",
"when": "view == bookmark-manager && viewItem === custom",
"group": "itemContextGroup@2"
"group": "itemContextGroup@3"
}
],
"commandPalette": [
Expand All @@ -671,15 +670,11 @@
},
{
"command": "bookmark-manager.groupedByColor",
"when": "false"
"when": "true"
},
{
"command": "bookmark-manager.groupedByDefault",
"when": "false"
},
{
"command": "bookmark-manager.groupedByWorkspace",
"when": "bookmark-manager.multiRootWorkspaces"
"when": "true"
},
{
"command": "bookmark-manager.groupedByWorkspace",
Expand Down
34 changes: 20 additions & 14 deletions src/commands/bookmark/group.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,17 @@
import {
window,
l10n,
Selection,
TextEditorRevealType,
Uri,
workspace,
QuickPickItem,
ThemeIcon,
} from 'vscode';
import {window, l10n} from 'vscode';
import {resolveBookmarkController} from '../../bootstrap';
import {DEFAULT_BOOKMARK_COLOR} from '../../constants';
import {DEFAULT_BOOKMARK_GROUP_ID} from '../../constants/bookmark';
import {IBookmark, IBookmarkGroup} from '../../stores';
import {IBookmarkGroup} from '../../stores';
import {BookmarksGroupedByCustomType} from '../../types';
import {
showGroupQuickPick,
getBookmarkFromCtx,
gotoSourceLocation,
getLineInfoStrFromBookmark,
getBookmarkIcon,
showBookmarksQuickPick,
} from '../../utils';
import {IBookmarkCommand, IBookmarkCommandContext} from '../../types/command';
import {showWorkspaceFolderQuickPick} from '../../utils/workspace';

export const BookmarkGroupCommands: IBookmarkCommand[] = [
{
Expand Down Expand Up @@ -115,6 +105,18 @@ export const BookmarkGroupCommands: IBookmarkCommand[] = [
name: 'addBookmarkGroup',
docs: ` * 通过命令创建分组 * - 可支持自定义分组名称(非按照颜色分组,同时之前未分组的归为Default组) * - 分组拖拽移动 * - 分组拖拽排序`,
callback: async (ctx: IBookmarkCommandContext, args: any) => {
let selectedWorkspaceFolder;
console.log(args);
// 此时从命令面板或者视图顶部的菜单中选择调用此命令,以及当存在多个工作区间, 需要用户选择工作区进行操作.
if (!args || (args && args.contextValue !== 'workspace')) {
selectedWorkspaceFolder = await showWorkspaceFolderQuickPick();
}

// 当在工作区间分组样式时, 进行增加分组,此时该组绑定到该工作区间
if (args && args.contextValue === 'workspace') {
selectedWorkspaceFolder = args.meta.workspace;
}

const userInput = await window.showInputBox({
placeHolder: l10n.t('Please input new group name'),
});
Expand All @@ -125,7 +127,11 @@ export const BookmarkGroupCommands: IBookmarkCommand[] = [

const controller = resolveBookmarkController();

controller.addBookmarkGroup(userInput, DEFAULT_BOOKMARK_COLOR);
controller.addBookmarkGroup(
userInput,
DEFAULT_BOOKMARK_COLOR,
selectedWorkspaceFolder,
);
},
},
{
Expand Down
65 changes: 38 additions & 27 deletions src/controllers/BookmarksController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,6 @@ export default class BookmarksController implements IController {

private _store!: IBookmarksStore;

// private _groupedByFile: BookmarksGroupedByFileWithSortType[] = [];

// private _groupedByColor: BookmarksGroupedByColorType[] = [];

// private _groupedByWorkspaceFolders: BookmarksGroupedByWorkspaceType[] = [];

public get viewType(): TreeViewType {
return this._store.viewType as TreeViewType;
}
Expand Down Expand Up @@ -105,11 +99,6 @@ export default class BookmarksController implements IController {
*/
private _needWarning: boolean = true;

/**
* 表示该插件第一次初始化状态
*/
private _needWatchFiles: boolean = false;

private _storeDisposer: IDisposer | undefined;

public onDidChangeEvent: Event<void> = this._onDidChangeEvent.event;
Expand Down Expand Up @@ -180,6 +169,7 @@ export default class BookmarksController implements IController {
}

private async _initStore() {
let store;
this._store = BookmarksStore.create();

if (
Expand All @@ -189,7 +179,6 @@ export default class BookmarksController implements IController {
this._store.updateGroupView('default');
}

let store;
this._resolveDatastoreFromStoreFile();
// 当从 `bookmark-manager.json`文件中读取, 直接刷新返回
if (!this._configuration.createJsonFile) {
Expand All @@ -204,7 +193,6 @@ export default class BookmarksController implements IController {
}
}
}

// 监听mst的store的快照, 当快照发生变化时, 将数据保存到存储文件中
this._storeDisposer = onSnapshot(this._store, snapshot => {
this.save();
Expand All @@ -228,12 +216,13 @@ export default class BookmarksController implements IController {
'**/.vscode/bookmark-manager.json',
);
this._watcher.onDidDelete(uri => {
this._store.clearAll();
if (!uri) {return;}
const wsFolder = workspace.getWorkspaceFolder(uri);
/**
* 清除指定的工作区间的书签
*/
this._store.clearAll(wsFolder);
});
// this._watcher.onDidChange(uri => {
// this._resolveDatastoreFromStoreFile();
// this.refresh();
// });
this._disposables.push(this._watcher);
}
}
Expand All @@ -245,7 +234,7 @@ export default class BookmarksController implements IController {
private _resolveDatastoreFromStoreFile() {
let ws;
const wsFolders = workspace.workspaceFolders || [];
this._needWatchFiles = false;
let firstInit = true;
for (ws of wsFolders) {
const storeFilePath = path.join(
ws.uri.fsPath,
Expand All @@ -264,11 +253,20 @@ export default class BookmarksController implements IController {
});
}
const storeContent = JSON.parse(content) as IBookmarkStoreInfo;

this._store.updateStore(storeContent);
// 这时候要添加每个工作区间的文件夹中的书签和分组信息
if (firstInit) {
this._store.initStore(storeContent);
firstInit = false;
}
this._store.addGroups(storeContent.groups || []);
this._store.addBookmarks(
storeContent.content || storeContent.bookmarks || [],
);
}
}
this._needWarning = true;
// 手动调用一次保存, 因为此时store的快照未被监听
this.save();
}

add(bookmark: Partial<Omit<IBookmark, 'id'>>) {
Expand Down Expand Up @@ -387,8 +385,12 @@ export default class BookmarksController implements IController {
this.refresh();
}

addBookmarkGroup(groupName: string, color: string = DEFAULT_BOOKMARK_COLOR) {
this._store.addGroup(groupName, color);
addBookmarkGroup(
groupName: string,
color: string = DEFAULT_BOOKMARK_COLOR,
workspaceFolder?: WorkspaceFolder,
) {
this._store.addGroup(groupName, color, workspaceFolder);
}

deleteGroup(groupId: string) {
Expand Down Expand Up @@ -456,17 +458,26 @@ export default class BookmarksController implements IController {
}

private _buildBookmarksContent(workspace: WorkspaceFolder) {
const saveBookmarks = this._store.bookmarks.filter(
it => it.wsFolder?.uri.fsPath === workspace.uri.fsPath,
);
// 可能使用了在其他公共区间船创建的分组
const _usedGroupdIds = saveBookmarks.map(it => it.groupId);
const groups = this._store.groups.filter(
it =>
!it.workspace ||
it.workspace === workspace.name ||
_usedGroupdIds.includes(it.id),
);
const storeInfo: IBookmarkStoreInfo = {
version: process.env.version!,
workspace: workspace.name,
updatedDate: new Date().toLocaleDateString(),
viewType: this._store.viewType,
groupView: this._store.groupView,
sortedType: this._store.sortedType,
bookmarks: this._store.bookmarks.filter(
it => it.wsFolder?.uri.fsPath === workspace.uri.fsPath,
),
groups: this._store.groups,
bookmarks: saveBookmarks,
groups,
};
return JSON.stringify(storeInfo);
}
Expand Down
2 changes: 1 addition & 1 deletion src/providers/BookmarksTreeProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ export class BookmarksTreeProvider extends BaseTreeProvider<
}

if (viewType === 'tree') {
if (groupView === 'default') {
if (groupView === 'default' || groupView === 'file') {
return this.getChildrenByFile(element);
}

Expand Down
9 changes: 9 additions & 0 deletions src/stores/bookmark-group.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,33 @@ export const BookmarkGroup = types
* 书签ID
*/
id: types.string,

/**
* 书签标签
*/
label: types.string,

/**
* 书签在视图中排序索引
*/
sortedIndex: types.optional(types.number, 0),

/**
* 书签颜色
*/
color: types.optional(types.string, DEFAULT_BOOKMARK_GROUP_COLOR),

/**
* 当前组是否为默认激活的分组
* - 默认情况下,默认分组为激活状态,其他未非激活状态
* - 设置为true 的话,默认创建的书签将会放置到激活的分组中
*/
activeStatus: types.optional(types.boolean, false),

/**
* 保持公共区间的文件夹名称, 以便在多个工作区间中区别
*/
workspace: types.optional(types.string, ''),
})
.actions(self => {
return {
Expand Down
Loading

0 comments on commit 3d6139f

Please sign in to comment.