18 个版本
0.3.4 | 2024年8月10日 |
---|---|
0.3.3 | 2024年7月11日 |
0.3.0 | 2024年6月25日 |
0.2.7 | 2024年5月4日 |
0.1.4 | 2024年4月15日 |
1976 在 命令行工具 中排名
每月下载量 128
190KB
2.5K SLoC
libRMO - Rust 媒体 ORM
提供了一种ORM,用于结构化引用媒体文件和元数据。利用这些信息,我们可以验证元数据的完整性。
从定义至少一个起始根文件夹开始,生成完整的媒体库,并从中运行有用的功能。
使用方法
[dependencies]
# Add to dependencies
librmo = "0.1.0"
初始化库,这将生成配置 %XDG_CONFIG_HOME/liborm
和缓存 %XDG_CACHE_HOME/liborm
文件夹,创建sqlite数据库并应用迁移
use librmo::migration;
migration::run().await;
现在后端已准备就绪,我们可以提供一个库目录以开始收集
use librmo::media_manager::MusicManager as MM;
let lib_name = "MyMusic";
let lib_path = "/path/to/music";
MM::insert_library(lib_name, lib_path).await?;
我们可以确认此库存在
use librmo::media_manager::MusicManager as MM;
use librmo::entity::library::Model as LibraryModel
let libraries: Vec<LibraryModel> = MM::get_library().await?;
println!("{:?}", libraries);
// [Model { id: 1, name: "MyMusic", path: "/path/to/music", files: "" }]
现在我们有一个起始目录,我们可以启动管理器。这个过程是对每个文件进行简单的walkdir,并将它们存储在数据库中,包括它们的完整路径、修改时间和与内部扩展枚举列表的匹配。
这应该很快,对于 ~16k 个文件,大约需要 ~12s。
我们创建一个实例的 Collector,并提供一个起始目录作为参数
use librmo::media_manager::MusicManager as MM;
let mm = MM::new(None);
mm.execute().await?;
然后我们可以获取所有媒体文件的信息
然后我们创建一个专辑记录,并设置专辑的元数据
然后我们创建一个艺术家记录,并设置艺术家的元数据
然后我们创建一个专辑艺术家的关系,并设置专辑和艺术家之间的关联
然后我们获取所有专辑的艺术家信息
use librmo::media_checker::MusicChecker as MC;
MC::execute().await?;
然后我们获取所有专辑的艺术家信息并创建一个艺术家实例
migration::run().await?;
let lib_name = "MyMusic";
let lib_path = "/home/samuel/Music";
MM::insert_library(lib_name, lib_path).await?;
MM::execute().await?;
MC::execute().await?;
然后我们创建一个专辑的媒体文件记录,并设置媒体文件的信息
然后我们获取所有专辑的媒体文件信息并创建一个媒体文件实例
use librmo::media_validator as MV;
let reports = MV::get_reports().await?;
println!("{} Reports - {:?}", reports.len(), reports);
//14 Reports - [ReportList { report_type: "ALBUMID", path: "/home/samuel/Music/sample_mp3.mp3" }, ... }
这里为缺失的每个标签创建了一个条目,并列出了文件的路径。
可以从 Front Cover
条目生成专辑封面图,通过 track
或 album
上的 mb_release_id 属性。
let tracks = MC::get_tracks().await?;
//or
let albums = MC::get_albums().await?;
// Use your favourite method of selecting a record
let release_id = tracks[albums.len() - 1].mb_release_id.clone();
MC::generate_album_art_by_release_id(release_id)
MC::generate_album_art_full_by_release_id(release_id)
生成的 jpg 图像将位于 %XDG_CACHE_HOME/librmo/album_art
或 %XDG_CACHE_HOME/librmo/album_art_full
,文件名为 <mb_release_id>.jpg
构建
Fedora
sudo dnf install gcc pkg-config perl-FindBin openssl-devel alsa-lib-devel
未来功能/改进
错误和性能
- check_media 应该首先获取所有
music
记录并比较,而不是一个接一个地比较 将专辑封面缩略图生成分离到异步函数中,也允许按需调用- 重置数据库,目前如果删除库记录会变慢
允许清除或report
表删除库中不再存在的媒体记录清除已删除的媒体后,如果无曲目剩余,则删除专辑加快报告插入操作的速度- 在报告条目中更好地描述缺失的标签
功能
- 允许覆盖数据库和缓存存储的位置
- 允许选择艺术品缩略图文件格式,目前锁定为 jpg
- 调整输出文件的分辨率,锁定为 300x300
- 检查艺术品的尺寸,如果太小则添加
report
条目 日志设置和有用的信息
依赖项
~51–86MB
~1.5M SLoC