Add Week 10 Plugin System and Week 11 Control API
Week 10 - Plugin System (FR-19): - Plugin traits: Plugin, OriginPlugin, MetadataPlugin, FormatPlugin - NativePluginHost with libloading for dynamic loading - WasmPluginHost (feature-gated) with wasmtime runtime - PluginManager coordinating both hosts with version checks - OriginInstance::watch() with WatchHandle, WatchEvent for live updates - FormatPlugin::synthesize_header() for metadata overlay Week 11 - Control API & Production (FR-17, FR-18, NFR-6, NFR-10): - gRPC server with full MusicFS service (status, cache, origins, events) - Proto extended: MountState enum, TierStats, full StatusResponse/CacheStats - WebhookHandler with HMAC-SHA256 signing and exponential retry - Metrics with latency histograms (p50/p95/p99) and origin health gauges - CLI with mount, status, cache, search, origin, events, shutdown commands - E2E player compatibility tests (mpv, VLC, file manager) - systemd service, PKGBUILD, RPM spec for packaging Plans added for Weeks 10-14 covering P1 features. All 154 tests passing.
This commit is contained in:
@@ -23,6 +23,21 @@ Implement audio metadata extraction using symphonia and create SQLite schema for
|
||||
|
||||
---
|
||||
|
||||
## Task 0: Extend AudioMeta in `musicfs-core`
|
||||
|
||||
Add `lyrics` and `composer` fields to `AudioMeta` struct (FR-6.4):
|
||||
|
||||
```rust
|
||||
// In musicfs-core/src/types.rs, add to AudioMeta:
|
||||
pub struct AudioMeta {
|
||||
// ... existing fields ...
|
||||
pub lyrics: Option<String>,
|
||||
pub composer: Option<String>,
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Task 1: Metadata Parser (`musicfs-metadata`)
|
||||
|
||||
### 1.1 Create `Cargo.toml`
|
||||
@@ -168,6 +183,12 @@ impl MetadataParser {
|
||||
meta.year = value.chars().take(4).collect::<String>()
|
||||
.parse().ok();
|
||||
}
|
||||
StandardTagKey::Lyrics => {
|
||||
meta.lyrics = Some(value);
|
||||
}
|
||||
StandardTagKey::Composer => {
|
||||
meta.composer = Some(value);
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user