diff --git a/cry/cli.py b/cry/cli.py
index beaed84..6bb988b 100644
--- a/cry/cli.py
+++ b/cry/cli.py
@@ -1,8 +1,5 @@
# https://simonwillison.net/2023/Sep/30/cli-tools-python/
import asyncio
-import html
-import http.server
-import io
import logging
import click
@@ -11,6 +8,7 @@ from . import feed
from . import feedfinder
from . import database
from . import opml
+from . import web
LOG = logging.getLogger(__name__)
@@ -249,59 +247,4 @@ def unsubscribe(url):
@cli.command("serve")
def serve():
- class Handler(http.server.BaseHTTPRequestHandler):
- def do_GET(self):
- db = database.Database.local()
- feeds = db.load_all(feed_limit=10)
- del db
-
- feeds.sort(key=feed.sort_key, reverse=True)
-
- buffer = io.StringIO()
- buffer.write(
- """
-
-
-
- Subscribed Feeds
-
-
- Feeds
- """
- )
- for f in feeds:
- feed_title = html.escape(f.title)
- if len(f.entries) > 0:
- ago = f" ({f.entries[0].time_ago()})"
- else:
- ago = ""
- buffer.write(f"")
- buffer.write(f'
')
- if len(f.entries) > 0:
- buffer.write(f"
")
- for entry in f.entries:
- title = html.escape(entry.title)
- buffer.write(
- f'- {title} ({entry.time_ago()})
'
- )
- buffer.write(f"
")
- else:
- buffer.write("
No entries...")
- buffer.write(f"
") # feed
- buffer.flush()
- text = buffer.getvalue()
- response = text.encode("utf-8")
-
- self.send_response(200)
- self.send_header("content-type", "text/html")
- self.send_header("content-length", str(len(response)))
- self.end_headers()
- self.wfile.write(response)
-
- with http.server.HTTPServer(("", 8000), Handler) as server:
- click.echo("Serving at http://127.0.0.1:8000/")
- server.serve_forever()
+ web.serve()
diff --git a/cry/web.py b/cry/web.py
new file mode 100644
index 0000000..c6e5801
--- /dev/null
+++ b/cry/web.py
@@ -0,0 +1,72 @@
+import html
+import http.server
+import io
+
+from . import database
+from . import feed
+
+
+class Handler(http.server.BaseHTTPRequestHandler):
+ def do_GET(self):
+ if self.path == "/":
+ return self.serve_feeds()
+ else:
+ self.send_response_only(404)
+
+ def serve_feeds(self):
+ db = database.Database.local()
+ feeds = db.load_all(feed_limit=10)
+ del db
+
+ feeds.sort(key=feed.sort_key, reverse=True)
+
+ buffer = io.StringIO()
+ buffer.write(
+ """
+
+
+
+ Subscribed Feeds
+
+
+ Feeds
+ """
+ )
+ for f in feeds:
+ feed_title = html.escape(f.title)
+ if len(f.entries) > 0:
+ ago = f" ({f.entries[0].time_ago()})"
+ else:
+ ago = ""
+ buffer.write(f"")
+ buffer.write(f'
')
+ if len(f.entries) > 0:
+ buffer.write(f"
")
+ for entry in f.entries:
+ title = html.escape(entry.title)
+ buffer.write(
+ f'- {title} ({entry.time_ago()})
'
+ )
+ buffer.write(f"
")
+ else:
+ buffer.write("
No entries...")
+ buffer.write(f"
") # feed
+ buffer.flush()
+ text = buffer.getvalue()
+ response = text.encode("utf-8")
+
+ self.send_response(200)
+ self.send_header("content-type", "text/html")
+ self.send_header("content-length", str(len(response)))
+ self.end_headers()
+ self.wfile.write(response)
+
+
+def serve():
+ with http.server.HTTPServer(("", 8000), Handler) as server:
+ print("Serving at http://127.0.0.1:8000/")
+ server.serve_forever()