2024年11月15日星期五 下午2:49:51

HACS修改源代码使用CDN快速下载集成

11 个月 前
#23936 引用
修改HACS源代码使用CDN快速下载集成
0
11 个月 前
#23937 引用
https://mp.weixin.qq.com/s?__biz=MjM5MzUxODIwOQ==&mid=2650168768&idx=1&sn=54e5f6e0ab4abab512f129fc58c00390&chksm=be973a2e89e0b338e0485212270d2fa7dda1039fe90df92a2e13e9942721c6c6dacfca493a60&cur_album_id=2174494725796315138&scene=189#wechat_redirect

HACS安装组件的核心功能就是通过调用GitHub的api接口获取到组件的文件真实地址,然后根据对应的类型下载到对应的文件夹中



所以问题出在下载文件这个环节,因为网络问题,特别是下载大文件的情况下,极其容易出现下载超时,然后直接就异常失败了
0
11 个月 前
#23938 引用
jsDelivr是一个免费、开源的加速CDN公共服务,托管了许多大大小小的项目,可加速访问托管的项目目录或图片资源



官方网站:https://www.jsdelivr.com/



关于如何利用好jsDelivr请看官方文档,本篇内容着重介绍在HACS中的使用





整体操作非常的简单,分三步走

找到hacs下载文件的方法

替换文件下载地址

重启homeassistant





首先我们找到hacs的执行下载方法的模块文件

文件路径:custom_components/hacs/helpers/functions/download.py


然后找到下载方法的名称:async_download_file,你可以使用快捷键Ctrl+F搜索,然后将以下内容放到

_LOGGER.debug("Downloading %s", url) 下面,请仔细看图



# 显示原始下载地址
    print(url)
    # 源文件
    if "https://raw.githubusercontent.com" in url:
        arr = url.replace("https://raw.githubusercontent.com/", "").split("/")
        arr[1] = arr[1] + "@" + arr[2]
        arr[2] = ""
        _list = ["https://cdn.jsdelivr.net/gh"]
        for item in arr:
            if item != "":
                _list.append(item)
        url = "/".join(_list)
        _LOGGER.debug("下载链接:%s", url)
    # 发布文件
    if "https://github.com/" in url and "/releases/download/" in url:
        url = url.replace('https://github.com/', 'https://hub.fastgit.org/')
    # 修改后的下载地址
    print(url)


0