diff --git a/readme.md b/readme.md index 73dddd8..d6a0829 100644 --- a/readme.md +++ b/readme.md @@ -186,11 +186,13 @@ KEEP_MEDIA = 7 FILE_PICKER_CMD = "ranger --choosefile={file_path}" # FILE_PICKER_CMD = "nnn -p {file_path}" + +MAILCAP_FILE = os.path.expanduser("~/.config/mailcap") ``` ### Mailcap file -Mailcap file is used for deciding how to open telegram files (docs, pics, voice notes, etc.). +Mailcap file is used for deciding how to open telegram files (docs, pics, voice notes, etc.). Path to the file can be overriden with `MAILCAP_FILE` in config file. Example: `~/.mailcap` diff --git a/tg/config.py b/tg/config.py index c6b783b..aa9a794 100644 --- a/tg/config.py +++ b/tg/config.py @@ -5,7 +5,7 @@ overwritten by external config file import os import platform import runpy -from typing import Dict +from typing import Dict, Optional _os_name = platform.system() _darwin = "Darwin" @@ -15,6 +15,7 @@ _linux = "Linux" CONFIG_DIR = os.path.expanduser("~/.config/tg/") CONFIG_FILE = os.path.join(CONFIG_DIR, "conf.py") FILES_DIR = os.path.expanduser("~/.cache/tg/") +MAILCAP_FILE: Optional[str] = None LOG_LEVEL = "INFO" LOG_PATH = os.path.expanduser("~/.local/share/tg/") diff --git a/tg/utils.py b/tg/utils.py index 5995714..3efd6bc 100644 --- a/tg/utils.py +++ b/tg/utils.py @@ -17,7 +17,7 @@ from functools import lru_cache from logging.handlers import RotatingFileHandler from subprocess import CompletedProcess from types import TracebackType -from typing import Any, Optional, Tuple, Type +from typing import Any, Dict, Optional, Tuple, Type from tg import config @@ -72,12 +72,19 @@ def get_mime(file_path: str) -> str: return mtype.split("/")[0] +def get_mailcap() -> Dict: + if config.MAILCAP_FILE: + with open(config.MAILCAP_FILE) as f: + return mailcap.readmailcapfile(f) # type: ignore + return mailcap.getcaps() + + def get_file_handler(file_path: str) -> str: mtype, _ = mimetypes.guess_type(file_path) if not mtype: return config.DEFAULT_OPEN.format(file_path=shlex.quote(file_path)) - caps = mailcap.getcaps() + caps = get_mailcap() handler, view = mailcap.findmatch(caps, mtype, filename=file_path) if not handler: return config.DEFAULT_OPEN.format(file_path=shlex.quote(file_path))