rekordbox-edit 0.13.0.dev7__tar.gz → 0.13.0.dev9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/CHANGELOG.md +16 -3
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/PKG-INFO +1 -1
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/pyproject.toml +1 -1
- rekordbox_edit-0.13.0.dev9/rekordbox_edit/api/_anlz.py +86 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/api/_utils.py +21 -5
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/README.md +8 -0
- rekordbox_edit-0.13.0.dev9/research/beets-plugin-integration/beets-plugin-integration.md +557 -0
- rekordbox_edit-0.13.0.dev9/research/beets-plugin-integration/decisions/converted-original-disposition.md +77 -0
- rekordbox_edit-0.13.0.dev9/research/beets-plugin-integration/evidence/convert-repoint.txt +59 -0
- rekordbox_edit-0.13.0.dev9/research/beets-plugin-integration/evidence/event-order.txt +69 -0
- rekordbox_edit-0.13.0.dev9/research/beets-plugin-integration/evidence/file-level-encode.txt +11 -0
- rekordbox_edit-0.13.0.dev9/research/beets-plugin-integration/evidence/id-stability.txt +7 -0
- rekordbox_edit-0.13.0.dev9/research/beets-plugin-integration/evidence/media-field-roundtrip.txt +9 -0
- rekordbox_edit-0.13.0.dev9/research/beets-plugin-integration/scripts/convert_repoint.py +194 -0
- rekordbox_edit-0.13.0.dev9/research/beets-plugin-integration/scripts/event_probe.py +156 -0
- rekordbox_edit-0.13.0.dev9/research/beets-plugin-integration/scripts/file_level_encode.py +85 -0
- rekordbox_edit-0.13.0.dev9/research/beets-plugin-integration/scripts/id_stability.py +75 -0
- rekordbox_edit-0.13.0.dev9/research/beets-plugin-integration/scripts/media_field_roundtrip.py +145 -0
- rekordbox_edit-0.13.0.dev9/tests/anlz_helpers.py +38 -0
- rekordbox_edit-0.13.0.dev9/tests/api/test_anlz.py +76 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/api/test_convert.py +0 -28
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/api/test_utils.py +63 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/uv.lock +1 -1
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/.agent-style/RULES.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/.agent-style/claude-code.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/.github/actions/build-release-notes/action.yml +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/.github/actions/build-release-notes/build_release_notes.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/.github/actions/commit-check/action.yml +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/.github/actions/commitizen-bump/action.yml +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/.github/actions/commitizen-bump/commitizen-bump.sh +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/.github/actions/e2e/action.yml +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/.github/actions/install/action.yml +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/.github/actions/lint/action.yml +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/.github/actions/test/action.yml +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/.github/workflows/cd.yml +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/.github/workflows/ci.yml +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/.github/workflows/publish.yml +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/.github/workflows/release.yml +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/.gitignore +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/.pre-commit-config.yaml +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/.python-version +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/.readthedocs.yaml +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/AGENTS.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/CLAUDE.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/CONTRIBUTING.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/LICENSE +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/Makefile +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/README.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/codecov.yml +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/docker-compose.yml +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/docs/api.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/docs/commands/convert.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/docs/commands/edit.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/docs/commands/import.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/docs/commands/remove.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/docs/commands/search.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/docs/faqs.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/docs/filtering.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/docs/index.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/docs/stylesheets/extra.css +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/mkdocs.yml +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/__init__.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/_tag_fields.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/api/__init__.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/api/_convert.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/api/_edit.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/api/_field_handlers.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/api/_import.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/api/_relations.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/api/_remove.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/api/_search.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/cli/__init__.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/cli/_click.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/cli/_progress.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/cli/_utils.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/cli/convert.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/cli/edit.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/cli/import_.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/cli/main.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/cli/remove.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/cli/search.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/display.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/errors.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/locking.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/logger.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/models.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/query.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/tags.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/rekordbox_edit/utils.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/renovate.json5 +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/convert-export-impact-test-plan.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/convert-export-impact.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/export-r1-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/export-r1-10-postconvert.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/export-r1-20-postexport.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/export-r1-21-postexport-full.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/export-r2-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/export-r2b-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/export-r2b-10-deviceedit.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/export-r2b-30-postsync.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/export-r3-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/export-r3-10-deviceedit.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/export-r3-40-resync.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/export-r3-41-reexport-full.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-11317782-r3-20-postconvert.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-11317782-r3-30-postsync.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-121715696-r1-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-121715696-r1-10-postconvert.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-121715696-r1-20-postexport.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-121715696-r2-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-121715696-r2b-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-121715696-r2b-00-lib.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-121715696-r2b-20-postconvert.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-121715696-r2b-30-postsync.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-140193439-r3-20-postconvert.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-140193439-r3-30-postsync.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-258421826-r1-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-258421826-r1-10-postconvert.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-258421826-r1-20-postexport.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-258421826-r2-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-258421826-r2b-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-258421826-r2b-00-lib.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-258421826-r2b-20-postconvert.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-258421826-r2b-30-postsync.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-268012584-r3-20-postconvert.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-268012584-r3-30-postsync.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-53013048-r1-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-53013048-r1-10-postconvert.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-53013048-r1-20-postexport.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-53013048-r2-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-53013048-r2b-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-53013048-r2b-00-lib.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-53013048-r2b-20-postconvert.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-53013048-r2b-30-postsync.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-54793376-r1-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-54793376-r1-10-postconvert.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-54793376-r1-20-postexport.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-54793376-r2-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-54793376-r2b-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-54793376-r2b-20-postconvert.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/evidence/subject-54793376-r2b-30-postsync.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/scripts/export_diff.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-export-impact/scripts/export_snapshot.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/convert-anlz-cue-impact-experiment2-plan.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/convert-anlz-cue-impact-experiment2.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/convert-anlz-cue-impact-test-plan.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/convert-anlz-cue-impact-verification.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/convert-anlz-cue-impact.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/decisions/convert-and-reanalysis-impact.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/decisions/convert-helper-structure.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/01-inventory.txt +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/02-cue-schema.txt +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/03-cue-fields-by-format.txt +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/04-anlz-deep.txt +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/05-census.txt +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/06-content-columns.txt +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/07-analysis-flags.txt +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/exp2-00-pvb2-origin.txt +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-00-zero.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-dyn-high-01.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-dyn-high-02.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-dyn-high-03.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-dyn-normal-01.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-dyn-normal-02.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-dyn-normal-03.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-high-01.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-high-02.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-high-03.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-high-04.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-high-05.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-high-auto-01.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-high-auto-02.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-high-auto-03.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-01.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-02.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-03.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-04.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-05.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-06.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-then-high.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-unlocked-ref.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-174954387-nth-mid-normal.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-205157376-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-205157376-aiff-postanalyze.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-205157376-aiff-postconv.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-205157376-combined-ctrl-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-205157376-combined-ctrl-postanalyze.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-205157376-combined-ctrl-postanalyze2.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-205795680-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-205795680-aiff-postanalyze.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-205795680-aiff-postconv.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-205795680-aiff-postopen.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-205795680-flac-ctrl-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-205795680-flac-ctrl-postanalyze.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-205795680-flac-ctrl-postanalyze2.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-205795680-flac-postconv.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-205795680-mp3-postanalyze.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-205795680-mp3-postconv.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-230928195-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-230928195-mp3-locked.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-230928195-mp3-postconv.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-230928195-mp3-unlocked-reanalyze.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-230928195-postlock.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-230928195-prelock.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-231283665-iso-rate-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-231283665-iso-rate-postanalyze.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-231283665-iso-rate-postconv.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-00-zero.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-dyn-high-01.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-dyn-high-02.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-dyn-high-03.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-dyn-normal-01.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-dyn-normal-02.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-dyn-normal-03.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-high-01.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-high-02.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-high-03.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-high-04.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-high-05.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-high-auto-01.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-high-auto-02.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-high-auto-03.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-01.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-02.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-03.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-04.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-05.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-06.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-locked.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-then-high.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-27790898-nth-mid-normal.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-34178159-iso-depth-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-34178159-iso-depth-postanalyze.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-34178159-iso-depth-postconv.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-7691309-pvb2-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-7691309-pvb2-postanalyze.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/evidence/subject-7691309-pvb2-postconv.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/scripts/README.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/scripts/analysis_flags.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/scripts/anlz_census.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/scripts/anlz_deep.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/scripts/content_columns.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/scripts/cue_fields_by_format.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/scripts/cue_schema.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/scripts/grid_drift.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/scripts/inventory.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/scripts/pvb2_origin.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/scripts/reset_fresh_to_zero.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/scripts/restore_fixtures.sh +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-reanalysis-impact/scripts/row_snapshot.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-thread-scaling/convert-thread-scaling.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-thread-scaling/evidence/thread-scaling.txt +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-thread-scaling/scripts/_sources.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-thread-scaling/scripts/format_scaling.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-thread-scaling/scripts/shipped_path_scaling.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/convert-thread-scaling/scripts/write_cost.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/database-concurrency/database-concurrency.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/database-concurrency/evidence/plan-apply-probes.txt +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/database-concurrency/evidence/usn-spikes.txt +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/database-concurrency/plan-apply-window.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/database-concurrency/scripts/block_reservation.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/database-concurrency/scripts/concurrent_increment.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/database-concurrency/scripts/identity_probe.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/database-concurrency/scripts/membership_probe.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/database-concurrency/scripts/snapshot_probe.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/database-concurrency/scripts/wal_snapshot.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/database-concurrency/usn-maintenance.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/decisions/edit-field-handlers.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/edit-relational-fields-test-plan.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/edit-relational-fields.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/evidence/rel-112264610-e2-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/evidence/rel-112264610-e2-10-reuse.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/evidence/rel-141833798-e3b-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/evidence/rel-141833798-e3b-10-newalbum.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/evidence/rel-145166719-e0-census.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/evidence/rel-176388182-e1-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/evidence/rel-176388182-e1-10-reuse.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/evidence/rel-183309432-e4-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/evidence/rel-183309432-e4-10-orphaned.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/evidence/rel-47413782-v-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/evidence/rel-47413782-v-10-reuse.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/evidence/rel-50395296-v-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/evidence/rel-50395296-v-10-reuse.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/evidence/rel-57701453-e3-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/evidence/rel-57701453-e3-10-diffartist.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/evidence/rel-71974950-v-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/evidence/rel-71974950-v-10-reuse.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/scripts/relational_diff.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/edit-relational-fields/scripts/relational_snapshot.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/file-types/README.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/file-types/decisions/unknown-file-types.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/import-track-row-shape/decisions/commit-semantics-and-usn.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/import-track-row-shape/evidence/column-coverage-gig.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/import-track-row-shape/evidence/datecreated-source-gig.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/import-track-row-shape/evidence/filetype-searchstr-gig.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/import-track-row-shape/evidence/filetype-searchstr-local.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/import-track-row-shape/evidence/import-row-shape-gig.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/import-track-row-shape/evidence/tag-key-mapping-gig.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/import-track-row-shape/import-track-row-shape.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/import-track-row-shape/scripts/column_coverage.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/import-track-row-shape/scripts/datecreated_source.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/import-track-row-shape/scripts/filetype_and_searchstr.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/import-track-row-shape/scripts/import_row_shape.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/import-track-row-shape/scripts/tag_key_mapping.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/decisions/remove-command-behavior.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/evidence/rm-109570093-r8-00-imported.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/evidence/rm-109570093-r8-10-analyzed.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/evidence/rm-114745319-r1-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/evidence/rm-114745319-r1-10-removed.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/evidence/rm-120331280-f6-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/evidence/rm-120331280-f6-10-control.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/evidence/rm-137975518-f3-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/evidence/rm-137975518-f3-10-control.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/evidence/rm-139425629-r6-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/evidence/rm-139425629-r6-10-removed.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/evidence/rm-14241481-r5-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/evidence/rm-14241481-r5-10-removed.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/evidence/rm-143461275-r7-01-folder-art.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/evidence/rm-265892207-r3-00-baseline.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/evidence/rm-265892207-r3-10-removed.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/evidence/rm-265892207-r4-10-playlist-only.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/evidence/rm-36337051-r7-00-folder-art.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/evidence/rm-74039842-r8-00-imported.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/evidence/rm-74039842-r8-10-analyzed.json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/remove-track-impact-test-plan.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/remove-track-impact.md +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/scripts/build_fixtures.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/scripts/removal_diff.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/scripts/removal_snapshot.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/remove-track-impact/scripts/restore.sh +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/shared/scripts/subject_diff.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/research/shared/scripts/subject_snapshot.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/ruff.toml +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/__init__.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/api/__init__.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/api/conftest.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/api/test_edit.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/api/test_field_handlers.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/api/test_import.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/api/test_package.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/api/test_relations.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/api/test_remove.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/api/test_search.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/cli/__init__.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/cli/test_convert.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/cli/test_edit.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/cli/test_import.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/cli/test_locking.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/cli/test_main.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/cli/test_progress.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/cli/test_remove.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/cli/test_search.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/cli/test_utils.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/conftest.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/Dockerfile +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/__init__.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/__snapshots__/test_journey/test_search_full_json_snapshot[macos].json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/__snapshots__/test_journey/test_search_full_json_snapshot[windows].json +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/__snapshots__/test_journey.ambr +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/conftest.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/fixtures/audio/01-flac-44_1k-16b.flac +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/fixtures/audio/02-flac-96k-24b.flac +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/fixtures/audio/03-alac-44_1k-16b.m4a +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/fixtures/audio/04-alac-48k-24b.m4a +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/fixtures/audio/05-aiff-44_1k-16b.aiff +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/fixtures/audio/06-wav-96k-24b.wav +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/fixtures/audio/07-mp3-44_1k-320cbr.mp3 +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/fixtures/audio/08-mp3-44_1k-v0vbr.mp3 +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/fixtures/audio/09-aac-44_1k-256kbps.m4a +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/fixtures/audio/10-/303/274/303/261/303/256c/303/266d/303/251-flac-44_1k-16b.flac" +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/fixtures/macos/master.6.8.6.db +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/fixtures/windows/master.6.8.6.db +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/test_edit_fields.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/test_import.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/test_journey.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/e2e/test_remove.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/test_display.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/test_locking.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/test_logger.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/test_models.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/test_query.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/test_tag_fields.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/test_tags.py +0 -0
- {rekordbox_edit-0.13.0.dev7 → rekordbox_edit-0.13.0.dev9}/tests/test_utils.py +0 -0
|
@@ -1,6 +1,19 @@
|
|
|
1
|
-
## v0.13.0.
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
## v0.13.0.dev9 (2026-09-08)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
- fix: preserve unreadable ANLZ tags when rewriting a track's path
|
|
5
|
+
- The PPTH rewrite went through AnlzFile.save(), which rebuilds a file from
|
|
6
|
+
the tags pyrekordbox parsed and discards the rest. PVB2, the seek index
|
|
7
|
+
Rekordbox writes for every analysed FLAC, is one it has no structure for,
|
|
8
|
+
so every edit and convert that changed a filename dropped it. Across a
|
|
9
|
+
24,698-file library, 1,787 files lost an 8,032-byte PVB2, and 10 more
|
|
10
|
+
could not be parsed at all, leaving a stale path behind a successful write.
|
|
11
|
+
- _anlz.py rewrites the tag by splicing bytes and correcting len_file. Tags
|
|
12
|
+
are walked by declared length instead of being parsed, so a tag with no
|
|
13
|
+
reader here survives and an unparseable file is still rewritten. Each
|
|
14
|
+
analysis file is handled on its own, so one malformed file no longer
|
|
15
|
+
abandons the rest of a track's analysis.
|
|
16
|
+
- docs(research): investigate integrating rekordbox-edit with beets
|
|
4
17
|
- fix(edit): give the records an edit creates and collects their USNs
|
|
5
18
|
- An edit that reassigned a relational field left the record it created
|
|
6
19
|
unstamped and the one it collected outside the counter, so a syncing peer
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: rekordbox-edit
|
|
3
|
-
Version: 0.13.0.
|
|
3
|
+
Version: 0.13.0.dev9
|
|
4
4
|
Summary: Tools for managing and modifying a RekordBox library en-masse
|
|
5
5
|
Project-URL: Homepage, https://github.com/jviall/rekordbox-edit
|
|
6
6
|
Project-URL: Repository, https://github.com/jviall/rekordbox-edit
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "rekordbox-edit"
|
|
7
|
-
version = "0.13.0.
|
|
7
|
+
version = "0.13.0.dev9"
|
|
8
8
|
description = "Tools for managing and modifying a RekordBox library en-masse"
|
|
9
9
|
authors = [{ name = "James Viall", email= "jamesviall@pm.me"}]
|
|
10
10
|
license = "MIT"
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"""Byte-level reading and rewriting of the path tag in ANLZ analysis files.
|
|
2
|
+
|
|
3
|
+
An ANLZ file is a 28-byte header followed by a flat run of tags, each carrying
|
|
4
|
+
its own length and none referring to another's position. Rewriting the stored
|
|
5
|
+
path is therefore a splice: replace the PPTH tag, correct the file length, and
|
|
6
|
+
every other byte survives.
|
|
7
|
+
|
|
8
|
+
That byte preservation is the point. `pyrekordbox`'s `AnlzFile.save()` rebuilds
|
|
9
|
+
a file from the tags its parser recognized and silently discards the rest, which
|
|
10
|
+
loses `PVB2`, the seek index Rekordbox writes for FLAC tracks.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
import struct
|
|
14
|
+
|
|
15
|
+
#: type, len_header, len_file, then four values this module does not interpret.
|
|
16
|
+
_FILE_HEADER = struct.Struct(">4sIIIIII")
|
|
17
|
+
#: type, len_header, len_tag. Every tag starts with these, whatever follows.
|
|
18
|
+
_TAG_HEADER = struct.Struct(">4sII")
|
|
19
|
+
_MAGIC = b"PMAI"
|
|
20
|
+
_PATH_TAG = b"PPTH"
|
|
21
|
+
#: PPTH holds its path after the tag header and a 4-byte character count.
|
|
22
|
+
_PATH_OFFSET = _TAG_HEADER.size + 4
|
|
23
|
+
#: The path is stored UTF-16 big-endian with a terminating null character.
|
|
24
|
+
_TERMINATOR = b"\x00\x00"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class AnlzFormatError(ValueError):
|
|
28
|
+
"""The bytes given are not a well-formed ANLZ file."""
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _walk_tags(data: bytes):
|
|
32
|
+
"""Yield `(offset, tag_type, len_tag)` per tag, without reading contents.
|
|
33
|
+
|
|
34
|
+
Walking by declared length rather than by parsing means a tag this codebase
|
|
35
|
+
has no structure for is still traversable.
|
|
36
|
+
"""
|
|
37
|
+
if len(data) < _FILE_HEADER.size:
|
|
38
|
+
raise AnlzFormatError("shorter than an ANLZ file header")
|
|
39
|
+
magic, len_header = _FILE_HEADER.unpack_from(data, 0)[:2]
|
|
40
|
+
if magic != _MAGIC:
|
|
41
|
+
raise AnlzFormatError(f"expected {_MAGIC!r} magic, found {magic!r}")
|
|
42
|
+
|
|
43
|
+
offset = len_header
|
|
44
|
+
while offset + _TAG_HEADER.size <= len(data):
|
|
45
|
+
tag_type, _len_tag_header, len_tag = _TAG_HEADER.unpack_from(data, offset)
|
|
46
|
+
if len_tag <= 0 or offset + len_tag > len(data):
|
|
47
|
+
raise AnlzFormatError(
|
|
48
|
+
f"tag {tag_type!r} at offset {offset} declares length {len_tag}, "
|
|
49
|
+
f"which overruns the {len(data)}-byte file"
|
|
50
|
+
)
|
|
51
|
+
yield offset, tag_type, len_tag
|
|
52
|
+
offset += len_tag
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _find_path_tag(data: bytes) -> tuple[int, int]:
|
|
56
|
+
for offset, tag_type, len_tag in _walk_tags(data):
|
|
57
|
+
if tag_type == _PATH_TAG:
|
|
58
|
+
return offset, len_tag
|
|
59
|
+
raise AnlzFormatError(f"no {_PATH_TAG.decode()} tag in this file")
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def _build_path_tag(path: str) -> bytes:
|
|
63
|
+
encoded = path.encode("utf-16-be") + _TERMINATOR
|
|
64
|
+
content = struct.pack(">I", len(encoded)) + encoded
|
|
65
|
+
return (
|
|
66
|
+
_TAG_HEADER.pack(_PATH_TAG, _PATH_OFFSET, _TAG_HEADER.size + len(content))
|
|
67
|
+
+ content
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def read_path(data: bytes) -> str:
|
|
72
|
+
"""The path held in the file's PPTH tag."""
|
|
73
|
+
offset, _len_tag = _find_path_tag(data)
|
|
74
|
+
(len_path,) = struct.unpack_from(">I", data, offset + _TAG_HEADER.size)
|
|
75
|
+
start = offset + _PATH_OFFSET
|
|
76
|
+
return data[start : start + len_path - len(_TERMINATOR)].decode("utf-16-be")
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def set_path(data: bytes, path: str) -> bytes:
|
|
80
|
+
"""Return `data` with its PPTH tag holding `path`, all other bytes kept."""
|
|
81
|
+
offset, len_tag = _find_path_tag(data)
|
|
82
|
+
spliced = data[:offset] + _build_path_tag(path) + data[offset + len_tag :]
|
|
83
|
+
|
|
84
|
+
magic, len_header, _stale_len, *trailing = _FILE_HEADER.unpack_from(spliced, 0)
|
|
85
|
+
header = _FILE_HEADER.pack(magic, len_header, len(spliced), *trailing)
|
|
86
|
+
return header + spliced[_FILE_HEADER.size :]
|
|
@@ -9,6 +9,8 @@ from pyrekordbox.utils import get_rekordbox_pid
|
|
|
9
9
|
from sqlalchemy import text
|
|
10
10
|
|
|
11
11
|
from rekordbox_edit._tag_fields import TAG_FIELDS
|
|
12
|
+
from rekordbox_edit.api._anlz import AnlzFormatError
|
|
13
|
+
from rekordbox_edit.api._anlz import set_path as set_anlz_path
|
|
12
14
|
from rekordbox_edit.errors import RekordboxRunningError
|
|
13
15
|
from rekordbox_edit.locking import SCRIPTED_TIMEOUT, database_lock
|
|
14
16
|
from rekordbox_edit.models import Track
|
|
@@ -81,15 +83,29 @@ def _update_anlz_paths(
|
|
|
81
83
|
"""Rewrite the PPTH path tag in a track's ANLZ files to the given file
|
|
82
84
|
name, in rekordbox's device-relative ``?/<name>`` form.
|
|
83
85
|
|
|
84
|
-
|
|
86
|
+
Splices the tag into the file's existing bytes rather than rebuilding it
|
|
87
|
+
from parsed structures, so tags this codebase has no reader for survive.
|
|
88
|
+
Rebuilding drops them, and one of them is `PVB2`, the seek index Rekordbox
|
|
89
|
+
writes for every analysed FLAC.
|
|
90
|
+
|
|
91
|
+
Each file is handled on its own: a malformed one is reported and skipped
|
|
92
|
+
rather than abandoning the rest of the track's analysis. No-op for tracks
|
|
93
|
+
without an analysis.
|
|
85
94
|
"""
|
|
86
95
|
if not content.AnalysisDataPath:
|
|
87
96
|
return
|
|
88
97
|
new_ppth = f"?/{new_filename}"
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
98
|
+
for anlz_path in db.get_anlz_paths(content.ID).values():
|
|
99
|
+
if anlz_path is None:
|
|
100
|
+
continue
|
|
101
|
+
try:
|
|
102
|
+
with open(anlz_path, "rb") as fh:
|
|
103
|
+
updated = set_anlz_path(fh.read(), new_ppth)
|
|
104
|
+
with open(anlz_path, "wb") as fh:
|
|
105
|
+
fh.write(updated)
|
|
106
|
+
except (AnlzFormatError, OSError) as e:
|
|
107
|
+
_logger.warning(f"Could not rewrite the path tag in {anlz_path}: {e}")
|
|
108
|
+
continue
|
|
93
109
|
_logger.debug(f"Updated PPTH of {anlz_path} to {new_ppth}")
|
|
94
110
|
|
|
95
111
|
|
|
@@ -47,6 +47,14 @@ formal and terse, and states findings as the evidence supports them.
|
|
|
47
47
|
command deliberately diverges from that behavior.
|
|
48
48
|
- **`file-types/`** — how `convert` and the display layer should treat Rekordbox
|
|
49
49
|
`FileType` codes the tool does not map.
|
|
50
|
+
- **`beets-plugin-integration/`** — what beets' plugin architecture permits a
|
|
51
|
+
rekordbox-edit integration to do: where events fire relative to database
|
|
52
|
+
inserts and file moves, which events the autotagger gates off, why beets item
|
|
53
|
+
identifiers do not survive a reimport, and what that forces about how the two
|
|
54
|
+
databases are joined. Also what it takes for a beets library to follow an
|
|
55
|
+
`rbe convert`, why the converted file usually needs no move, and why keeping
|
|
56
|
+
the original leaves the two libraries unable to agree — which is what settles
|
|
57
|
+
the plugin deleting originals by default where the CLI does not.
|
|
50
58
|
- **`import-track-row-shape/`** — what a `DjmdContent` row holds immediately after
|
|
51
59
|
Rekordbox imports a track and before analysis runs, which columns come from
|
|
52
60
|
tags rather than the audio, and where `pyrekordbox.add_content` diverges from
|