Add Highlight struct with SHA-256 hashing and improve query
- Add Highlight struct to represent bookmarks with owned memory - Implement SHA-256 hashing for text and book identification - Update SQL query to extract clean book filenames (removes path and fragment) - Remove unused Annotation column from query - Add CLAUDE.md for repository documentation - Update .gitignore to exclude SQLite WAL files 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Project Overview
|
||||
|
||||
A statically-linked Zig binary that extracts highlights from Kobo e-reader SQLite databases. The project builds for both x86_64 (development) and ARM (target Kobo device).
|
||||
|
||||
## Build Commands
|
||||
|
||||
### Local development (x86_64)
|
||||
```bash
|
||||
zig build
|
||||
./zig-out/bin/kb_exfiltrator local-dev.sqlite
|
||||
```
|
||||
|
||||
### Run with arguments
|
||||
```bash
|
||||
zig build run -- path/to/database.sqlite
|
||||
```
|
||||
|
||||
### Testing
|
||||
```bash
|
||||
zig build test
|
||||
```
|
||||
|
||||
### For Kobo (ARM target)
|
||||
```bash
|
||||
./build-kobo.sh
|
||||
# or manually:
|
||||
zig build -Dtarget=arm-linux-musleabihf -Doptimize=ReleaseSmall
|
||||
```
|
||||
|
||||
The ARM build creates `kb_exfiltrator-kobo-arm` in the project root.
|
||||
|
||||
## Architecture
|
||||
|
||||
### Module Structure
|
||||
|
||||
The project uses Zig's module system with two distinct modules:
|
||||
|
||||
- **kb_exfiltrator module** (`src/root.zig`): Library module exposing reusable functionality
|
||||
- **Executable module** (`src/main.zig`): CLI entry point that imports the library module
|
||||
|
||||
The executable depends on the library module via the imports mechanism in build.zig:87-91.
|
||||
|
||||
### SQLite Integration
|
||||
|
||||
SQLite is vendored as an amalgamation build (vendor/sqlite-amalgamation-3480000/). The build.zig configuration:
|
||||
- Links SQLite as a C source file (build.zig:87-93)
|
||||
- Compiles with `SQLITE_THREADSAFE=0` (no threading, smaller binary)
|
||||
- Compiles with `SQLITE_OMIT_LOAD_EXTENSION` (security)
|
||||
- Uses `@cImport` in main.zig:2-4 to import C headers
|
||||
|
||||
### Static Linking
|
||||
|
||||
The binary is fully statically linked:
|
||||
- Uses musl libc for ARM target (`arm-linux-musleabihf`)
|
||||
- SQLite compiled directly into the binary
|
||||
- No external dependencies required on target device
|
||||
|
||||
### Database Schema
|
||||
|
||||
The program queries the Kobo `Bookmark` table:
|
||||
- `Text`: The highlighted text (non-NULL indicates a highlight)
|
||||
- `Annotation`: User's notes on the highlight (nullable)
|
||||
- `DateCreated`: Timestamp
|
||||
- `ContentID`: Book identifier
|
||||
|
||||
Query implementation: src/main.zig:33-42
|
||||
|
||||
### Build System Details
|
||||
|
||||
The build.zig uses Zig's build graph system:
|
||||
- Target and optimization are configurable via CLI (`-Dtarget`, `-Doptimize`)
|
||||
- The executable step (build.zig:60-84) creates the root module and wires dependencies
|
||||
- Tests are split into module tests and executable tests (build.zig:132-154)
|
||||
- Both test suites run in parallel when executing `zig build test`
|
||||
|
||||
## Requirements
|
||||
|
||||
- Zig 0.15.2 or later (specified in build.zig.zon:28)
|
||||
Reference in New Issue
Block a user