pyrekordbox 0.2.3__tar.gz → 0.3.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.2.3 → pyrekordbox-0.3.0}/.github/workflows/codeql.yml +25 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.github/workflows/pypi-publish.yml +4 -4
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.github/workflows/tests.yml +1 -4
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.pre-commit-config.yaml +1 -1
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/CHANGELOG.md +26 -1
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/CONTRIBUTING.md +3 -4
- {pyrekordbox-0.2.3/pyrekordbox.egg-info → pyrekordbox-0.3.0}/PKG-INFO +3 -3
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/README.md +1 -1
- pyrekordbox-0.3.0/docs/source/_static/images/x64dbg_rb_key.png +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/index.md +1 -3
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/installation.md +1 -7
- pyrekordbox-0.3.0/docs/source/key.md +104 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/quickstart.md +1 -1
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyproject.toml +1 -1
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/__init__.py +1 -1
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/_version.py +2 -2
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/anlz/file.py +2 -2
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/db6/database.py +32 -6
- pyrekordbox-0.3.0/pyrekordbox/xml.py +8 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0/pyrekordbox.egg-info}/PKG-INFO +3 -3
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox.egg-info/SOURCES.txt +3 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/tests/test_xml.py +1 -1
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.github/ISSUE_TEMPLATE/config.yaml +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.gitignore +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.readthedocs.yaml +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/DEVSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/rekordbox/export.pdb +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/rekordbox/exportExt.pdb +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/DEVSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/beat_fx_quantize/off/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/beat_fx_quantize/on/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/channel_fader_curve/linear/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/channel_fader_curve/steep_bottom/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/channel_fader_curve/steep_top/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/exponential/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/linear/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/smooth/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/cross_fader_curve/constant/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/cross_fader_curve/fast_cut/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/cross_fader_curve/slow_cut/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/display_brightness/five/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/display_brightness/four/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/display_brightness/one/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/display_brightness/three/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/display_brightness/two/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/display_brightness/white/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/headphones_mono_split/mono_split/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/headphones_mono_split/stereo/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/headphones_pre_eq/post_eq/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/headphones_pre_eq/pre_eq/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/indicator_brightness/one/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/indicator_brightness/three/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/indicator_brightness/two/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/mic_low_cut/off/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/mic_low_cut/on/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_button_type/toggle/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_button_type/trigger/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/eight/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/eleven/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/fifteen/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/five/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/four/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/fourteen/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/nine/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/one/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/seven/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/six/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/sixteen/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/ten/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/thirteen/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/three/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/twelve/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/two/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/talk_over_level/minus_12db/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/talk_over_level/minus_18db/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/talk_over_level/minus_24db/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/talk_over_level/minus_6db/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/talk_over_mode/advanced/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/talk_over_mode/normal/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/memory/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_36db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_42db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_48db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_54db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_60db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_66db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_72db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_78db/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/disc_slot_illumination/bright/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/disc_slot_illumination/dark/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/disc_slot_illumination/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/eject_lock/lock/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/eject_lock/unlock/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/hotcue_autoload/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/hotcue_autoload/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/hotcue_autoload/rekordbox/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/hotcue_color/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/hotcue_color/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/jog_mode/cdj/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/jog_mode/vinyl/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/jog_ring_brightness/bright/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/jog_ring_brightness/dark/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/jog_ring_brightness/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/jog_ring_indicator/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/jog_ring_indicator/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/chinese_simplified/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/chinese_traditional/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/czech/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/danish/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/dutch/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/english/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/french/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/german/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/greek/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/hungarian/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/italian/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/japanese/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/korean/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/portuguese/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/russian/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/spanish/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/swedish/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/turkish/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/lcd_brightness/five/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/lcd_brightness/four/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/lcd_brightness/one/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/lcd_brightness/three/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/lcd_brightness/two/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/master_tempo/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/master_tempo/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/needle_lock/lock/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/needle_lock/unlock/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/on_air_display/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/on_air_display/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/phase_meter/type1/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/phase_meter/type2/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/play_mode/continue_/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/play_mode/single/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/quantize/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/quantize/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/quantize_beat_value/eighth/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/quantize_beat_value/half/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/quantize_beat_value/one/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/quantize_beat_value/quarter/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/slip_flashing/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/slip_flashing/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/sync/off/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/sync/on/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/tempo_range/six/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/tempo_range/sixteen/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/tempo_range/ten/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/tempo_range/wide/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/time_mode/elapsed/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/time_mode/remain/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/eight/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/four/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/half/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/one/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/sixteen/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/sixtyfour/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/thirtytwo/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/two/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_display_mode/artwork/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_display_mode/auto/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_display_mode/info/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_display_mode/simple/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/five/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/four/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/one/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/three/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/two/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/pad_button_brightness/four/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/pad_button_brightness/one/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/pad_button_brightness/three/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/pad_button_brightness/two/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/release/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/touch/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/touch_release/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/waveform/phase_meter/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/waveform/waveform/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/waveform_divisions/phrase/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/waveform_divisions/time_scale/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/DEVSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/ExtData.edb +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P002/00009C2E/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P002/00009C2E/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P02B/00023587/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P02B/00023587/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P035/00027763/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P035/00027763/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P038/0002AAA0/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P038/0002AAA0/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P068/00012CA2/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P068/00012CA2/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P076/00013B6E/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P076/00013B6E/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/datafile.edb +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/masterPlaylists3.xml +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/database.xml +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/datafile.edb +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/DEVSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/DJMMYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/MYSETTING.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/MYSETTING2.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/masterPlaylists3.xml +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/masterPlaylists6.xml +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/003/c9538-33bc-4ca7-b6c7-e63ebf9a96f8/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/003/c9538-33bc-4ca7-b6c7-e63ebf9a96f8/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/003/c9538-33bc-4ca7-b6c7-e63ebf9a96f8/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/104/c82cc-661c-4f30-ab60-51ce1effeeed/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/104/c82cc-661c-4f30-ab60-51ce1effeeed/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/104/c82cc-661c-4f30-ab60-51ce1effeeed/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/36d/ad2b4-5d4e-4b94-9a5d-a5bb241aee4b/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/36d/ad2b4-5d4e-4b94-9a5d-a5bb241aee4b/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/36d/ad2b4-5d4e-4b94-9a5d-a5bb241aee4b/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/731/0104f-53cb-453e-8b83-e0dfd5cff825/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/731/0104f-53cb-453e-8b83-e0dfd5cff825/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/731/0104f-53cb-453e-8b83-e0dfd5cff825/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/c8b/ac74a-bbfc-4fce-8fb8-50aa4e974273/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/c8b/ac74a-bbfc-4fce-8fb8-50aa4e974273/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/c8b/ac74a-bbfc-4fce-8fb8-50aa4e974273/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/e35/fa187-3f34-47e2-9880-2b33cb8d1304/ANLZ0000.2EX +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/e35/fa187-3f34-47e2-9880-2b33cb8d1304/ANLZ0000.DAT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/e35/fa187-3f34-47e2-9880-2b33cb8d1304/ANLZ0000.EXT +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/database.xml +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/masterPlaylists6_template.xml +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/master_locked.db +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/master_unlocked.db +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/LICENSE +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/Makefile +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/make.bat +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_beat.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_file.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pco2.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pcob.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pcp2.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pcpt.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_ppth.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pqt2.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pqt2_2.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pqtz.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pssi.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pssi_entry.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pvbr.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwav.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwv3.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwv4.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwv5.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwv5_entry.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwv6.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwv7.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwvc.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_tag.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/logos/dark/logo_primary.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/logos/light/logo_primary.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/logos/mid/logo_primary.svg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_templates/apidoc/module.rst_t +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_templates/apidoc/package.rst_t +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_templates/apidoc/toc.rst_t +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_templates/autosummary/class.rst +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_templates/autosummary/module.rst +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/api.md +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/conf.py +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/development/changes.md +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/development/contributing.md +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/formats/anlz.md +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/formats/db6.md +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/formats/mysetting.md +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/formats/xml.md +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/requirements.txt +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/tutorial/anlz.md +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/tutorial/configuration.md +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/tutorial/db6.md +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/tutorial/index.md +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/tutorial/mysetting.md +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/tutorial/xml.md +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/__main__.py +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/anlz/__init__.py +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/anlz/structs.py +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/anlz/tags.py +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/config.py +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/db6/__init__.py +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/db6/aux_files.py +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/db6/registry.py +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/db6/tables.py +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/logger.py +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/mysettings/__init__.py +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/mysettings/file.py +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/mysettings/structs.py +0 -0
- /pyrekordbox-0.2.3/pyrekordbox/xml.py → /pyrekordbox-0.3.0/pyrekordbox/rbxml.py +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/utils.py +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox.egg-info/dependency_links.txt +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox.egg-info/not-zip-safe +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox.egg-info/requires.txt +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox.egg-info/top_level.txt +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/requirements.txt +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/setup.cfg +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/setup.py +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/tests/__init__.py +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/tests/test_anlz.py +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/tests/test_config.py +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/tests/test_db6.py +0 -0
- {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/tests/test_mysetting.py +0 -0
@@ -9,8 +9,33 @@ on:
|
|
9
9
|
- cron: "4 11 * * 1"
|
10
10
|
|
11
11
|
jobs:
|
12
|
+
|
13
|
+
code-change:
|
14
|
+
runs-on: ubuntu-latest
|
15
|
+
steps:
|
16
|
+
- id: skip_check
|
17
|
+
uses: fkirc/skip-duplicate-actions@master
|
18
|
+
with:
|
19
|
+
paths_ignore: '[
|
20
|
+
"docs/**",
|
21
|
+
".github/**",
|
22
|
+
".resources/**",
|
23
|
+
"logos/**",
|
24
|
+
"README.md",
|
25
|
+
"CHANGELOG.md",
|
26
|
+
"CONTRIBUTING.md",
|
27
|
+
".pre-commit-config.yaml",
|
28
|
+
".readthedocs.yaml",
|
29
|
+
"pyproject.toml"
|
30
|
+
]'
|
31
|
+
outputs:
|
32
|
+
should_skip: ${{ steps.skip_check.outputs.should_skip }}
|
33
|
+
|
34
|
+
|
12
35
|
analyze:
|
13
36
|
name: Analyze
|
37
|
+
needs: code-change
|
38
|
+
if: ${{ needs.code-change.outputs.should_skip != 'true'}}
|
14
39
|
runs-on: ubuntu-latest
|
15
40
|
permissions:
|
16
41
|
actions: read
|
@@ -48,14 +48,14 @@ jobs:
|
|
48
48
|
|
49
49
|
- name: Publish distribution 📦 to Test PyPI
|
50
50
|
env:
|
51
|
-
TWINE_USERNAME:
|
52
|
-
TWINE_PASSWORD: ${{ secrets.
|
51
|
+
TWINE_USERNAME: __token__
|
52
|
+
TWINE_PASSWORD: ${{ secrets.TEST_PYPI_TOKEN }}
|
53
53
|
run: |
|
54
54
|
twine upload --repository testpypi dist/*
|
55
55
|
|
56
56
|
- name: Publish distribution 📦 to PyPI
|
57
57
|
env:
|
58
|
-
TWINE_USERNAME:
|
59
|
-
TWINE_PASSWORD: ${{ secrets.
|
58
|
+
TWINE_USERNAME: __token__
|
59
|
+
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
|
60
60
|
run: |
|
61
61
|
twine upload dist/*
|
@@ -47,7 +47,7 @@ jobs:
|
|
47
47
|
other-os: [true]
|
48
48
|
|
49
49
|
runs-on: ${{ matrix.os }}
|
50
|
-
continue-on-error:
|
50
|
+
continue-on-error: false # don't cancel due to OS specific failures
|
51
51
|
env:
|
52
52
|
OS: ${{ matrix.os }}
|
53
53
|
PYTHON: ${{ matrix.python-version }}
|
@@ -69,9 +69,6 @@ jobs:
|
|
69
69
|
pip install setuptools
|
70
70
|
pip install .[test]
|
71
71
|
|
72
|
-
- name: Get package version
|
73
|
-
run: python setup.py --version
|
74
|
-
|
75
72
|
- name: Run tests
|
76
73
|
run: |
|
77
74
|
pytest tests/ --cov=pyrekordbox --cov-report=xml -v
|
@@ -1,5 +1,29 @@
|
|
1
1
|
# What's New
|
2
2
|
|
3
|
+
<a name="0.3.0"></a>
|
4
|
+
## [0.3.0] - 2023-12-12
|
5
|
+
|
6
|
+
This release fixes bugs and imrpoves error handling.
|
7
|
+
|
8
|
+
### Improvements/Bug Fixes
|
9
|
+
|
10
|
+
- **The `bank` field of PSSI ANLZ tag can also have a value of 0 ([#108](https://github.com/dylanljones/pyrekordbox/issues/108))**
|
11
|
+
This fixes an issue where the XOR mask was applied to un-garbled PSSI tags.
|
12
|
+
- **check if RBv6 db key seems valid ([#105](https://github.com/dylanljones/pyrekordbox/issues/105))**
|
13
|
+
Check the key if it is passed manually to the db handler and raise an exception
|
14
|
+
if it doesn't look valid. Only the first few characters are checked.
|
15
|
+
- **also change `OrgFolderPath` and `FileNameL` in `update_content_path` ([#104](https://github.com/dylanljones/pyrekordbox/issues/104))**
|
16
|
+
There were columns missing in the `update_content_path` method.
|
17
|
+
These changes make the file paths consistent.
|
18
|
+
Thank you [@ben-hearn-sb](https://github.com/ben-hearn-sb) for the help!
|
19
|
+
- **rename the `xml` module to `rbxml` to prevent conflict with builtin.**
|
20
|
+
Note that the old module name `xml` is deprecated and will be removed in version `0.4.0`.
|
21
|
+
|
22
|
+
### Documentation
|
23
|
+
|
24
|
+
- **add Rekordbox6 database key extraction alternatives**
|
25
|
+
|
26
|
+
|
3
27
|
<a name="0.2.3"></a>
|
4
28
|
## [0.2.3] - 2023-11-17
|
5
29
|
|
@@ -480,7 +504,8 @@ This release contains documentation fixes.
|
|
480
504
|
- **add missing djmd tables to `master.db` database documentation**
|
481
505
|
|
482
506
|
|
483
|
-
[Unreleased]: https://github.com/dylanljones/pyrekordbox/compare/0.
|
507
|
+
[Unreleased]: https://github.com/dylanljones/pyrekordbox/compare/0.3.0...HEAD
|
508
|
+
[0.3.0]: https://github.com/dylanljones/pyrekordbox/compare/0.2.3...0.3.0
|
484
509
|
[0.2.3]: https://github.com/dylanljones/pyrekordbox/compare/0.2.2...0.2.3
|
485
510
|
[0.2.2]: https://github.com/dylanljones/pyrekordbox/compare/0.2.1...0.2.2
|
486
511
|
[0.2.1]: https://github.com/dylanljones/pyrekordbox/compare/0.2.0...0.2.1
|
@@ -8,9 +8,9 @@ the CI setup since it requires a working Rekordbox installation.
|
|
8
8
|
|
9
9
|
## Pre-commit Hooks
|
10
10
|
|
11
|
-
We are using the [pre-commit framework] to automatically run
|
12
|
-
|
13
|
-
|
11
|
+
We are using the [pre-commit framework] to automatically run a linter and code formatter
|
12
|
+
at commit time. This ensures that every commit fulfills the basic requirements to be
|
13
|
+
mergeable and follows the coding style of the project.
|
14
14
|
|
15
15
|
The pre-commit hooks can be installed via
|
16
16
|
````sh
|
@@ -88,5 +88,4 @@ Similarly, a Deprecation section should start with "DEPRECATED: " followed by a
|
|
88
88
|
[issue]: https://github.com/dylanljones/pyrekordbox/issues
|
89
89
|
[pulls]: https://github.com/dylanljones/pyrekordbox/pulls
|
90
90
|
[pre-commit framework]: https://pre-commit.com/
|
91
|
-
[Black code formatter]: https://github.com/psf/black
|
92
91
|
[Angular commit message]: https://github.com/angular/angular/blob/master/CONTRIBUTING.md#commit-message-format
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: pyrekordbox
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.3.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
|
@@ -38,11 +38,11 @@ Classifier: Operating System :: MacOS
|
|
38
38
|
Classifier: Operating System :: Microsoft :: Windows
|
39
39
|
Classifier: Programming Language :: Python :: 3
|
40
40
|
Classifier: Programming Language :: Python :: 3 :: Only
|
41
|
-
Classifier: Programming Language :: Python :: 3.7
|
42
41
|
Classifier: Programming Language :: Python :: 3.8
|
43
42
|
Classifier: Programming Language :: Python :: 3.9
|
44
43
|
Classifier: Programming Language :: Python :: 3.10
|
45
44
|
Classifier: Programming Language :: Python :: 3.11
|
45
|
+
Classifier: Programming Language :: Python :: 3.12
|
46
46
|
Classifier: Topic :: Multimedia :: Sound/Audio
|
47
47
|
Requires-Python: >=3.8
|
48
48
|
Description-Content-Type: text/markdown
|
@@ -225,7 +225,7 @@ between two databases.
|
|
225
225
|
Pyrekordbox can read and write Rekordbox XML databases.
|
226
226
|
|
227
227
|
````python
|
228
|
-
from pyrekordbox.
|
228
|
+
from pyrekordbox.rbxml import RekordboxXml
|
229
229
|
|
230
230
|
xml = RekordboxXml("database.xml")
|
231
231
|
|
Binary file
|
@@ -11,7 +11,6 @@ sphinx-quickstart on Thu Apr 7 15:06:50 2022.
|
|
11
11
|
[![Python][python-badge+]][pypi-link]
|
12
12
|
[![Platform][platform-badge]][pypi-link]
|
13
13
|
[![license: MIT][license-badge]][license-link]
|
14
|
-
[![style: black][black-badge]][black-link]
|
15
14
|
|
16
15
|
```{admonition} Disclaimer
|
17
16
|
This project is not affiliated with Pioneer Corp. or its related companies
|
@@ -45,6 +44,7 @@ caption: User Guide
|
|
45
44
|
|
46
45
|
quickstart
|
47
46
|
installation
|
47
|
+
key
|
48
48
|
tutorial/index
|
49
49
|
api
|
50
50
|
```
|
@@ -94,12 +94,10 @@ PyPI <https://pypi.org/project/pyrekordbox/>
|
|
94
94
|
[platform-badge]: https://img.shields.io/badge/platform-win%20%7C%20osx-blue?style=flat
|
95
95
|
[pypi-badge]: https://img.shields.io/pypi/v/pyrekordbox?style=flat
|
96
96
|
[license-badge]: https://img.shields.io/pypi/l/pyrekordbox?color=lightgrey
|
97
|
-
[black-badge]: https://img.shields.io/badge/code%20style-black-000000?style=flat
|
98
97
|
|
99
98
|
[pypi-link]: https://pypi.org/project/pyrekordbox/
|
100
99
|
[license-link]: https://github.com/dylanljones/pyrekordbox/blob/master/LICENSE
|
101
100
|
[tests-link]: https://github.com/dylanljones/pyrekordbox/actions/workflows/tests.yml
|
102
|
-
[black-link]: https://github.com/psf/black
|
103
101
|
[codecov-link]: https://app.codecov.io/gh/dylanljones/pyrekordbox/tree/master
|
104
102
|
|
105
103
|
[issue]: https://github.com/dylanljones/pyrekordbox/issues/64
|
@@ -20,7 +20,7 @@ $ pip install .
|
|
20
20
|
```
|
21
21
|
|
22
22
|
|
23
|
-
##
|
23
|
+
## Installing SQLCipher
|
24
24
|
|
25
25
|
Unlocking the new Rekordbox 6 `master.db` database file requires [SQLCipher][sqlcipher].
|
26
26
|
Pyrekordbox makes no attempt to download/install SQLCipher, as it is a
|
@@ -261,12 +261,6 @@ c.execute("PRAGMA key='password'")
|
|
261
261
|
````
|
262
262
|
|
263
263
|
|
264
|
-
## References:
|
265
|
-
|
266
|
-
- [https://stackoverflow.com/questions/33618565/how-to-build-sql-cipher-python-binding-for-windows](https://stackoverflow.com/questions/33618565/how-to-build-sql-cipher-python-binding-for-windows)
|
267
|
-
- [https://github.com/Monogi/pysqlcipher3_install_win10](https://github.com/Monogi/pysqlcipher3_install_win10)
|
268
|
-
|
269
|
-
|
270
264
|
|
271
265
|
[VS]: https://visualstudio.microsoft.com/de/vs/community/
|
272
266
|
[OpenSSL]: https://slproweb.com/products/Win32OpenSSL.html
|
@@ -0,0 +1,104 @@
|
|
1
|
+
# Database key
|
2
|
+
|
3
|
+
If you are using Rekordbox v6.6.5 or later and have no cached key from a previous
|
4
|
+
Rekordbox version, the database can not be unlocked automatically.
|
5
|
+
However, the command line interface of ``pyrekordbox`` provides a command for downloading
|
6
|
+
the key from known sources and writing it to the cache file:
|
7
|
+
````shell
|
8
|
+
python -m pyrekordbox download-key
|
9
|
+
````
|
10
|
+
Once the key is cached the database can be opened without providing the key.
|
11
|
+
if you obtained the key from another source, you can also pass it to the database handler
|
12
|
+
````python
|
13
|
+
db = Rekordbox6Database(key="<insert key here>")
|
14
|
+
````
|
15
|
+
or write it to the cache file manually:
|
16
|
+
````python
|
17
|
+
from pyrekordbox.config import write_db6_key_cache
|
18
|
+
|
19
|
+
write_db6_key_cache("<insert key here>") # call once
|
20
|
+
db = Rekordbox6Database()
|
21
|
+
````
|
22
|
+
|
23
|
+
## Alternative methods
|
24
|
+
|
25
|
+
The key can be extracted manually from the users machine. After the key is obtained
|
26
|
+
it can be writen to the cache file as described above.
|
27
|
+
The method varies depending on the operating system.
|
28
|
+
|
29
|
+
### Windows
|
30
|
+
|
31
|
+
On Windows, the key can be extracted from the Rekordbox executable using a debugger:
|
32
|
+
|
33
|
+
1. Download [x64dbg] and run it.
|
34
|
+
|
35
|
+
2. Options -> Preferences. Make sure "Entry Breakpoint" is set in the Events tab.
|
36
|
+
|
37
|
+
3. File -> Open... `rekordbox.exe` (the main application executable)
|
38
|
+
|
39
|
+
4. Look at the status bar. It should have a yellow "Paused" icon followed by some status text.
|
40
|
+
Right now it should say "System breakpoint reached!"
|
41
|
+
|
42
|
+
5. Hit F9 or press the Run button in the top bar. The status text should change to
|
43
|
+
"INT3 breakpoint 'entry breakpoint' at <rekordbox.EntryPoint>".
|
44
|
+
|
45
|
+
6. Click in the disassembly window, then press Ctrl+G to open the Go To Expression box,
|
46
|
+
and search for `sqlite3_key_v2` and press OK. This should jump you to the code for
|
47
|
+
that function, which typically starts with `mov dword ptr ss:[rsp+xx], r9d` or similar.
|
48
|
+
|
49
|
+
7. Without clicking anywhere on the disassembly window, press F2 to toggle breakpoint.
|
50
|
+
The top instruction's address should turn red.
|
51
|
+
|
52
|
+
8. Hit F9 or press the Run button in the top bar. The status text will start changing
|
53
|
+
a bunch, while the program starts up. Wait until the status bar goes back to "Paused"
|
54
|
+
in yellow. If the status text says something like "First chance exception on..."
|
55
|
+
press F9 again.
|
56
|
+
|
57
|
+
9. The status bar should go to "Paused" in yellow again, this time with status text
|
58
|
+
that says "INT3 breakpoint at <sqlite3.sqlite3_key_v2>". This means our breakpoint
|
59
|
+
has been hit.
|
60
|
+
|
61
|
+
10. Click the register panel (top right, where RAX, RBX, RCX, etc. are listed) so
|
62
|
+
it updates. Right click the red address next to R8, and click "Follow in dump".
|
63
|
+
|
64
|
+
11. The dump at the bottom left will move to that address. Right click the dump panel
|
65
|
+
and select Text -> ASCII at the bottom. You should now see the key as a string.
|
66
|
+
You can drag-select it, then right click to copy selected line.
|
67
|
+
|
68
|
+
12. Go to Debug -> Close to close the process, then close x64dbg.
|
69
|
+
|
70
|
+
|
71
|
+
```{figure} /_static/images/x64dbg_rb_key.png
|
72
|
+
:align: center
|
73
|
+
:scale: 60
|
74
|
+
```
|
75
|
+
|
76
|
+
|
77
|
+
### MacOS
|
78
|
+
|
79
|
+
On MacOS, the key can be extracted using the [RekordLocksmith] tool:
|
80
|
+
|
81
|
+
1. Install LLDB:
|
82
|
+
- LLDB can be installed with Xcode on macOS via the App Store or xcode-cli-commands.
|
83
|
+
- Ensure LLDB is accessible from the terminal by running `lldb` in the terminal.
|
84
|
+
|
85
|
+
2. Disable SIP:
|
86
|
+
- Restart your Mac and hold down `Command-R` as it boots to enter Recovery Mode.
|
87
|
+
- Open the Terminal from the Utilities menu.
|
88
|
+
- Type `csrutil disable` and press Enter.
|
89
|
+
- Restart your Mac.
|
90
|
+
|
91
|
+
3. Download RekordLocksmith:
|
92
|
+
- Clone or download the [RekordLocksmith] repository from GitHub.
|
93
|
+
|
94
|
+
4. Run RekordLocksmith:
|
95
|
+
- Use the terminal to navigate to the folder containing `rekordlocksmith.py`.
|
96
|
+
- Run the script:
|
97
|
+
````shell
|
98
|
+
python3 rekordlocksmith.py /Applications/rekordbox\ 6/rekordbox.app/Contents/MacOS/rekordbox
|
99
|
+
````
|
100
|
+
The tool will output the database key to the terminal and save it to a file named `rekordbox_db_pass.txt` in the current directory.
|
101
|
+
|
102
|
+
|
103
|
+
[x64dbg]: https://x64dbg.com/
|
104
|
+
[RekordLocksmith]: https://github.com/Bide-UK/rekordlocksmith#rekordlocksmith
|
@@ -20,11 +20,11 @@ classifiers = [
|
|
20
20
|
"Operating System :: Microsoft :: Windows",
|
21
21
|
"Programming Language :: Python :: 3",
|
22
22
|
"Programming Language :: Python :: 3 :: Only",
|
23
|
-
"Programming Language :: Python :: 3.7",
|
24
23
|
"Programming Language :: Python :: 3.8",
|
25
24
|
"Programming Language :: Python :: 3.9",
|
26
25
|
"Programming Language :: Python :: 3.10",
|
27
26
|
"Programming Language :: Python :: 3.11",
|
27
|
+
"Programming Language :: Python :: 3.12",
|
28
28
|
"Topic :: Multimedia :: Sound/Audio",
|
29
29
|
]
|
30
30
|
requires-python = ">=3.8"
|
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
from .logger import logger
|
6
6
|
from .config import show_config, get_config, update_config
|
7
|
-
from .
|
7
|
+
from .rbxml import RekordboxXml, XmlDuplicateError, XmlAttributeKeyError
|
8
8
|
from .anlz import get_anlz_paths, walk_anlz_paths, read_anlz_files, AnlzFile
|
9
9
|
from .mysettings import (
|
10
10
|
get_mysetting_paths,
|
@@ -114,10 +114,10 @@ class AnlzFile(abc.Mapping):
|
|
114
114
|
# Check if the file is garbled (only on exported files)
|
115
115
|
# For this we check the validity of mood and bank
|
116
116
|
# Mood: High=1, Mid=2, Low=3
|
117
|
-
# Bank:
|
117
|
+
# Bank: 0-8
|
118
118
|
mood = Int16ub.parse(tag_data[18:20])
|
119
119
|
bank = Int16ub.parse(tag_data[28:30])
|
120
|
-
if 1 <= mood <= 3 and
|
120
|
+
if 1 <= mood <= 3 and 0 <= bank <= 8:
|
121
121
|
logger.debug("PSSI is not garbled!")
|
122
122
|
else:
|
123
123
|
logger.debug("PSSI is garbled!")
|
@@ -222,6 +222,11 @@ class Rekordbox6Database:
|
|
222
222
|
"Please use the CLI of pyrekordbox to download the key or "
|
223
223
|
"use the `key` parameter to manually provide it."
|
224
224
|
)
|
225
|
+
else:
|
226
|
+
# Check if key looks like a valid key
|
227
|
+
if not key.startswith("402fd"):
|
228
|
+
raise ValueError("The provided database key doesn't look valid!")
|
229
|
+
|
225
230
|
logger.info("Key: %s", key)
|
226
231
|
# Unlock database and create engine
|
227
232
|
url = f"sqlite+pysqlcipher://:{key}@/{path}?"
|
@@ -1822,7 +1827,9 @@ class Rekordbox6Database:
|
|
1822
1827
|
root = self.get_anlz_dir(content)
|
1823
1828
|
return read_anlz_files(root)
|
1824
1829
|
|
1825
|
-
def update_content_path(
|
1830
|
+
def update_content_path(
|
1831
|
+
self, content, path, save=True, check_path=True, commit=True
|
1832
|
+
):
|
1826
1833
|
"""Update the file path of a track in the Rekordbox v6 database.
|
1827
1834
|
|
1828
1835
|
This changes the `FolderPath` entry in the ``DjmdContent`` table and the
|
@@ -1839,6 +1846,8 @@ class Rekordbox6Database:
|
|
1839
1846
|
If True, the changes made are written to disc.
|
1840
1847
|
check_path : bool, optional
|
1841
1848
|
If True, raise an assertion error if the given file path does not exist.
|
1849
|
+
commit : bool, optional
|
1850
|
+
If True, the changes are committed to the database. True by default.
|
1842
1851
|
|
1843
1852
|
Examples
|
1844
1853
|
--------
|
@@ -1855,7 +1864,7 @@ class Rekordbox6Database:
|
|
1855
1864
|
Updating the path changes the database entry
|
1856
1865
|
|
1857
1866
|
>>> new_path = "C:/Music/PioneerDJ/Sampler/PRESET ONESHOT/NOISE.wav"
|
1858
|
-
>>> db.update_content_path(cont,
|
1867
|
+
>>> db.update_content_path(cont, path)
|
1859
1868
|
>>> cont.FolderPath
|
1860
1869
|
C:/Music/PioneerDJ/Sampler/PRESET ONESHOT/NOISE.wav
|
1861
1870
|
|
@@ -1889,15 +1898,31 @@ class Rekordbox6Database:
|
|
1889
1898
|
logger.debug("Updating database file path: %s", path)
|
1890
1899
|
content.FolderPath = path
|
1891
1900
|
|
1901
|
+
# Update the OrgFolderPath column with the new path
|
1902
|
+
# if the column matches the old_path variable
|
1903
|
+
org_folder_path = content.OrgFolderPath
|
1904
|
+
if org_folder_path == old_path:
|
1905
|
+
content.OrgFolderPath = path
|
1906
|
+
|
1907
|
+
# Update the FileNameL column with the new filename if it changed
|
1908
|
+
new_name = path.split("/")[-1]
|
1909
|
+
if content.FileNameL != new_name:
|
1910
|
+
content.FileNameL = new_name
|
1911
|
+
|
1892
1912
|
if save:
|
1893
|
-
logger.debug("Saving
|
1913
|
+
logger.debug("Saving ANLZ files")
|
1894
1914
|
# Save ANLZ files
|
1895
1915
|
for anlz_path, anlz in anlz_files.items():
|
1896
1916
|
anlz.save(anlz_path)
|
1917
|
+
|
1918
|
+
if commit:
|
1897
1919
|
# Commit database changes
|
1920
|
+
logger.debug("Committing changes to the database")
|
1898
1921
|
self.commit()
|
1899
1922
|
|
1900
|
-
def update_content_filename(
|
1923
|
+
def update_content_filename(
|
1924
|
+
self, content, name, save=True, check_path=True, commit=True
|
1925
|
+
):
|
1901
1926
|
"""Update the file name of a track in the Rekordbox v6 database.
|
1902
1927
|
|
1903
1928
|
This changes the `FolderPath` entry in the ``DjmdContent`` table and the
|
@@ -1914,6 +1939,8 @@ class Rekordbox6Database:
|
|
1914
1939
|
If True, the changes made are written to disc.
|
1915
1940
|
check_path : bool, optional
|
1916
1941
|
If True, raise an assertion error if the new file path does not exist.
|
1942
|
+
commit : bool, optional
|
1943
|
+
If True, the changes are committed to the database. True by default.
|
1917
1944
|
|
1918
1945
|
See Also
|
1919
1946
|
--------
|
@@ -1939,7 +1966,6 @@ class Rekordbox6Database:
|
|
1939
1966
|
>>> file = list(files.values())[0]
|
1940
1967
|
>>> cont.FolderPath == file.get("path")
|
1941
1968
|
True
|
1942
|
-
|
1943
1969
|
"""
|
1944
1970
|
if isinstance(content, (int, str)):
|
1945
1971
|
content = self.get_content(ID=content)
|
@@ -1948,7 +1974,7 @@ class Rekordbox6Database:
|
|
1948
1974
|
ext = old_path.suffix
|
1949
1975
|
new_path = old_path.parent / name
|
1950
1976
|
new_path = new_path.with_suffix(ext)
|
1951
|
-
self.update_content_path(content, new_path, save, check_path)
|
1977
|
+
self.update_content_path(content, new_path, save, check_path, commit=commit)
|
1952
1978
|
|
1953
1979
|
def to_dict(self, verbose=False):
|
1954
1980
|
"""Convert the database to a dictionary.
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: pyrekordbox
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.3.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
|
@@ -38,11 +38,11 @@ Classifier: Operating System :: MacOS
|
|
38
38
|
Classifier: Operating System :: Microsoft :: Windows
|
39
39
|
Classifier: Programming Language :: Python :: 3
|
40
40
|
Classifier: Programming Language :: Python :: 3 :: Only
|
41
|
-
Classifier: Programming Language :: Python :: 3.7
|
42
41
|
Classifier: Programming Language :: Python :: 3.8
|
43
42
|
Classifier: Programming Language :: Python :: 3.9
|
44
43
|
Classifier: Programming Language :: Python :: 3.10
|
45
44
|
Classifier: Programming Language :: Python :: 3.11
|
45
|
+
Classifier: Programming Language :: Python :: 3.12
|
46
46
|
Classifier: Topic :: Multimedia :: Sound/Audio
|
47
47
|
Requires-Python: >=3.8
|
48
48
|
Description-Content-Type: text/markdown
|
@@ -225,7 +225,7 @@ between two databases.
|
|
225
225
|
Pyrekordbox can read and write Rekordbox XML databases.
|
226
226
|
|
227
227
|
````python
|
228
|
-
from pyrekordbox.
|
228
|
+
from pyrekordbox.rbxml import RekordboxXml
|
229
229
|
|
230
230
|
xml = RekordboxXml("database.xml")
|
231
231
|
|
@@ -250,6 +250,7 @@ docs/source/api.md
|
|
250
250
|
docs/source/conf.py
|
251
251
|
docs/source/index.md
|
252
252
|
docs/source/installation.md
|
253
|
+
docs/source/key.md
|
253
254
|
docs/source/quickstart.md
|
254
255
|
docs/source/requirements.txt
|
255
256
|
docs/source/_static/images/anlz_beat.svg
|
@@ -274,6 +275,7 @@ docs/source/_static/images/anlz_pwv6.svg
|
|
274
275
|
docs/source/_static/images/anlz_pwv7.svg
|
275
276
|
docs/source/_static/images/anlz_pwvc.svg
|
276
277
|
docs/source/_static/images/anlz_tag.svg
|
278
|
+
docs/source/_static/images/x64dbg_rb_key.png
|
277
279
|
docs/source/_static/logos/dark/logo_primary.svg
|
278
280
|
docs/source/_static/logos/light/logo_primary.svg
|
279
281
|
docs/source/_static/logos/mid/logo_primary.svg
|
@@ -299,6 +301,7 @@ pyrekordbox/__main__.py
|
|
299
301
|
pyrekordbox/_version.py
|
300
302
|
pyrekordbox/config.py
|
301
303
|
pyrekordbox/logger.py
|
304
|
+
pyrekordbox/rbxml.py
|
302
305
|
pyrekordbox/utils.py
|
303
306
|
pyrekordbox/xml.py
|
304
307
|
pyrekordbox.egg-info/PKG-INFO
|
@@ -5,7 +5,7 @@
|
|
5
5
|
import os
|
6
6
|
import pytest
|
7
7
|
from pyrekordbox import RekordboxXml
|
8
|
-
from pyrekordbox.
|
8
|
+
from pyrekordbox.rbxml import Tempo, PositionMark, XmlDuplicateError
|
9
9
|
|
10
10
|
TEST_ROOT = os.path.join(os.path.dirname(os.path.dirname(__file__)), ".testdata")
|
11
11
|
XML5 = os.path.join(TEST_ROOT, "rekordbox 5", "database.xml")
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.2EX
RENAMED
File without changes
|
{pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.DAT
RENAMED
File without changes
|
{pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.EXT
RENAMED
File without changes
|
{pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.2EX
RENAMED
File without changes
|
{pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.DAT
RENAMED
File without changes
|
{pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.EXT
RENAMED
File without changes
|
{pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.2EX
RENAMED
File without changes
|
{pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.DAT
RENAMED
File without changes
|
{pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.EXT
RENAMED
File without changes
|
{pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.2EX
RENAMED
File without changes
|
{pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.DAT
RENAMED
File without changes
|
{pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.EXT
RENAMED
File without changes
|
{pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.2EX
RENAMED
File without changes
|
{pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.DAT
RENAMED
File without changes
|
{pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.EXT
RENAMED
File without changes
|
{pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.2EX
RENAMED
File without changes
|
{pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.DAT
RENAMED
File without changes
|
{pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.EXT
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|