Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions .changeset/album-artwork-cache.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/daemon-graceful-shutdown.md

This file was deleted.

9 changes: 0 additions & 9 deletions .changeset/deduplicate-source-tracks.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/delete-content-type-aware.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/device-scan-command.md

This file was deleted.

6 changes: 0 additions & 6 deletions .changeset/doctor-artwork-repair.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/doctor-orphan-improvements.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/dual-progress-bars.md

This file was deleted.

8 changes: 0 additions & 8 deletions .changeset/fix-episode-zero-matching.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/fix-graceful-shutdown.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/fix-track-removal-orphans.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/fix-video-progress-counter.md

This file was deleted.

12 changes: 0 additions & 12 deletions .changeset/full-device-eject.md

This file was deleted.

13 changes: 0 additions & 13 deletions .changeset/graceful-shutdown.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/optimise-docker-layers.md

This file was deleted.

16 changes: 0 additions & 16 deletions .changeset/task-186-phase3.md

This file was deleted.

17 changes: 0 additions & 17 deletions .changeset/unified-sync-pipeline.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/video-executor-incremental-saves.md

This file was deleted.

55 changes: 55 additions & 0 deletions packages/podkit-cli/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,60 @@
# podkit

## 0.6.0

### Minor Changes

- [`4dd7b44`](https://github.com/jvgomg/podkit/commit/4dd7b443c9bdeaa98507d5439dd1223bbd2f82e1) Thanks [@jvgomg](https://github.com/jvgomg)! - Add `podkit device scan` command to discover connected iPod devices. Shows each iPod's volume name, UUID, size, and mount status — useful for finding the volume UUID needed to configure multi-device setups, especially in Docker.

- [`d19d6e3`](https://github.com/jvgomg/podkit/commit/d19d6e305cd864d188f3de377873b5a44df7e02f) Thanks [@jvgomg](https://github.com/jvgomg)! - Add `podkit doctor` command for running diagnostic checks on an iPod, and `podkit device reset-artwork` for wiping artwork and clearing sync tags. `podkit doctor` runs all checks and reports problems; `podkit doctor --repair artwork-integrity -c <collection>` repairs by check ID using the source collection. @podkit/core exports `resetArtworkDatabase` and `rebuildArtworkDatabase` primitives, and a diagnostic framework in the `diagnostics/` module built on a `DiagnosticCheck` interface (check + repair pattern). Includes a binary ArtworkDB parser and integrity checker.

- [`b698a07`](https://github.com/jvgomg/podkit/commit/b698a0765a039d130c6f913e2608f0fc00320ca0) Thanks [@jvgomg](https://github.com/jvgomg)! - Add dual progress bars to sync output showing both overall and per-file progress simultaneously. Video sync now displays total file count alongside per-file transcode percentage and speed, so users can see how far along a large sync is. Music sync uses the same layout for consistency.

- [`2873f14`](https://github.com/jvgomg/podkit/commit/2873f14aad6493d2d7dafbe344e8b5db0abc3551) Thanks [@jvgomg](https://github.com/jvgomg)! - Add graceful shutdown handling for sync and doctor commands

Pressing Ctrl+C during `podkit sync` now triggers a graceful shutdown: the current operation finishes, all completed tracks are saved to the iPod database, and the process exits cleanly with code 130. Previously, Ctrl+C killed the process immediately, potentially leaving orphaned files and unsaved work.
- Sync: first Ctrl+C drains the current operation and saves; second Ctrl+C force-quits
- Doctor: repair operations save partial progress on interrupt
- Incremental saves: the database is now saved every 50 completed tracks during sync, reducing data loss from force-quits or crashes
- New `podkit doctor` check: detects orphaned files on the iPod (files not referenced by the database) with optional cleanup via `--repair orphan-files`

- [`7624265`](https://github.com/jvgomg/podkit/commit/762426537af1d3d7b29c6d6e1f878abd5c0474eb) Thanks [@jvgomg](https://github.com/jvgomg)! - Unify sync pipeline with ContentTypeHandler pattern
- Add generic `ContentTypeHandler<TSource, TDevice>` interface for media-type-specific sync logic
- Add `MusicHandler` and `VideoHandler` implementations
- Add `UnifiedDiffer`, `UnifiedPlanner`, and `UnifiedExecutor` generic pipeline components
- Add shared error categorization and retry logic (`error-handling.ts`)
- Add handler registry for looking up handlers by type string
- Video sync now routes through the unified pipeline in the CLI
- Video executor supports self-healing upgrades (preset-change, metadata-correction)
- Video executor categorizes errors and supports configurable per-category retries
- Fix album artwork cache incorrectly sharing artwork between tracks with and without artwork
- Generic `CollectionAdapter<TItem, TFilter>` interface replaces separate music/video adapter contracts

### Patch Changes

- [`67d1357`](https://github.com/jvgomg/podkit/commit/67d1357672016fcf6a55a20187bf8d5dbe4d3f31) Thanks [@jvgomg](https://github.com/jvgomg)! - Fix `--delete` flag removing video tracks when syncing music (and vice versa). The delete flag now only considers tracks of the content type being synced.

- [`120a7b1`](https://github.com/jvgomg/podkit/commit/120a7b1a8899ed48515bd98ce731231e94d3409f) Thanks [@jvgomg](https://github.com/jvgomg)! - Improve `podkit doctor` orphan file reporting. Orphan detection now skips macOS `._` resource fork files that were inflating the count. Add `--verbose` output showing orphan breakdown by directory, file extension, and the 10 largest files. Add `--format csv` to export the full orphan file list for inspection.

- [`3f56a1b`](https://github.com/jvgomg/podkit/commit/3f56a1b063f821e7a0d399a497521358331577a6) Thanks [@jvgomg](https://github.com/jvgomg)! - Fix video sync deleting and re-adding episodes with episode number 0 (e.g., S01E00)

The `||` operator treated episode/season number `0` as falsy, converting it to `undefined`. This broke diff key matching for episode 0, causing every sync to delete and re-add the video. Changed to `??` (nullish coalescing) which only converts `null`/`undefined`, preserving `0` as a valid value.

- [`3db2bbb`](https://github.com/jvgomg/podkit/commit/3db2bbb2381a01107602380a8017624581548ecc) Thanks [@jvgomg](https://github.com/jvgomg)! - Fix graceful shutdown during sync: Ctrl+C now reliably saves completed work to the iPod database before exiting. Previously, video sync interruptions could silently skip the database save, causing the next sync to redo already-completed work. Also fix "Force quit" appearing immediately on first Ctrl+C when running via `bun run`. Ctrl+C during read-only phases (scanning, diffing) now exits instantly instead of showing a misleading "finishing current operation" message.

- [`1c98ac2`](https://github.com/jvgomg/podkit/commit/1c98ac273e5eb3b78aa02dbc649c2f8086e5af2e) Thanks [@jvgomg](https://github.com/jvgomg)! - Fix video sync overall progress counter incrementing on every transcode sub-progress tick instead of once per video

- [`143e314`](https://github.com/jvgomg/podkit/commit/143e31442a40489390d45d74ee953facdc243706) Thanks [@jvgomg](https://github.com/jvgomg)! - Fully detach USB device on eject so iPod disappears from Disk Utility (macOS) and system (Linux/Docker)

Previously, eject only unmounted the volume but left the physical disk device attached. On macOS, the iPod would still appear in Disk Utility after ejecting. On Linux, the USB device could remain visible.

Now eject resolves the whole-disk identifier and fully detaches the USB device:
- macOS: `diskutil eject` targets the whole disk (e.g., `disk5`) instead of the volume
- Linux: `udisksctl power-off` targets the whole disk (e.g., `/dev/sda`) and is also called after the `umount` fallback path

- Updated dependencies [[`8e11397`](https://github.com/jvgomg/podkit/commit/8e11397501861930cf0827913003f8afe2afd943), [`8fdf618`](https://github.com/jvgomg/podkit/commit/8fdf618d95f3fad88f3738baf03dbda313a5a2d5), [`d19d6e3`](https://github.com/jvgomg/podkit/commit/d19d6e305cd864d188f3de377873b5a44df7e02f), [`3f56a1b`](https://github.com/jvgomg/podkit/commit/3f56a1b063f821e7a0d399a497521358331577a6), [`120a7b1`](https://github.com/jvgomg/podkit/commit/120a7b1a8899ed48515bd98ce731231e94d3409f), [`143e314`](https://github.com/jvgomg/podkit/commit/143e31442a40489390d45d74ee953facdc243706), [`2873f14`](https://github.com/jvgomg/podkit/commit/2873f14aad6493d2d7dafbe344e8b5db0abc3551), [`66560a9`](https://github.com/jvgomg/podkit/commit/66560a9158c777f2f25ca24c047204afa78f187e), [`7624265`](https://github.com/jvgomg/podkit/commit/762426537af1d3d7b29c6d6e1f878abd5c0474eb), [`632f360`](https://github.com/jvgomg/podkit/commit/632f3605370dbb50b0be5ffada0460f1aa9792d7)]:
- @podkit/core@0.6.0

## 0.5.1

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/podkit-cli/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "podkit",
"version": "0.5.1",
"version": "0.6.0",
"type": "module",
"bin": {
"podkit": "./dist/main.js"
Expand Down
Loading
Loading