diff options
Diffstat (limited to 'git-gmi/git.py')
-rw-r--r-- | git-gmi/git.py | 27 |
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 |