summary refs log tree commit diff
diff options
context:
space:
mode:
-rwxr-xr-xbrowset.py11
-rw-r--r--protocol/data.py9
2 files changed, 19 insertions, 1 deletions
diff --git a/browset.py b/browset.py
index 37e04b1..292b95d 100755
--- a/browset.py
+++ b/browset.py
@@ -8,6 +8,7 @@ from mime.gemtext import Gemtext
 from mime.plaintext import Plaintext
 from mime.highlightedcode import HighlightedCode,mimetolexer
 from protocol.gemini import GeminiProtocol
+from protocol.data import DataProtocol
 
 class Browset(App):
     url = ""
@@ -69,8 +70,16 @@ class Browset(App):
         if histore:
             self.history.append(self.url)
         self.url = url
-        (mime, fp) = GeminiProtocol.get(url)
+        protocol = url.split(":")[0]
+        if protocol == "gemini":
+          (mime, fp) = GeminiProtocol.get(url)
+        elif protocol == "data":
+          (mime, fp) = DataProtocol.get(url)
+        else:
+          (mime, fp) = ("error", ["Unsupported protocol: " + protocol])
+
         self.query_one("#content").remove()
+
         if "text/gemini" in mime:
           content = Gemtext(fp=fp, id="content")
         elif mime in mimetolexer:
diff --git a/protocol/data.py b/protocol/data.py
new file mode 100644
index 0000000..a732d14
--- /dev/null
+++ b/protocol/data.py
@@ -0,0 +1,9 @@
+from base64 import b64decode
+class DataProtocol():
+    def get(url):
+        mime = url.split(':')[1].split(',')[0].split(';')[0]
+        base64 = 'base64' in url.split(',')[0].split(';')
+        content = ','.join(url.split(',')[1:])
+        if base64:
+            content = b64decode(content)
+        return (mime or 'text/plain', [content])