Source code for tuxemon.platform

"""
Put platform specific fixes here
"""
from __future__ import annotations

import logging
import os.path
import types
from typing import Optional, Sequence

import pygame

__all__ = ("android", "init", "mixer", "get_user_storage_dir")

logger = logging.getLogger(__name__)

_pygame = False
android = None

# TODO: more graceful handling of android and pygame deps.
try:
    import android
    import android.mixer

    mixer = android.mixer
except ImportError:
    pass

if android is None:
    try:
        import pygame.mixer

        mixer = pygame.mixer
        _pygame = True
    except ImportError:
        pass


[docs]def init() -> None: """Must be called before pygame.init() to enable low latency sound.""" # reduce sound latency. the pygame defaults were ok for 2001, # but these values are more acceptable for faster computers if _pygame: logger.debug("pre-init pygame mixer") mixer.pre_init(frequency=44100, size=-16, channels=2, buffer=1024)
[docs]def get_user_storage_dir() -> str: """ Mutable storage for things like config, save games, mods, cache. """ if android: from android import storage return storage.app_storage_path() else: return os.path.join(os.path.expanduser("~"), ".tuxemon")
def get_system_storage_dirs() -> Sequence[str]: """ Should be immutable storage for things like system installed code/mods. Android storage is still WIP. should be immutable, but it's not... The primary user of this storage are packages for operating systems that will install the mods into a folder like /usr/share/tuxemon. """ if android: from android import storage paths = list() for root in filter( None, [ storage.primary_external_storage_path(), storage.secondary_external_storage_path(), ], ): path = os.path.join(root, "Tuxemon") paths.append(path) # try to guess sd cards blacklist = "emulated" for name in os.listdir("/storage"): if name not in blacklist: path = os.path.join("storage", name, "Tuxemon") paths.append(path) return paths else: return ["/usr/share/tuxemon/"]