Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I9eac30c7d4c1c89178f4930b215e523d6a6a6964
103 lines
2.5 KiB
Markdown
103 lines
2.5 KiB
Markdown
# Markdown Metadata Extractor Plugin
|
|
|
|
This example plugin demonstrates how to create a metadata extractor plugin for Pinakes.
|
|
|
|
## Overview
|
|
|
|
The Markdown Metadata Extractor enhances Pinakes' built-in markdown support by:
|
|
- Parsing YAML and TOML frontmatter
|
|
- Extracting metadata from frontmatter fields
|
|
- Converting frontmatter tags to Pinakes media tags
|
|
- Extracting custom fields from frontmatter
|
|
|
|
## Features
|
|
|
|
- **Frontmatter Parsing**: Supports both YAML (`---`) and TOML (`+++`) frontmatter formats
|
|
- **Tag Extraction**: Automatically extracts tags from frontmatter and applies them to media items
|
|
- **Custom Fields**: Preserves all frontmatter fields as custom metadata
|
|
- **Configuration**: Configurable via `plugin.toml` config section
|
|
|
|
## Frontmatter Example
|
|
|
|
```markdown
|
|
---
|
|
title: "My Document"
|
|
author: "John Doe"
|
|
date: "2024-01-15"
|
|
tags: ["documentation", "example", "markdown"]
|
|
category: "tutorials"
|
|
draft: false
|
|
---
|
|
|
|
# My Document
|
|
|
|
Content goes here...
|
|
```
|
|
|
|
## Implementation
|
|
|
|
The plugin implements the `MetadataExtractor` trait from `pinakes-plugin-api`:
|
|
|
|
```rust
|
|
#[async_trait]
|
|
impl MetadataExtractor for MarkdownMetadataPlugin {
|
|
async fn extract_metadata(&self, path: &PathBuf) -> PluginResult<ExtractedMetadata> {
|
|
// 1. Read the file
|
|
// 2. Parse frontmatter
|
|
// 3. Extract metadata fields
|
|
// 4. Return ExtractedMetadata
|
|
}
|
|
|
|
fn supported_types(&self) -> Vec<String> {
|
|
vec!["markdown".to_string()]
|
|
}
|
|
}
|
|
```
|
|
|
|
## Building
|
|
|
|
The plugin is compiled to WebAssembly:
|
|
|
|
```bash
|
|
cargo build --target wasm32-wasi --release
|
|
wasm-strip target/wasm32-wasi/release/markdown_metadata.wasm
|
|
cp target/wasm32-wasi/release/markdown_metadata.wasm .
|
|
```
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
# Copy plugin directory to Pinakes plugins directory
|
|
cp -r examples/plugins/markdown-metadata ~/.config/pinakes/plugins/
|
|
|
|
# Or via API
|
|
curl -X POST http://localhost:3000/api/v1/plugins/install \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"source": "/path/to/markdown-metadata"}'
|
|
```
|
|
|
|
## Configuration
|
|
|
|
The plugin can be configured through the `config` section in `plugin.toml`:
|
|
|
|
- `extract_tags`: Extract tags from frontmatter (default: true)
|
|
- `parse_yaml`: Parse YAML frontmatter (default: true)
|
|
- `parse_toml`: Parse TOML frontmatter (default: true)
|
|
- `max_file_size`: Maximum file size to process in bytes (default: 10MB)
|
|
|
|
## Security
|
|
|
|
This plugin has minimal capabilities:
|
|
- **Filesystem**: No write access, read access only to files being processed
|
|
- **Network**: Disabled
|
|
- **Environment**: No access
|
|
|
|
## Testing
|
|
|
|
```bash
|
|
cargo test
|
|
```
|
|
|
|
## License
|
|
|
|
MIT
|