def get_pulsar_binary(): binary = "pulsar" + (PLATFORM["os"] == "windows" and ".exe" or "") platform = PLATFORM.copy() if platform["os"] == "darwin": # 64 bits anyway on Darwin platform["arch"] = "x64" elif platform["os"] == "windows": # 32 bits anyway on Windows platform["arch"] = "x86" binary_dir = os.path.join(ADDON.getAddonInfo("path"), "resources", "bin", "%(os)s_%(arch)s" % platform) if platform["os"] == "android": app_id = android_get_current_appid() xbmc_data_path = os.path.join("/data", "data", app_id) if os.path.exists(xbmc_data_path) and uid == os.stat(xbmc_data_path).st_uid: binary_dir = os.path.join(xbmc_data_path, "files", ADDON_ID) else: dest_binary_dir = os.path.join(xbmc.translatePath(ADDON.getAddonInfo("profile")), "bin", "%(os)s_%(arch)s" % platform) binary_path = os.path.join(binary_dir, binary) dest_binary_path = os.path.join(dest_binary_dir, binary) # Testing for size to see if update is needed. This is a poor test indeed, but it's sufficient. if not os.path.exists(dest_binary_path) or os.path.getsize(dest_binary_path) != os.path.getsize(binary_path): log.info("pulsar daemon is outdated, updating...") import shutil try: os.makedirs(dest_binary_dir) except OSError: pass shutil.rmtree(dest_binary_dir) shutil.copytree(binary_dir, dest_binary_dir) return dest_binary_dir, ensure_exec_perms(dest_binary_path)
def get_pulsar_binary(): binary = "pulsar" + (PLATFORM["os"] == "windows" and ".exe" or "") platform = PLATFORM.copy() if platform["os"] == "darwin": # 64 bits anyway on Darwin platform["arch"] = "x64" elif platform["os"] == "windows": # 32 bits anyway on Windows platform["arch"] = "x86" binary_dir = os.path.join(os.path.dirname(__file__), "..", "..", "bin", "%(os)s_%(arch)s" % platform) binary_path = os.path.join(binary_dir, binary) # On Android, we need to copy pulsard to ext4, since the sdcard is noexec if platform["os"] == "android": app_id = android_get_current_appid() xbmc_data_path = os.path.join("/data", "data", app_id) if os.path.exists(xbmc_data_path) and uid == os.stat(xbmc_data_path).st_uid: android_binary_dir = os.path.join(xbmc_data_path, "files", ADDON.getAddonInfo("id")) if not os.path.exists(android_binary_dir): os.makedirs(android_binary_dir) android_binary_path = os.path.join(android_binary_dir, binary) # Testing for size to see if update is needed. This is a poor test indeed, but it's sufficient. if not os.path.exists(android_binary_path) or os.path.getsize(android_binary_path) != os.path.getsize(binary_path): import shutil shutil.copy2(binary_path, android_binary_path) binary_path = android_binary_path binary_dir = android_binary_dir return binary_dir, ensure_exec_perms(binary_path)
def get_pulsar_binary(): binary = "pulsar" + (PLATFORM["os"] == "windows" and ".exe" or "") platform = PLATFORM.copy() if platform["os"] == "darwin": # 64 bits anyway on Darwin platform["arch"] = "x64" elif platform["os"] == "windows": # 32 bits anyway on Windows platform["arch"] = "x86" binary_dir = os.path.join(ADDON.getAddonInfo("path"), "resources", "bin", "%(os)s_%(arch)s" % platform) if platform["os"] == "android": app_id = android_get_current_appid() xbmc_data_path = os.path.join("/data", "data", app_id) dest_binary_dir = os.path.join(xbmc_data_path, "files", ADDON_ID, "bin", "%(os)s_%(arch)s" % platform) else: dest_binary_dir = os.path.join(xbmc.translatePath(ADDON.getAddonInfo("profile")), "bin", "%(os)s_%(arch)s" % platform) binary_path = os.path.join(binary_dir, binary) dest_binary_path = os.path.join(dest_binary_dir, binary) if not os.path.exists(dest_binary_path) or get_pulsard_checksum(dest_binary_path) != get_pulsard_checksum(binary_path): log.info("Updating pulsar daemon...") import shutil try: os.makedirs(dest_binary_dir) except OSError: pass try: shutil.rmtree(dest_binary_dir) except: pass shutil.copytree(binary_dir, dest_binary_dir) return dest_binary_dir, ensure_exec_perms(dest_binary_path)
def get_pulsar_binary(): binary = "pulsar" + (PLATFORM["os"] == "windows" and ".exe" or "") platform = PLATFORM.copy() if platform["os"] == "darwin": # 64 bits anyway on Darwin platform["arch"] = "x64" elif platform["os"] == "windows": # 32 bits anyway on Windows platform["arch"] = "x86" binary_dir = os.path.join(ADDON.getAddonInfo("path"), "resources", "bin", "%(os)s_%(arch)s" % platform) if platform["os"] == "android": binary_dir = binary_dir.replace("/storage/emulated/0", "/storage/emulated/legacy") app_id = android_get_current_appid() xbmc_data_path = os.path.join("/data", "data", app_id) dest_binary_dir = os.path.join(xbmc_data_path, "files", ADDON_ID, "bin", "%(os)s_%(arch)s" % platform) else: dest_binary_dir = os.path.join( xbmc.translatePath(ADDON.getAddonInfo("profile")), "bin", "%(os)s_%(arch)s" % platform) try: binary_dir = binary_dir.decode("latin1") dest_binary_dir = dest_binary_dir.decode("latin1") except UnicodeEncodeError: log.info("Unable to decode: binary_dir=%s dest_binary_dir=%s" % (repr(binary_dir), repr(dest_binary_dir))) binary_path = os.path.join(binary_dir, binary) dest_binary_path = os.path.join(dest_binary_dir, binary) if not os.path.exists(dest_binary_path) or get_pulsard_checksum( dest_binary_path) != get_pulsard_checksum(binary_path): log.info("Updating pulsar daemon...") try: os.makedirs(dest_binary_dir) except OSError: pass try: shutil.rmtree(dest_binary_dir) except: pass shutil.copytree(binary_dir, dest_binary_dir) # Clean stale files in the directory, as this can cause headaches on # Android when they are unreachable dest_files = set(os.listdir(dest_binary_dir)) orig_files = set(os.listdir(binary_dir)) log.info("Deleting stale files %s" % (dest_files - orig_files)) for file_ in (dest_files - orig_files): path = os.path.join(dest_binary_dir, file_) if os.path.isdir(path): shutil.rmtree(path) else: os.remove(path) return dest_binary_dir, ensure_exec_perms(dest_binary_path)
def get_pulsar_binary(): binary = "pulsar" + (PLATFORM["os"] == "windows" and ".exe" or "") platform = PLATFORM.copy() if platform["os"] == "darwin": # 64 bits anyway on Darwin platform["arch"] = "x64" elif platform["os"] == "windows": # 32 bits anyway on Windows platform["arch"] = "x86" binary_dir = os.path.join(ADDON.getAddonInfo("path"), "resources", "bin", "%(os)s_%(arch)s" % platform) if platform["os"] == "android": binary_dir = binary_dir.replace("/storage/emulated/0", "/storage/emulated/legacy") app_id = android_get_current_appid() xbmc_data_path = os.path.join("/data", "data", app_id) dest_binary_dir = os.path.join(xbmc_data_path, "files", ADDON_ID, "bin", "%(os)s_%(arch)s" % platform) else: dest_binary_dir = os.path.join(xbmc.translatePath(ADDON.getAddonInfo("profile")), "bin", "%(os)s_%(arch)s" % platform) try: binary_dir = binary_dir.decode("latin1") dest_binary_dir = dest_binary_dir.decode("latin1") except UnicodeEncodeError: log.info("Unable to decode: binary_dir=%s dest_binary_dir=%s" % (repr(binary_dir), repr(dest_binary_dir))) binary_path = os.path.join(binary_dir, binary) dest_binary_path = os.path.join(dest_binary_dir, binary) if not os.path.exists(dest_binary_path) or get_pulsard_checksum(dest_binary_path) != get_pulsard_checksum(binary_path): log.info("Updating pulsar daemon...") try: os.makedirs(dest_binary_dir) except OSError: pass try: shutil.rmtree(dest_binary_dir) except: pass shutil.copytree(binary_dir, dest_binary_dir) # Clean stale files in the directory, as this can cause headaches on # Android when they are unreachable dest_files = set(os.listdir(dest_binary_dir)) orig_files = set(os.listdir(binary_dir)) log.info("Deleting stale files %s" % (dest_files - orig_files)) for file_ in (dest_files - orig_files): path = os.path.join(dest_binary_dir, file_) if os.path.isdir(path): shutil.rmtree(path) else: os.remove(path) return dest_binary_dir, ensure_exec_perms(dest_binary_path)
def get_pulsar_binary(): binary = "pulsar" + (PLATFORM["os"] == "windows" and ".exe" or "") platform = PLATFORM.copy() if platform["os"] == "darwin": # 64 bits anyway on Darwin platform["arch"] = "x64" elif platform["os"] == "windows": # 32 bits anyway on Windows platform["arch"] = "x86" binary_dir = os.path.join(ADDON.getAddonInfo("path"), "resources", "bin", "%(os)s_%(arch)s" % platform) if platform["os"] == "android": app_id = android_get_current_appid() xbmc_data_path = os.path.join("/data", "data", app_id) if os.path.exists(xbmc_data_path) and uid == os.stat( xbmc_data_path).st_uid: binary_dir = os.path.join(xbmc_data_path, "files", ADDON_ID) else: dest_binary_dir = os.path.join( xbmc.translatePath(ADDON.getAddonInfo("profile")), "bin", "%(os)s_%(arch)s" % platform) binary_path = os.path.join(binary_dir, binary) dest_binary_path = os.path.join(dest_binary_dir, binary) # Testing for size to see if update is needed. This is a poor test indeed, but it's sufficient. if not os.path.exists(dest_binary_path) or os.path.getsize( dest_binary_path) != os.path.getsize(binary_path): log.info("pulsar daemon is outdated, updating...") import shutil try: os.makedirs(dest_binary_dir) except OSError: pass shutil.rmtree(dest_binary_dir) shutil.copytree(binary_dir, dest_binary_dir) return dest_binary_dir, ensure_exec_perms(dest_binary_path)