mirror of
https://github.com/khoaliber/khoj.git
synced 2026-03-02 13:18:18 +00:00
Persist open file access mode setting across restarts in obsidian
Allows a lightweight mechanism to persist this user preference. Improve hover text a bit for readability. Resolves #1209
This commit is contained in:
@@ -104,6 +104,9 @@ export class KhojChatView extends KhojPaneView {
|
|||||||
super(leaf, plugin);
|
super(leaf, plugin);
|
||||||
this.fileInteractions = new FileInteractions(this.app);
|
this.fileInteractions = new FileInteractions(this.app);
|
||||||
|
|
||||||
|
// Initialize file access mode from persisted settings
|
||||||
|
this.fileAccessMode = this.setting.fileAccessMode ?? 'read';
|
||||||
|
|
||||||
this.waitingForLocation = true;
|
this.waitingForLocation = true;
|
||||||
|
|
||||||
fetch("https://ipapi.co/json")
|
fetch("https://ipapi.co/json")
|
||||||
@@ -271,29 +274,48 @@ export class KhojChatView extends KhojPaneView {
|
|||||||
text: "File Access",
|
text: "File Access",
|
||||||
attr: {
|
attr: {
|
||||||
class: "khoj-input-row-button clickable-icon",
|
class: "khoj-input-row-button clickable-icon",
|
||||||
title: "Toggle file access mode (Read Only)",
|
title: "Toggle open file access",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
setIcon(fileAccessButton, "file-search");
|
// Set initial icon based on persisted setting
|
||||||
fileAccessButton.addEventListener('click', () => {
|
switch (this.fileAccessMode) {
|
||||||
|
case 'none':
|
||||||
|
setIcon(fileAccessButton, "file-x");
|
||||||
|
fileAccessButton.title = "Toggle open file access (No Access)";
|
||||||
|
break;
|
||||||
|
case 'write':
|
||||||
|
setIcon(fileAccessButton, "file-edit");
|
||||||
|
fileAccessButton.title = "Toggle open file access (Read & Write)";
|
||||||
|
break;
|
||||||
|
case 'read':
|
||||||
|
default:
|
||||||
|
setIcon(fileAccessButton, "file-search");
|
||||||
|
fileAccessButton.title = "Toggle open file access (Read Only)";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
fileAccessButton.addEventListener('click', async () => {
|
||||||
// Cycle through modes: none -> read -> write -> none
|
// Cycle through modes: none -> read -> write -> none
|
||||||
switch (this.fileAccessMode) {
|
switch (this.fileAccessMode) {
|
||||||
case 'none':
|
case 'none':
|
||||||
this.fileAccessMode = 'read';
|
this.fileAccessMode = 'read';
|
||||||
setIcon(fileAccessButton, "file-search");
|
setIcon(fileAccessButton, "file-search");
|
||||||
fileAccessButton.title = "Toggle file access mode (Read Only)";
|
fileAccessButton.title = "Toggle open file access (Read Only)";
|
||||||
break;
|
break;
|
||||||
case 'read':
|
case 'read':
|
||||||
this.fileAccessMode = 'write';
|
this.fileAccessMode = 'write';
|
||||||
setIcon(fileAccessButton, "file-edit");
|
setIcon(fileAccessButton, "file-edit");
|
||||||
fileAccessButton.title = "Toggle file access mode (Read & Write)";
|
fileAccessButton.title = "Toggle open file access (Read & Write)";
|
||||||
break;
|
break;
|
||||||
case 'write':
|
case 'write':
|
||||||
this.fileAccessMode = 'none';
|
this.fileAccessMode = 'none';
|
||||||
setIcon(fileAccessButton, "file-x");
|
setIcon(fileAccessButton, "file-x");
|
||||||
fileAccessButton.title = "Toggle file access mode (No Access)";
|
fileAccessButton.title = "Toggle open file access (No Access)";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Persist the updated mode to settings
|
||||||
|
this.setting.fileAccessMode = this.fileAccessMode;
|
||||||
|
await this.plugin.saveSettings();
|
||||||
});
|
});
|
||||||
|
|
||||||
let chatInput = inputRow.createEl("textarea", {
|
let chatInput = inputRow.createEl("textarea", {
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ export interface KhojSetting {
|
|||||||
syncFolders: string[];
|
syncFolders: string[];
|
||||||
syncInterval: number;
|
syncInterval: number;
|
||||||
autoVoiceResponse: boolean;
|
autoVoiceResponse: boolean;
|
||||||
|
fileAccessMode: 'none' | 'read' | 'write';
|
||||||
selectedChatModelId: string | null; // Mirrors server's selected_chat_model_config
|
selectedChatModelId: string | null; // Mirrors server's selected_chat_model_config
|
||||||
availableChatModels: ModelOption[];
|
availableChatModels: ModelOption[];
|
||||||
}
|
}
|
||||||
@@ -58,6 +59,7 @@ export const DEFAULT_SETTINGS: KhojSetting = {
|
|||||||
syncFolders: [],
|
syncFolders: [],
|
||||||
syncInterval: 60,
|
syncInterval: 60,
|
||||||
autoVoiceResponse: true,
|
autoVoiceResponse: true,
|
||||||
|
fileAccessMode: 'read',
|
||||||
selectedChatModelId: null, // Will be populated from server
|
selectedChatModelId: null, // Will be populated from server
|
||||||
availableChatModels: [],
|
availableChatModels: [],
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user