From 32e0c959e8589f574d1c46b96d35f49c98721566 Mon Sep 17 00:00:00 2001
From: retoor <retoor@molodetz.nl>
Date: Tue, 1 Apr 2025 16:21:29 +0200
Subject: [PATCH] Progress.

---
 src/snek/app.py                          |  2 ++
 src/snek/templates/settings.html         | 36 ++++++++++++++++++++++++
 src/snek/templates/sidebar_settings.html | 14 +++++++++
 src/snek/view/settings.py                |  8 ++++++
 src/snek/webdav.py                       |  5 ++--
 5 files changed, 63 insertions(+), 2 deletions(-)
 create mode 100644 src/snek/templates/settings.html
 create mode 100644 src/snek/templates/sidebar_settings.html
 create mode 100644 src/snek/view/settings.py

diff --git a/src/snek/app.py b/src/snek/app.py
index 984fcf3..d043c0e 100644
--- a/src/snek/app.py
+++ b/src/snek/app.py
@@ -42,6 +42,7 @@ from snek.view.terminal import TerminalSocketView, TerminalView
 from snek.view.upload import UploadView
 from snek.view.web import WebView
 from snek.webdav import WebdavApplication
+from snek.view.settings import SettingsView
 
 SESSION_KEY = b"c79a0c5fda4b424189c427d28c9f7c34"
 
@@ -137,6 +138,7 @@ class Application(BaseApplication):
         self.router.add_view("/docs.html", DocsHTMLView)
         self.router.add_view("/docs.md", DocsMDView)
         self.router.add_view("/status.json", StatusView)
+        self.router.add_view("/settings.html", SettingsView)
         self.router.add_view("/web.html", WebView)
         self.router.add_view("/login.html", LoginView)
         self.router.add_view("/login.json", LoginView)
diff --git a/src/snek/templates/settings.html b/src/snek/templates/settings.html
new file mode 100644
index 0000000..cfb186c
--- /dev/null
+++ b/src/snek/templates/settings.html
@@ -0,0 +1,36 @@
+{% extends "app.html" %}
+
+{% block sidebar %}
+
+{% include "sidebar_settings.html" %}
+
+{% endblock %}
+
+{% block head %}
+   <link href="https://cdn.bootcdn.net/ajax/libs/monaco-editor/0.20.0/min/vs/editor/editor.main.min.css" rel="stylesheet">
+
+    <script src="https://cdn.bootcdn.net/ajax/libs/monaco-editor/0.20.0/min/vs/loader.min.js"></script>
+
+{% endblock %}
+
+{% block main %}
+
+<h1>Setting page</h1>
+
+<div id="profile_description"></div>
+
+
+
+<script type="module">
+
+        require.config({ paths: { 'vs': 'https://cdn.bootcdn.net/ajax/libs/monaco-editor/0.20.0/min/vs' } });
+
+        require(['vs/editor/editor.main'], function () {
+var editor = monaco.editor.create(document.getElementById('profile_description'), {
+                value: phpCode,
+                language: 'php'
+            });
+        })
+</script>
+
+{% endblock main %}
diff --git a/src/snek/templates/sidebar_settings.html b/src/snek/templates/sidebar_settings.html
new file mode 100644
index 0000000..8e18412
--- /dev/null
+++ b/src/snek/templates/sidebar_settings.html
@@ -0,0 +1,14 @@
+<style>
+  .channel-list-item-highlight {
+    /* xxx */
+  }
+</style>
+<aside class="sidebar" id="channelSidebar">
+    <h2>Settings</h2>
+    <ul>
+        <li><a class="no-select" href="/settings.html">Profile</a></li>
+        <li><a class="no-select" href="/settings-notifications.html">Notifications</a></li>
+        <li><a class="no-select" href="/settings-privacy.html">Privacy</a></li> 
+    </ul>
+
+  </aside>
diff --git a/src/snek/view/settings.py b/src/snek/view/settings.py
new file mode 100644
index 0000000..fe181f2
--- /dev/null
+++ b/src/snek/view/settings.py
@@ -0,0 +1,8 @@
+from snek.system.view import BaseView 
+
+class SettingsView(BaseView):
+    
+    login_required = True
+
+    async def get(self):
+        return await self.render_template('settings.html')
diff --git a/src/snek/webdav.py b/src/snek/webdav.py
index a372b8b..9a2b9e4 100755
--- a/src/snek/webdav.py
+++ b/src/snek/webdav.py
@@ -219,8 +219,9 @@ class WebdavApplication(aiohttp.web.Application):
         etree.SubElement(prop, "{DAV:}displayname").text = full_path.name
         etree.SubElement(prop, "{DAV:}lockdiscovery")
         mimetype, _ = mimetypes.guess_type(full_path.name)
-        etree.SubElement(prop, "{DAV:}contenttype").text = mimetype
-        etree.SubElement(prop, "{DAV:}getcontentlength").text = str(
+        if full_path.is_file():
+            etree.SubElement(prop, "{DAV:}contenttype").text = mimetype
+            etree.SubElement(prop, "{DAV:}getcontentlength").text = str(
             full_path.stat().st_size
             if full_path.is_file()
             else self.get_directory_size(full_path)