pyrekordbox 0.3.1__tar.gz → 0.4.0__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.
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.github/workflows/pypi-publish.yml +2 -4
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.github/workflows/tests.yml +1 -1
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.pre-commit-config.yaml +2 -2
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/CHANGELOG.md +84 -5
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/CONTRIBUTING.md +13 -2
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/LICENSE +1 -1
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/PKG-INFO +17 -33
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/README.md +13 -30
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/formats/db6.md +7 -7
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/installation.md +5 -5
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/quickstart.md +4 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/tutorial/db6.md +28 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyproject.toml +31 -4
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox/__init__.py +8 -8
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox/__main__.py +3 -2
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox/_version.py +2 -2
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox/anlz/__init__.py +3 -2
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox/anlz/file.py +4 -2
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox/anlz/tags.py +3 -1
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox/config.py +79 -23
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox/db6/__init__.py +2 -2
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox/db6/aux_files.py +3 -2
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox/db6/database.py +227 -143
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox/db6/registry.py +1 -0
- pyrekordbox-0.4.0/pyrekordbox/db6/smartlist.py +375 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox/db6/tables.py +81 -20
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox/logger.py +0 -1
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox/mysettings/__init__.py +5 -4
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox/mysettings/file.py +3 -1
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox/rbxml.py +5 -3
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox/utils.py +4 -3
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox.egg-info/PKG-INFO +17 -33
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox.egg-info/SOURCES.txt +1 -2
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox.egg-info/requires.txt +1 -0
- pyrekordbox-0.4.0/pyrekordbox.egg-info/top_level.txt +1 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/requirements.txt +1 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/tests/test_anlz.py +3 -1
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/tests/test_config.py +92 -15
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/tests/test_db6.py +140 -16
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/tests/test_mysetting.py +5 -3
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/tests/test_xml.py +3 -1
- pyrekordbox-0.3.1/pyrekordbox/db6/smart_playlist.py +0 -333
- pyrekordbox-0.3.1/pyrekordbox/xml.py +0 -8
- pyrekordbox-0.3.1/pyrekordbox.egg-info/top_level.txt +0 -4
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.github/ISSUE_TEMPLATE/config.yaml +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.github/workflows/codeql.yml +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.gitignore +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.readthedocs.yaml +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/DEVSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/rekordbox/export.pdb +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/rekordbox/exportExt.pdb +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/DEVSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/beat_fx_quantize/off/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/beat_fx_quantize/on/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/channel_fader_curve/linear/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/channel_fader_curve/steep_bottom/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/channel_fader_curve/steep_top/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/exponential/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/linear/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/smooth/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/cross_fader_curve/constant/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/cross_fader_curve/fast_cut/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/cross_fader_curve/slow_cut/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/display_brightness/five/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/display_brightness/four/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/display_brightness/one/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/display_brightness/three/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/display_brightness/two/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/display_brightness/white/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/headphones_mono_split/mono_split/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/headphones_mono_split/stereo/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/headphones_pre_eq/post_eq/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/headphones_pre_eq/pre_eq/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/indicator_brightness/one/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/indicator_brightness/three/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/indicator_brightness/two/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/mic_low_cut/off/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/mic_low_cut/on/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_button_type/toggle/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_button_type/trigger/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/eight/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/eleven/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/fifteen/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/five/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/four/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/fourteen/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/nine/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/one/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/seven/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/six/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/sixteen/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/ten/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/thirteen/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/three/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/twelve/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/two/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/talk_over_level/minus_12db/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/talk_over_level/minus_18db/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/talk_over_level/minus_24db/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/talk_over_level/minus_6db/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/talk_over_mode/advanced/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/talk_over_mode/normal/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue_level/memory/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_36db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_42db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_48db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_54db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_60db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_66db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_72db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_78db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/disc_slot_illumination/bright/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/disc_slot_illumination/dark/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/disc_slot_illumination/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/eject_lock/lock/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/eject_lock/unlock/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/hotcue_autoload/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/hotcue_autoload/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/hotcue_autoload/rekordbox/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/hotcue_color/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/hotcue_color/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/jog_mode/cdj/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/jog_mode/vinyl/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/jog_ring_brightness/bright/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/jog_ring_brightness/dark/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/jog_ring_brightness/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/jog_ring_indicator/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/jog_ring_indicator/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/chinese_simplified/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/chinese_traditional/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/czech/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/danish/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/dutch/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/english/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/french/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/german/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/greek/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/hungarian/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/italian/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/japanese/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/korean/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/portuguese/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/russian/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/spanish/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/swedish/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/turkish/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/lcd_brightness/five/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/lcd_brightness/four/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/lcd_brightness/one/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/lcd_brightness/three/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/lcd_brightness/two/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/master_tempo/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/master_tempo/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/needle_lock/lock/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/needle_lock/unlock/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/on_air_display/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/on_air_display/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/phase_meter/type1/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/phase_meter/type2/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/play_mode/continue_/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/play_mode/single/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/quantize/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/quantize/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/quantize_beat_value/eighth/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/quantize_beat_value/half/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/quantize_beat_value/one/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/quantize_beat_value/quarter/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/slip_flashing/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/slip_flashing/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/sync/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/sync/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/tempo_range/six/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/tempo_range/sixteen/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/tempo_range/ten/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/tempo_range/wide/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/time_mode/elapsed/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/time_mode/remain/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/eight/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/four/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/half/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/one/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/sixteen/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/sixtyfour/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/thirtytwo/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/two/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/jog_display_mode/artwork/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/jog_display_mode/auto/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/jog_display_mode/info/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/jog_display_mode/simple/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/five/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/four/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/one/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/three/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/two/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/pad_button_brightness/four/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/pad_button_brightness/one/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/pad_button_brightness/three/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/pad_button_brightness/two/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/release/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/touch/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/touch_release/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/waveform/phase_meter/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/waveform/waveform/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/waveform_divisions/phrase/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/waveform_divisions/time_scale/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/DEVSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/ExtData.edb +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P002/00009C2E/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P002/00009C2E/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P02B/00023587/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P02B/00023587/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P035/00027763/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P035/00027763/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P038/0002AAA0/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P038/0002AAA0/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P068/00012CA2/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P068/00012CA2/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P076/00013B6E/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P076/00013B6E/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/datafile.edb +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/masterPlaylists3.xml +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/database.xml +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/datafile.edb +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/DEVSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/MYSETTING.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/masterPlaylists3.xml +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/masterPlaylists6.xml +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/003/c9538-33bc-4ca7-b6c7-e63ebf9a96f8/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/003/c9538-33bc-4ca7-b6c7-e63ebf9a96f8/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/003/c9538-33bc-4ca7-b6c7-e63ebf9a96f8/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/104/c82cc-661c-4f30-ab60-51ce1effeeed/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/104/c82cc-661c-4f30-ab60-51ce1effeeed/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/104/c82cc-661c-4f30-ab60-51ce1effeeed/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/36d/ad2b4-5d4e-4b94-9a5d-a5bb241aee4b/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/36d/ad2b4-5d4e-4b94-9a5d-a5bb241aee4b/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/36d/ad2b4-5d4e-4b94-9a5d-a5bb241aee4b/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/731/0104f-53cb-453e-8b83-e0dfd5cff825/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/731/0104f-53cb-453e-8b83-e0dfd5cff825/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/731/0104f-53cb-453e-8b83-e0dfd5cff825/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/c8b/ac74a-bbfc-4fce-8fb8-50aa4e974273/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/c8b/ac74a-bbfc-4fce-8fb8-50aa4e974273/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/c8b/ac74a-bbfc-4fce-8fb8-50aa4e974273/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/e35/fa187-3f34-47e2-9880-2b33cb8d1304/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/e35/fa187-3f34-47e2-9880-2b33cb8d1304/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/e35/fa187-3f34-47e2-9880-2b33cb8d1304/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/database.xml +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/masterPlaylists6_template.xml +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/master_locked.db +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/master_unlocked.db +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/Makefile +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/make.bat +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_beat.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_file.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pco2.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pcob.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pcp2.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pcpt.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_ppth.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pqt2.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pqt2_2.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pqtz.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pssi.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pssi_entry.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pvbr.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pwav.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pwv3.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pwv4.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pwv5.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pwv5_entry.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pwv6.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pwv7.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pwvc.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_tag.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/images/x64dbg_rb_key.png +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/logos/dark/logo_primary.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/logos/light/logo_primary.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_static/logos/mid/logo_primary.svg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_templates/apidoc/module.rst_t +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_templates/apidoc/package.rst_t +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_templates/apidoc/toc.rst_t +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_templates/autosummary/class.rst +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/_templates/autosummary/module.rst +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/api.md +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/conf.py +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/development/changes.md +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/development/contributing.md +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/formats/anlz.md +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/formats/mysetting.md +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/formats/xml.md +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/index.md +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/key.md +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/requirements.txt +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/tutorial/anlz.md +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/tutorial/configuration.md +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/tutorial/index.md +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/tutorial/mysetting.md +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/docs/source/tutorial/xml.md +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox/anlz/structs.py +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox/mysettings/structs.py +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox.egg-info/dependency_links.txt +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/pyrekordbox.egg-info/not-zip-safe +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/setup.cfg +0 -0
- {pyrekordbox-0.3.1 → pyrekordbox-0.4.0}/tests/__init__.py +0 -0
@@ -1,6 +1,4 @@
|
|
1
|
-
# This workflow will upload a Python Package
|
2
|
-
# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
|
3
|
-
|
1
|
+
# This workflow will upload a Python Package when a release is created
|
4
2
|
|
5
3
|
name: Upload Python Package to PyPi
|
6
4
|
|
@@ -13,7 +11,7 @@ on:
|
|
13
11
|
|
14
12
|
jobs:
|
15
13
|
build:
|
16
|
-
name: Build
|
14
|
+
name: Build Python Package
|
17
15
|
runs-on: ubuntu-latest
|
18
16
|
steps:
|
19
17
|
- name: get latest release with tag
|
@@ -43,7 +43,7 @@ jobs:
|
|
43
43
|
strategy:
|
44
44
|
matrix:
|
45
45
|
os: [windows-latest, macos-latest]
|
46
|
-
python-version: ["3.8", "3.
|
46
|
+
python-version: ["3.8", "3.13"] # check oldest and latest supported version
|
47
47
|
other-os: [true]
|
48
48
|
|
49
49
|
runs-on: ${{ matrix.os }}
|
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
repos:
|
5
5
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
6
|
-
rev:
|
6
|
+
rev: v5.0.0
|
7
7
|
hooks:
|
8
8
|
- id: end-of-file-fixer
|
9
9
|
- id: trailing-whitespace
|
@@ -13,7 +13,7 @@ repos:
|
|
13
13
|
- id: check-yaml
|
14
14
|
|
15
15
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
16
|
-
rev: v0.
|
16
|
+
rev: v0.9.6
|
17
17
|
hooks:
|
18
18
|
# Run the linter.
|
19
19
|
- id: ruff
|
@@ -1,12 +1,89 @@
|
|
1
1
|
# What's New
|
2
2
|
|
3
|
-
<a name="
|
4
|
-
## [
|
3
|
+
<a name="v0.4.0"></a>
|
4
|
+
## [v0.4.0] - 2025-02-12
|
5
|
+
|
6
|
+
This release adds the ability to create new tracks in the Rekordbox v6 database.
|
7
|
+
It also adds support for Rekordbox 7 and fixes various bugs.
|
8
|
+
|
9
|
+
### New Features
|
10
|
+
|
11
|
+
- **db:** **add method for creating tracks ([#121](https://github.com/dylanljones/pyrekordbox/pull/121))**
|
12
|
+
New tracks can now be created and added to the Rekordbox collection.
|
13
|
+
Note that the user still has to reload tags/analyze the newly added tracks in Rekordbox.
|
14
|
+
- **config:** **add Rekordbox 7 support ([#133](https://github.com/dylanljones/pyrekordbox/issues/133))**
|
15
|
+
|
16
|
+
### Improvements/Bug Fixes
|
17
|
+
|
18
|
+
- **db:** **fix missing proxy association in table dict**
|
19
|
+
The association proxies were missing in the `to_dict` method.
|
20
|
+
The keys are now also cached.
|
21
|
+
- **db:** **fix an error with .aif file extension ([#138](https://github.com/dylanljones/pyrekordbox/pull/138))**
|
22
|
+
- **db:** **fix to smartlist not always working correctly due to unneccessary bit shift for specific MyTag values ([#142](https://github.com/dylanljones/pyrekordbox/pull/142))**
|
23
|
+
Fix smartlists not always working correctly due to unneccessary bit shift for specific MyTag values
|
24
|
+
- **db:** **fix different timezone assertion ([#137](https://github.com/dylanljones/pyrekordbox/pull/137))**
|
25
|
+
Allow different timezones other than "+00:00" in the datetime format of the DB.
|
26
|
+
- **xml:** **save xml as utf-8 ([#135](https://github.com/dylanljones/pyrekordbox/pull/135))**
|
27
|
+
- **build:** **use pre-built sqlcipher wheels as dependency ([#134](https://github.com/dylanljones/pyrekordbox/pull/134))**
|
28
|
+
The sqlcipher dependency can now be installed using pre-built wheels with included sqlcipher binaries. This makes the whole library installable via pip!
|
29
|
+
- **xml:** **remove deprecated `xml` module**
|
30
|
+
- **db:** **remove deprecated `open_rekordbox_database` method**
|
31
|
+
|
32
|
+
### Documentation
|
33
|
+
|
34
|
+
- **db:** **add documentation for adding tracks**
|
35
|
+
- **db:** **add more info to djmdContent table**
|
36
|
+
|
37
|
+
### BREAKING CHANGE
|
38
|
+
|
39
|
+
Remove deprecated `open_rekordbox_database` method. Use the `Rekordbox6Database` database handler instead!
|
40
|
+
Remove deprecated `xml` module. Use the `rbxml` module instead!
|
41
|
+
|
42
|
+
|
43
|
+
<a name="v0.3.2"></a>
|
44
|
+
## [v0.3.2] - 2024-01-05
|
45
|
+
|
46
|
+
This release fixes smart-playlist related bugs and improves the
|
47
|
+
database table relationships.
|
48
|
+
|
49
|
+
### New Features
|
50
|
+
|
51
|
+
- **db:** **Add method for creating smart playlists**
|
52
|
+
This will set the ID in the smart list to the newly created playlist ID before generating the XML string
|
53
|
+
|
54
|
+
### Improvements/Bug Fixes
|
55
|
+
|
56
|
+
- **db:** **add missing UUID entries**
|
57
|
+
The UUID was not set when creating the following db entries:
|
58
|
+
- album
|
59
|
+
- artist
|
60
|
+
- genre
|
61
|
+
- label
|
62
|
+
- **db:** **add missing relationships in `DjmdContent`**
|
63
|
+
Linked tables and corresponding relationships:
|
64
|
+
- `DjmdCue`: `Cues`
|
65
|
+
- `DjmdSongMyTag`: `MyTags`
|
66
|
+
- `DjmdActiveCensor`: `ActiveCensors`
|
67
|
+
- `DjmdMixerParam`: `MixerParams`
|
68
|
+
- **db:** **add My-Tag names association to the `DjmdContent` table**
|
69
|
+
It is now possible to get a list of the corresponding My-tag names from the `DjmdContent` instance.
|
70
|
+
- **db:** **add album artist association to the `DjmdAlbum` and `DjmdContent` tables**
|
71
|
+
It is now possible to get the album artist instance or name directly from the `DjmdContent` instance.
|
72
|
+
- **db:** **fix smart list filter bugs ([#110](https://github.com/dylanljones/pyrekordbox/discussions/110))**
|
73
|
+
|
74
|
+
### Documentation
|
75
|
+
|
76
|
+
- **db:** **fix `Kind` notes in `DjmdCue` table**
|
77
|
+
|
78
|
+
|
79
|
+
<a name="v0.3.1"></a>
|
80
|
+
## [v0.3.1] - 2023-12-28
|
5
81
|
|
6
82
|
This release improves the Rekordbox v6 database key extraction and
|
7
83
|
adds a new handler for smart playlists.
|
8
84
|
|
9
85
|
### New Features
|
86
|
+
|
10
87
|
- **add method to return the contents of a playlist in the RBv6 db directly**
|
11
88
|
The database can now be queried directly for the contents contained in a playlist.
|
12
89
|
This works for regular playlists as well as for smart playlists.
|
@@ -14,7 +91,7 @@ adds a new handler for smart playlists.
|
|
14
91
|
- **add RBv6 smart playlist handler**
|
15
92
|
Add a handler for the smart playlists of Rekordbox. The conditions are stored as an
|
16
93
|
XML string. The smart playlist handler supports parsing and writing the XML string.
|
17
|
-
- **add DB key extraction method for newer Rekordbox versions ([#97](https://github.com/dylanljones/pyrekordbox/
|
94
|
+
- **add DB key extraction method for newer Rekordbox versions ([#97](https://github.com/dylanljones/pyrekordbox/discussions/97)).**
|
18
95
|
The key can now also be extracted with newer Rekordbox versions.
|
19
96
|
`frida` is used to inject code to intercept the key when the DB is opened.
|
20
97
|
|
@@ -533,8 +610,10 @@ This release contains documentation fixes.
|
|
533
610
|
- **add missing djmd tables to `master.db` database documentation**
|
534
611
|
|
535
612
|
|
536
|
-
[Unreleased]: https://github.com/dylanljones/pyrekordbox/compare/
|
537
|
-
[
|
613
|
+
[Unreleased]: https://github.com/dylanljones/pyrekordbox/compare/v0.4.0...HEAD
|
614
|
+
[v0.4.0]: https://github.com/dylanljones/pyrekordbox/compare/v0.3.2...v0.4.0
|
615
|
+
[v0.3.2]: https://github.com/dylanljones/pyrekordbox/compare/v0.3.1...v0.3.2
|
616
|
+
[v0.3.1]: https://github.com/dylanljones/pyrekordbox/compare/0.3.0...v0.3.1
|
538
617
|
[0.3.0]: https://github.com/dylanljones/pyrekordbox/compare/0.2.3...0.3.0
|
539
618
|
[0.2.3]: https://github.com/dylanljones/pyrekordbox/compare/0.2.2...0.2.3
|
540
619
|
[0.2.2]: https://github.com/dylanljones/pyrekordbox/compare/0.2.1...0.2.2
|
@@ -22,7 +22,7 @@ $ pre-commit install
|
|
22
22
|
A format influenced by [Angular commit message].
|
23
23
|
|
24
24
|
```text
|
25
|
-
<type
|
25
|
+
<type>(<scope>): <subject>
|
26
26
|
<BLANK LINE>
|
27
27
|
<body>
|
28
28
|
<BLANK LINE>
|
@@ -42,7 +42,18 @@ Must be one of the following:
|
|
42
42
|
- **build:** Updating Makefile etc, no production code changes
|
43
43
|
- **test:** Adding missing tests or correcting existing tests
|
44
44
|
- **update** Other configurations updates
|
45
|
-
|
45
|
+
|
46
|
+
### Scope (optional)
|
47
|
+
|
48
|
+
The scope should specify the affected part of the project.
|
49
|
+
The following is a list of possible scopes:
|
50
|
+
|
51
|
+
- **config**: Configuration handling
|
52
|
+
- **xml**: Rekordbox XML database handling
|
53
|
+
- **db**: Rekordbox v6 database handling
|
54
|
+
- **anlz**: ANLZ file handling
|
55
|
+
- **mysetting**: MySettings file handling
|
56
|
+
|
46
57
|
|
47
58
|
### Subject
|
48
59
|
|
@@ -1,11 +1,11 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.2
|
2
2
|
Name: pyrekordbox
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.4.0
|
4
4
|
Summary: Inofficial Python package for interacting with the library of Pioneers Rekordbox DJ software.
|
5
5
|
Author-email: Dylan Jones <dylanljones94@gmail.com>
|
6
6
|
License: MIT License
|
7
7
|
|
8
|
-
Copyright (c) 2022-
|
8
|
+
Copyright (c) 2022-2024, Dylan Jones
|
9
9
|
|
10
10
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
11
11
|
of this software and associated documentation files (the "Software"), to deal
|
@@ -54,6 +54,7 @@ Requires-Dist: numpy>=1.19.0
|
|
54
54
|
Requires-Dist: packaging
|
55
55
|
Requires-Dist: psutil>=5.9.0
|
56
56
|
Requires-Dist: sqlalchemy>=2.0.0
|
57
|
+
Requires-Dist: sqlcipher3-wheels
|
57
58
|
Requires-Dist: frida-tools
|
58
59
|
Requires-Dist: python-dateutil
|
59
60
|
Provides-Extra: test
|
@@ -85,7 +86,7 @@ Pioneers Rekordbox DJ Software. It currently supports
|
|
85
86
|
- Analysis files (ANLZ)
|
86
87
|
- My-Setting files
|
87
88
|
|
88
|
-
Tested Rekordbox versions: ``5.8.6 | 6.
|
89
|
+
Tested Rekordbox versions: ``5.8.6 | 6.7.7 | 7.0.9``
|
89
90
|
|
90
91
|
|
91
92
|
|⚠️| This project is still under development and might contain bugs or have breaking API changes in the future. Check the [changelog][CHANGELOG] for recent changes! |
|
@@ -107,32 +108,10 @@ where `VERSION` is a release, tag or branch name.
|
|
107
108
|
|
108
109
|
### Dependencies
|
109
110
|
|
110
|
-
Unlocking the new Rekordbox 6 `master.db` database file requires [SQLCipher][sqlcipher].
|
111
|
-
Pyrekordbox makes no attempt to download/install SQLCipher, as it is a
|
112
|
-
pure Python package - whereas the SQLCipher/sqlcipher3 installation is
|
113
|
-
platform-dependent and can not be installed via ``pip``.
|
114
|
-
|
115
|
-
#### Windows
|
116
|
-
|
117
|
-
SQLCipher can be used by building the libary against an amalgamation with [sqlcipher3].
|
118
|
-
For a detailed instruction, see the [installation guide][installation].
|
119
|
-
|
120
|
-
#### MacOS
|
121
111
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
2) Install SQLCipher with `brew install SQLCipher`.
|
126
|
-
3) With the python environment you are using to run pyrekordbox active execute the following:
|
127
|
-
```shell
|
128
|
-
git clone https://github.com/coleifer/sqlcipher3
|
129
|
-
cd sqlcipher3
|
130
|
-
SQLCIPHER_PATH=$(brew info sqlcipher | awk 'NR==4 {print $1; exit}'); C_INCLUDE_PATH="$SQLCIPHER_PATH"/include LIBRARY_PATH="$SQLCIPHER_PATH"/lib python setup.py build
|
131
|
-
SQLCIPHER_PATH=$(brew info sqlcipher | awk 'NR==4 {print $1; exit}'); C_INCLUDE_PATH="$SQLCIPHER_PATH"/include LIBRARY_PATH="$SQLCIPHER_PATH"/lib python setup.py install
|
132
|
-
```
|
133
|
-
Make sure the `C_INCLUDE` and `LIBRARY_PATH` point to the installed SQLCipher path. It may differ on your machine.
|
134
|
-
If you are having issues installing [sqlcipher3] on M1 Macs please refer to the
|
135
|
-
[installation guide][installation].
|
112
|
+
Unlocking the new Rekordbox 6 `master.db` database file requires [SQLCipher][sqlcipher].
|
113
|
+
Pyrekordbox tries to install pre-built wheels with included sqlcipher binaries via the [sqlcipher3-wheels] package.
|
114
|
+
If this fails, it can be installed manually following the [installation guide][installation].
|
136
115
|
|
137
116
|
|
138
117
|
## 🚀 Quick-Start
|
@@ -166,10 +145,10 @@ Alternatively the two paths can be specified in a configuration file under the s
|
|
166
145
|
pyrekordbox.cfg and pyrekordbox.yaml.
|
167
146
|
|
168
147
|
|
169
|
-
### Rekordbox 6 database
|
148
|
+
### Rekordbox 6/7 database
|
170
149
|
|
171
|
-
Rekordbox 6
|
172
|
-
Unfortunatly, the
|
150
|
+
Rekordbox 6 and 7 use a SQLite database for storing the collection content.
|
151
|
+
Unfortunatly, the `master.db` SQLite database is encrypted using
|
173
152
|
[SQLCipher][sqlcipher], which means it can't be used without the encryption key.
|
174
153
|
However, since your data is stored and used locally, the key must be present on the
|
175
154
|
machine running Rekordbox.
|
@@ -199,8 +178,13 @@ content.Title = "New Title"
|
|
199
178
|
Some fields are stored as references to other tables, for example the artist of a track.
|
200
179
|
Check the [documentation][db6-doc] of the corresponding object for more information.
|
201
180
|
So far only a few tables support adding or deleting entries:
|
181
|
+
- ``DjmdContent``: Tracks
|
202
182
|
- ``DjmdPlaylist``: Playlists/Playlist Folders
|
203
183
|
- ``DjmdSongPlaylist``: Songs in a playlist
|
184
|
+
- ``DjmdAlbum``: Albums
|
185
|
+
- ``DjmdArtist``: Artists
|
186
|
+
- ``DjmdGenre``: Genres
|
187
|
+
- ``DjmdLabel``: Labels
|
204
188
|
|
205
189
|
If the automatic key extraction fails the command line interface of ``pyrekordbox``
|
206
190
|
provides a command for downloading the key from known sources and writing it to the
|
@@ -384,7 +368,7 @@ the CI setup since it requires a working Rekordbox installation.
|
|
384
368
|
|
385
369
|
[repo]: https://github.com/dylanljones/pyrekordbox
|
386
370
|
[sqlcipher]: https://www.zetetic.net/sqlcipher/open-source/
|
387
|
-
[sqlcipher3]: https://github.com/
|
371
|
+
[sqlcipher3-wheels]: https://github.com/laggykiller/sqlcipher3
|
388
372
|
[rekordcrate]: https://github.com/Holzhaus/rekordcrate
|
389
373
|
[crate-digger]: https://github.com/Deep-Symmetry/crate-digger
|
390
374
|
[supbox]: https://github.com/gabek/supbox
|
@@ -22,7 +22,7 @@ Pioneers Rekordbox DJ Software. It currently supports
|
|
22
22
|
- Analysis files (ANLZ)
|
23
23
|
- My-Setting files
|
24
24
|
|
25
|
-
Tested Rekordbox versions: ``5.8.6 | 6.
|
25
|
+
Tested Rekordbox versions: ``5.8.6 | 6.7.7 | 7.0.9``
|
26
26
|
|
27
27
|
|
28
28
|
|⚠️| This project is still under development and might contain bugs or have breaking API changes in the future. Check the [changelog][CHANGELOG] for recent changes! |
|
@@ -44,32 +44,10 @@ where `VERSION` is a release, tag or branch name.
|
|
44
44
|
|
45
45
|
### Dependencies
|
46
46
|
|
47
|
-
Unlocking the new Rekordbox 6 `master.db` database file requires [SQLCipher][sqlcipher].
|
48
|
-
Pyrekordbox makes no attempt to download/install SQLCipher, as it is a
|
49
|
-
pure Python package - whereas the SQLCipher/sqlcipher3 installation is
|
50
|
-
platform-dependent and can not be installed via ``pip``.
|
51
|
-
|
52
|
-
#### Windows
|
53
|
-
|
54
|
-
SQLCipher can be used by building the libary against an amalgamation with [sqlcipher3].
|
55
|
-
For a detailed instruction, see the [installation guide][installation].
|
56
|
-
|
57
|
-
#### MacOS
|
58
47
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
2) Install SQLCipher with `brew install SQLCipher`.
|
63
|
-
3) With the python environment you are using to run pyrekordbox active execute the following:
|
64
|
-
```shell
|
65
|
-
git clone https://github.com/coleifer/sqlcipher3
|
66
|
-
cd sqlcipher3
|
67
|
-
SQLCIPHER_PATH=$(brew info sqlcipher | awk 'NR==4 {print $1; exit}'); C_INCLUDE_PATH="$SQLCIPHER_PATH"/include LIBRARY_PATH="$SQLCIPHER_PATH"/lib python setup.py build
|
68
|
-
SQLCIPHER_PATH=$(brew info sqlcipher | awk 'NR==4 {print $1; exit}'); C_INCLUDE_PATH="$SQLCIPHER_PATH"/include LIBRARY_PATH="$SQLCIPHER_PATH"/lib python setup.py install
|
69
|
-
```
|
70
|
-
Make sure the `C_INCLUDE` and `LIBRARY_PATH` point to the installed SQLCipher path. It may differ on your machine.
|
71
|
-
If you are having issues installing [sqlcipher3] on M1 Macs please refer to the
|
72
|
-
[installation guide][installation].
|
48
|
+
Unlocking the new Rekordbox 6 `master.db` database file requires [SQLCipher][sqlcipher].
|
49
|
+
Pyrekordbox tries to install pre-built wheels with included sqlcipher binaries via the [sqlcipher3-wheels] package.
|
50
|
+
If this fails, it can be installed manually following the [installation guide][installation].
|
73
51
|
|
74
52
|
|
75
53
|
## 🚀 Quick-Start
|
@@ -103,10 +81,10 @@ Alternatively the two paths can be specified in a configuration file under the s
|
|
103
81
|
pyrekordbox.cfg and pyrekordbox.yaml.
|
104
82
|
|
105
83
|
|
106
|
-
### Rekordbox 6 database
|
84
|
+
### Rekordbox 6/7 database
|
107
85
|
|
108
|
-
Rekordbox 6
|
109
|
-
Unfortunatly, the
|
86
|
+
Rekordbox 6 and 7 use a SQLite database for storing the collection content.
|
87
|
+
Unfortunatly, the `master.db` SQLite database is encrypted using
|
110
88
|
[SQLCipher][sqlcipher], which means it can't be used without the encryption key.
|
111
89
|
However, since your data is stored and used locally, the key must be present on the
|
112
90
|
machine running Rekordbox.
|
@@ -136,8 +114,13 @@ content.Title = "New Title"
|
|
136
114
|
Some fields are stored as references to other tables, for example the artist of a track.
|
137
115
|
Check the [documentation][db6-doc] of the corresponding object for more information.
|
138
116
|
So far only a few tables support adding or deleting entries:
|
117
|
+
- ``DjmdContent``: Tracks
|
139
118
|
- ``DjmdPlaylist``: Playlists/Playlist Folders
|
140
119
|
- ``DjmdSongPlaylist``: Songs in a playlist
|
120
|
+
- ``DjmdAlbum``: Albums
|
121
|
+
- ``DjmdArtist``: Artists
|
122
|
+
- ``DjmdGenre``: Genres
|
123
|
+
- ``DjmdLabel``: Labels
|
141
124
|
|
142
125
|
If the automatic key extraction fails the command line interface of ``pyrekordbox``
|
143
126
|
provides a command for downloading the key from known sources and writing it to the
|
@@ -321,7 +304,7 @@ the CI setup since it requires a working Rekordbox installation.
|
|
321
304
|
|
322
305
|
[repo]: https://github.com/dylanljones/pyrekordbox
|
323
306
|
[sqlcipher]: https://www.zetetic.net/sqlcipher/open-source/
|
324
|
-
[sqlcipher3]: https://github.com/
|
307
|
+
[sqlcipher3-wheels]: https://github.com/laggykiller/sqlcipher3
|
325
308
|
[rekordcrate]: https://github.com/Holzhaus/rekordcrate
|
326
309
|
[crate-digger]: https://github.com/Deep-Symmetry/crate-digger
|
327
310
|
[supbox]: https://github.com/gabek/supbox
|
@@ -270,7 +270,7 @@ corresponding ID.
|
|
270
270
|
-
|
271
271
|
* - `FileType`
|
272
272
|
- Type of audio file
|
273
|
-
- mp3= `0` / `1` , m4a= `4` , wav= `11` , aiff= `12`
|
273
|
+
- mp3= `0` / `1` , m4a= `4` , flac= `5` , wav= `11` , aiff= `12`
|
274
274
|
* - `Rating`
|
275
275
|
- Rating of the track
|
276
276
|
-
|
@@ -302,8 +302,8 @@ corresponding ID.
|
|
302
302
|
- Path to the tracks album artwork
|
303
303
|
- The path is relative to the Rekordbox database root
|
304
304
|
* - `MasterDBID`
|
305
|
-
- The
|
306
|
-
-
|
305
|
+
- The database where the track is stored
|
306
|
+
- Links to `DBID` in the `DjmdProperty` table
|
307
307
|
* - `MasterSongID`
|
308
308
|
- The master-song-ID of the track
|
309
309
|
- Not sure whats the difference to `ID` and `MasterDBID`
|
@@ -341,7 +341,7 @@ corresponding ID.
|
|
341
341
|
- Date of file creation
|
342
342
|
- Format: yyyy-mm-dd; ex.: 2010-08-21
|
343
343
|
* - `ContentLink`
|
344
|
-
-
|
344
|
+
- Link to the `rb_local_usn` of `TRACK` in `DjmdMenuItems`?
|
345
345
|
-
|
346
346
|
* - `Tag`
|
347
347
|
- My tag value
|
@@ -413,7 +413,7 @@ corresponding ID.
|
|
413
413
|
- The Rekordbox ID of the file
|
414
414
|
-
|
415
415
|
* - `DeviceID`
|
416
|
-
-
|
416
|
+
- The ID of the DjmdDevice this track is stored on.
|
417
417
|
-
|
418
418
|
* - `rb_LocalFolderPath`
|
419
419
|
- ?
|
@@ -488,8 +488,8 @@ around 1/75th of a second (13.333ms) per frame, i.e. about half the granularity
|
|
488
488
|
- The offset (bytes) in the file where the ending frame appears.
|
489
489
|
- `0` if not a loop or VBR/ABR MPEG file
|
490
490
|
* - `Kind`
|
491
|
-
- Type of cue point
|
492
|
-
-
|
491
|
+
- Type and/or number of cue point
|
492
|
+
- `0` if memory cue, otherwise the number of Hot Cue
|
493
493
|
* - `Color`
|
494
494
|
- The color ID of the cue point
|
495
495
|
- `-1` if no color
|
@@ -23,9 +23,8 @@ $ pip install .
|
|
23
23
|
## Installing SQLCipher
|
24
24
|
|
25
25
|
Unlocking the new Rekordbox 6 `master.db` database file requires [SQLCipher][sqlcipher].
|
26
|
-
Pyrekordbox
|
27
|
-
|
28
|
-
platform-dependent and can not be installed easily via ``pip``.
|
26
|
+
Pyrekordbox tries to install pre-built wheels with included sqlcipher binaries via the [sqlcipher3-wheels] package.
|
27
|
+
If this fails, it can be installed manually following the instructions below.
|
29
28
|
|
30
29
|
[sqlcipher3] can either be built with the system [SQLCipher][sqlcipher] or built against
|
31
30
|
a statically linked amalgamation of the SQLite3 source code.
|
@@ -186,8 +185,8 @@ For building [sqlcipher3] against the system SQLCipher installation on MacOS fol
|
|
186
185
|
```shell
|
187
186
|
git clone https://github.com/coleifer/sqlcipher3
|
188
187
|
cd sqlcipher3
|
189
|
-
SQLCIPHER_PATH=$(brew info sqlcipher | awk 'NR==
|
190
|
-
SQLCIPHER_PATH=$(brew info sqlcipher | awk 'NR==
|
188
|
+
SQLCIPHER_PATH=$(brew info sqlcipher | awk 'NR==5 {print $1; exit}'); C_INCLUDE_PATH="$SQLCIPHER_PATH"/include LIBRARY_PATH="$SQLCIPHER_PATH"/lib python setup.py build
|
189
|
+
SQLCIPHER_PATH=$(brew info sqlcipher | awk 'NR==5 {print $1; exit}'); C_INCLUDE_PATH="$SQLCIPHER_PATH"/include LIBRARY_PATH="$SQLCIPHER_PATH"/lib python setup.py install
|
191
190
|
```
|
192
191
|
Make sure the `C_INCLUDE` and `LIBRARY_PATH` point to the installed SQLCipher path. It may differ on your machine.
|
193
192
|
|
@@ -269,3 +268,4 @@ c.execute("PRAGMA key='password'")
|
|
269
268
|
[Pypi]: https://pypi.org/project/pyrekordbox/
|
270
269
|
[GitHub]: https://github.com/dylanljones/pyrekordbox
|
271
270
|
[sqlcipher]: https://www.zetetic.net/sqlcipher/open-source/
|
271
|
+
[sqlcipher3-wheels]: https://github.com/laggykiller/sqlcipher3
|
@@ -73,6 +73,10 @@ Check the [documentation](#db6-format) of the corresponding object for more info
|
|
73
73
|
So far only a few tables support adding or deleting entries:
|
74
74
|
- ``DjmdPlaylist``: Playlists/Playlist Folders
|
75
75
|
- ``DjmdSongPlaylist``: Songs in a playlist
|
76
|
+
- ``DjmdAlbum``: Albums
|
77
|
+
- ``DjmdArtist``: Artists
|
78
|
+
- ``DjmdGenre``: Genres
|
79
|
+
- ``DjmdLabel``: Labels
|
76
80
|
|
77
81
|
````{important}
|
78
82
|
Starting from Rekordbox version ``6.6.5`` Pioneer obfuscated the ``app.asar`` file
|
@@ -160,6 +160,34 @@ song = playlist.Songs[0]
|
|
160
160
|
db.remove_from_playlist(playlist, song)
|
161
161
|
````
|
162
162
|
|
163
|
+
### Tracks
|
164
|
+
|
165
|
+
New tracks can be added to your rekordbox collection by calling the `db.add_content()` method:
|
166
|
+
|
167
|
+
```python
|
168
|
+
track = db.add_content("/Users/deadmau5/Downloads/Banger.mp3")
|
169
|
+
```
|
170
|
+
|
171
|
+
This creates a new [DjmdContent] instance and adds it to the [djmdContent-table]. This
|
172
|
+
track will appear in your rekordbox collection, but the track metadata (title, artist,
|
173
|
+
etc.) will be blank. To load this data, simply right click the track and select the
|
174
|
+
`Reload Tag` menu option. rekordbox will correctly populate the metadata, including
|
175
|
+
creating any related table data for things like artist and album.
|
176
|
+
|
177
|
+
The `db.add_content()` method accepts `**kwargs` which are passed on to the [DjmdContent]
|
178
|
+
instance. You can use these keyword arguments if you want to populate some of the track
|
179
|
+
metadata right away. However, things like [DjmdArtist] and [DjmdAlbum] are foreign keys to
|
180
|
+
other tables, so make sure you create these objects first and pass the objects via kwargs,
|
181
|
+
rather than passing plain strings. A plain string will work for `Title`, however.
|
182
|
+
|
183
|
+
```python
|
184
|
+
db.add_content("/Users/deadmau5/Downloads/Banger.mp3", Title="Banger")
|
185
|
+
```
|
186
|
+
|
187
|
+
Populating the [DjmdContent] metadata directly from the track file is not currently
|
188
|
+
supported, but it will hopefully be included in a future release.
|
189
|
+
|
190
|
+
|
163
191
|
```{note}
|
164
192
|
More coming soon!
|
165
193
|
```
|
@@ -36,6 +36,7 @@ dependencies = [
|
|
36
36
|
"packaging",
|
37
37
|
"psutil>=5.9.0",
|
38
38
|
"sqlalchemy>=2.0.0",
|
39
|
+
"sqlcipher3-wheels",
|
39
40
|
"frida-tools",
|
40
41
|
"python-dateutil",
|
41
42
|
]
|
@@ -69,8 +70,9 @@ platforms = ["any"]
|
|
69
70
|
zip-safe = false
|
70
71
|
include-package-data = true
|
71
72
|
|
72
|
-
[tool.setuptools.packages]
|
73
|
-
|
73
|
+
[tool.setuptools.packages.find]
|
74
|
+
where = ["."]
|
75
|
+
include = ["pyrekordbox", "pyrekordbox.*"]
|
74
76
|
|
75
77
|
[tool.setuptools_scm]
|
76
78
|
write_to = "pyrekordbox/_version.py"
|
@@ -99,20 +101,45 @@ select = [
|
|
99
101
|
"F", # flake8
|
100
102
|
"E", # pycodestyle Errors
|
101
103
|
"W", # pycodestyle Warnings
|
102
|
-
|
104
|
+
"I", # isort
|
105
|
+
"NPY", # Numpy
|
106
|
+
"N", # pep8-naming
|
107
|
+
"D", # pydocstyle
|
103
108
|
]
|
104
109
|
ignore = [
|
105
110
|
"E203", # Whitespace before ':'
|
111
|
+
"D100", # Missing docstring in public module
|
112
|
+
"D101", # Missing docstring in public class
|
113
|
+
"D102", # Missing docstring in public method
|
114
|
+
"D103", # Missing docstring in public function
|
115
|
+
"D104", # Missing docstring in public package
|
116
|
+
"D105", # Missing docstring in magic method
|
117
|
+
"D106", # Missing docstring in public nested class
|
118
|
+
"D107", # Missing docstring in __init__
|
119
|
+
"D401", # First line should be in imperative mood
|
120
|
+
"D403", # First word of the first line should be capitalized
|
121
|
+
"D404", # First word of the docstring should not be "This"
|
122
|
+
#"N802", # Function name should be lowercase
|
123
|
+
#"N803", # Argument name should be lowercase
|
124
|
+
"N813", # Camelcase imported as lowercase
|
125
|
+
#"N815", # Variable in class scope should not be mixedCase
|
126
|
+
"N818", # Exception name should be named with an Error suffix
|
106
127
|
]
|
107
128
|
fixable = ["ALL"] # Allow fix for all enabled rules (when `--fix`) is provided.
|
108
129
|
unfixable = []
|
109
130
|
|
110
131
|
[tool.ruff.lint.per-file-ignores]
|
111
132
|
"*__init__.py" = ["F401"]
|
133
|
+
"rbxml.py" = ["N803"]
|
134
|
+
"tables.py" = ["N802", "N815"]
|
135
|
+
|
136
|
+
|
137
|
+
[tool.ruff.lint.pydocstyle]
|
138
|
+
convention = "numpy"
|
112
139
|
|
113
140
|
[tool.ruff.lint.isort]
|
114
141
|
combine-as-imports = true
|
115
|
-
|
142
|
+
length-sort = false
|
116
143
|
|
117
144
|
[tool.ruff.format]
|
118
145
|
quote-style = "double"
|
@@ -2,19 +2,19 @@
|
|
2
2
|
# Author: Dylan Jones
|
3
3
|
# Date: 2022-04-10
|
4
4
|
|
5
|
+
from .anlz import AnlzFile, get_anlz_paths, read_anlz_files, walk_anlz_paths
|
6
|
+
from .config import get_config, show_config, update_config
|
7
|
+
from .db6 import Rekordbox6Database
|
5
8
|
from .logger import logger
|
6
|
-
from .config import show_config, get_config, update_config
|
7
|
-
from .rbxml import RekordboxXml, XmlDuplicateError, XmlAttributeKeyError
|
8
|
-
from .anlz import get_anlz_paths, walk_anlz_paths, read_anlz_files, AnlzFile
|
9
9
|
from .mysettings import (
|
10
|
+
DevSettingFile,
|
11
|
+
DjmMySettingFile,
|
12
|
+
MySetting2File,
|
13
|
+
MySettingFile,
|
10
14
|
get_mysetting_paths,
|
11
15
|
read_mysetting_file,
|
12
|
-
MySettingFile,
|
13
|
-
MySetting2File,
|
14
|
-
DjmMySettingFile,
|
15
|
-
DevSettingFile,
|
16
16
|
)
|
17
|
-
from .
|
17
|
+
from .rbxml import RekordboxXml, XmlAttributeKeyError, XmlDuplicateError
|
18
18
|
|
19
19
|
try:
|
20
20
|
from ._version import version as __version__
|
@@ -4,11 +4,12 @@
|
|
4
4
|
|
5
5
|
import os
|
6
6
|
import re
|
7
|
-
import sys
|
8
7
|
import shutil
|
8
|
+
import sys
|
9
9
|
import urllib.request
|
10
10
|
from pathlib import Path
|
11
|
-
|
11
|
+
|
12
|
+
from pyrekordbox.config import _cache_file, write_db6_key_cache
|
12
13
|
|
13
14
|
KEY_SOURCES = [
|
14
15
|
{
|
@@ -5,6 +5,7 @@
|
|
5
5
|
import re
|
6
6
|
from pathlib import Path
|
7
7
|
from typing import Union
|
8
|
+
|
8
9
|
from . import structs
|
9
10
|
from .file import AnlzFile
|
10
11
|
|
@@ -77,7 +78,7 @@ def walk_anlz_dirs(root_dir: Union[str, Path]):
|
|
77
78
|
The path of the root directory.
|
78
79
|
|
79
80
|
Yields
|
80
|
-
|
81
|
+
------
|
81
82
|
anlz_dir : str
|
82
83
|
The path of a directory containing ANLZ files
|
83
84
|
"""
|
@@ -96,7 +97,7 @@ def walk_anlz_paths(root_dir: Union[str, Path]):
|
|
96
97
|
The path of the root directory.
|
97
98
|
|
98
99
|
Yields
|
99
|
-
|
100
|
+
------
|
100
101
|
anlz_dir : str
|
101
102
|
The path of a directory containing ANLZ files.
|
102
103
|
anlz_files : Sequence of str
|