Files
herolib/lib/develop/vscode_extensions/ourdb/factory.v
2025-03-24 06:44:39 +01:00

107 lines
3.3 KiB
V

module ourdb
import os
// Embed the extension files directly into the binary
#embed_file extension_js_content := 'extension.js'
#embed_file package_json_content := 'package.json'
#embed_file readme_content := 'README.md'
// VSCodeExtension represents the OurDB VSCode extension
pub struct VSCodeExtension {
pub mut:
extension_dir string
}
// new creates a new VSCodeExtension instance
pub fn new() !VSCodeExtension {
// Determine the extension directory based on OS
extension_dir := get_extension_dir()
return VSCodeExtension{
extension_dir: extension_dir
}
}
// get_extension_dir determines the VSCode extension directory based on OS
fn get_extension_dir() string {
home_dir := os.home_dir()
// Extension directory path based on OS
return os.join_path(home_dir, '.vscode', 'extensions', 'local-herolib.ourdb-viewer-0.0.1')
}
// install installs the OurDB VSCode extension
pub fn (mut ext VSCodeExtension) install() ! {
// Check if already installed
if ext.is_installed() {
println('OurDB VSCode extension is already installed at: ${ext.extension_dir}')
println('To reinstall, first uninstall using the uninstall() function')
return
}
// Create extension directory if it doesn't exist
os.mkdir_all(ext.extension_dir) or {
return error('Failed to create extension directory: ${err}')
}
// Write embedded files to the extension directory
// extension.js
os.write_file(os.join_path(ext.extension_dir, 'extension.js'), extension_js_content.to_string()) or {
return error('Failed to write extension.js: ${err}')
}
// package.json
os.write_file(os.join_path(ext.extension_dir, 'package.json'), package_json_content.to_string()) or {
return error('Failed to write package.json: ${err}')
}
// README.md
os.write_file(os.join_path(ext.extension_dir, 'README.md'), readme_content.to_string()) or {
return error('Failed to write README.md: ${err}')
}
println('OurDB Viewer extension installed to: ${ext.extension_dir}')
println('Please restart VSCode for the changes to take effect.')
println('After restarting, you should be able to open .ourdb files.')
return
}
// uninstall removes the OurDB VSCode extension
pub fn (mut ext VSCodeExtension) uninstall() ! {
if os.exists(ext.extension_dir) {
os.rmdir_all(ext.extension_dir) or {
return error('Failed to remove extension directory: ${err}')
}
println('OurDB Viewer extension uninstalled from: ${ext.extension_dir}')
println('Please restart VSCode for the changes to take effect.')
} else {
println('Extension not found at: ${ext.extension_dir}')
}
return
}
// is_installed checks if the extension is installed
pub fn (ext VSCodeExtension) is_installed() bool {
return os.exists(ext.extension_dir)
&& os.exists(os.join_path(ext.extension_dir, 'extension.js'))
&& os.exists(os.join_path(ext.extension_dir, 'package.json'))
}
// install_extension is a convenience function to install the extension
pub fn install_extension() ! {
mut ext := new() or { return error('Failed to initialize extension: ${err}') }
ext.install() or { return error('Failed to install extension: ${err}') }
}
// uninstall_extension is a convenience function to uninstall the extension
pub fn uninstall_extension() ! {
mut ext := new() or { return error('Failed to initialize extension: ${err}') }
ext.uninstall() or { return error('Failed to uninstall extension: ${err}') }
}