summaryrefslogtreecommitdiff
path: root/git-gmi/git.py
diff options
context:
space:
mode:
Diffstat (limited to 'git-gmi/git.py')
-rw-r--r--git-gmi/git.py27
1 files changed, 20 insertions, 7 deletions
diff --git a/git-gmi/git.py b/git-gmi/git.py
index 8a91f0b..b758440 100644
--- a/git-gmi/git.py
+++ b/git-gmi/git.py
@@ -8,6 +8,7 @@ import shutil
import mimetypes
from const import *
from config import *
+from utils import *
mimetypes.add_type("text/gemini", ".gmi")
mimetypes.add_type("text/gemini", ".gemini")
@@ -342,17 +343,29 @@ class GitGmiRepo:
f"{STATUS_SUCCESS} {META_GEMINI}\r\n"
+ self._generate_header()
+ f"## {self.name}/{'/'.join(location)} | {convert_filesize(blob.size)}\n\n"
- f"=> {blob.name}?raw view raw\n\n"
- f"```\n"
)
- response += blob.data.decode("utf-8") + "\n```"
- self._write_cache(["tree", branch] + location, response)
+
+ if blob.is_binary:
+ response += (
+ "This file seems to be binary. Open link below to download.\n"
+ f"=> {blob.name}?raw download"
+ )
+ elif blob.size < MAX_DISPLAYED_BLOB_SIZE:
+ response += (
+ f"=> {blob.name}?raw view raw\n\n"
+ "```\n" + add_line_numbers(blob.data.decode("utf-8")) + "\n```"
+ )
+ else:
+ response += (
+ "This file is too large to be displayed. Open link below to download.\n"
+ f"=> {blob.name}?raw download\n\n"
+ )
return response
- def view_raw_blob(self, branch: str, location=[]) -> str:
+ def view_raw_blob(self, branch: str, location=[]) -> bytes:
blob = self._get_blob(branch, location)
# if mimetypes can't make out the type, set it to plaintext
guessed_mimetype = mimetypes.guess_type(blob.name)[0] or META_PLAINTEXT
- response = f"{STATUS_SUCCESS} {guessed_mimetype}\r\n"
- response += blob.data.decode("utf-8")
+ response = bytes(f"{STATUS_SUCCESS} {guessed_mimetype}\r\n", encoding="utf-8")
+ response += blob.data
return response