5e10750043
Introduce file/application pickers and external-editor integration, plus a visual refresh. Frontend: add UI for selecting/rescanning installed IDEs, custom editor input, "Open in File Explorer" and "Open in Code Editor" actions, clone destination browse, helper utilities, new icons, and many CSS theme/UX improvements (variables, shadows, scrollbars, selection, refined component styles). State: track installedIdes and scan status. Tauri API: expose browseDirectory, browseApplication and scanInstalledIdes, and wire UI handlers to call them. Backend: add InstalledIde struct and update tauri Cargo manifest and capabilities to allow dialogs. Overall improves editor/workflow integrations and modernizes the app styling.
207 lines
5.5 KiB
JavaScript
207 lines
5.5 KiB
JavaScript
const invoke = window.__TAURI__?.core?.invoke;
|
|
const dialog = window.__TAURI__?.dialog;
|
|
|
|
function ensureInvoke() {
|
|
if (!invoke) {
|
|
throw new Error("Tauri invoke API is not available.");
|
|
}
|
|
}
|
|
|
|
function ensureDialog() {
|
|
if (!dialog?.open) {
|
|
throw new Error("Tauri dialog API is not available.");
|
|
}
|
|
}
|
|
|
|
export async function browseDirectory(defaultPath = "") {
|
|
ensureDialog();
|
|
return dialog.open({
|
|
directory: true,
|
|
multiple: false,
|
|
defaultPath: defaultPath || undefined,
|
|
});
|
|
}
|
|
|
|
export async function browseApplication(defaultPath = "") {
|
|
ensureDialog();
|
|
return dialog.open({
|
|
directory: false,
|
|
multiple: false,
|
|
defaultPath: defaultPath || undefined,
|
|
filters: [
|
|
{ name: "Applications", extensions: ["exe", "cmd", "bat", "app"] },
|
|
],
|
|
});
|
|
}
|
|
|
|
export async function runGitClone(repoUrl, destinationPath, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("git_clone", {
|
|
repoUrl,
|
|
destinationPath,
|
|
gitPath: gitPath || null,
|
|
});
|
|
}
|
|
|
|
export async function runGitPull(repoPath, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("git_pull", { repoPath, gitPath: gitPath || null });
|
|
}
|
|
|
|
export async function runGitPush(repoPath, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("git_push", { repoPath, gitPath: gitPath || null });
|
|
}
|
|
|
|
export async function runGitPublishBranch(repoPath, remote, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("git_publish_branch", { repoPath, remote: remote || null, gitPath: gitPath || null });
|
|
}
|
|
|
|
export async function runGitFetch(repoPath, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("git_fetch", { repoPath, gitPath: gitPath || null });
|
|
}
|
|
|
|
export async function runGitSync(repoPath, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("git_sync", { repoPath, gitPath: gitPath || null });
|
|
}
|
|
|
|
export async function runGitStatus(repoPath, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("git_status", { repoPath, gitPath: gitPath || null });
|
|
}
|
|
|
|
export async function runGitBranch(repoPath, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("git_branch", { repoPath, gitPath: gitPath || null });
|
|
}
|
|
|
|
export async function getWorkingTreeStatus(repoPath, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("working_tree_status", { repoPath, gitPath: gitPath || null });
|
|
}
|
|
|
|
export async function getRepositorySyncStatus(repoPath, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("repository_sync_status", { repoPath, gitPath: gitPath || null });
|
|
}
|
|
|
|
export async function getFileDiff(repoPath, path, status, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("get_file_diff", { repoPath, path, status, gitPath: gitPath || null });
|
|
}
|
|
|
|
export async function stageFiles(repoPath, paths, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("stage_files", { repoPath, paths, gitPath: gitPath || null });
|
|
}
|
|
|
|
export async function unstageFiles(repoPath, paths, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("unstage_files", { repoPath, paths, gitPath: gitPath || null });
|
|
}
|
|
|
|
export async function commitChanges(repoPath, paths, summary, description, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("commit_changes", {
|
|
repoPath,
|
|
paths,
|
|
summary,
|
|
description: description || null,
|
|
gitPath: gitPath || null,
|
|
});
|
|
}
|
|
|
|
export async function checkoutBranch(repoPath, branch, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("checkout_branch", { repoPath, branch, gitPath: gitPath || null });
|
|
}
|
|
|
|
export async function createBranch(repoPath, branch, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("create_branch", { repoPath, branch, gitPath: gitPath || null });
|
|
}
|
|
|
|
export async function deleteBranch(repoPath, branch, force, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("delete_branch", { repoPath, branch, force: !!force, gitPath: gitPath || null });
|
|
}
|
|
|
|
export async function renameBranch(repoPath, oldBranch, newBranch, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("rename_branch", {
|
|
repoPath,
|
|
oldBranch,
|
|
newBranch,
|
|
gitPath: gitPath || null,
|
|
});
|
|
}
|
|
|
|
export async function getCommitHistory(repoPath, limit, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("commit_history", { repoPath, limit, gitPath: gitPath || null });
|
|
}
|
|
|
|
export async function getCommitDetail(repoPath, hash, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("commit_detail", { repoPath, hash, gitPath: gitPath || null });
|
|
}
|
|
|
|
export async function openInFileExplorer(repoPath) {
|
|
ensureInvoke();
|
|
return invoke("open_in_file_explorer", { repoPath });
|
|
}
|
|
|
|
export async function openInExternalEditor(repoPath, editorPath) {
|
|
ensureInvoke();
|
|
return invoke("open_in_external_editor", { repoPath, editorPath });
|
|
}
|
|
|
|
export async function scanInstalledIdes() {
|
|
ensureInvoke();
|
|
return invoke("scan_installed_ides");
|
|
}
|
|
|
|
export async function scanLocalRepos(roots = [], allowedRemoteUrls = [], gitPath = "", maxDepth = 4, maxResults = 200) {
|
|
ensureInvoke();
|
|
return invoke("scan_local_repos", {
|
|
roots,
|
|
allowedRemoteUrls,
|
|
gitPath: gitPath || null,
|
|
maxDepth,
|
|
maxResults,
|
|
});
|
|
}
|
|
|
|
export async function listLocalRepoBranches(repoPath, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("local_repo_branches", { repoPath, gitPath: gitPath || null });
|
|
}
|
|
|
|
export async function listLocalRepoTree(repoPath, reference, path, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("local_repo_tree", {
|
|
repoPath,
|
|
reference,
|
|
path: path || "",
|
|
gitPath: gitPath || null,
|
|
});
|
|
}
|
|
|
|
export async function readLocalRepoFile(repoPath, reference, path, gitPath) {
|
|
ensureInvoke();
|
|
return invoke("local_repo_file", {
|
|
repoPath,
|
|
reference,
|
|
path,
|
|
gitPath: gitPath || null,
|
|
});
|
|
}
|
|
|
|
export async function testGiteaConnection(payload) {
|
|
ensureInvoke();
|
|
return invoke("test_gitea_connection", payload);
|
|
}
|