@@ -363,70 +384,5 @@
}
})
}
-
- // Get all currently indexed files
- function getAllFilenames() {
- fetch('/api/config/data/all')
- .then(response => response.json())
- .then(data => {
- var indexedFiles = document.getElementsByClassName("indexed-files")[0];
- indexedFiles.innerHTML = "";
-
- if (data.length == 0) {
- document.getElementById("delete-all-files").style.display = "none";
- indexedFiles.innerHTML = "
";
- } else {
- document.getElementById("delete-all-files").style.display = "block";
- }
-
- for (var filename of data) {
- let fileElement = document.createElement("div");
- fileElement.classList.add("file-element");
-
- let fileNameElement = document.createElement("div");
- fileNameElement.classList.add("content-name");
- fileNameElement.innerHTML = filename;
- fileElement.appendChild(fileNameElement);
-
- let buttonContainer = document.createElement("div");
- buttonContainer.classList.add("remove-button-container");
- let removeFileButton = document.createElement("button");
- removeFileButton.classList.add("remove-file-button");
- removeFileButton.innerHTML = "🗑️";
- removeFileButton.addEventListener("click", ((filename) => {
- return () => {
- removeFile(filename);
- };
- })(filename));
- buttonContainer.appendChild(removeFileButton);
- fileElement.appendChild(buttonContainer);
- indexedFiles.appendChild(fileElement);
- }
- })
- .catch((error) => {
- console.error('Error:', error);
- });
- }
-
- // Get all currently indexed files on page load
- getAllFilenames();
-
- let deleteAllFilesButton = document.getElementById("delete-all-files");
- deleteAllFilesButton.addEventListener("click", function(event) {
- event.preventDefault();
- fetch('/api/config/data/all', {
- method: 'DELETE',
- headers: {
- 'Content-Type': 'application/json',
- }
- })
- .then(response => response.json())
- .then(data => {
- if (data.status == "ok") {
- getAllFilenames();
- }
- })
- });
-
{% endblock %}
diff --git a/src/khoj/interface/web/content_source_computer_input.html b/src/khoj/interface/web/content_source_computer_input.html
new file mode 100644
index 00000000..01992d5e
--- /dev/null
+++ b/src/khoj/interface/web/content_source_computer_input.html
@@ -0,0 +1,107 @@
+{% extends "base_config.html" %}
+{% block content %}
+
+
+
+
+ Files
+
+
Manage files from your computer
+
Download the Khoj Desktop app to sync files from your computer
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
diff --git a/src/khoj/routers/api.py b/src/khoj/routers/api.py
index c2002048..fabfebe1 100644
--- a/src/khoj/routers/api.py
+++ b/src/khoj/routers/api.py
@@ -270,10 +270,11 @@ async def remove_file_data(
return {"status": "ok"}
-@api.get("/config/data/all", response_model=List[str])
+@api.get("/config/data/{content_source}", response_model=List[str])
@requires(["authenticated"])
async def get_all_filenames(
request: Request,
+ content_source: str,
client: Optional[str] = None,
):
user = request.user.object
@@ -285,27 +286,7 @@ async def get_all_filenames(
client=client,
)
- return await sync_to_async(list)(EntryAdapters.aget_all_filenames(user))
-
-
-@api.delete("/config/data/all", status_code=200)
-@requires(["authenticated"])
-async def remove_all_config_data(
- request: Request,
- client: Optional[str] = None,
-):
- user = request.user.object
-
- update_telemetry_state(
- request=request,
- telemetry_type="api",
- api="delete_all_config",
- client=client,
- )
-
- await EntryAdapters.adelete_all_entries(user)
-
- return {"status": "ok"}
+ return await sync_to_async(list)(EntryAdapters.aget_all_filenames_by_source(user, content_source))
@api.post("/config/data/conversation/model", status_code=200)
diff --git a/src/khoj/routers/web_client.py b/src/khoj/routers/web_client.py
index 8016cfce..3e568bc7 100644
--- a/src/khoj/routers/web_client.py
+++ b/src/khoj/routers/web_client.py
@@ -110,25 +110,14 @@ def login_page(request: Request):
def config_page(request: Request):
user = request.user.object
user_picture = request.session.get("user", {}).get("picture")
- enabled_content = set(EntryAdapters.get_unique_file_types(user).all())
+ enabled_content_source = set(EntryAdapters.get_unique_file_source(user).all())
successfully_configured = {
- "pdf": ("pdf" in enabled_content),
- "markdown": ("markdown" in enabled_content),
- "org": ("org" in enabled_content),
- "image": False,
- "github": ("github" in enabled_content),
- "notion": ("notion" in enabled_content),
- "plaintext": ("plaintext" in enabled_content),
+ "computer": ("computer" in enabled_content_source),
+ "github": ("github" in enabled_content_source),
+ "notion": ("notion" in enabled_content_source),
}
- if state.content_index:
- successfully_configured.update(
- {
- "image": state.content_index.image is not None,
- }
- )
-
conversation_options = ConversationAdapters.get_conversation_processor_options().all()
all_conversation_options = list()
for conversation_option in conversation_options:
@@ -209,3 +198,19 @@ def notion_config_page(request: Request):
"user_photo": user_picture,
},
)
+
+
+@web_client.get("/config/content-source/computer", response_class=HTMLResponse)
+@requires(["authenticated"], redirect="login_page")
+def computer_config_page(request: Request):
+ user = request.user.object
+ user_picture = request.session.get("user", {}).get("picture")
+
+ return templates.TemplateResponse(
+ "content_source_computer_input.html",
+ context={
+ "request": request,
+ "username": user.username,
+ "user_photo": user_picture,
+ },
+ )