From c790274f87316803676645cb8974724b1e9f53e4 Mon Sep 17 00:00:00 2001 From: Roland Date: Sun, 31 May 2026 19:31:27 +0200 Subject: [PATCH] Almost done --- ...88076e03-43c9-4b87-b10b-3e737269d881.vsidx | Bin 40601 -> 0 bytes .../v18/DocumentLayout.backup.json | 328 +++++------ .../v18/DocumentLayout.json | 330 +++++------ Assets/Unbenannte Tabelle - Google Sheets.pdf | Bin 0 -> 49320 bytes AuthorBuddy.Web.csproj | 2 + Components/App.razor | 2 + Components/CategorySelector.razor | 118 ++++ Components/CopyCreateToolbar.razor | 149 +++++ Components/Layout/MainLayout.razor | 296 ++++++++-- Components/Layout/MainLayout.razor.css | 13 + Components/Pages/DbAdmin.razor | 195 +++++++ Components/Pages/Editor.razor | 96 ++- Components/Pages/Help.razor | 240 ++++++++ Components/Pages/OllamaAssistant.razor | 194 +++++- Components/Pages/OllamaSetupAssistant.razor | 174 ++++++ Components/Pages/Settings.razor | 552 +++++++++++++++--- DOCUMENTATION.md | 472 +++++++++++++++ Data/FileCategoryEntity.cs | 11 + Data/ProjectEntity.cs | 4 + INSTALL.md | 259 ++++++++ Models/FileCategory.cs | 66 +++ Models/FileTreeItem.cs | 1 + Models/LLM_Model.cs | 5 + Models/OllamaSettings.cs | 56 +- Models/Project.cs | 1 + Models/ProjectPathHelper.cs | 32 + Models/ProjectTemplate.cs | 7 + Program.cs | 12 +- Resources/de.json | 54 +- Resources/en.json | 54 +- Services/DbAdminService.cs | 111 ++++ Services/ExportService.cs | 425 ++++++++++++++ Services/IDbAdminService.cs | 21 + Services/IExportService.cs | 15 + Services/ILLMBackend.cs | 22 + Services/IOllamaService.cs | 8 +- Services/IOllamaSetupService.cs | 17 + Services/IProjectService.cs | 8 +- Services/ISettingsService.cs | 49 ++ Services/LlamaCppBackend.cs | 236 ++++++++ Services/LocalizationService.cs | 1 + Services/OllamaBackend.cs | 253 ++++++++ Services/OllamaService.cs | 294 ++-------- Services/OllamaSetupService.cs | 123 ++++ Services/OperationState.cs | 42 ++ Services/ProjectService.cs | 155 ++++- Services/SettingsService.cs | 515 ++++++++++++++-- err.txt | 0 ollama_config.json | 29 + out.txt | 10 + wwwroot/app.css | 250 +++++++- wwwroot/js/download.js | 14 + wwwroot/js/editor-toolbar.js | 74 +++ 53 files changed, 5598 insertions(+), 797 deletions(-) delete mode 100644 .vs/AuthorBuddy.Web.slnx/FileContentIndex/88076e03-43c9-4b87-b10b-3e737269d881.vsidx create mode 100644 Assets/Unbenannte Tabelle - Google Sheets.pdf create mode 100644 Components/CategorySelector.razor create mode 100644 Components/CopyCreateToolbar.razor create mode 100644 Components/Pages/DbAdmin.razor create mode 100644 Components/Pages/Help.razor create mode 100644 Components/Pages/OllamaSetupAssistant.razor create mode 100644 DOCUMENTATION.md create mode 100644 Data/FileCategoryEntity.cs create mode 100644 INSTALL.md create mode 100644 Models/FileCategory.cs create mode 100644 Models/ProjectPathHelper.cs create mode 100644 Models/ProjectTemplate.cs create mode 100644 Services/DbAdminService.cs create mode 100644 Services/ExportService.cs create mode 100644 Services/IDbAdminService.cs create mode 100644 Services/IExportService.cs create mode 100644 Services/ILLMBackend.cs create mode 100644 Services/IOllamaSetupService.cs create mode 100644 Services/LlamaCppBackend.cs create mode 100644 Services/OllamaBackend.cs create mode 100644 Services/OllamaSetupService.cs create mode 100644 Services/OperationState.cs create mode 100644 err.txt create mode 100644 ollama_config.json create mode 100644 out.txt create mode 100644 wwwroot/js/download.js create mode 100644 wwwroot/js/editor-toolbar.js diff --git a/.vs/AuthorBuddy.Web.slnx/FileContentIndex/88076e03-43c9-4b87-b10b-3e737269d881.vsidx b/.vs/AuthorBuddy.Web.slnx/FileContentIndex/88076e03-43c9-4b87-b10b-3e737269d881.vsidx deleted file mode 100644 index d93df2903aa8f22b29aa68cdb02588a5f481281b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40601 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 diff --git a/.vs/AuthorBuddy.Web.slnx/v18/DocumentLayout.backup.json b/.vs/AuthorBuddy.Web.slnx/v18/DocumentLayout.backup.json index 1569913..5e773fc 100644 --- a/.vs/AuthorBuddy.Web.slnx/v18/DocumentLayout.backup.json +++ b/.vs/AuthorBuddy.Web.slnx/v18/DocumentLayout.backup.json @@ -2,6 +2,42 @@ "Version": 1, "WorkspaceRootPath": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\", "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\install.md||{EFC0BB08-EA7D-40C6-A696-C870411A895B}", + "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:install.md||{EFC0BB08-EA7D-40C6-A696-C870411A895B}" + }, + { + "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\pages\\editor.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", + "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\pages\\editor.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" + }, + { + "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\projectservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\projectservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\pages\\ollamaassistant.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", + "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\pages\\ollamaassistant.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" + }, + { + "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\iollamasetupservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\iollamasetupservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\layout\\mainlayout.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", + "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\layout\\mainlayout.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" + }, + { + "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\pages\\settings.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", + "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\pages\\settings.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" + }, + { + "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\data\\userentity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:data\\userentity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, { "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\settingsservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\settingsservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -18,21 +54,9 @@ "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\iragservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\iragservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\data\\userentity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:data\\userentity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\HP\\Desktop\\Website\\A7405018.jpg||{58961B49-13E0-48C0-9258-13CBC4D40279}" }, - { - "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\pages\\ollamaassistant.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", - "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\pages\\ollamaassistant.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" - }, - { - "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\layout\\mainlayout.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", - "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\layout\\mainlayout.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" - }, { "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\themeservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\themeservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -45,14 +69,6 @@ "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\redirecttologin.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\redirecttologin.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" }, - { - "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\ollamaservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\ollamaservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\pages\\login.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\pages\\login.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" @@ -61,22 +77,10 @@ "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\totphelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\totphelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\pages\\settings.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", - "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\pages\\settings.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" - }, { "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\models\\ollamasettings.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:models\\ollamasettings.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\iollamaservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\iollamaservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\projectservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\projectservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\filescannerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\filescannerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -89,10 +93,6 @@ "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\ragservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\ragservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\pages\\editor.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", - "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\pages\\editor.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" - }, { "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\layout\\navmenu.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\layout\\navmenu.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" @@ -153,7 +153,7 @@ "DocumentGroups": [ { "DockedWidth": 200, - "SelectedChildIndex": 3, + "SelectedChildIndex": 1, "Children": [ { "$type": "Bookmark", @@ -161,19 +161,36 @@ }, { "$type": "Document", - "DocumentIndex": 4, - "Title": "UserEntity.cs", - "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Data\\UserEntity.cs", - "RelativeDocumentMoniker": "Data\\UserEntity.cs", - "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Data\\UserEntity.cs", - "RelativeToolTip": "Data\\UserEntity.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAqwAIAAAAMAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2026-05-24T04:52:42.227Z" + "DocumentIndex": 0, + "Title": "INSTALL.md", + "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\INSTALL.md", + "RelativeDocumentMoniker": "INSTALL.md", + "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\INSTALL.md", + "RelativeToolTip": "INSTALL.md", + "ViewState": "AgIAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001818|", + "WhenOpened": "2026-05-31T17:07:33.423Z", + "EditorCaption": "" + }, + { + "$type": "Bookmark", + "Name": "RST:0:0:{b3f9f954-0ca5-0091-76b4-34a47f44c954}" }, { "$type": "Document", - "DocumentIndex": 5, + "DocumentIndex": 4, + "Title": "IOllamaSetupService.cs", + "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\IOllamaSetupService.cs", + "RelativeDocumentMoniker": "Services\\IOllamaSetupService.cs", + "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\IOllamaSetupService.cs", + "RelativeToolTip": "Services\\IOllamaSetupService.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-05-30T08:35:51.087Z" + }, + { + "$type": "Document", + "DocumentIndex": 13, "Title": "A7405018.jpg", "DocumentMoniker": "C:\\Users\\HP\\Desktop\\Website\\A7405018.jpg", "ToolTip": "C:\\Users\\HP\\Desktop\\Website\\A7405018.jpg", @@ -182,20 +199,104 @@ }, { "$type": "Document", - "DocumentIndex": 0, + "DocumentIndex": 9, "Title": "SettingsService.cs", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\SettingsService.cs", "RelativeDocumentMoniker": "Services\\SettingsService.cs", "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\SettingsService.cs", "RelativeToolTip": "Services\\SettingsService.cs", - "ViewState": "AgIAAAMBAAAAAAAAAAAAABsBAAApAAAAAAAAAA==", + "ViewState": "AgIAAE0BAAAAAAAAAAAAAC0BAAAMAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2026-05-21T17:37:24.777Z", - "EditorCaption": "" + "WhenOpened": "2026-05-21T17:37:24.777Z" + }, + { + "$type": "Document", + "DocumentIndex": 7, + "Title": "Settings.razor", + "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\Settings.razor", + "RelativeDocumentMoniker": "Components\\Pages\\Settings.razor", + "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\Settings.razor", + "RelativeToolTip": "Components\\Pages\\Settings.razor", + "ViewState": "AgIAAJsAAAAAAAAAAAAAAKwAAAAWAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|", + "WhenOpened": "2026-05-15T16:43:26.6Z" }, { "$type": "Document", "DocumentIndex": 1, + "Title": "Editor.razor", + "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\Editor.razor", + "RelativeDocumentMoniker": "Components\\Pages\\Editor.razor", + "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\Editor.razor", + "RelativeToolTip": "Components\\Pages\\Editor.razor", + "ViewState": "AgIAAFsCAAAAAAAAAAAiwEgDAAAkAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|", + "WhenOpened": "2026-05-16T13:01:59.743Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "ProjectService.cs", + "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\ProjectService.cs", + "RelativeDocumentMoniker": "Services\\ProjectService.cs", + "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\ProjectService.cs", + "RelativeToolTip": "Services\\ProjectService.cs", + "ViewState": "AgIAAN0AAAAAAAAAAAApwO0AAAAMAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-05-15T15:56:55.229Z" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "OllamaAssistant.razor", + "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\OllamaAssistant.razor", + "RelativeDocumentMoniker": "Components\\Pages\\OllamaAssistant.razor", + "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\OllamaAssistant.razor", + "RelativeToolTip": "Components\\Pages\\OllamaAssistant.razor", + "ViewState": "AgIAANoAAAAAAAAAAAAiwPIAAAAZAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|", + "WhenOpened": "2026-05-20T05:14:39.037Z" + }, + { + "$type": "Document", + "DocumentIndex": 5, + "Title": "MainLayout.razor", + "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Layout\\MainLayout.razor", + "RelativeDocumentMoniker": "Components\\Layout\\MainLayout.razor", + "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Layout\\MainLayout.razor", + "RelativeToolTip": "Components\\Layout\\MainLayout.razor", + "ViewState": "AgIAACABAAAAAAAAAAApwDQBAAARAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|", + "WhenOpened": "2026-05-15T16:04:36.444Z" + }, + { + "$type": "Document", + "DocumentIndex": 8, + "Title": "UserEntity.cs", + "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Data\\UserEntity.cs", + "RelativeDocumentMoniker": "Data\\UserEntity.cs", + "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Data\\UserEntity.cs", + "RelativeToolTip": "Data\\UserEntity.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAAVAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-05-24T04:52:42.227Z" + }, + { + "$type": "Document", + "DocumentIndex": 6, + "Title": "Program.cs", + "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Program.cs", + "RelativeDocumentMoniker": "Program.cs", + "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Program.cs", + "RelativeToolTip": "Program.cs", + "ViewState": "AgIAACwAAAAAAAAAAAAQwD8AAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-05-20T04:07:21.54Z" + }, + { + "$type": "Document", + "DocumentIndex": 10, "Title": "IThemeService.cs", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\IThemeService.cs", "RelativeDocumentMoniker": "Services\\IThemeService.cs", @@ -203,12 +304,11 @@ "RelativeToolTip": "Services\\IThemeService.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAqwAgAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2026-05-21T17:32:01.784Z", - "EditorCaption": "" + "WhenOpened": "2026-05-21T17:32:01.784Z" }, { "$type": "Document", - "DocumentIndex": 10, + "DocumentIndex": 16, "Title": "RedirectToLogin.razor", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\RedirectToLogin.razor", "RelativeDocumentMoniker": "Components\\RedirectToLogin.razor", @@ -220,31 +320,7 @@ }, { "$type": "Document", - "DocumentIndex": 6, - "Title": "OllamaAssistant.razor", - "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\OllamaAssistant.razor", - "RelativeDocumentMoniker": "Components\\Pages\\OllamaAssistant.razor", - "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\OllamaAssistant.razor", - "RelativeToolTip": "Components\\Pages\\OllamaAssistant.razor", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAGgAAAAMAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|", - "WhenOpened": "2026-05-20T05:14:39.037Z" - }, - { - "$type": "Document", - "DocumentIndex": 7, - "Title": "MainLayout.razor", - "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Layout\\MainLayout.razor", - "RelativeDocumentMoniker": "Components\\Layout\\MainLayout.razor", - "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Layout\\MainLayout.razor", - "RelativeToolTip": "Components\\Layout\\MainLayout.razor", - "ViewState": "AgIAAB4BAAAAAAAAAAApwDQBAAApAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|", - "WhenOpened": "2026-05-15T16:04:36.444Z" - }, - { - "$type": "Document", - "DocumentIndex": 2, + "DocumentIndex": 11, "Title": "ISettingsService.cs", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\ISettingsService.cs", "RelativeDocumentMoniker": "Services\\ISettingsService.cs", @@ -256,7 +332,7 @@ }, { "$type": "Document", - "DocumentIndex": 3, + "DocumentIndex": 12, "Title": "IRagService.cs", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\IRagService.cs", "RelativeDocumentMoniker": "Services\\IRagService.cs", @@ -268,7 +344,7 @@ }, { "$type": "Document", - "DocumentIndex": 13, + "DocumentIndex": 17, "Title": "Login.razor", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\Login.razor", "RelativeDocumentMoniker": "Components\\Pages\\Login.razor", @@ -280,7 +356,7 @@ }, { "$type": "Document", - "DocumentIndex": 8, + "DocumentIndex": 14, "Title": "ThemeService.cs", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\ThemeService.cs", "RelativeDocumentMoniker": "Services\\ThemeService.cs", @@ -292,31 +368,7 @@ }, { "$type": "Document", - "DocumentIndex": 11, - "Title": "Program.cs", - "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Program.cs", - "RelativeDocumentMoniker": "Program.cs", - "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Program.cs", - "RelativeToolTip": "Program.cs", - "ViewState": "AgIAABwAAAAAAAAAAAAAABIAAAAsAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2026-05-20T04:07:21.54Z" - }, - { - "$type": "Document", - "DocumentIndex": 12, - "Title": "OllamaService.cs", - "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\OllamaService.cs", - "RelativeDocumentMoniker": "Services\\OllamaService.cs", - "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\OllamaService.cs", - "RelativeToolTip": "Services\\OllamaService.cs", - "ViewState": "AgIAAGEAAAAAAAAAAAAcwHsAAAAVAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2026-05-16T06:43:46.404Z" - }, - { - "$type": "Document", - "DocumentIndex": 9, + "DocumentIndex": 15, "Title": "logo.jpg", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Assets\\logo.jpg", "RelativeDocumentMoniker": "Assets\\logo.jpg", @@ -327,7 +379,7 @@ }, { "$type": "Document", - "DocumentIndex": 16, + "DocumentIndex": 19, "Title": "OllamaSettings.cs", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Models\\OllamaSettings.cs", "RelativeDocumentMoniker": "Models\\OllamaSettings.cs", @@ -350,7 +402,7 @@ }, { "$type": "Document", - "DocumentIndex": 19, + "DocumentIndex": 20, "Title": "FileScannerService.cs", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\FileScannerService.cs", "RelativeDocumentMoniker": "Services\\FileScannerService.cs", @@ -362,19 +414,7 @@ }, { "$type": "Document", - "DocumentIndex": 17, - "Title": "IOllamaService.cs", - "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\IOllamaService.cs", - "RelativeDocumentMoniker": "Services\\IOllamaService.cs", - "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\IOllamaService.cs", - "RelativeToolTip": "Services\\IOllamaService.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAqwAkAAAAPAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2026-05-16T07:20:19.212Z" - }, - { - "$type": "Document", - "DocumentIndex": 14, + "DocumentIndex": 18, "Title": "TotpHelper.cs", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\TotpHelper.cs", "RelativeDocumentMoniker": "Services\\TotpHelper.cs", @@ -386,7 +426,7 @@ }, { "$type": "Document", - "DocumentIndex": 20, + "DocumentIndex": 21, "Title": "Project.cs", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Models\\Project.cs", "RelativeDocumentMoniker": "Models\\Project.cs", @@ -398,19 +438,7 @@ }, { "$type": "Document", - "DocumentIndex": 15, - "Title": "Settings.razor", - "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\Settings.razor", - "RelativeDocumentMoniker": "Components\\Pages\\Settings.razor", - "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\Settings.razor", - "RelativeToolTip": "Components\\Pages\\Settings.razor", - "ViewState": "AgIAAAwAAAAAAAAAAAAAAIYAAAAlAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|", - "WhenOpened": "2026-05-15T16:43:26.6Z" - }, - { - "$type": "Document", - "DocumentIndex": 21, + "DocumentIndex": 22, "Title": "RagService.cs", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\RagService.cs", "RelativeDocumentMoniker": "Services\\RagService.cs", @@ -420,18 +448,6 @@ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2026-05-18T15:40:05.413Z" }, - { - "$type": "Document", - "DocumentIndex": 18, - "Title": "ProjectService.cs", - "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\ProjectService.cs", - "RelativeDocumentMoniker": "Services\\ProjectService.cs", - "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\ProjectService.cs", - "RelativeToolTip": "Services\\ProjectService.cs", - "ViewState": "AgIAADQAAAAAAAAAAAAqwEYAAAAWAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2026-05-15T15:56:55.229Z" - }, { "$type": "Document", "DocumentIndex": 23, @@ -444,18 +460,6 @@ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|", "WhenOpened": "2026-05-15T16:04:37.739Z" }, - { - "$type": "Document", - "DocumentIndex": 22, - "Title": "Editor.razor", - "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\Editor.razor", - "RelativeDocumentMoniker": "Components\\Pages\\Editor.razor", - "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\Editor.razor", - "RelativeToolTip": "Components\\Pages\\Editor.razor", - "ViewState": "AgIAAAoAAACA6NuCpTYvwKAAAAAcAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|", - "WhenOpened": "2026-05-16T13:01:59.743Z" - }, { "$type": "Document", "DocumentIndex": 25, @@ -587,10 +591,6 @@ "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|", "WhenOpened": "2026-05-14T10:14:25.605Z" - }, - { - "$type": "Bookmark", - "Name": "RST:0:0:{b3f9f954-0ca5-0091-76b4-34a47f44c954}" } ] } diff --git a/.vs/AuthorBuddy.Web.slnx/v18/DocumentLayout.json b/.vs/AuthorBuddy.Web.slnx/v18/DocumentLayout.json index c509723..88ed6e3 100644 --- a/.vs/AuthorBuddy.Web.slnx/v18/DocumentLayout.json +++ b/.vs/AuthorBuddy.Web.slnx/v18/DocumentLayout.json @@ -2,6 +2,42 @@ "Version": 1, "WorkspaceRootPath": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\", "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\install.md||{EFC0BB08-EA7D-40C6-A696-C870411A895B}", + "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:install.md||{EFC0BB08-EA7D-40C6-A696-C870411A895B}" + }, + { + "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\pages\\editor.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", + "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\pages\\editor.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" + }, + { + "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\projectservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\projectservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\pages\\ollamaassistant.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", + "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\pages\\ollamaassistant.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" + }, + { + "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\iollamasetupservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\iollamasetupservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\layout\\mainlayout.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", + "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\layout\\mainlayout.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" + }, + { + "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\pages\\settings.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", + "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\pages\\settings.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" + }, + { + "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\data\\userentity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:data\\userentity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, { "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\settingsservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\settingsservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -18,21 +54,9 @@ "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\iragservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\iragservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\data\\userentity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:data\\userentity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\HP\\Desktop\\Website\\A7405018.jpg||{58961B49-13E0-48C0-9258-13CBC4D40279}" }, - { - "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\pages\\ollamaassistant.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", - "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\pages\\ollamaassistant.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" - }, - { - "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\layout\\mainlayout.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", - "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\layout\\mainlayout.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" - }, { "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\themeservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\themeservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -45,14 +69,6 @@ "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\redirecttologin.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\redirecttologin.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" }, - { - "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\ollamaservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\ollamaservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\pages\\login.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\pages\\login.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" @@ -61,22 +77,10 @@ "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\totphelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\totphelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\pages\\settings.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", - "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\pages\\settings.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" - }, { "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\models\\ollamasettings.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:models\\ollamasettings.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\iollamaservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\iollamaservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\projectservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\projectservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\filescannerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\filescannerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -89,10 +93,6 @@ "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\services\\ragservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:services\\ragservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\pages\\editor.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", - "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\pages\\editor.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" - }, { "AbsoluteMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|e:\\ollama_net\\ollama\\authorbuddy.web\\components\\layout\\navmenu.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}", "RelativeMoniker": "D:0:0:{4F4697EF-EFFA-26AC-C8A1-C9859805D247}|AuthorBuddy.Web.csproj|solutionrelative:components\\layout\\navmenu.razor||{40D31677-CBC0-4297-A9EF-89D907823A98}" @@ -153,27 +153,44 @@ "DocumentGroups": [ { "DockedWidth": 200, - "SelectedChildIndex": 3, + "SelectedChildIndex": 2, "Children": [ { "$type": "Bookmark", "Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}" }, { - "$type": "Document", - "DocumentIndex": 4, - "Title": "UserEntity.cs", - "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Data\\UserEntity.cs", - "RelativeDocumentMoniker": "Data\\UserEntity.cs", - "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Data\\UserEntity.cs", - "RelativeToolTip": "Data\\UserEntity.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAqwAIAAAAMAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2026-05-24T04:52:42.227Z" + "$type": "Bookmark", + "Name": "RST:0:0:{b3f9f954-0ca5-0091-76b4-34a47f44c954}" }, { "$type": "Document", - "DocumentIndex": 5, + "DocumentIndex": 0, + "Title": "INSTALL.md", + "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\INSTALL.md", + "RelativeDocumentMoniker": "INSTALL.md", + "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\INSTALL.md", + "RelativeToolTip": "INSTALL.md", + "ViewState": "AgIAAFQAAAAAAAAAAAAAAGwAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001818|", + "WhenOpened": "2026-05-31T17:07:33.423Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 4, + "Title": "IOllamaSetupService.cs", + "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\IOllamaSetupService.cs", + "RelativeDocumentMoniker": "Services\\IOllamaSetupService.cs", + "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\IOllamaSetupService.cs", + "RelativeToolTip": "Services\\IOllamaSetupService.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-05-30T08:35:51.087Z" + }, + { + "$type": "Document", + "DocumentIndex": 13, "Title": "A7405018.jpg", "DocumentMoniker": "C:\\Users\\HP\\Desktop\\Website\\A7405018.jpg", "ToolTip": "C:\\Users\\HP\\Desktop\\Website\\A7405018.jpg", @@ -182,20 +199,104 @@ }, { "$type": "Document", - "DocumentIndex": 0, + "DocumentIndex": 9, "Title": "SettingsService.cs", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\SettingsService.cs", "RelativeDocumentMoniker": "Services\\SettingsService.cs", "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\SettingsService.cs", "RelativeToolTip": "Services\\SettingsService.cs", - "ViewState": "AgIAAO4AAAAAAAAAAAAqwBsBAAApAAAAAAAAAA==", + "ViewState": "AgIAAE0BAAAAAAAAAAAAAC0BAAAMAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2026-05-21T17:37:24.777Z", - "EditorCaption": "" + "WhenOpened": "2026-05-21T17:37:24.777Z" + }, + { + "$type": "Document", + "DocumentIndex": 7, + "Title": "Settings.razor", + "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\Settings.razor", + "RelativeDocumentMoniker": "Components\\Pages\\Settings.razor", + "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\Settings.razor", + "RelativeToolTip": "Components\\Pages\\Settings.razor", + "ViewState": "AgIAAJsAAAAAAAAAAAAAAKwAAAAWAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|", + "WhenOpened": "2026-05-15T16:43:26.6Z" }, { "$type": "Document", "DocumentIndex": 1, + "Title": "Editor.razor", + "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\Editor.razor", + "RelativeDocumentMoniker": "Components\\Pages\\Editor.razor", + "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\Editor.razor", + "RelativeToolTip": "Components\\Pages\\Editor.razor", + "ViewState": "AgIAAFsCAAAAAAAAAAAiwEgDAAAkAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|", + "WhenOpened": "2026-05-16T13:01:59.743Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "ProjectService.cs", + "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\ProjectService.cs", + "RelativeDocumentMoniker": "Services\\ProjectService.cs", + "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\ProjectService.cs", + "RelativeToolTip": "Services\\ProjectService.cs", + "ViewState": "AgIAAN0AAAAAAAAAAAApwO0AAAAMAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-05-15T15:56:55.229Z" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "OllamaAssistant.razor", + "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\OllamaAssistant.razor", + "RelativeDocumentMoniker": "Components\\Pages\\OllamaAssistant.razor", + "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\OllamaAssistant.razor", + "RelativeToolTip": "Components\\Pages\\OllamaAssistant.razor", + "ViewState": "AgIAANoAAAAAAAAAAAAiwPIAAAAZAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|", + "WhenOpened": "2026-05-20T05:14:39.037Z" + }, + { + "$type": "Document", + "DocumentIndex": 5, + "Title": "MainLayout.razor", + "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Layout\\MainLayout.razor", + "RelativeDocumentMoniker": "Components\\Layout\\MainLayout.razor", + "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Layout\\MainLayout.razor", + "RelativeToolTip": "Components\\Layout\\MainLayout.razor", + "ViewState": "AgIAACABAAAAAAAAAAApwDQBAAARAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|", + "WhenOpened": "2026-05-15T16:04:36.444Z" + }, + { + "$type": "Document", + "DocumentIndex": 8, + "Title": "UserEntity.cs", + "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Data\\UserEntity.cs", + "RelativeDocumentMoniker": "Data\\UserEntity.cs", + "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Data\\UserEntity.cs", + "RelativeToolTip": "Data\\UserEntity.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAAVAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-05-24T04:52:42.227Z" + }, + { + "$type": "Document", + "DocumentIndex": 6, + "Title": "Program.cs", + "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Program.cs", + "RelativeDocumentMoniker": "Program.cs", + "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Program.cs", + "RelativeToolTip": "Program.cs", + "ViewState": "AgIAACwAAAAAAAAAAAAQwD8AAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-05-20T04:07:21.54Z" + }, + { + "$type": "Document", + "DocumentIndex": 10, "Title": "IThemeService.cs", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\IThemeService.cs", "RelativeDocumentMoniker": "Services\\IThemeService.cs", @@ -203,12 +304,11 @@ "RelativeToolTip": "Services\\IThemeService.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAqwAgAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2026-05-21T17:32:01.784Z", - "EditorCaption": "" + "WhenOpened": "2026-05-21T17:32:01.784Z" }, { "$type": "Document", - "DocumentIndex": 10, + "DocumentIndex": 16, "Title": "RedirectToLogin.razor", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\RedirectToLogin.razor", "RelativeDocumentMoniker": "Components\\RedirectToLogin.razor", @@ -220,31 +320,7 @@ }, { "$type": "Document", - "DocumentIndex": 6, - "Title": "OllamaAssistant.razor", - "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\OllamaAssistant.razor", - "RelativeDocumentMoniker": "Components\\Pages\\OllamaAssistant.razor", - "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\OllamaAssistant.razor", - "RelativeToolTip": "Components\\Pages\\OllamaAssistant.razor", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAGgAAAAMAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|", - "WhenOpened": "2026-05-20T05:14:39.037Z" - }, - { - "$type": "Document", - "DocumentIndex": 7, - "Title": "MainLayout.razor", - "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Layout\\MainLayout.razor", - "RelativeDocumentMoniker": "Components\\Layout\\MainLayout.razor", - "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Layout\\MainLayout.razor", - "RelativeToolTip": "Components\\Layout\\MainLayout.razor", - "ViewState": "AgIAAB4BAAAAAAAAAAApwDQBAAApAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|", - "WhenOpened": "2026-05-15T16:04:36.444Z" - }, - { - "$type": "Document", - "DocumentIndex": 2, + "DocumentIndex": 11, "Title": "ISettingsService.cs", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\ISettingsService.cs", "RelativeDocumentMoniker": "Services\\ISettingsService.cs", @@ -256,7 +332,7 @@ }, { "$type": "Document", - "DocumentIndex": 3, + "DocumentIndex": 12, "Title": "IRagService.cs", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\IRagService.cs", "RelativeDocumentMoniker": "Services\\IRagService.cs", @@ -268,7 +344,7 @@ }, { "$type": "Document", - "DocumentIndex": 13, + "DocumentIndex": 17, "Title": "Login.razor", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\Login.razor", "RelativeDocumentMoniker": "Components\\Pages\\Login.razor", @@ -280,7 +356,7 @@ }, { "$type": "Document", - "DocumentIndex": 8, + "DocumentIndex": 14, "Title": "ThemeService.cs", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\ThemeService.cs", "RelativeDocumentMoniker": "Services\\ThemeService.cs", @@ -292,31 +368,7 @@ }, { "$type": "Document", - "DocumentIndex": 11, - "Title": "Program.cs", - "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Program.cs", - "RelativeDocumentMoniker": "Program.cs", - "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Program.cs", - "RelativeToolTip": "Program.cs", - "ViewState": "AgIAABwAAAAAAAAAAAAAABIAAAAsAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2026-05-20T04:07:21.54Z" - }, - { - "$type": "Document", - "DocumentIndex": 12, - "Title": "OllamaService.cs", - "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\OllamaService.cs", - "RelativeDocumentMoniker": "Services\\OllamaService.cs", - "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\OllamaService.cs", - "RelativeToolTip": "Services\\OllamaService.cs", - "ViewState": "AgIAAGEAAAAAAAAAAAAcwHsAAAAVAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2026-05-16T06:43:46.404Z" - }, - { - "$type": "Document", - "DocumentIndex": 9, + "DocumentIndex": 15, "Title": "logo.jpg", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Assets\\logo.jpg", "RelativeDocumentMoniker": "Assets\\logo.jpg", @@ -327,7 +379,7 @@ }, { "$type": "Document", - "DocumentIndex": 16, + "DocumentIndex": 19, "Title": "OllamaSettings.cs", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Models\\OllamaSettings.cs", "RelativeDocumentMoniker": "Models\\OllamaSettings.cs", @@ -350,7 +402,7 @@ }, { "$type": "Document", - "DocumentIndex": 19, + "DocumentIndex": 20, "Title": "FileScannerService.cs", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\FileScannerService.cs", "RelativeDocumentMoniker": "Services\\FileScannerService.cs", @@ -362,19 +414,7 @@ }, { "$type": "Document", - "DocumentIndex": 17, - "Title": "IOllamaService.cs", - "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\IOllamaService.cs", - "RelativeDocumentMoniker": "Services\\IOllamaService.cs", - "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\IOllamaService.cs", - "RelativeToolTip": "Services\\IOllamaService.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAqwAkAAAAPAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2026-05-16T07:20:19.212Z" - }, - { - "$type": "Document", - "DocumentIndex": 14, + "DocumentIndex": 18, "Title": "TotpHelper.cs", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\TotpHelper.cs", "RelativeDocumentMoniker": "Services\\TotpHelper.cs", @@ -386,7 +426,7 @@ }, { "$type": "Document", - "DocumentIndex": 20, + "DocumentIndex": 21, "Title": "Project.cs", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Models\\Project.cs", "RelativeDocumentMoniker": "Models\\Project.cs", @@ -398,19 +438,7 @@ }, { "$type": "Document", - "DocumentIndex": 15, - "Title": "Settings.razor", - "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\Settings.razor", - "RelativeDocumentMoniker": "Components\\Pages\\Settings.razor", - "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\Settings.razor", - "RelativeToolTip": "Components\\Pages\\Settings.razor", - "ViewState": "AgIAAAwAAAAAAAAAAAAAAIYAAAAlAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|", - "WhenOpened": "2026-05-15T16:43:26.6Z" - }, - { - "$type": "Document", - "DocumentIndex": 21, + "DocumentIndex": 22, "Title": "RagService.cs", "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\RagService.cs", "RelativeDocumentMoniker": "Services\\RagService.cs", @@ -420,18 +448,6 @@ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2026-05-18T15:40:05.413Z" }, - { - "$type": "Document", - "DocumentIndex": 18, - "Title": "ProjectService.cs", - "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\ProjectService.cs", - "RelativeDocumentMoniker": "Services\\ProjectService.cs", - "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Services\\ProjectService.cs", - "RelativeToolTip": "Services\\ProjectService.cs", - "ViewState": "AgIAADQAAAAAAAAAAAAqwEYAAAAWAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2026-05-15T15:56:55.229Z" - }, { "$type": "Document", "DocumentIndex": 23, @@ -444,18 +460,6 @@ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|", "WhenOpened": "2026-05-15T16:04:37.739Z" }, - { - "$type": "Document", - "DocumentIndex": 22, - "Title": "Editor.razor", - "DocumentMoniker": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\Editor.razor", - "RelativeDocumentMoniker": "Components\\Pages\\Editor.razor", - "ToolTip": "E:\\ollama_net\\ollama\\AuthorBuddy.Web\\Components\\Pages\\Editor.razor", - "RelativeToolTip": "Components\\Pages\\Editor.razor", - "ViewState": "AgIAAAoAAACA6NuCpTYvwKAAAAAcAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000759|", - "WhenOpened": "2026-05-16T13:01:59.743Z" - }, { "$type": "Document", "DocumentIndex": 25, @@ -587,10 +591,6 @@ "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|", "WhenOpened": "2026-05-14T10:14:25.605Z" - }, - { - "$type": "Bookmark", - "Name": "RST:0:0:{b3f9f954-0ca5-0091-76b4-34a47f44c954}" } ] } diff --git a/Assets/Unbenannte Tabelle - Google Sheets.pdf b/Assets/Unbenannte Tabelle - Google Sheets.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8fe414241bc4561890570169b5281b23230f9c4e GIT binary patch literal 49320 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
qU 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 literal 0 HcmV?d00001 diff --git a/AuthorBuddy.Web.csproj b/AuthorBuddy.Web.csproj index e815d63..046c7d0 100644 --- a/AuthorBuddy.Web.csproj +++ b/AuthorBuddy.Web.csproj @@ -9,7 +9,9 @@ + + diff --git a/Components/App.razor b/Components/App.razor index 54f7f2c..b85aee7 100644 --- a/Components/App.razor +++ b/Components/App.razor @@ -20,6 +20,8 @@ + + diff --git a/Components/CategorySelector.razor b/Components/CategorySelector.razor new file mode 100644 index 0000000..12bfd46 --- /dev/null +++ b/Components/CategorySelector.razor @@ -0,0 +1,118 @@ +@using AuthorBuddy.Web.Models +@inject IProjectService ProjectService + +
+ @foreach (var cat in _allCategories) + { + var isActive = (Current & cat) == cat; + var disabled = _disabledCategories.Contains(cat); + + } +
+ + + +@code { + private static readonly FileCategory[] _allCategories = new[] + { + FileCategory.Character, + FileCategory.Exposee, + FileCategory.Fact, + FileCategory.Document + }; + + private HashSet _disabledCategories = new(); + + [Parameter] public FileCategory Current { get; set; } + [Parameter] public int ProjectId { get; set; } + [Parameter] public string FilePath { get; set; } = string.Empty; + [Parameter] public EventCallback OnCategoryChanged { get; set; } + + protected override void OnParametersSet() + { + UpdateDisabled(); + } + + private void UpdateDisabled() + { + _disabledCategories.Clear(); + foreach (var cat in _allCategories) + { + if (cat == Current) continue; + var combined = Current | cat; + if (!FileCategoryHelper.IsValid(combined)) + _disabledCategories.Add(cat); + } + } + + private async Task ToggleCategory(FileCategory cat) + { + if (_disabledCategories.Contains(cat)) return; + + var newCategory = Current.HasFlag(cat) ? Current & ~cat : Current | cat; + + if (!FileCategoryHelper.IsValid(newCategory)) return; + + await ProjectService.SetFileCategoryAsync(ProjectId, FilePath, newCategory); + await OnCategoryChanged.InvokeAsync(newCategory); + } + + private static string CategoryName(FileCategory cat) => cat switch + { + FileCategory.Character => "Charakter", + FileCategory.Exposee => "Exposé", + FileCategory.Fact => "Fakt", + FileCategory.Document => "Dokument", + _ => "" + }; + + private static string CategoryIcon(FileCategory cat) => cat switch + { + FileCategory.Character => "👤", + FileCategory.Exposee => "📋", + FileCategory.Fact => "📌", + FileCategory.Document => "📄", + _ => "" + }; +} diff --git a/Components/CopyCreateToolbar.razor b/Components/CopyCreateToolbar.razor new file mode 100644 index 0000000..aaa2f33 --- /dev/null +++ b/Components/CopyCreateToolbar.razor @@ -0,0 +1,149 @@ +@inject IJSRuntime JS +@inject ISettingsService SettingsService +@inject IProjectService ProjectService + +
+ + +
+ +@if (showCreateDialog) +{ + +} + + + +@code { + [Parameter] public string Text { get; set; } = string.Empty; + [Parameter] public string? DefaultFileName { get; set; } + [Parameter] public EventCallback OnFileCreated { get; set; } + + private bool showCreateDialog; + private string newFileName = string.Empty; + private int? _projectId; + private string? _projectPath; + private bool _isCopyDisabled; + + protected override async Task OnInitializedAsync() + { + _projectId = SettingsService.CurrentProjectId; + if (_projectId.HasValue && _projectId > 0) + { + var project = await ProjectService.GetProjectAsync(_projectId.Value); + _projectPath = project?.RootPath; + } + + if (!string.IsNullOrEmpty(DefaultFileName)) + newFileName = DefaultFileName; + } + + private async Task CopyToClipboard() + { + if (string.IsNullOrEmpty(Text) || _isCopyDisabled) return; + _isCopyDisabled = true; + try + { + await JS.InvokeVoidAsync("navigator.clipboard.writeText", Text); + } + catch + { + // Fallback for older browsers + try + { + var textArea = System.Text.Encodings.Web.JavaScriptEncoder.Default.Encode(Text); + await JS.InvokeVoidAsync("eval", $"navigator.clipboard.writeText('{textArea}')"); + } + catch { } + } + finally + { + _isCopyDisabled = false; + } + } + + private void ShowCreateDialog() + { + newFileName = DefaultFileName ?? string.Empty; + showCreateDialog = true; + } + + private void CancelCreate() + { + showCreateDialog = false; + newFileName = string.Empty; + } + + private async Task CreateFile() + { + if (string.IsNullOrWhiteSpace(newFileName) || string.IsNullOrEmpty(Text)) return; + + try + { + var fileName = newFileName.Trim(); + if (!fileName.EndsWith(".md", StringComparison.OrdinalIgnoreCase)) + fileName += ".md"; + + string savePath; + if (!string.IsNullOrEmpty(_projectPath) && Directory.Exists(_projectPath)) + { + savePath = Path.Combine(_projectPath, fileName); + } + else + { + savePath = Path.Combine(Directory.GetCurrentDirectory(), fileName); + } + + if (File.Exists(savePath)) + { + var dir = Path.GetDirectoryName(savePath)!; + var name = Path.GetFileNameWithoutExtension(savePath); + var ext = Path.GetExtension(savePath); + var counter = 1; + do + { + savePath = Path.Combine(dir, $"{name}_{counter}{ext}"); + counter++; + } while (File.Exists(savePath)); + } + + await File.WriteAllTextAsync(savePath, Text); + showCreateDialog = false; + await OnFileCreated.InvokeAsync(Path.GetFileName(savePath)); + } + catch { } + } +} diff --git a/Components/Layout/MainLayout.razor b/Components/Layout/MainLayout.razor index 449cea5..86886dc 100644 --- a/Components/Layout/MainLayout.razor +++ b/Components/Layout/MainLayout.razor @@ -3,10 +3,13 @@ @inject IProjectService ProjectService @inject ISettingsService SettingsService @inject IThemeService ThemeService +@inject IOllamaSetupService SetupService @inject OllamaSettings OllamaSettings @inject IAuthService AuthService @inject CustomAuthStateProvider AuthStateProvider @inject ILocalizationService Loc +@inject OperationState OpState +@using AuthorBuddy.Web.Models @if (_isLoading) { @@ -54,12 +57,18 @@ else { } @@ -111,38 +120,110 @@ else @Loc["nav.projects.files"] + @if (_selectedFiles.Count > 0) + { + + } } +@if (_showExportDialog) +{ + +} + @if (showRenameDialog) {
- @statusText - @if (isBusy) + @OpState.StatusText + @if (OpState.IsBusy) { - + + } + @if (!string.IsNullOrEmpty(OpState.ThoughtText)) + { + @OpState.ThoughtText }
} + + @if (_showInfoOverlay) {
@@ -269,10 +404,11 @@ else private List? projects; private List? fileTree; private int currentProjectId; + private string? currentProjectName; private string? currentFilePath; - private string statusText = "Bereit"; - private bool isBusy; - private double operationProgress; + private string copyProjectName = string.Empty; + private string copyProjectPath = string.Empty; + private Project? copyProjectSource; private bool showRenameDialog; private string renameNewName = string.Empty; private FileTreeItem? renameTarget; @@ -280,19 +416,40 @@ else private string newFileName = string.Empty; private FileTreeItem? newFileParentDir; private bool showCopyProjectDialog; - private string copyProjectName = string.Empty; - private string copyProjectPath = string.Empty; - private Project? copyProjectSource; + private Action? _opStateHandler; + private string? _editingCategoryPath; + private HashSet _selectedFiles = new(); + private bool _showExportDialog; + private string exportFileName = string.Empty; + private string exportFormat = "Html"; [Inject] private NavigationManager Navigation { get; set; } = default!; + [Inject] + private IJSRuntime JS { get; set; } = default!; + + [Inject] + private IExportService ExportService { get; set; } = default!; + protected override async Task OnInitializedAsync() { + _opStateHandler = () => InvokeAsync(StateHasChanged); + OpState.OnChange += _opStateHandler; await SettingsService.InitializeAsync(); await Loc.InitAsync(); - statusText = Loc["common.status.ready"]; + OpState.SetStatus(Loc["common.status.ready"]); Navigation.LocationChanged += OnLocationChanged; + + // Startup Setup Check + _ = Task.Run(async () => + { + var result = await SetupService.AnalyzeSettingsAsync(); + if (!result.IsCorrect) + { + OpState.SetStatus("Ollama-Einstellungen suboptimal. Setup-Assistent empfohlen.", false); + } + }); } private async Task LoadCurrentUser() @@ -332,7 +489,7 @@ else if (!_isAuthenticated && Program.DebugAutoLogin) { var users = await SettingsService.GetUsersAsync(); - var first = users.FirstOrDefault(); + var first = users.FirstOrDefault(u => u.Role == UserRole.Administrator); if (first != null) { await AuthService.AdminBypassLoginAsync(first.Id); @@ -355,6 +512,8 @@ else public void Dispose() { + if (_opStateHandler != null) + OpState.OnChange -= _opStateHandler; Navigation.LocationChanged -= OnLocationChanged; } @@ -376,10 +535,13 @@ else if (currentProjectId > 0) { + var project = await ProjectService.GetProjectAsync(currentProjectId); + currentProjectName = project?.Name; await LoadFileTree(); } else { + currentProjectName = null; fileTree = null; } } @@ -396,11 +558,27 @@ else } } + private void ToggleCategoryEditor(FileTreeItem item) + { + if (_editingCategoryPath == item.FullPath) + _editingCategoryPath = null; + else + _editingCategoryPath = item.FullPath; + } + + private void OnCategoryChanged(FileTreeItem item, FileCategory newCategory) + { + item.Category = newCategory; + _editingCategoryPath = null; + } + private async Task LoadProjects() { try { - projects = await ProjectService.GetAllProjectsAsync(); + var currentUser = AuthService.CurrentUser; + int? filterUserId = currentUser?.Role == UserRole.Administrator ? null : currentUser?.Id; + projects = await ProjectService.GetAllProjectsAsync(filterUserId); } catch { @@ -428,8 +606,8 @@ else private void BeginCopyProject(Project project) { copyProjectSource = project; - copyProjectName = $"{project.Name} (Kopie)"; - copyProjectPath = project.RootPath + "_Kopie"; + copyProjectName = project.Name + " (Kopie)"; + copyProjectPath = ProjectPathHelper.SuggestPath(project.Name + "_Kopie"); showCopyProjectDialog = true; } @@ -446,13 +624,19 @@ else if (copyProjectSource == null || string.IsNullOrWhiteSpace(copyProjectName) || string.IsNullOrWhiteSpace(copyProjectPath)) return; + if (!ProjectPathHelper.IsPathAllowed(copyProjectPath)) + { + OpState.SetStatus($"⚠ Pfad nicht erlaubt. Verwende: {ProjectPathHelper.AllowedBasePath}", true); + showCopyProjectDialog = false; + return; + } + try { var userId = (await AuthService.GetCurrentUserAsync())?.Id; if (userId == null) return; - statusText = $"{Loc["nav.status.project_copied"]} {copyProjectName}..."; - isBusy = true; + OpState.SetStatus($"{Loc["nav.status.project_copied"]} {copyProjectName}...", true); StateHasChanged(); var newId = await ProjectService.CopyProjectAsync(copyProjectSource.Id, copyProjectName, copyProjectPath, userId.Value); @@ -464,15 +648,15 @@ else await SelectProject(newProject); } - statusText = $"{Loc["nav.status.project_copied"]} {copyProjectName}"; + OpState.SetStatus($"{Loc["nav.status.project_copied"]} {copyProjectName}", true); } catch (Exception ex) { - statusText = $"{Loc["common.error"]} {ex.Message}"; + OpState.SetStatus($"{Loc["common.error"]} {ex.Message}", true); } finally { - isBusy = false; + OpState.SetStatus(OpState.StatusText, false); showCopyProjectDialog = false; copyProjectSource = null; copyProjectName = string.Empty; @@ -523,6 +707,7 @@ else activeSection = "files"; SettingsService.CurrentProjectId = project.Id; currentProjectId = project.Id; + currentProjectName = project.Name; SettingsService.CurrentFilePath = null; await SettingsService.SaveLastProjectIdAsync(project.Id); await SettingsService.LoadProjectSettingsAsync(); @@ -560,7 +745,7 @@ else var newPath = Path.Combine(dir, renameNewName); if (File.Exists(newPath)) { - statusText = Loc["nav.error.file_exists"]; + OpState.SetStatus(Loc["nav.error.file_exists"]); return; } File.Move(renameTarget.FullPath, newPath); @@ -568,11 +753,11 @@ else if (currentFilePath == renameTarget.FullPath) SettingsService.CurrentFilePath = newPath; - statusText = $"{Loc["nav.status.renamed_to"]} {renameNewName}"; + OpState.SetStatus($"{Loc["nav.status.renamed_to"]} {renameNewName}"); } catch (Exception ex) { - statusText = $"{Loc["common.error"]} {ex.Message}"; + OpState.SetStatus($"{Loc["common.error"]} {ex.Message}"); } finally { @@ -609,15 +794,15 @@ else path += ".md"; if (File.Exists(path)) { - statusText = Loc["nav.error.file_exists"]; + OpState.SetStatus(Loc["nav.error.file_exists"]); return; } File.WriteAllText(path, $"# {Path.GetFileNameWithoutExtension(path)}\n\n"); - statusText = $"{Loc["nav.status.created"]} {Path.GetFileName(path)}"; + OpState.SetStatus($"{Loc["nav.status.created"]} {Path.GetFileName(path)}"); } catch (Exception ex) { - statusText = $"{Loc["common.error"]} {ex.Message}"; + OpState.SetStatus($"{Loc["common.error"]} {ex.Message}"); } finally { @@ -637,11 +822,54 @@ else Navigation.NavigateTo($"/editor/file/{currentProjectId}?t={DateTime.Now.Ticks}"); } - public void SetStatus(string text, bool busy = false, double progress = 0) + private void ToggleFileSelection(string path) { - statusText = text; - isBusy = busy; - operationProgress = progress; - StateHasChanged(); + if (!_selectedFiles.Remove(path)) + _selectedFiles.Add(path); } + + private async Task DoExport() + { + var format = exportFormat switch + { + "Html" => ExportFormat.Html, + "Markdown" => ExportFormat.Markdown, + "Zip" => ExportFormat.Zip, + "Docx" => ExportFormat.Docx, + "Pdf" => ExportFormat.Pdf, + _ => ExportFormat.Html + }; + + var ext = format switch + { + ExportFormat.Html => ".html", + ExportFormat.Markdown => ".md", + ExportFormat.Zip => ".zip", + ExportFormat.Docx => ".docx", + ExportFormat.Pdf => ".pdf", + _ => ".html" + }; + + var name = string.IsNullOrWhiteSpace(exportFileName) + ? $"Export_{DateTime.Now:yyyyMMdd_HHmmss}" + : exportFileName; + + var data = await ExportService.ExportAsync(currentProjectId, _selectedFiles.ToList(), format); + + var mime = format switch + { + ExportFormat.Html => "text/html", + ExportFormat.Markdown => "text/markdown", + ExportFormat.Zip => "application/zip", + ExportFormat.Docx => "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + ExportFormat.Pdf => "application/pdf", + _ => "text/html" + }; + + await JS.InvokeVoidAsync("downloadFile", $"{name}{ext}", Convert.ToBase64String(data), mime); + + _showExportDialog = false; + _selectedFiles.Clear(); + } + } diff --git a/Components/Layout/MainLayout.razor.css b/Components/Layout/MainLayout.razor.css index ea76f1f..02769b8 100644 --- a/Components/Layout/MainLayout.razor.css +++ b/Components/Layout/MainLayout.razor.css @@ -9,6 +9,19 @@ main { flex: 1; } +.main-header { + padding: 12px 24px; + border-bottom: 1px solid var(--border-color); + background: var(--card-bg); +} + +.main-header h2 { + margin: 0; + font-size: 1.25rem; + font-weight: 600; + color: var(--text-color); +} + #blazor-error-ui { color-scheme: light only; background: lightyellow; diff --git a/Components/Pages/DbAdmin.razor b/Components/Pages/DbAdmin.razor new file mode 100644 index 0000000..d93a4d2 --- /dev/null +++ b/Components/Pages/DbAdmin.razor @@ -0,0 +1,195 @@ +@page "/db-admin" +@attribute [Authorize] +@inject IDbAdminService DbAdminSvc +@inject ILocalizationService Loc +@inject NavigationManager Navigation +@inject IAuthService AuthService + +Datenbank Administration - Author Buddy + +
+

Datenbank Administration

+ +
+ + + @records.Count Einträge in "@selectedCollection" + +
+ + @if (records.Count == 0) + { +

Leere Sammlung.

+ } + else + { +
+ + + + + @foreach (var key in columnOrder) + { + + } + + + + + @foreach (var record in records) + { + + + @foreach (var key in columnOrder) + { + + } + + + } + +
ID@keyAktionen
@record.Id + @Truncate(record.Fields.GetValueOrDefault(key), 60) + + + +
+
+ } + + @if (!string.IsNullOrEmpty(statusMessage)) + { +
@statusMessage
+ } + + +
+ +@if (editingRecord != null) +{ + +} + +@if (deletingRecord != null) +{ + +} + +@code { + private List collections = new(); + private string selectedCollection = "users"; + private List records = new(); + private List columnOrder = new(); + private string statusMessage = string.Empty; + + private DbRecord? editingRecord; + private Dictionary editValues = new(); + + private DbRecord? deletingRecord; + + protected override void OnInitialized() + { + var user = AuthService.CurrentUser; + if (user?.Role != UserRole.Administrator) + { + Navigation.NavigateTo("/"); + return; + } + + collections = DbAdminSvc.GetCollections(); + if (collections.Count > 0) + selectedCollection = collections[0].Name; + LoadRecords(); + } + + private void LoadRecords() + { + records = DbAdminSvc.GetAll(selectedCollection); + columnOrder = records.Count > 0 + ? records[0].Fields.Keys.ToList() + : new List(); + statusMessage = string.Empty; + } + + private void StartEdit(DbRecord record) + { + editingRecord = record; + editValues = new Dictionary(record.Fields); + } + + private void CancelEdit() + { + editingRecord = null; + editValues.Clear(); + } + + private void SaveEdit() + { + if (editingRecord == null) return; + var ok = DbAdminSvc.Update(selectedCollection, editingRecord.Id, editValues); + statusMessage = ok ? "Gespeichert." : "Fehler beim Speichern."; + editingRecord = null; + editValues.Clear(); + LoadRecords(); + } + + private void ConfirmDelete(DbRecord record) + { + deletingRecord = record; + } + + private void CancelDelete() + { + deletingRecord = null; + } + + private void DeleteRecord() + { + if (deletingRecord == null) return; + var ok = DbAdminSvc.Delete(selectedCollection, deletingRecord.Id); + statusMessage = ok ? "Gelöscht." : "Fehler beim Löschen."; + deletingRecord = null; + LoadRecords(); + } + + private static string? Truncate(string? val, int max) + { + if (val == null) return null; + return val.Length > max ? val[..max] + "..." : val; + } +} diff --git a/Components/Pages/Editor.razor b/Components/Pages/Editor.razor index 8c6b8f1..a4c09c4 100644 --- a/Components/Pages/Editor.razor +++ b/Components/Pages/Editor.razor @@ -9,6 +9,10 @@ @inject IWikipediaService WikipediaService @inject NavigationManager Navigation @inject ILocalizationService Loc +@inject IAuthService AuthService +@inject OllamaSettings OllamaSettings +@inject OperationState OpState +@inject IJSRuntime JS @implements IDisposable @rendermode InteractiveServer @@ -21,6 +25,24 @@ @oninput="OnContentChanged" value="@editorContent" placeholder="@Loc["editor.placeholder.content"]"> +
+ + + + + + + + + + + + + + + +
+
@@ -73,7 +95,8 @@ {
-

@Loc["editor.spellcheck.heading"]

+

@Loc["editor.spellcheck.heading"]

+
@@ -177,7 +200,8 @@ else if (!string.IsNullOrEmpty(analysisResult) && !showVersionBrowser) {
-

@Loc["editor.result.heading"]

+

@Loc["editor.result.heading"]

+
@analysisResult
} @@ -196,6 +220,20 @@
+ Erlaubter Pfad: @ProjectPathHelper.AllowedBasePath +
+
+ +
+ + +