from pyobjus.dylib_manager import load_framework from pyobjus.objc_py_types import enum from pyobjus.consts.corebluetooth import CBAdvertisementDataKeys load_framework('/System/Library/Frameworks/CoreBluetooth.framework') NSData = autoclass('NSData') CBPeripheralManager = autoclass('CBPeripheralManager') CBMutableService = autoclass('CBMutableService') CBMutableCharacteristic = autoclass('CBMutableCharacteristic') CBUUID = autoclass('CBUUID') CBPeripheralManagerState = enum('CBPeripheralManagerState', unknown=0, resetting=1, unsupported=2, unauthorized=3, powered_off=4, powered_on=5) cb_peripheral_manager_state_map = { v: k.replace('_', ' ') for k, v in CBPeripheralManagerState.__dict__.items() if not k.startswith('_') } c = CArray() peripheral_manager = None
def path_to_saves(gamedir, save_directory=None): import renpy # @UnresolvedImport if save_directory is None: save_directory = renpy.config.save_directory save_directory = renpy.exports.fsencode(save_directory) # Makes sure the permissions are right on the save directory. def test_writable(d): try: fn = os.path.join(d, "test.txt") open(fn, "w").close() open(fn, "r").close() os.unlink(fn) return True except: return False # Android. if renpy.android: paths = [ os.path.join(os.environ["ANDROID_OLD_PUBLIC"], "game/saves"), os.path.join(os.environ["ANDROID_PRIVATE"], "saves"), os.path.join(os.environ["ANDROID_PUBLIC"], "saves"), ] for rv in paths: if os.path.isdir(rv) and test_writable(rv): break print("Saving to", rv) # We return the last path as the default. return rv if renpy.ios: from pyobjus import autoclass from pyobjus.objc_py_types import enum NSSearchPathDirectory = enum("NSSearchPathDirectory", NSDocumentDirectory=9) NSSearchPathDomainMask = enum("NSSearchPathDomainMask", NSUserDomainMask=1) NSFileManager = autoclass('NSFileManager') manager = NSFileManager.defaultManager() url = manager.URLsForDirectory_inDomains_( NSSearchPathDirectory.NSDocumentDirectory, NSSearchPathDomainMask.NSUserDomainMask, ).lastObject() # url.path seems to change type based on iOS version, for some reason. try: rv = url.path().UTF8String().decode("utf-8") except: rv = url.path.UTF8String().decode("utf-8") print("Saving to", rv) return rv # No save directory given. if not save_directory: return gamedir + "/saves" # Search the path above Ren'Py for a directory named "Ren'Py Data". # If it exists, then use that for our save directory. path = renpy.config.renpy_base while True: if os.path.isdir(path + "/Ren'Py Data"): return path + "/Ren'Py Data/" + save_directory newpath = os.path.dirname(path) if path == newpath: break path = newpath # Otherwise, put the saves in a platform-specific location. if renpy.macintosh: rv = "~/Library/RenPy/" + save_directory return os.path.expanduser(rv) elif renpy.windows: if 'APPDATA' in os.environ: return os.environ['APPDATA'] + "/RenPy/" + save_directory else: rv = "~/RenPy/" + renpy.config.save_directory return os.path.expanduser(rv) else: rv = "~/.renpy/" + save_directory return os.path.expanduser(rv)