Refactoring of command registration

This commit is contained in:
Elio Struyf
2024-05-23 10:40:38 +02:00
parent 5c4a716367
commit 64fc1e4b76
9 changed files with 155 additions and 117 deletions
+16 -1
View File
@@ -1,10 +1,25 @@
import { commands, QuickPickItem, window } from 'vscode';
import { COMMAND_NAME, SETTING_TEMPLATES_ENABLED } from '../constants';
import { Settings } from '../helpers';
import { Extension, Settings } from '../helpers';
import * as l10n from '@vscode/l10n';
import { LocalizationKey } from '../localization';
export class Content {
/**
* Registers the commands for the Content class.
*/
public static async registerCommands() {
const ext = Extension.getInstance();
const subscriptions = ext.subscriptions;
subscriptions.push(commands.registerCommand(COMMAND_NAME.createContent, Content.create));
}
/**
* Creates content based on user selection.
* If templates are enabled, shows a quick pick menu to choose between content type and template.
* If templates are disabled, executes the createByContentType command directly.
*/
public static async create() {
const templatesEnabled = await Settings.get(SETTING_TEMPLATES_ENABLED);
if (!templatesEnabled) {
+14 -2
View File
@@ -1,12 +1,24 @@
import { Folders } from './Folders';
import { ViewColumn, workspace } from 'vscode';
import { ViewColumn, commands, workspace } from 'vscode';
import ContentProvider from '../providers/ContentProvider';
import { join } from 'path';
import { ContentFolder } from '../models';
import { Settings } from '../helpers/SettingsHelper';
import { DEFAULT_FILE_TYPES, SETTING_CONTENT_SUPPORTED_FILETYPES } from '../constants';
import {
COMMAND_NAME,
DEFAULT_FILE_TYPES,
SETTING_CONTENT_SUPPORTED_FILETYPES
} from '../constants';
import { Extension } from '../helpers';
export class Diagnostics {
public static async registerCommands() {
const ext = Extension.getInstance();
const subscriptions = ext.subscriptions;
subscriptions.push(commands.registerCommand(COMMAND_NAME.diagnostics, Diagnostics.show));
}
public static async show() {
const folders = await Folders.get();
const projectName = Folders.getProjectFolderName();
+12 -2
View File
@@ -1,6 +1,7 @@
import { STATIC_FOLDER_PLACEHOLDER } from './../constants/StaticFolderPlaceholder';
import { Questions } from './../helpers/Questions';
import {
COMMAND_NAME,
SETTING_CONTENT_I18N,
SETTING_CONTENT_PAGE_FOLDERS,
SETTING_CONTENT_STATIC_FOLDER,
@@ -14,7 +15,7 @@ import { ContentFolder, FileInfo, FolderInfo, I18nConfig, StaticFolder } from '.
import uniqBy = require('lodash.uniqby');
import { Template } from './Template';
import { Notifications } from '../helpers/Notifications';
import { Logger, Settings, processTimePlaceholders } from '../helpers';
import { Extension, Logger, Settings, processTimePlaceholders } from '../helpers';
import { existsSync } from 'fs';
import { format } from 'date-fns';
import { Dashboard } from './Dashboard';
@@ -34,6 +35,13 @@ export const WORKSPACE_PLACEHOLDER = `[[workspace]]`;
export class Folders {
private static _folders: ContentFolder[] = [];
public static async registerCommands() {
const ext = Extension.getInstance();
const subscriptions = ext.subscriptions;
subscriptions.push(commands.registerCommand(COMMAND_NAME.createByTemplate, Folders.create));
}
public static clearCached() {
Logger.verbose(`Folders:clearCached`);
Folders._folders = [];
@@ -717,7 +725,9 @@ export class Folders {
let foundFiles = await Folders.findFiles(filePath);
// Make sure these file are coming from the folder path (this could be an issue in multi-root workspaces)
foundFiles = foundFiles.filter((f) => parseWinPath(f.fsPath).startsWith(parseWinPath(folderUri.fsPath)));
foundFiles = foundFiles.filter((f) =>
parseWinPath(f.fsPath).startsWith(parseWinPath(folderUri.fsPath))
);
files = [...files, ...foundFiles];
}
+19
View File
@@ -42,6 +42,25 @@ categories: []
const ext = Extension.getInstance();
const subscriptions = ext.subscriptions;
// Initialize command
subscriptions.push(
commands.registerCommand(COMMAND_NAME.init, async (cb: Function) => {
await Project.init();
if (cb) {
cb();
}
})
);
subscriptions.push(
commands.registerCommand(COMMAND_NAME.initTemplate, () => Project.createSampleTemplate(true))
);
subscriptions.push(commands.registerCommand(COMMAND_NAME.registerFolder, Folders.register));
subscriptions.push(commands.registerCommand(COMMAND_NAME.unregisterFolder, Folders.unregister));
subscriptions.push(commands.registerCommand(COMMAND_NAME.createFolder, Folders.addMediaFolder));
subscriptions.push(commands.registerCommand(COMMAND_NAME.switchProject, Project.switchProject));
}
+25 -2
View File
@@ -1,14 +1,37 @@
import { TaxonomyHelper } from './../helpers/TaxonomyHelper';
import * as vscode from 'vscode';
import { TaxonomyType } from '../models';
import { EXTENSION_NAME } from '../constants';
import { ArticleHelper, FilesHelper } from '../helpers';
import { COMMAND_NAME, EXTENSION_NAME } from '../constants';
import { ArticleHelper, Extension, FilesHelper } from '../helpers';
import { FrontMatterParser } from '../parsers';
import { Notifications } from '../helpers/Notifications';
import * as l10n from '@vscode/l10n';
import { LocalizationKey } from '../localization';
export class Settings {
public static async registerCommands() {
const ext = Extension.getInstance();
const subscriptions = ext.subscriptions;
subscriptions.push(
vscode.commands.registerCommand(COMMAND_NAME.createTag, () => {
Settings.create(TaxonomyType.Tag);
})
);
subscriptions.push(
vscode.commands.registerCommand(COMMAND_NAME.createCategory, () => {
Settings.create(TaxonomyType.Category);
})
);
subscriptions.push(
vscode.commands.registerCommand(COMMAND_NAME.exportTaxonomy, Settings.export)
);
subscriptions.push(vscode.commands.registerCommand(COMMAND_NAME.remap, Settings.remap));
}
/**
* Create a new taxonomy
*
+21 -2
View File
@@ -2,12 +2,13 @@ import { Questions } from './../helpers/Questions';
import * as vscode from 'vscode';
import * as path from 'path';
import {
COMMAND_NAME,
SETTING_CONTENT_DEFAULT_FILETYPE,
SETTING_TEMPLATES_FOLDER,
TelemetryEvent
} from '../constants';
import { ArticleHelper, Settings } from '../helpers';
import { Article } from '.';
import { ArticleHelper, Extension, Settings } from '../helpers';
import { Article, Folders } from '.';
import { Notifications } from '../helpers/Notifications';
import { Project } from './Project';
import { ContentType } from '../helpers/ContentType';
@@ -20,6 +21,24 @@ import * as l10n from '@vscode/l10n';
import { LocalizationKey } from '../localization';
export class Template {
public static async registerCommands() {
const ext = Extension.getInstance();
const subscriptions = ext.subscriptions;
subscriptions.push(
vscode.commands.registerCommand(COMMAND_NAME.createTemplate, Template.generate)
);
subscriptions.push(
vscode.commands.registerCommand(COMMAND_NAME.createFromTemplate, (folder: vscode.Uri) => {
const folderPath = Folders.getFolderPath(folder);
if (folderPath) {
Template.create(folderPath);
}
})
);
}
/**
* Generate a template
*/
+13 -108
View File
@@ -16,7 +16,6 @@ import { PagesListener } from './listeners/dashboard';
import { ModeSwitch } from './services/ModeSwitch';
import { PagesParser } from './services/PagesParser';
import { ContentType, Telemetry, Extension } from './helpers';
import { TaxonomyType } from './models';
import * as l10n from '@vscode/l10n';
import {
Backers,
@@ -93,8 +92,13 @@ export async function activate(context: vscode.ExtensionContext) {
Dashboard.init();
Dashboard.registerCommands();
// Multilingual commands
i18n.register();
// Setting commands
Settings.registerCommands();
SettingsHelper.registerCommands();
if (!extension.getVersion().usedVersion) {
vscode.commands.executeCommand(COMMAND_NAME.dashboard);
}
@@ -129,101 +133,23 @@ export async function activate(context: vscode.ExtensionContext) {
}
);
const createTag = vscode.commands.registerCommand(COMMAND_NAME.createTag, () => {
Settings.create(TaxonomyType.Tag);
});
const createCategory = vscode.commands.registerCommand(COMMAND_NAME.createCategory, () => {
Settings.create(TaxonomyType.Category);
});
const exportTaxonomy = vscode.commands.registerCommand(
COMMAND_NAME.exportTaxonomy,
Settings.export
);
const remap = vscode.commands.registerCommand(COMMAND_NAME.remap, Settings.remap);
// Register all the article commands
Article.registerCommands(subscriptions);
subscriptions.push(
vscode.commands.registerCommand(COMMAND_NAME.initTemplate, () =>
Project.createSampleTemplate(true)
)
);
// Register project folders
const registerFolder = vscode.commands.registerCommand(
COMMAND_NAME.registerFolder,
Folders.register
);
const unregisterFolder = vscode.commands.registerCommand(
COMMAND_NAME.unregisterFolder,
Folders.unregister
);
const createFolder = vscode.commands.registerCommand(
COMMAND_NAME.createFolder,
Folders.addMediaFolder
);
/**
* Template creation
*/
const createTemplate = vscode.commands.registerCommand(
COMMAND_NAME.createTemplate,
Template.generate
);
const createFromTemplate = vscode.commands.registerCommand(
COMMAND_NAME.createFromTemplate,
(folder: vscode.Uri) => {
const folderPath = Folders.getFolderPath(folder);
if (folderPath) {
Template.create(folderPath);
}
}
);
Template.registerCommands();
/**
* Content creation
*/
const createByContentType = vscode.commands.registerCommand(
COMMAND_NAME.createByContentType,
ContentType.createContent
);
const createByTemplate = vscode.commands.registerCommand(
COMMAND_NAME.createByTemplate,
Folders.create
);
const createContent = vscode.commands.registerCommand(COMMAND_NAME.createContent, Content.create);
ContentType.registerCommands();
Content.registerCommands();
Folders.registerCommands();
subscriptions.push(
vscode.commands.registerCommand(COMMAND_NAME.generateContentType, ContentType.generate)
);
subscriptions.push(
vscode.commands.registerCommand(COMMAND_NAME.addMissingFields, ContentType.addMissingFields)
);
subscriptions.push(
vscode.commands.registerCommand(COMMAND_NAME.setContentType, ContentType.setContentType)
);
// Initialize command
subscriptions.push(
vscode.commands.registerCommand(COMMAND_NAME.init, async (cb: Function) => {
await Project.init();
if (cb) {
cb();
}
})
);
// Settings promotion command
subscriptions.push(vscode.commands.registerCommand(COMMAND_NAME.promote, SettingsHelper.promote));
// Project commands
Project.registerCommands();
// Collapse all sections in the webview
const collapseAll = vscode.commands.registerCommand(COMMAND_NAME.collapseSections, () => {
@@ -303,7 +229,7 @@ export async function activate(context: vscode.ExtensionContext) {
ModeSwitch.register();
// Diagnostics
subscriptions.push(vscode.commands.registerCommand(COMMAND_NAME.diagnostics, Diagnostics.show));
Diagnostics.registerCommands();
// Git
GitListener.init();
@@ -315,29 +241,8 @@ export async function activate(context: vscode.ExtensionContext) {
// Cache commands
Cache.registerCommands();
// Project switching
Project.registerCommands();
// Subscribe all commands
subscriptions.push(
insertTags,
PanelView,
insertCategories,
createTag,
createCategory,
exportTaxonomy,
remap,
createFromTemplate,
createTemplate,
registerFolder,
unregisterFolder,
createContent,
createByContentType,
createByTemplate,
collapseAll,
createFolder,
fmStatusBarItem
);
subscriptions.push(insertTags, PanelView, insertCategories, collapseAll, fmStatusBarItem);
console.log(`𝖥𝗋𝗈𝗇𝗍 𝖬𝖺𝗍𝗍𝖾𝗋 𝖢𝖬𝖲 𝖺𝖼𝗍𝗂𝗏𝖺𝗍𝖾𝖽! 𝖱𝖾𝖺𝖽𝗒 𝗍𝗈 𝗌𝗍𝖺𝗋𝗍 𝗐𝗋𝗂𝗍𝗂𝗇𝗀... 👩‍💻🧑‍💻👨‍💻`);
}
+28
View File
@@ -3,12 +3,14 @@ import { PagesListener } from './../listeners/dashboard';
import {
ArticleHelper,
CustomScript,
Extension,
Logger,
Settings,
processArticlePlaceholdersFromData,
processTimePlaceholders
} from '.';
import {
COMMAND_NAME,
DefaultFieldValues,
EXTENSION_NAME,
FEATURE_FLAG,
@@ -40,6 +42,32 @@ import * as l10n from '@vscode/l10n';
import { LocalizationKey } from '../localization';
export class ContentType {
/**
* Registers the commands related to content types.
*
* @param subscriptions - The array of subscriptions to which the commands will be added.
*/
public static async registerCommands() {
const ext = Extension.getInstance();
const subscriptions = ext.subscriptions;
subscriptions.push(
commands.registerCommand(COMMAND_NAME.createByContentType, ContentType.createContent)
);
subscriptions.push(
commands.registerCommand(COMMAND_NAME.generateContentType, ContentType.generate)
);
subscriptions.push(
commands.registerCommand(COMMAND_NAME.addMissingFields, ContentType.addMissingFields)
);
subscriptions.push(
commands.registerCommand(COMMAND_NAME.setContentType, ContentType.setContentType)
);
}
/**
* Retrieve the draft field
* @returns
+7
View File
@@ -78,6 +78,13 @@ export class Settings {
private static project: Project | undefined = undefined;
private static configDebouncer = debounceCallback();
public static async registerCommands() {
const ext = Extension.getInstance();
const subscriptions = ext.subscriptions;
subscriptions.push(commands.registerCommand(COMMAND_NAME.promote, Settings.promote));
}
public static async init() {
const allCommands = await commands.getCommands(true);
await Settings.readConfig();