107 lines
3.3 KiB
V
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}') }
|
|
}
|