1
0
Files
auto-git-gui/tauriBridge.js
Victor Giers 0e12ac604e auto-git:
[add] scripts/
 [add] src-tauri/
 [add] tauriBridge.js
 [change] .gitignore
 [change] README.md
 [change] index.html
 [change] package.json
 [change] renderer.js
 [change] settings.html
 [unlink] editor-reword.js
 [unlink] main.js
 [unlink] preload.js
 [unlink] rebase-sequence-windows.js
2026-05-04 21:33:17 +02:00

129 lines
6.6 KiB
JavaScript

(function () {
const tauri = window.__TAURI__;
if (!tauri || window.electronAPI || window.settingsAPI) return;
const invoke = (command, args = {}) => tauri.core.invoke(command, args);
const listen = (event, handler) => tauri.event.listen(event, handler);
let selectedCache = null;
const eventUnsubscribers = [];
function onTauriEvent(eventName, callback, legacyEventArg = true) {
const promise = listen(eventName, event => {
if (legacyEventArg) callback({}, event.payload);
else callback(event.payload);
});
eventUnsubscribers.push(promise);
return promise;
}
async function refreshSelectedCache() {
selectedCache = await invoke('get_selected');
return selectedCache;
}
listen('repo-updated', event => {
window.dispatchEvent(new CustomEvent('repo-updated', { detail: event.payload }));
});
listen('theme-changed', event => {
const theme = event.payload;
window.dispatchEvent(new CustomEvent('theme-changed', { detail: theme }));
window.dispatchEvent(new CustomEvent('skymode-changed', { detail: theme === 'sky' }));
});
listen('skymode-changed', event => {
const val = !!event.payload;
window.dispatchEvent(new CustomEvent('theme-changed', { detail: val ? 'sky' : 'default' }));
window.dispatchEvent(new CustomEvent('skymode-changed', { detail: val }));
});
listen('tauri://drag-drop', event => {
const paths = event.payload?.paths || [];
if (paths.length) {
window.dispatchEvent(new CustomEvent('tauri-folder-drop', { detail: paths }));
}
});
window.settingsAPI = {
getTheme: () => invoke('get_theme'),
setTheme: val => invoke('set_theme', { val }),
getSkyMode: () => invoke('get_theme').then(theme => theme === 'sky'),
setSkyMode: val => invoke('set_theme', { val: val ? 'sky' : 'default' }),
getSkipPrompt: () => invoke('get_skip_git_prompt'),
setSkipPrompt: val => invoke('set_skip_git_prompt', { val }),
getIntelligentCommitThreshold: () => invoke('get_intelligent_commit_threshold'),
setIntelligentCommitThreshold: value => invoke('set_intelligent_commit_threshold', { value }),
getMinutesCommitThreshold: () => invoke('get_minutes_commit_threshold'),
setMinutesCommitThreshold: value => invoke('set_minutes_commit_threshold', { value }),
getCommitModel: () => invoke('get_commit_model'),
setCommitModel: model => invoke('set_commit_model', { val: model }),
getReadmeModel: () => invoke('get_readme_model'),
setReadmeModel: model => invoke('set_readme_model', { val: model }),
close: () => invoke('close_settings'),
getAutostart: () => invoke('get_autostart'),
setAutostart: val => invoke('set_autostart', { enabled: val }),
getCloseToTray: () => invoke('get_close_to_tray'),
setCloseToTray: val => invoke('set_close_to_tray', { val }),
getGiteaToken: () => invoke('get_gitea_token'),
setGiteaToken: token => invoke('set_gitea_token', { token })
};
window.electronAPI = {
getFolders: () => invoke('get_folders'),
addFolder: () => invoke('add_folder'),
removeFolder: folderObj => invoke('remove_folder', { folderObj }),
getSelected: refreshSelectedCache,
setSelected: async folderObj => {
selectedCache = await invoke('set_selected', { folderObjOrPath: folderObj });
return selectedCache;
},
getCommits: (folderObj, page, pageSize) => invoke('get_commits', { folderObj, page, pageSize }),
getAllCommitHashes: folderObj => invoke('get_all_commit_hashes', { folderObj }),
diffCommit: (folderObj, hash) => invoke('diff_commit', { folderObj, hash }),
revertCommit: (folderObj, hash) => invoke('revert_commit', { folderObj, hash }),
snapshotCommit: (folderObj, hash) => invoke('snapshot_commit', { folderObj, hash }),
checkoutCommit: (folderObj, hash) => invoke('checkout_commit', { folderObj, hash }),
getCommitCount: folderObj => invoke('get_commit_count', { folderObj }),
hasDiffs: folderObj => invoke('has_diffs', { folderObj }),
removeGitFolder: folderObj => invoke('remove_git_folder', { folderObj }),
commitCurrentFolder: (folderObj, message) => invoke('commit_current_folder', { folderObj, message }),
showFolderContextMenu: folderPath => invoke('show_folder_context_menu', { folderPath }),
setMonitoring: (folderObj, monitoring) => invoke('set_monitoring', { folderPath: folderObj.path, monitoring }),
getFolderTree: folderPath => invoke('get_folder_tree', { folderPath }),
showTreeContextMenu: info => invoke('show_tree_context_menu', { info }),
getSelectedSync: () => selectedCache || window.currentSelectedFolderObj || null,
getIntelligentCommitThreshold: () => invoke('get_intelligent_commit_threshold'),
setIntelligentCommitThreshold: value => invoke('set_intelligent_commit_threshold', { value }),
getMinutesCommitThreshold: () => invoke('get_minutes_commit_threshold'),
setMinutesCommitThreshold: value => invoke('set_minutes_commit_threshold', { value }),
ollamaList: () => invoke('ollama_list'),
ollamaPull: model => invoke('ollama_pull', { model }),
onTrayToggleMonitoring: callback => onTauriEvent('tray-toggle-monitoring', callback),
onTrayRemoveFolder: callback => onTauriEvent('tray-remove-folder', callback),
onTrayAddFolder: callback => onTauriEvent('tray-add-folder', callback),
onFoldersLocationUpdated: callback => onTauriEvent('folders-location-updated', callback, false),
isGitRepo: path => invoke('is_git_repo', { folderPath: path }),
relocateFolder: (oldPath, newPath) => invoke('relocate_folder', { oldPath, newPath }),
pickFolder: () => invoke('pick_folder'),
repoHasCommit: (repoPath, commitHash) => invoke('repo_has_commit', { repoPath, commitHash }),
addFolderByPath: folderPath => invoke('add_folder_by_path', { folderPath }),
onCatBegin: callback => onTauriEvent('cat-begin', callback),
onCatChunk: callback => onTauriEvent('cat-chunk', callback),
onCatEnd: callback => onTauriEvent('cat-end', callback),
getDailyCommitStats: () => invoke('get_daily_commit_stats'),
hasReadme: folderPath => invoke('has_readme', { folderPath }),
generateReadme: folderPath => invoke('generate_readme', { folderPath }),
squashCommits: folderPath => invoke('squash_commits', { folderPath }),
pushToGitea: folderPath => invoke('push_to_gitea', { folderPath }),
initRepo: folderPath => invoke('init_repo', { folderPath }),
triggerRewriteNow: folderPath => invoke('trigger_rewrite_now', { folderPath })
};
window.addEventListener('beforeunload', () => {
for (const pending of eventUnsubscribers) {
pending.then(unlisten => unlisten()).catch(() => {});
}
});
})();