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.
Files changed (332) hide show
  1. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.github/workflows/codeql.yml +25 -0
  2. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.github/workflows/pypi-publish.yml +4 -4
  3. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.github/workflows/tests.yml +1 -4
  4. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.pre-commit-config.yaml +1 -1
  5. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/CHANGELOG.md +26 -1
  6. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/CONTRIBUTING.md +3 -4
  7. {pyrekordbox-0.2.3/pyrekordbox.egg-info → pyrekordbox-0.3.0}/PKG-INFO +3 -3
  8. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/README.md +1 -1
  9. pyrekordbox-0.3.0/docs/source/_static/images/x64dbg_rb_key.png +0 -0
  10. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/index.md +1 -3
  11. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/installation.md +1 -7
  12. pyrekordbox-0.3.0/docs/source/key.md +104 -0
  13. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/quickstart.md +1 -1
  14. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyproject.toml +1 -1
  15. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/__init__.py +1 -1
  16. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/_version.py +2 -2
  17. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/anlz/file.py +2 -2
  18. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/db6/database.py +32 -6
  19. pyrekordbox-0.3.0/pyrekordbox/xml.py +8 -0
  20. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0/pyrekordbox.egg-info}/PKG-INFO +3 -3
  21. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox.egg-info/SOURCES.txt +3 -0
  22. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/tests/test_xml.py +1 -1
  23. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  24. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.github/ISSUE_TEMPLATE/config.yaml +0 -0
  25. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  26. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.gitignore +0 -0
  27. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.readthedocs.yaml +0 -0
  28. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/DEVSETTING.DAT +0 -0
  29. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/DJMMYSETTING.DAT +0 -0
  30. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/MYSETTING.DAT +0 -0
  31. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/MYSETTING2.DAT +0 -0
  32. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.2EX +0 -0
  33. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.DAT +0 -0
  34. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.EXT +0 -0
  35. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.2EX +0 -0
  36. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.DAT +0 -0
  37. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.EXT +0 -0
  38. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.2EX +0 -0
  39. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.DAT +0 -0
  40. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.EXT +0 -0
  41. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.2EX +0 -0
  42. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.DAT +0 -0
  43. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.EXT +0 -0
  44. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.2EX +0 -0
  45. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.DAT +0 -0
  46. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.EXT +0 -0
  47. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.2EX +0 -0
  48. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.DAT +0 -0
  49. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.EXT +0 -0
  50. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/rekordbox/export.pdb +0 -0
  51. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/export/PIONEER/rekordbox/exportExt.pdb +0 -0
  52. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/DEVSETTING.DAT +0 -0
  53. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/DJMMYSETTING.DAT +0 -0
  54. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/MYSETTING.DAT +0 -0
  55. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/MYSETTING2.DAT +0 -0
  56. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/beat_fx_quantize/off/DJMMYSETTING.DAT +0 -0
  57. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/beat_fx_quantize/on/DJMMYSETTING.DAT +0 -0
  58. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/channel_fader_curve/linear/DJMMYSETTING.DAT +0 -0
  59. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/channel_fader_curve/steep_bottom/DJMMYSETTING.DAT +0 -0
  60. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/channel_fader_curve/steep_top/DJMMYSETTING.DAT +0 -0
  61. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/exponential/DJMMYSETTING.DAT +0 -0
  62. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/linear/DJMMYSETTING.DAT +0 -0
  63. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/smooth/DJMMYSETTING.DAT +0 -0
  64. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/cross_fader_curve/constant/DJMMYSETTING.DAT +0 -0
  65. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/cross_fader_curve/fast_cut/DJMMYSETTING.DAT +0 -0
  66. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/cross_fader_curve/slow_cut/DJMMYSETTING.DAT +0 -0
  67. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/display_brightness/five/DJMMYSETTING.DAT +0 -0
  68. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/display_brightness/four/DJMMYSETTING.DAT +0 -0
  69. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/display_brightness/one/DJMMYSETTING.DAT +0 -0
  70. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/display_brightness/three/DJMMYSETTING.DAT +0 -0
  71. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/display_brightness/two/DJMMYSETTING.DAT +0 -0
  72. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/display_brightness/white/DJMMYSETTING.DAT +0 -0
  73. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/headphones_mono_split/mono_split/DJMMYSETTING.DAT +0 -0
  74. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/headphones_mono_split/stereo/DJMMYSETTING.DAT +0 -0
  75. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/headphones_pre_eq/post_eq/DJMMYSETTING.DAT +0 -0
  76. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/headphones_pre_eq/pre_eq/DJMMYSETTING.DAT +0 -0
  77. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/indicator_brightness/one/DJMMYSETTING.DAT +0 -0
  78. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/indicator_brightness/three/DJMMYSETTING.DAT +0 -0
  79. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/indicator_brightness/two/DJMMYSETTING.DAT +0 -0
  80. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/mic_low_cut/off/DJMMYSETTING.DAT +0 -0
  81. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/mic_low_cut/on/DJMMYSETTING.DAT +0 -0
  82. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_button_type/toggle/DJMMYSETTING.DAT +0 -0
  83. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_button_type/trigger/DJMMYSETTING.DAT +0 -0
  84. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/eight/DJMMYSETTING.DAT +0 -0
  85. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/eleven/DJMMYSETTING.DAT +0 -0
  86. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/fifteen/DJMMYSETTING.DAT +0 -0
  87. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/five/DJMMYSETTING.DAT +0 -0
  88. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/four/DJMMYSETTING.DAT +0 -0
  89. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/fourteen/DJMMYSETTING.DAT +0 -0
  90. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/nine/DJMMYSETTING.DAT +0 -0
  91. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/one/DJMMYSETTING.DAT +0 -0
  92. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/seven/DJMMYSETTING.DAT +0 -0
  93. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/six/DJMMYSETTING.DAT +0 -0
  94. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/sixteen/DJMMYSETTING.DAT +0 -0
  95. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/ten/DJMMYSETTING.DAT +0 -0
  96. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/thirteen/DJMMYSETTING.DAT +0 -0
  97. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/three/DJMMYSETTING.DAT +0 -0
  98. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/twelve/DJMMYSETTING.DAT +0 -0
  99. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/midi_channel/two/DJMMYSETTING.DAT +0 -0
  100. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/talk_over_level/minus_12db/DJMMYSETTING.DAT +0 -0
  101. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/talk_over_level/minus_18db/DJMMYSETTING.DAT +0 -0
  102. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/talk_over_level/minus_24db/DJMMYSETTING.DAT +0 -0
  103. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/talk_over_level/minus_6db/DJMMYSETTING.DAT +0 -0
  104. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/talk_over_mode/advanced/DJMMYSETTING.DAT +0 -0
  105. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/djmmysetting/talk_over_mode/normal/DJMMYSETTING.DAT +0 -0
  106. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue/off/MYSETTING.DAT +0 -0
  107. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue/on/MYSETTING.DAT +0 -0
  108. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/memory/MYSETTING.DAT +0 -0
  109. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_36db/MYSETTING.DAT +0 -0
  110. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_42db/MYSETTING.DAT +0 -0
  111. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_48db/MYSETTING.DAT +0 -0
  112. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_54db/MYSETTING.DAT +0 -0
  113. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_60db/MYSETTING.DAT +0 -0
  114. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_66db/MYSETTING.DAT +0 -0
  115. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_72db/MYSETTING.DAT +0 -0
  116. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_78db/MYSETTING.DAT +0 -0
  117. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/disc_slot_illumination/bright/MYSETTING.DAT +0 -0
  118. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/disc_slot_illumination/dark/MYSETTING.DAT +0 -0
  119. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/disc_slot_illumination/off/MYSETTING.DAT +0 -0
  120. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/eject_lock/lock/MYSETTING.DAT +0 -0
  121. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/eject_lock/unlock/MYSETTING.DAT +0 -0
  122. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/hotcue_autoload/off/MYSETTING.DAT +0 -0
  123. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/hotcue_autoload/on/MYSETTING.DAT +0 -0
  124. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/hotcue_autoload/rekordbox/MYSETTING.DAT +0 -0
  125. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/hotcue_color/off/MYSETTING.DAT +0 -0
  126. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/hotcue_color/on/MYSETTING.DAT +0 -0
  127. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/jog_mode/cdj/MYSETTING.DAT +0 -0
  128. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/jog_mode/vinyl/MYSETTING.DAT +0 -0
  129. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/jog_ring_brightness/bright/MYSETTING.DAT +0 -0
  130. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/jog_ring_brightness/dark/MYSETTING.DAT +0 -0
  131. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/jog_ring_brightness/off/MYSETTING.DAT +0 -0
  132. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/jog_ring_indicator/off/MYSETTING.DAT +0 -0
  133. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/jog_ring_indicator/on/MYSETTING.DAT +0 -0
  134. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/chinese_simplified/MYSETTING.DAT +0 -0
  135. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/chinese_traditional/MYSETTING.DAT +0 -0
  136. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/czech/MYSETTING.DAT +0 -0
  137. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/danish/MYSETTING.DAT +0 -0
  138. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/dutch/MYSETTING.DAT +0 -0
  139. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/english/MYSETTING.DAT +0 -0
  140. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/french/MYSETTING.DAT +0 -0
  141. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/german/MYSETTING.DAT +0 -0
  142. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/greek/MYSETTING.DAT +0 -0
  143. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/hungarian/MYSETTING.DAT +0 -0
  144. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/italian/MYSETTING.DAT +0 -0
  145. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/japanese/MYSETTING.DAT +0 -0
  146. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/korean/MYSETTING.DAT +0 -0
  147. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/portuguese/MYSETTING.DAT +0 -0
  148. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/russian/MYSETTING.DAT +0 -0
  149. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/spanish/MYSETTING.DAT +0 -0
  150. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/swedish/MYSETTING.DAT +0 -0
  151. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/language/turkish/MYSETTING.DAT +0 -0
  152. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/lcd_brightness/five/MYSETTING.DAT +0 -0
  153. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/lcd_brightness/four/MYSETTING.DAT +0 -0
  154. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/lcd_brightness/one/MYSETTING.DAT +0 -0
  155. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/lcd_brightness/three/MYSETTING.DAT +0 -0
  156. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/lcd_brightness/two/MYSETTING.DAT +0 -0
  157. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/master_tempo/off/MYSETTING.DAT +0 -0
  158. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/master_tempo/on/MYSETTING.DAT +0 -0
  159. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/needle_lock/lock/MYSETTING.DAT +0 -0
  160. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/needle_lock/unlock/MYSETTING.DAT +0 -0
  161. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/on_air_display/off/MYSETTING.DAT +0 -0
  162. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/on_air_display/on/MYSETTING.DAT +0 -0
  163. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/phase_meter/type1/MYSETTING.DAT +0 -0
  164. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/phase_meter/type2/MYSETTING.DAT +0 -0
  165. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/play_mode/continue_/MYSETTING.DAT +0 -0
  166. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/play_mode/single/MYSETTING.DAT +0 -0
  167. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/quantize/off/MYSETTING.DAT +0 -0
  168. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/quantize/on/MYSETTING.DAT +0 -0
  169. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/quantize_beat_value/eighth/MYSETTING.DAT +0 -0
  170. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/quantize_beat_value/half/MYSETTING.DAT +0 -0
  171. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/quantize_beat_value/one/MYSETTING.DAT +0 -0
  172. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/quantize_beat_value/quarter/MYSETTING.DAT +0 -0
  173. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/slip_flashing/off/MYSETTING.DAT +0 -0
  174. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/slip_flashing/on/MYSETTING.DAT +0 -0
  175. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/sync/off/MYSETTING.DAT +0 -0
  176. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/sync/on/MYSETTING.DAT +0 -0
  177. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/tempo_range/six/MYSETTING.DAT +0 -0
  178. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/tempo_range/sixteen/MYSETTING.DAT +0 -0
  179. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/tempo_range/ten/MYSETTING.DAT +0 -0
  180. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/tempo_range/wide/MYSETTING.DAT +0 -0
  181. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/time_mode/elapsed/MYSETTING.DAT +0 -0
  182. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting/time_mode/remain/MYSETTING.DAT +0 -0
  183. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/eight/MYSETTING2.DAT +0 -0
  184. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/four/MYSETTING2.DAT +0 -0
  185. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/half/MYSETTING2.DAT +0 -0
  186. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/one/MYSETTING2.DAT +0 -0
  187. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/sixteen/MYSETTING2.DAT +0 -0
  188. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/sixtyfour/MYSETTING2.DAT +0 -0
  189. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/thirtytwo/MYSETTING2.DAT +0 -0
  190. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/two/MYSETTING2.DAT +0 -0
  191. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_display_mode/artwork/MYSETTING2.DAT +0 -0
  192. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_display_mode/auto/MYSETTING2.DAT +0 -0
  193. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_display_mode/info/MYSETTING2.DAT +0 -0
  194. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_display_mode/simple/MYSETTING2.DAT +0 -0
  195. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/five/MYSETTING2.DAT +0 -0
  196. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/four/MYSETTING2.DAT +0 -0
  197. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/one/MYSETTING2.DAT +0 -0
  198. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/three/MYSETTING2.DAT +0 -0
  199. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/two/MYSETTING2.DAT +0 -0
  200. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/pad_button_brightness/four/MYSETTING2.DAT +0 -0
  201. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/pad_button_brightness/one/MYSETTING2.DAT +0 -0
  202. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/pad_button_brightness/three/MYSETTING2.DAT +0 -0
  203. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/pad_button_brightness/two/MYSETTING2.DAT +0 -0
  204. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/release/MYSETTING2.DAT +0 -0
  205. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/touch/MYSETTING2.DAT +0 -0
  206. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/touch_release/MYSETTING2.DAT +0 -0
  207. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/waveform/phase_meter/MYSETTING2.DAT +0 -0
  208. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/waveform/waveform/MYSETTING2.DAT +0 -0
  209. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/waveform_divisions/phrase/MYSETTING2.DAT +0 -0
  210. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/mysettings/mysetting2/waveform_divisions/time_scale/MYSETTING2.DAT +0 -0
  211. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/DEVSETTING.DAT +0 -0
  212. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/ExtData.edb +0 -0
  213. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/MYSETTING.DAT +0 -0
  214. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P002/00009C2E/ANLZ0000.DAT +0 -0
  215. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P002/00009C2E/ANLZ0000.EXT +0 -0
  216. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P02B/00023587/ANLZ0000.DAT +0 -0
  217. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P02B/00023587/ANLZ0000.EXT +0 -0
  218. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P035/00027763/ANLZ0000.DAT +0 -0
  219. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P035/00027763/ANLZ0000.EXT +0 -0
  220. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P038/0002AAA0/ANLZ0000.DAT +0 -0
  221. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P038/0002AAA0/ANLZ0000.EXT +0 -0
  222. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P068/00012CA2/ANLZ0000.DAT +0 -0
  223. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P068/00012CA2/ANLZ0000.EXT +0 -0
  224. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P076/00013B6E/ANLZ0000.DAT +0 -0
  225. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P076/00013B6E/ANLZ0000.EXT +0 -0
  226. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/datafile.edb +0 -0
  227. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/backup/masterPlaylists3.xml +0 -0
  228. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/database.xml +0 -0
  229. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 5/datafile.edb +0 -0
  230. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/DEVSETTING.DAT +0 -0
  231. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/DJMMYSETTING.DAT +0 -0
  232. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/MYSETTING.DAT +0 -0
  233. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/MYSETTING2.DAT +0 -0
  234. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/masterPlaylists3.xml +0 -0
  235. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/backup/masterPlaylists6.xml +0 -0
  236. {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
  237. {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
  238. {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
  239. {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
  240. {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
  241. {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
  242. {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
  243. {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
  244. {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
  245. {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
  246. {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
  247. {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
  248. {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
  249. {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
  250. {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
  251. {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
  252. {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
  253. {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
  254. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/database.xml +0 -0
  255. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/masterPlaylists6_template.xml +0 -0
  256. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/master_locked.db +0 -0
  257. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/.testdata/rekordbox 6/master_unlocked.db +0 -0
  258. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/LICENSE +0 -0
  259. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/Makefile +0 -0
  260. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/make.bat +0 -0
  261. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_beat.svg +0 -0
  262. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_file.svg +0 -0
  263. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pco2.svg +0 -0
  264. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pcob.svg +0 -0
  265. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pcp2.svg +0 -0
  266. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pcpt.svg +0 -0
  267. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_ppth.svg +0 -0
  268. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pqt2.svg +0 -0
  269. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pqt2_2.svg +0 -0
  270. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pqtz.svg +0 -0
  271. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pssi.svg +0 -0
  272. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pssi_entry.svg +0 -0
  273. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pvbr.svg +0 -0
  274. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwav.svg +0 -0
  275. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwv3.svg +0 -0
  276. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwv4.svg +0 -0
  277. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwv5.svg +0 -0
  278. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwv5_entry.svg +0 -0
  279. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwv6.svg +0 -0
  280. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwv7.svg +0 -0
  281. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_pwvc.svg +0 -0
  282. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/images/anlz_tag.svg +0 -0
  283. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/logos/dark/logo_primary.svg +0 -0
  284. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/logos/light/logo_primary.svg +0 -0
  285. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_static/logos/mid/logo_primary.svg +0 -0
  286. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_templates/apidoc/module.rst_t +0 -0
  287. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_templates/apidoc/package.rst_t +0 -0
  288. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_templates/apidoc/toc.rst_t +0 -0
  289. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_templates/autosummary/class.rst +0 -0
  290. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/_templates/autosummary/module.rst +0 -0
  291. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/api.md +0 -0
  292. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/conf.py +0 -0
  293. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/development/changes.md +0 -0
  294. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/development/contributing.md +0 -0
  295. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/formats/anlz.md +0 -0
  296. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/formats/db6.md +0 -0
  297. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/formats/mysetting.md +0 -0
  298. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/formats/xml.md +0 -0
  299. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/requirements.txt +0 -0
  300. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/tutorial/anlz.md +0 -0
  301. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/tutorial/configuration.md +0 -0
  302. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/tutorial/db6.md +0 -0
  303. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/tutorial/index.md +0 -0
  304. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/tutorial/mysetting.md +0 -0
  305. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/docs/source/tutorial/xml.md +0 -0
  306. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/__main__.py +0 -0
  307. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/anlz/__init__.py +0 -0
  308. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/anlz/structs.py +0 -0
  309. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/anlz/tags.py +0 -0
  310. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/config.py +0 -0
  311. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/db6/__init__.py +0 -0
  312. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/db6/aux_files.py +0 -0
  313. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/db6/registry.py +0 -0
  314. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/db6/tables.py +0 -0
  315. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/logger.py +0 -0
  316. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/mysettings/__init__.py +0 -0
  317. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/mysettings/file.py +0 -0
  318. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/mysettings/structs.py +0 -0
  319. /pyrekordbox-0.2.3/pyrekordbox/xml.py → /pyrekordbox-0.3.0/pyrekordbox/rbxml.py +0 -0
  320. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox/utils.py +0 -0
  321. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox.egg-info/dependency_links.txt +0 -0
  322. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox.egg-info/not-zip-safe +0 -0
  323. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox.egg-info/requires.txt +0 -0
  324. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/pyrekordbox.egg-info/top_level.txt +0 -0
  325. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/requirements.txt +0 -0
  326. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/setup.cfg +0 -0
  327. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/setup.py +0 -0
  328. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/tests/__init__.py +0 -0
  329. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/tests/test_anlz.py +0 -0
  330. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/tests/test_config.py +0 -0
  331. {pyrekordbox-0.2.3 → pyrekordbox-0.3.0}/tests/test_db6.py +0 -0
  332. {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: ${{ secrets.TEST_PYPI_USERNAME }}
52
- TWINE_PASSWORD: ${{ secrets.TEST_PYPI_PASSWORD }}
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: ${{ secrets.PYPI_USERNAME }}
59
- TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
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: true # don't cancel due to OS specific failures
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
@@ -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.1.5
16
+ rev: v0.1.7
17
17
  hooks:
18
18
  # Run the linter.
19
19
  - id: ruff
@@ -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.2.3...HEAD
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 some checks and
12
- the [Black code formatter] at commit time. This ensures that every commit fulfills
13
- the basic requirements to be mergeable and follows the coding style of the project.
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.2.3
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.xml import RekordboxXml
228
+ from pyrekordbox.rbxml import RekordboxXml
229
229
 
230
230
  xml = RekordboxXml("database.xml")
231
231
 
@@ -164,7 +164,7 @@ between two databases.
164
164
  Pyrekordbox can read and write Rekordbox XML databases.
165
165
 
166
166
  ````python
167
- from pyrekordbox.xml import RekordboxXml
167
+ from pyrekordbox.rbxml import RekordboxXml
168
168
 
169
169
  xml = RekordboxXml("database.xml")
170
170
 
@@ -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
- ## Dependencies
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
@@ -101,7 +101,7 @@ between two databases.
101
101
  Pyrekordbox can read and write Rekordbox XML databases.
102
102
 
103
103
  ````python
104
- from pyrekordbox.xml import RekordboxXml
104
+ from pyrekordbox.rbxml import RekordboxXml
105
105
 
106
106
  xml = RekordboxXml("database.xml")
107
107
 
@@ -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 .xml import RekordboxXml, XmlDuplicateError, XmlAttributeKeyError
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,
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.2.3'
16
- __version_tuple__ = version_tuple = (0, 2, 3)
15
+ __version__ = version = '0.3.0'
16
+ __version_tuple__ = version_tuple = (0, 3, 0)
@@ -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: 1-8
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 1 <= bank <= 8:
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(self, content, path, save=True, check_path=True):
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, new_path)
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 changes")
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(self, content, name, save=True, check_path=True):
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.
@@ -0,0 +1,8 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Author: Dylan Jones
3
+ # Date: 2022-04-10
4
+
5
+ from .utils import warn_deprecated as _warn_deprecated
6
+ from .rbxml import * # noqa: F401, F403
7
+
8
+ _warn_deprecated("pyrekordbox.xml", "pyrekordbox.rbxml", remove_in="0.4.0")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyrekordbox
3
- Version: 0.2.3
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.xml import RekordboxXml
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.xml import Tempo, PositionMark, XmlDuplicateError
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