
如何用 spotube-plugin-template 创建 Spotube 第一个元数据插件项目并在 example 应用中运行【免费下载链接】spotube Open source music streaming app! Available for both desktop mobile!项目地址: https://gitcode.com/GitHub_Trending/sp/spotubeSpotube 是一款开源音乐流媒体播放器它的元数据搜索、播放列表、专辑、艺人、曲目信息等由插件提供插件使用 Dart 系脚本语言 Hetu Script 编写。如果你想为自己的音乐服务写一个元数据插件不需要从零搭项目Spotube 提供了模板仓库 spotube-plugin-template其中自带完整的项目骨架和一个exampleFlutter 应用用于测试 Spotube 会调用到你插件上的所有方法。这篇文章覆盖一条完整路径从模板创建第一个插件项目、修改plugins.json、把插件编译为字节码然后在 example 应用中把它跑起来。准备环境与工具要求插件开发文档Introduction列出的前置条件是基础编程知识Dart 和 Flutter 知识VS Code 或其他任意代码编辑器Spotube 的插件必须用 Hetu Script 编写它是基于 Dart 的脚本语言语法接近 TypeScript文档表示如果已经会 Dart 或 JavaScript上手不需要太多时间。可选地可以安装 VS Code 的 Hetu Script 扩展获得基础语法高亮该扩展尚不支持 LSP因此没有自动补全和 lint。编译并运行插件还需要两项额外依赖Create your first plugin 中明确说明系统已安装make命令已全局安装hetu_script_dev_tools包——一个用于把 Hetu Script 文件编译为字节码、直接运行以及提供 REPL 的 CLI 工具。插件开发中还会常用到两个库hetu_stdHetu Script 标准库提供 HTTP 客户端、DateTime、加密 API、JSON/Utf8/Base32 编解码等基础能力和hetu_spotube_plugin提供对 Spotube 内部 API 如 Webview、Forms、LocalStorage 的访问以及获取元数据和 scrobbling 的工具。从 spotube-plugin-template 创建插件项目官方文档建议以 spotube-plugin-template 作为创建插件的起点克隆仓库即可或者在仓库页面点击 Use this template 按钮创建自己的新仓库$ git clone https://github.com/KRTirtho/spotube-plugin-template.git $ cd spotube-plugin-template修改 plugins.json 匹配你的插件克隆完成后项目根目录有一个plugins.json文件。Spotube 靠这个文件识别你的插件需要把其中的值改成你自己插件的信息。模板内容如下{ type: metadata, version: 1.0.0, name: Alphanumeric plugin name with hyphens or underscore, author: Your Name, description: A brief description of the plugins functionality., entryPoint: plugin class name, apis: [webview, localstorage, timezone], abilities: [authentication, scrobbling], repository: https://github.com/KRTirtho/spotube-plugin-template, pluginApiVersion: 1.0.0 }各字段含义来自文档的字段说明表字段说明type插件类型Spotube 插件固定为metadataversion插件版本遵循语义化版本如1.0.0name插件名称模板示例值 Alphanumeric plugin name with hyphens or underscore 提示了命名方式author插件作者名description插件功能的简要描述entryPoint作为插件入口的类名apis插件使用的 API 数组Spotube 据此决定向插件开放哪些 API。可选值webview、localstorage、timezoneabilities插件具备的能力数组。可选值authentication、scrobblingrepository插件仓库 URL用于在插件管理器中展示插件仓库pluginApiVersion插件所用的插件 API 版本用于判断插件与当前 Spotube 版本是否兼容两点需要注意entryPoint指向的类就是插件主类位于模板的src/plugin.htSpotube 加载插件时会实例化它文档说这个类大多情况下可以保持模板原样除非你有明确的改动需求。示例中的name、author、description、entryPoint、repository等值都是占位说明需要替换为你自己的插件信息entryPoint的类名要与源码中实际定义的入口类一致。将插件编译为字节码运行 example 应用之前需要先把插件编译成字节码。文档给出的方式就是在模板项目根目录执行make$ make这一步有两个前提条件文档均明确列出系统装有make命令且hetu_script_dev_tools包已全局安装。编译完成后插件源码即转换为 example 应用可加载的字节码形式。在 example 应用中运行模板中的example文件夹包含一个简单的 Flutter 应用它会用到 Spotube 会调用到你插件上的所有方法运行它就是用来测试插件功能的方式$ cd example $ flutter runexample 应用就是一个普通的 Flutter 应用按常规方式启动即可。文档同时明确提醒应用中的大部分按钮此时不会有效果因为对应的插件方法在模板源码中尚未实现需要你在插件源码中实现之后才能工作。所以第一次运行时的预期结果就是应用成功启动、可以看到覆盖各端点方法的界面至于哪些按钮能产生实际响应取决于你实现了哪些方法。下一步实现方法与装入真实 Spotube跑通上面的流程后后续工作就是实现插件的每个方法入口类在src/plugin.htSpotube 调用的各个端点类Auth、Album、Artist、Browse、Playlist、Search、Track、User、Core都在src/segments文件夹下具体方法定义可参考 Implementing plugin methods 与 Implementing Endpoints。文档特别提醒两个语言层面的限制Hetu Script 声称支持 async/await 但目前尚不能工作暂时要使用.then()Hetu Script 不支持错误处理没有 try/catch/finally也没有.catch()这是语言的设计决策错误只能在 Dart 一侧处理。等插件方法实现完毕可以把产物装入真正的 Spotube 应用进入 Settings 顶部的 Metadata provider plugins 页面除了从插件列表或 URL 安装外还可以用右上角文本框旁的橙色上传按钮从本地plugin.smplug文件安装插件详见 Installing plugins。【免费下载链接】spotube Open source music streaming app! Available for both desktop mobile!项目地址: https://gitcode.com/GitHub_Trending/sp/spotube创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考