pyrekordbox 0.3.2__tar.gz → 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.github/workflows/tests.yml +1 -1
  2. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.pre-commit-config.yaml +2 -2
  3. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/CHANGELOG.md +42 -1
  4. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/PKG-INFO +12 -32
  5. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/README.md +9 -30
  6. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/formats/db6.md +5 -5
  7. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/installation.md +5 -5
  8. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/tutorial/db6.md +28 -0
  9. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyproject.toml +31 -4
  10. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox/__init__.py +8 -8
  11. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox/__main__.py +3 -2
  12. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox/_version.py +2 -2
  13. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox/anlz/__init__.py +3 -2
  14. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox/anlz/file.py +4 -2
  15. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox/anlz/tags.py +3 -1
  16. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox/config.py +79 -23
  17. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox/db6/__init__.py +2 -2
  18. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox/db6/aux_files.py +3 -2
  19. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox/db6/database.py +101 -111
  20. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox/db6/registry.py +1 -0
  21. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox/db6/smartlist.py +7 -6
  22. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox/db6/tables.py +44 -16
  23. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox/logger.py +0 -1
  24. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox/mysettings/__init__.py +5 -4
  25. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox/mysettings/file.py +3 -1
  26. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox/rbxml.py +5 -3
  27. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox/utils.py +4 -3
  28. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox.egg-info/PKG-INFO +12 -32
  29. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox.egg-info/SOURCES.txt +0 -1
  30. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox.egg-info/requires.txt +1 -0
  31. pyrekordbox-0.4.0/pyrekordbox.egg-info/top_level.txt +1 -0
  32. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/requirements.txt +1 -0
  33. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/tests/test_anlz.py +3 -1
  34. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/tests/test_config.py +92 -15
  35. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/tests/test_db6.py +63 -17
  36. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/tests/test_mysetting.py +5 -3
  37. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/tests/test_xml.py +3 -1
  38. pyrekordbox-0.3.2/pyrekordbox/xml.py +0 -8
  39. pyrekordbox-0.3.2/pyrekordbox.egg-info/top_level.txt +0 -4
  40. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  41. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.github/ISSUE_TEMPLATE/config.yaml +0 -0
  42. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  43. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.github/workflows/codeql.yml +0 -0
  44. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.github/workflows/pypi-publish.yml +0 -0
  45. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.gitignore +0 -0
  46. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.readthedocs.yaml +0 -0
  47. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/DEVSETTING.DAT +0 -0
  48. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/DJMMYSETTING.DAT +0 -0
  49. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/MYSETTING.DAT +0 -0
  50. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/MYSETTING2.DAT +0 -0
  51. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.2EX +0 -0
  52. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.DAT +0 -0
  53. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.EXT +0 -0
  54. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.2EX +0 -0
  55. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.DAT +0 -0
  56. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.EXT +0 -0
  57. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.2EX +0 -0
  58. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.DAT +0 -0
  59. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.EXT +0 -0
  60. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.2EX +0 -0
  61. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.DAT +0 -0
  62. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.EXT +0 -0
  63. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.2EX +0 -0
  64. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.DAT +0 -0
  65. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.EXT +0 -0
  66. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.2EX +0 -0
  67. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.DAT +0 -0
  68. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.EXT +0 -0
  69. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/rekordbox/export.pdb +0 -0
  70. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/export/PIONEER/rekordbox/exportExt.pdb +0 -0
  71. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/DEVSETTING.DAT +0 -0
  72. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/DJMMYSETTING.DAT +0 -0
  73. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/MYSETTING.DAT +0 -0
  74. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/MYSETTING2.DAT +0 -0
  75. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/beat_fx_quantize/off/DJMMYSETTING.DAT +0 -0
  76. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/beat_fx_quantize/on/DJMMYSETTING.DAT +0 -0
  77. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/channel_fader_curve/linear/DJMMYSETTING.DAT +0 -0
  78. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/channel_fader_curve/steep_bottom/DJMMYSETTING.DAT +0 -0
  79. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/channel_fader_curve/steep_top/DJMMYSETTING.DAT +0 -0
  80. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/exponential/DJMMYSETTING.DAT +0 -0
  81. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/linear/DJMMYSETTING.DAT +0 -0
  82. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/smooth/DJMMYSETTING.DAT +0 -0
  83. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/cross_fader_curve/constant/DJMMYSETTING.DAT +0 -0
  84. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/cross_fader_curve/fast_cut/DJMMYSETTING.DAT +0 -0
  85. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/cross_fader_curve/slow_cut/DJMMYSETTING.DAT +0 -0
  86. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/display_brightness/five/DJMMYSETTING.DAT +0 -0
  87. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/display_brightness/four/DJMMYSETTING.DAT +0 -0
  88. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/display_brightness/one/DJMMYSETTING.DAT +0 -0
  89. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/display_brightness/three/DJMMYSETTING.DAT +0 -0
  90. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/display_brightness/two/DJMMYSETTING.DAT +0 -0
  91. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/display_brightness/white/DJMMYSETTING.DAT +0 -0
  92. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/headphones_mono_split/mono_split/DJMMYSETTING.DAT +0 -0
  93. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/headphones_mono_split/stereo/DJMMYSETTING.DAT +0 -0
  94. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/headphones_pre_eq/post_eq/DJMMYSETTING.DAT +0 -0
  95. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/headphones_pre_eq/pre_eq/DJMMYSETTING.DAT +0 -0
  96. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/indicator_brightness/one/DJMMYSETTING.DAT +0 -0
  97. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/indicator_brightness/three/DJMMYSETTING.DAT +0 -0
  98. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/indicator_brightness/two/DJMMYSETTING.DAT +0 -0
  99. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/mic_low_cut/off/DJMMYSETTING.DAT +0 -0
  100. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/mic_low_cut/on/DJMMYSETTING.DAT +0 -0
  101. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_button_type/toggle/DJMMYSETTING.DAT +0 -0
  102. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_button_type/trigger/DJMMYSETTING.DAT +0 -0
  103. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/eight/DJMMYSETTING.DAT +0 -0
  104. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/eleven/DJMMYSETTING.DAT +0 -0
  105. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/fifteen/DJMMYSETTING.DAT +0 -0
  106. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/five/DJMMYSETTING.DAT +0 -0
  107. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/four/DJMMYSETTING.DAT +0 -0
  108. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/fourteen/DJMMYSETTING.DAT +0 -0
  109. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/nine/DJMMYSETTING.DAT +0 -0
  110. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/one/DJMMYSETTING.DAT +0 -0
  111. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/seven/DJMMYSETTING.DAT +0 -0
  112. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/six/DJMMYSETTING.DAT +0 -0
  113. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/sixteen/DJMMYSETTING.DAT +0 -0
  114. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/ten/DJMMYSETTING.DAT +0 -0
  115. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/thirteen/DJMMYSETTING.DAT +0 -0
  116. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/three/DJMMYSETTING.DAT +0 -0
  117. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/twelve/DJMMYSETTING.DAT +0 -0
  118. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/midi_channel/two/DJMMYSETTING.DAT +0 -0
  119. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/talk_over_level/minus_12db/DJMMYSETTING.DAT +0 -0
  120. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/talk_over_level/minus_18db/DJMMYSETTING.DAT +0 -0
  121. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/talk_over_level/minus_24db/DJMMYSETTING.DAT +0 -0
  122. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/talk_over_level/minus_6db/DJMMYSETTING.DAT +0 -0
  123. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/talk_over_mode/advanced/DJMMYSETTING.DAT +0 -0
  124. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/djmmysetting/talk_over_mode/normal/DJMMYSETTING.DAT +0 -0
  125. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue/off/MYSETTING.DAT +0 -0
  126. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue/on/MYSETTING.DAT +0 -0
  127. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue_level/memory/MYSETTING.DAT +0 -0
  128. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_36db/MYSETTING.DAT +0 -0
  129. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_42db/MYSETTING.DAT +0 -0
  130. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_48db/MYSETTING.DAT +0 -0
  131. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_54db/MYSETTING.DAT +0 -0
  132. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_60db/MYSETTING.DAT +0 -0
  133. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_66db/MYSETTING.DAT +0 -0
  134. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_72db/MYSETTING.DAT +0 -0
  135. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/auto_cue_level/minus_78db/MYSETTING.DAT +0 -0
  136. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/disc_slot_illumination/bright/MYSETTING.DAT +0 -0
  137. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/disc_slot_illumination/dark/MYSETTING.DAT +0 -0
  138. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/disc_slot_illumination/off/MYSETTING.DAT +0 -0
  139. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/eject_lock/lock/MYSETTING.DAT +0 -0
  140. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/eject_lock/unlock/MYSETTING.DAT +0 -0
  141. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/hotcue_autoload/off/MYSETTING.DAT +0 -0
  142. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/hotcue_autoload/on/MYSETTING.DAT +0 -0
  143. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/hotcue_autoload/rekordbox/MYSETTING.DAT +0 -0
  144. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/hotcue_color/off/MYSETTING.DAT +0 -0
  145. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/hotcue_color/on/MYSETTING.DAT +0 -0
  146. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/jog_mode/cdj/MYSETTING.DAT +0 -0
  147. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/jog_mode/vinyl/MYSETTING.DAT +0 -0
  148. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/jog_ring_brightness/bright/MYSETTING.DAT +0 -0
  149. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/jog_ring_brightness/dark/MYSETTING.DAT +0 -0
  150. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/jog_ring_brightness/off/MYSETTING.DAT +0 -0
  151. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/jog_ring_indicator/off/MYSETTING.DAT +0 -0
  152. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/jog_ring_indicator/on/MYSETTING.DAT +0 -0
  153. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/chinese_simplified/MYSETTING.DAT +0 -0
  154. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/chinese_traditional/MYSETTING.DAT +0 -0
  155. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/czech/MYSETTING.DAT +0 -0
  156. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/danish/MYSETTING.DAT +0 -0
  157. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/dutch/MYSETTING.DAT +0 -0
  158. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/english/MYSETTING.DAT +0 -0
  159. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/french/MYSETTING.DAT +0 -0
  160. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/german/MYSETTING.DAT +0 -0
  161. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/greek/MYSETTING.DAT +0 -0
  162. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/hungarian/MYSETTING.DAT +0 -0
  163. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/italian/MYSETTING.DAT +0 -0
  164. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/japanese/MYSETTING.DAT +0 -0
  165. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/korean/MYSETTING.DAT +0 -0
  166. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/portuguese/MYSETTING.DAT +0 -0
  167. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/russian/MYSETTING.DAT +0 -0
  168. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/spanish/MYSETTING.DAT +0 -0
  169. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/swedish/MYSETTING.DAT +0 -0
  170. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/language/turkish/MYSETTING.DAT +0 -0
  171. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/lcd_brightness/five/MYSETTING.DAT +0 -0
  172. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/lcd_brightness/four/MYSETTING.DAT +0 -0
  173. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/lcd_brightness/one/MYSETTING.DAT +0 -0
  174. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/lcd_brightness/three/MYSETTING.DAT +0 -0
  175. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/lcd_brightness/two/MYSETTING.DAT +0 -0
  176. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/master_tempo/off/MYSETTING.DAT +0 -0
  177. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/master_tempo/on/MYSETTING.DAT +0 -0
  178. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/needle_lock/lock/MYSETTING.DAT +0 -0
  179. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/needle_lock/unlock/MYSETTING.DAT +0 -0
  180. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/on_air_display/off/MYSETTING.DAT +0 -0
  181. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/on_air_display/on/MYSETTING.DAT +0 -0
  182. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/phase_meter/type1/MYSETTING.DAT +0 -0
  183. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/phase_meter/type2/MYSETTING.DAT +0 -0
  184. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/play_mode/continue_/MYSETTING.DAT +0 -0
  185. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/play_mode/single/MYSETTING.DAT +0 -0
  186. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/quantize/off/MYSETTING.DAT +0 -0
  187. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/quantize/on/MYSETTING.DAT +0 -0
  188. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/quantize_beat_value/eighth/MYSETTING.DAT +0 -0
  189. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/quantize_beat_value/half/MYSETTING.DAT +0 -0
  190. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/quantize_beat_value/one/MYSETTING.DAT +0 -0
  191. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/quantize_beat_value/quarter/MYSETTING.DAT +0 -0
  192. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/slip_flashing/off/MYSETTING.DAT +0 -0
  193. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/slip_flashing/on/MYSETTING.DAT +0 -0
  194. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/sync/off/MYSETTING.DAT +0 -0
  195. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/sync/on/MYSETTING.DAT +0 -0
  196. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/tempo_range/six/MYSETTING.DAT +0 -0
  197. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/tempo_range/sixteen/MYSETTING.DAT +0 -0
  198. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/tempo_range/ten/MYSETTING.DAT +0 -0
  199. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/tempo_range/wide/MYSETTING.DAT +0 -0
  200. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/time_mode/elapsed/MYSETTING.DAT +0 -0
  201. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting/time_mode/remain/MYSETTING.DAT +0 -0
  202. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/eight/MYSETTING2.DAT +0 -0
  203. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/four/MYSETTING2.DAT +0 -0
  204. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/half/MYSETTING2.DAT +0 -0
  205. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/one/MYSETTING2.DAT +0 -0
  206. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/sixteen/MYSETTING2.DAT +0 -0
  207. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/sixtyfour/MYSETTING2.DAT +0 -0
  208. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/thirtytwo/MYSETTING2.DAT +0 -0
  209. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/beat_jump_beat_value/two/MYSETTING2.DAT +0 -0
  210. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/jog_display_mode/artwork/MYSETTING2.DAT +0 -0
  211. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/jog_display_mode/auto/MYSETTING2.DAT +0 -0
  212. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/jog_display_mode/info/MYSETTING2.DAT +0 -0
  213. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/jog_display_mode/simple/MYSETTING2.DAT +0 -0
  214. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/five/MYSETTING2.DAT +0 -0
  215. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/four/MYSETTING2.DAT +0 -0
  216. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/one/MYSETTING2.DAT +0 -0
  217. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/three/MYSETTING2.DAT +0 -0
  218. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/jog_lcd_brightness/two/MYSETTING2.DAT +0 -0
  219. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/pad_button_brightness/four/MYSETTING2.DAT +0 -0
  220. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/pad_button_brightness/one/MYSETTING2.DAT +0 -0
  221. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/pad_button_brightness/three/MYSETTING2.DAT +0 -0
  222. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/pad_button_brightness/two/MYSETTING2.DAT +0 -0
  223. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/release/MYSETTING2.DAT +0 -0
  224. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/touch/MYSETTING2.DAT +0 -0
  225. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/touch_release/MYSETTING2.DAT +0 -0
  226. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/waveform/phase_meter/MYSETTING2.DAT +0 -0
  227. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/waveform/waveform/MYSETTING2.DAT +0 -0
  228. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/waveform_divisions/phrase/MYSETTING2.DAT +0 -0
  229. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/mysettings/mysetting2/waveform_divisions/time_scale/MYSETTING2.DAT +0 -0
  230. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/DEVSETTING.DAT +0 -0
  231. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/ExtData.edb +0 -0
  232. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/MYSETTING.DAT +0 -0
  233. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P002/00009C2E/ANLZ0000.DAT +0 -0
  234. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P002/00009C2E/ANLZ0000.EXT +0 -0
  235. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P02B/00023587/ANLZ0000.DAT +0 -0
  236. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P02B/00023587/ANLZ0000.EXT +0 -0
  237. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P035/00027763/ANLZ0000.DAT +0 -0
  238. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P035/00027763/ANLZ0000.EXT +0 -0
  239. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P038/0002AAA0/ANLZ0000.DAT +0 -0
  240. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P038/0002AAA0/ANLZ0000.EXT +0 -0
  241. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P068/00012CA2/ANLZ0000.DAT +0 -0
  242. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P068/00012CA2/ANLZ0000.EXT +0 -0
  243. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P076/00013B6E/ANLZ0000.DAT +0 -0
  244. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P076/00013B6E/ANLZ0000.EXT +0 -0
  245. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/datafile.edb +0 -0
  246. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/backup/masterPlaylists3.xml +0 -0
  247. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/database.xml +0 -0
  248. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 5/datafile.edb +0 -0
  249. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/DEVSETTING.DAT +0 -0
  250. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/DJMMYSETTING.DAT +0 -0
  251. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/MYSETTING.DAT +0 -0
  252. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/MYSETTING2.DAT +0 -0
  253. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/masterPlaylists3.xml +0 -0
  254. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/masterPlaylists6.xml +0 -0
  255. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/003/c9538-33bc-4ca7-b6c7-e63ebf9a96f8/ANLZ0000.2EX +0 -0
  256. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/003/c9538-33bc-4ca7-b6c7-e63ebf9a96f8/ANLZ0000.DAT +0 -0
  257. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/003/c9538-33bc-4ca7-b6c7-e63ebf9a96f8/ANLZ0000.EXT +0 -0
  258. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/104/c82cc-661c-4f30-ab60-51ce1effeeed/ANLZ0000.2EX +0 -0
  259. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/104/c82cc-661c-4f30-ab60-51ce1effeeed/ANLZ0000.DAT +0 -0
  260. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/104/c82cc-661c-4f30-ab60-51ce1effeeed/ANLZ0000.EXT +0 -0
  261. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/36d/ad2b4-5d4e-4b94-9a5d-a5bb241aee4b/ANLZ0000.2EX +0 -0
  262. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/36d/ad2b4-5d4e-4b94-9a5d-a5bb241aee4b/ANLZ0000.DAT +0 -0
  263. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/36d/ad2b4-5d4e-4b94-9a5d-a5bb241aee4b/ANLZ0000.EXT +0 -0
  264. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/731/0104f-53cb-453e-8b83-e0dfd5cff825/ANLZ0000.2EX +0 -0
  265. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/731/0104f-53cb-453e-8b83-e0dfd5cff825/ANLZ0000.DAT +0 -0
  266. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/731/0104f-53cb-453e-8b83-e0dfd5cff825/ANLZ0000.EXT +0 -0
  267. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/c8b/ac74a-bbfc-4fce-8fb8-50aa4e974273/ANLZ0000.2EX +0 -0
  268. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/c8b/ac74a-bbfc-4fce-8fb8-50aa4e974273/ANLZ0000.DAT +0 -0
  269. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/c8b/ac74a-bbfc-4fce-8fb8-50aa4e974273/ANLZ0000.EXT +0 -0
  270. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/e35/fa187-3f34-47e2-9880-2b33cb8d1304/ANLZ0000.2EX +0 -0
  271. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/e35/fa187-3f34-47e2-9880-2b33cb8d1304/ANLZ0000.DAT +0 -0
  272. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/e35/fa187-3f34-47e2-9880-2b33cb8d1304/ANLZ0000.EXT +0 -0
  273. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/database.xml +0 -0
  274. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/masterPlaylists6_template.xml +0 -0
  275. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/master_locked.db +0 -0
  276. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/.testdata/rekordbox 6/master_unlocked.db +0 -0
  277. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/CONTRIBUTING.md +0 -0
  278. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/LICENSE +0 -0
  279. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/Makefile +0 -0
  280. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/make.bat +0 -0
  281. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_beat.svg +0 -0
  282. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_file.svg +0 -0
  283. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pco2.svg +0 -0
  284. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pcob.svg +0 -0
  285. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pcp2.svg +0 -0
  286. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pcpt.svg +0 -0
  287. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_ppth.svg +0 -0
  288. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pqt2.svg +0 -0
  289. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pqt2_2.svg +0 -0
  290. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pqtz.svg +0 -0
  291. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pssi.svg +0 -0
  292. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pssi_entry.svg +0 -0
  293. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pvbr.svg +0 -0
  294. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pwav.svg +0 -0
  295. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pwv3.svg +0 -0
  296. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pwv4.svg +0 -0
  297. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pwv5.svg +0 -0
  298. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pwv5_entry.svg +0 -0
  299. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pwv6.svg +0 -0
  300. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pwv7.svg +0 -0
  301. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_pwvc.svg +0 -0
  302. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/anlz_tag.svg +0 -0
  303. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/images/x64dbg_rb_key.png +0 -0
  304. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/logos/dark/logo_primary.svg +0 -0
  305. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/logos/light/logo_primary.svg +0 -0
  306. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_static/logos/mid/logo_primary.svg +0 -0
  307. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_templates/apidoc/module.rst_t +0 -0
  308. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_templates/apidoc/package.rst_t +0 -0
  309. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_templates/apidoc/toc.rst_t +0 -0
  310. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_templates/autosummary/class.rst +0 -0
  311. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/_templates/autosummary/module.rst +0 -0
  312. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/api.md +0 -0
  313. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/conf.py +0 -0
  314. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/development/changes.md +0 -0
  315. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/development/contributing.md +0 -0
  316. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/formats/anlz.md +0 -0
  317. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/formats/mysetting.md +0 -0
  318. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/formats/xml.md +0 -0
  319. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/index.md +0 -0
  320. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/key.md +0 -0
  321. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/quickstart.md +0 -0
  322. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/requirements.txt +0 -0
  323. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/tutorial/anlz.md +0 -0
  324. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/tutorial/configuration.md +0 -0
  325. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/tutorial/index.md +0 -0
  326. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/tutorial/mysetting.md +0 -0
  327. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/docs/source/tutorial/xml.md +0 -0
  328. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox/anlz/structs.py +0 -0
  329. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox/mysettings/structs.py +0 -0
  330. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox.egg-info/dependency_links.txt +0 -0
  331. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/pyrekordbox.egg-info/not-zip-safe +0 -0
  332. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/setup.cfg +0 -0
  333. {pyrekordbox-0.3.2 → pyrekordbox-0.4.0}/tests/__init__.py +0 -0
@@ -43,7 +43,7 @@ jobs:
43
43
  strategy:
44
44
  matrix:
45
45
  os: [windows-latest, macos-latest]
46
- python-version: ["3.8", "3.12"] # check oldest and latest supported version
46
+ python-version: ["3.8", "3.13"] # check oldest and latest supported version
47
47
  other-os: [true]
48
48
 
49
49
  runs-on: ${{ matrix.os }}
@@ -3,7 +3,7 @@
3
3
 
4
4
  repos:
5
5
  - repo: https://github.com/pre-commit/pre-commit-hooks
6
- rev: v4.5.0
6
+ rev: v5.0.0
7
7
  hooks:
8
8
  - id: end-of-file-fixer
9
9
  - id: trailing-whitespace
@@ -13,7 +13,7 @@ repos:
13
13
  - id: check-yaml
14
14
 
15
15
  - repo: https://github.com/astral-sh/ruff-pre-commit
16
- rev: v0.1.9
16
+ rev: v0.9.6
17
17
  hooks:
18
18
  # Run the linter.
19
19
  - id: ruff
@@ -1,5 +1,45 @@
1
1
  # What's New
2
2
 
3
+ <a name="v0.4.0"></a>
4
+ ## [v0.4.0] - 2025-02-12
5
+
6
+ This release adds the ability to create new tracks in the Rekordbox v6 database.
7
+ It also adds support for Rekordbox 7 and fixes various bugs.
8
+
9
+ ### New Features
10
+
11
+ - **db:** **add method for creating tracks ([#121](https://github.com/dylanljones/pyrekordbox/pull/121))**
12
+ New tracks can now be created and added to the Rekordbox collection.
13
+ Note that the user still has to reload tags/analyze the newly added tracks in Rekordbox.
14
+ - **config:** **add Rekordbox 7 support ([#133](https://github.com/dylanljones/pyrekordbox/issues/133))**
15
+
16
+ ### Improvements/Bug Fixes
17
+
18
+ - **db:** **fix missing proxy association in table dict**
19
+ The association proxies were missing in the `to_dict` method.
20
+ The keys are now also cached.
21
+ - **db:** **fix an error with .aif file extension ([#138](https://github.com/dylanljones/pyrekordbox/pull/138))**
22
+ - **db:** **fix to smartlist not always working correctly due to unneccessary bit shift for specific MyTag values ([#142](https://github.com/dylanljones/pyrekordbox/pull/142))**
23
+ Fix smartlists not always working correctly due to unneccessary bit shift for specific MyTag values
24
+ - **db:** **fix different timezone assertion ([#137](https://github.com/dylanljones/pyrekordbox/pull/137))**
25
+ Allow different timezones other than "+00:00" in the datetime format of the DB.
26
+ - **xml:** **save xml as utf-8 ([#135](https://github.com/dylanljones/pyrekordbox/pull/135))**
27
+ - **build:** **use pre-built sqlcipher wheels as dependency ([#134](https://github.com/dylanljones/pyrekordbox/pull/134))**
28
+ The sqlcipher dependency can now be installed using pre-built wheels with included sqlcipher binaries. This makes the whole library installable via pip!
29
+ - **xml:** **remove deprecated `xml` module**
30
+ - **db:** **remove deprecated `open_rekordbox_database` method**
31
+
32
+ ### Documentation
33
+
34
+ - **db:** **add documentation for adding tracks**
35
+ - **db:** **add more info to djmdContent table**
36
+
37
+ ### BREAKING CHANGE
38
+
39
+ Remove deprecated `open_rekordbox_database` method. Use the `Rekordbox6Database` database handler instead!
40
+ Remove deprecated `xml` module. Use the `rbxml` module instead!
41
+
42
+
3
43
  <a name="v0.3.2"></a>
4
44
  ## [v0.3.2] - 2024-01-05
5
45
 
@@ -570,7 +610,8 @@ This release contains documentation fixes.
570
610
  - **add missing djmd tables to `master.db` database documentation**
571
611
 
572
612
 
573
- [Unreleased]: https://github.com/dylanljones/pyrekordbox/compare/v0.3.2...HEAD
613
+ [Unreleased]: https://github.com/dylanljones/pyrekordbox/compare/v0.4.0...HEAD
614
+ [v0.4.0]: https://github.com/dylanljones/pyrekordbox/compare/v0.3.2...v0.4.0
574
615
  [v0.3.2]: https://github.com/dylanljones/pyrekordbox/compare/v0.3.1...v0.3.2
575
616
  [v0.3.1]: https://github.com/dylanljones/pyrekordbox/compare/0.3.0...v0.3.1
576
617
  [0.3.0]: https://github.com/dylanljones/pyrekordbox/compare/0.2.3...0.3.0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: pyrekordbox
3
- Version: 0.3.2
3
+ Version: 0.4.0
4
4
  Summary: Inofficial Python package for interacting with the library of Pioneers Rekordbox DJ software.
5
5
  Author-email: Dylan Jones <dylanljones94@gmail.com>
6
6
  License: MIT License
@@ -54,6 +54,7 @@ Requires-Dist: numpy>=1.19.0
54
54
  Requires-Dist: packaging
55
55
  Requires-Dist: psutil>=5.9.0
56
56
  Requires-Dist: sqlalchemy>=2.0.0
57
+ Requires-Dist: sqlcipher3-wheels
57
58
  Requires-Dist: frida-tools
58
59
  Requires-Dist: python-dateutil
59
60
  Provides-Extra: test
@@ -85,7 +86,7 @@ Pioneers Rekordbox DJ Software. It currently supports
85
86
  - Analysis files (ANLZ)
86
87
  - My-Setting files
87
88
 
88
- Tested Rekordbox versions: ``5.8.6 | 6.5.3 | 6.7.7``
89
+ Tested Rekordbox versions: ``5.8.6 | 6.7.7 | 7.0.9``
89
90
 
90
91
 
91
92
  |⚠️| This project is still under development and might contain bugs or have breaking API changes in the future. Check the [changelog][CHANGELOG] for recent changes! |
@@ -107,32 +108,10 @@ where `VERSION` is a release, tag or branch name.
107
108
 
108
109
  ### Dependencies
109
110
 
110
- Unlocking the new Rekordbox 6 `master.db` database file requires [SQLCipher][sqlcipher].
111
- Pyrekordbox makes no attempt to download/install SQLCipher, as it is a
112
- pure Python package - whereas the SQLCipher/sqlcipher3 installation is
113
- platform-dependent and can not be installed via ``pip``.
114
-
115
- #### Windows
116
-
117
- SQLCipher can be used by building the libary against an amalgamation with [sqlcipher3].
118
- For a detailed instruction, see the [installation guide][installation].
119
-
120
- #### MacOS
121
111
 
122
- For MacOS follow these steps:
123
-
124
- 1) Install [Homebrew](https://brew.sh) if you do not have it on your machine.
125
- 2) Install SQLCipher with `brew install SQLCipher`.
126
- 3) With the python environment you are using to run pyrekordbox active execute the following:
127
- ```shell
128
- git clone https://github.com/coleifer/sqlcipher3
129
- cd sqlcipher3
130
- SQLCIPHER_PATH=$(brew info sqlcipher | awk 'NR==4 {print $1; exit}'); C_INCLUDE_PATH="$SQLCIPHER_PATH"/include LIBRARY_PATH="$SQLCIPHER_PATH"/lib python setup.py build
131
- SQLCIPHER_PATH=$(brew info sqlcipher | awk 'NR==4 {print $1; exit}'); C_INCLUDE_PATH="$SQLCIPHER_PATH"/include LIBRARY_PATH="$SQLCIPHER_PATH"/lib python setup.py install
132
- ```
133
- Make sure the `C_INCLUDE` and `LIBRARY_PATH` point to the installed SQLCipher path. It may differ on your machine.
134
- If you are having issues installing [sqlcipher3] on M1 Macs please refer to the
135
- [installation guide][installation].
112
+ Unlocking the new Rekordbox 6 `master.db` database file requires [SQLCipher][sqlcipher].
113
+ Pyrekordbox tries to install pre-built wheels with included sqlcipher binaries via the [sqlcipher3-wheels] package.
114
+ If this fails, it can be installed manually following the [installation guide][installation].
136
115
 
137
116
 
138
117
  ## 🚀 Quick-Start
@@ -166,10 +145,10 @@ Alternatively the two paths can be specified in a configuration file under the s
166
145
  pyrekordbox.cfg and pyrekordbox.yaml.
167
146
 
168
147
 
169
- ### Rekordbox 6 database
148
+ ### Rekordbox 6/7 database
170
149
 
171
- Rekordbox 6 now uses a SQLite database for storing the collection content.
172
- Unfortunatly, the new `master.db` SQLite database is encrypted using
150
+ Rekordbox 6 and 7 use a SQLite database for storing the collection content.
151
+ Unfortunatly, the `master.db` SQLite database is encrypted using
173
152
  [SQLCipher][sqlcipher], which means it can't be used without the encryption key.
174
153
  However, since your data is stored and used locally, the key must be present on the
175
154
  machine running Rekordbox.
@@ -199,6 +178,7 @@ content.Title = "New Title"
199
178
  Some fields are stored as references to other tables, for example the artist of a track.
200
179
  Check the [documentation][db6-doc] of the corresponding object for more information.
201
180
  So far only a few tables support adding or deleting entries:
181
+ - ``DjmdContent``: Tracks
202
182
  - ``DjmdPlaylist``: Playlists/Playlist Folders
203
183
  - ``DjmdSongPlaylist``: Songs in a playlist
204
184
  - ``DjmdAlbum``: Albums
@@ -388,7 +368,7 @@ the CI setup since it requires a working Rekordbox installation.
388
368
 
389
369
  [repo]: https://github.com/dylanljones/pyrekordbox
390
370
  [sqlcipher]: https://www.zetetic.net/sqlcipher/open-source/
391
- [sqlcipher3]: https://github.com/coleifer/sqlcipher3
371
+ [sqlcipher3-wheels]: https://github.com/laggykiller/sqlcipher3
392
372
  [rekordcrate]: https://github.com/Holzhaus/rekordcrate
393
373
  [crate-digger]: https://github.com/Deep-Symmetry/crate-digger
394
374
  [supbox]: https://github.com/gabek/supbox
@@ -22,7 +22,7 @@ Pioneers Rekordbox DJ Software. It currently supports
22
22
  - Analysis files (ANLZ)
23
23
  - My-Setting files
24
24
 
25
- Tested Rekordbox versions: ``5.8.6 | 6.5.3 | 6.7.7``
25
+ Tested Rekordbox versions: ``5.8.6 | 6.7.7 | 7.0.9``
26
26
 
27
27
 
28
28
  |⚠️| This project is still under development and might contain bugs or have breaking API changes in the future. Check the [changelog][CHANGELOG] for recent changes! |
@@ -44,32 +44,10 @@ where `VERSION` is a release, tag or branch name.
44
44
 
45
45
  ### Dependencies
46
46
 
47
- Unlocking the new Rekordbox 6 `master.db` database file requires [SQLCipher][sqlcipher].
48
- Pyrekordbox makes no attempt to download/install SQLCipher, as it is a
49
- pure Python package - whereas the SQLCipher/sqlcipher3 installation is
50
- platform-dependent and can not be installed via ``pip``.
51
-
52
- #### Windows
53
-
54
- SQLCipher can be used by building the libary against an amalgamation with [sqlcipher3].
55
- For a detailed instruction, see the [installation guide][installation].
56
-
57
- #### MacOS
58
47
 
59
- For MacOS follow these steps:
60
-
61
- 1) Install [Homebrew](https://brew.sh) if you do not have it on your machine.
62
- 2) Install SQLCipher with `brew install SQLCipher`.
63
- 3) With the python environment you are using to run pyrekordbox active execute the following:
64
- ```shell
65
- git clone https://github.com/coleifer/sqlcipher3
66
- cd sqlcipher3
67
- SQLCIPHER_PATH=$(brew info sqlcipher | awk 'NR==4 {print $1; exit}'); C_INCLUDE_PATH="$SQLCIPHER_PATH"/include LIBRARY_PATH="$SQLCIPHER_PATH"/lib python setup.py build
68
- SQLCIPHER_PATH=$(brew info sqlcipher | awk 'NR==4 {print $1; exit}'); C_INCLUDE_PATH="$SQLCIPHER_PATH"/include LIBRARY_PATH="$SQLCIPHER_PATH"/lib python setup.py install
69
- ```
70
- Make sure the `C_INCLUDE` and `LIBRARY_PATH` point to the installed SQLCipher path. It may differ on your machine.
71
- If you are having issues installing [sqlcipher3] on M1 Macs please refer to the
72
- [installation guide][installation].
48
+ Unlocking the new Rekordbox 6 `master.db` database file requires [SQLCipher][sqlcipher].
49
+ Pyrekordbox tries to install pre-built wheels with included sqlcipher binaries via the [sqlcipher3-wheels] package.
50
+ If this fails, it can be installed manually following the [installation guide][installation].
73
51
 
74
52
 
75
53
  ## 🚀 Quick-Start
@@ -103,10 +81,10 @@ Alternatively the two paths can be specified in a configuration file under the s
103
81
  pyrekordbox.cfg and pyrekordbox.yaml.
104
82
 
105
83
 
106
- ### Rekordbox 6 database
84
+ ### Rekordbox 6/7 database
107
85
 
108
- Rekordbox 6 now uses a SQLite database for storing the collection content.
109
- Unfortunatly, the new `master.db` SQLite database is encrypted using
86
+ Rekordbox 6 and 7 use a SQLite database for storing the collection content.
87
+ Unfortunatly, the `master.db` SQLite database is encrypted using
110
88
  [SQLCipher][sqlcipher], which means it can't be used without the encryption key.
111
89
  However, since your data is stored and used locally, the key must be present on the
112
90
  machine running Rekordbox.
@@ -136,6 +114,7 @@ content.Title = "New Title"
136
114
  Some fields are stored as references to other tables, for example the artist of a track.
137
115
  Check the [documentation][db6-doc] of the corresponding object for more information.
138
116
  So far only a few tables support adding or deleting entries:
117
+ - ``DjmdContent``: Tracks
139
118
  - ``DjmdPlaylist``: Playlists/Playlist Folders
140
119
  - ``DjmdSongPlaylist``: Songs in a playlist
141
120
  - ``DjmdAlbum``: Albums
@@ -325,7 +304,7 @@ the CI setup since it requires a working Rekordbox installation.
325
304
 
326
305
  [repo]: https://github.com/dylanljones/pyrekordbox
327
306
  [sqlcipher]: https://www.zetetic.net/sqlcipher/open-source/
328
- [sqlcipher3]: https://github.com/coleifer/sqlcipher3
307
+ [sqlcipher3-wheels]: https://github.com/laggykiller/sqlcipher3
329
308
  [rekordcrate]: https://github.com/Holzhaus/rekordcrate
330
309
  [crate-digger]: https://github.com/Deep-Symmetry/crate-digger
331
310
  [supbox]: https://github.com/gabek/supbox
@@ -270,7 +270,7 @@ corresponding ID.
270
270
  -
271
271
  * - `FileType`
272
272
  - Type of audio file
273
- - mp3= `0` / `1` , m4a= `4` , wav= `11` , aiff= `12`
273
+ - mp3= `0` / `1` , m4a= `4` , flac= `5` , wav= `11` , aiff= `12`
274
274
  * - `Rating`
275
275
  - Rating of the track
276
276
  -
@@ -302,8 +302,8 @@ corresponding ID.
302
302
  - Path to the tracks album artwork
303
303
  - The path is relative to the Rekordbox database root
304
304
  * - `MasterDBID`
305
- - The master-ID of the track
306
- - Not sure whats the difference to `ID`
305
+ - The database where the track is stored
306
+ - Links to `DBID` in the `DjmdProperty` table
307
307
  * - `MasterSongID`
308
308
  - The master-song-ID of the track
309
309
  - Not sure whats the difference to `ID` and `MasterDBID`
@@ -341,7 +341,7 @@ corresponding ID.
341
341
  - Date of file creation
342
342
  - Format: yyyy-mm-dd; ex.: 2010-08-21
343
343
  * - `ContentLink`
344
- - ?
344
+ - Link to the `rb_local_usn` of `TRACK` in `DjmdMenuItems`?
345
345
  -
346
346
  * - `Tag`
347
347
  - My tag value
@@ -413,7 +413,7 @@ corresponding ID.
413
413
  - The Rekordbox ID of the file
414
414
  -
415
415
  * - `DeviceID`
416
- - ?
416
+ - The ID of the DjmdDevice this track is stored on.
417
417
  -
418
418
  * - `rb_LocalFolderPath`
419
419
  - ?
@@ -23,9 +23,8 @@ $ pip install .
23
23
  ## Installing SQLCipher
24
24
 
25
25
  Unlocking the new Rekordbox 6 `master.db` database file requires [SQLCipher][sqlcipher].
26
- Pyrekordbox makes no attempt to download/install SQLCipher, as it is a
27
- pure Python package - whereas the SQLCipher/sqlcipher3 installation is
28
- platform-dependent and can not be installed easily via ``pip``.
26
+ Pyrekordbox tries to install pre-built wheels with included sqlcipher binaries via the [sqlcipher3-wheels] package.
27
+ If this fails, it can be installed manually following the instructions below.
29
28
 
30
29
  [sqlcipher3] can either be built with the system [SQLCipher][sqlcipher] or built against
31
30
  a statically linked amalgamation of the SQLite3 source code.
@@ -186,8 +185,8 @@ For building [sqlcipher3] against the system SQLCipher installation on MacOS fol
186
185
  ```shell
187
186
  git clone https://github.com/coleifer/sqlcipher3
188
187
  cd sqlcipher3
189
- SQLCIPHER_PATH=$(brew info sqlcipher | awk 'NR==4 {print $1; exit}'); C_INCLUDE_PATH="$SQLCIPHER_PATH"/include LIBRARY_PATH="$SQLCIPHER_PATH"/lib python setup.py build
190
- SQLCIPHER_PATH=$(brew info sqlcipher | awk 'NR==4 {print $1; exit}'); C_INCLUDE_PATH="$SQLCIPHER_PATH"/include LIBRARY_PATH="$SQLCIPHER_PATH"/lib python setup.py install
188
+ SQLCIPHER_PATH=$(brew info sqlcipher | awk 'NR==5 {print $1; exit}'); C_INCLUDE_PATH="$SQLCIPHER_PATH"/include LIBRARY_PATH="$SQLCIPHER_PATH"/lib python setup.py build
189
+ SQLCIPHER_PATH=$(brew info sqlcipher | awk 'NR==5 {print $1; exit}'); C_INCLUDE_PATH="$SQLCIPHER_PATH"/include LIBRARY_PATH="$SQLCIPHER_PATH"/lib python setup.py install
191
190
  ```
192
191
  Make sure the `C_INCLUDE` and `LIBRARY_PATH` point to the installed SQLCipher path. It may differ on your machine.
193
192
 
@@ -269,3 +268,4 @@ c.execute("PRAGMA key='password'")
269
268
  [Pypi]: https://pypi.org/project/pyrekordbox/
270
269
  [GitHub]: https://github.com/dylanljones/pyrekordbox
271
270
  [sqlcipher]: https://www.zetetic.net/sqlcipher/open-source/
271
+ [sqlcipher3-wheels]: https://github.com/laggykiller/sqlcipher3
@@ -160,6 +160,34 @@ song = playlist.Songs[0]
160
160
  db.remove_from_playlist(playlist, song)
161
161
  ````
162
162
 
163
+ ### Tracks
164
+
165
+ New tracks can be added to your rekordbox collection by calling the `db.add_content()` method:
166
+
167
+ ```python
168
+ track = db.add_content("/Users/deadmau5/Downloads/Banger.mp3")
169
+ ```
170
+
171
+ This creates a new [DjmdContent] instance and adds it to the [djmdContent-table]. This
172
+ track will appear in your rekordbox collection, but the track metadata (title, artist,
173
+ etc.) will be blank. To load this data, simply right click the track and select the
174
+ `Reload Tag` menu option. rekordbox will correctly populate the metadata, including
175
+ creating any related table data for things like artist and album.
176
+
177
+ The `db.add_content()` method accepts `**kwargs` which are passed on to the [DjmdContent]
178
+ instance. You can use these keyword arguments if you want to populate some of the track
179
+ metadata right away. However, things like [DjmdArtist] and [DjmdAlbum] are foreign keys to
180
+ other tables, so make sure you create these objects first and pass the objects via kwargs,
181
+ rather than passing plain strings. A plain string will work for `Title`, however.
182
+
183
+ ```python
184
+ db.add_content("/Users/deadmau5/Downloads/Banger.mp3", Title="Banger")
185
+ ```
186
+
187
+ Populating the [DjmdContent] metadata directly from the track file is not currently
188
+ supported, but it will hopefully be included in a future release.
189
+
190
+
163
191
  ```{note}
164
192
  More coming soon!
165
193
  ```
@@ -36,6 +36,7 @@ dependencies = [
36
36
  "packaging",
37
37
  "psutil>=5.9.0",
38
38
  "sqlalchemy>=2.0.0",
39
+ "sqlcipher3-wheels",
39
40
  "frida-tools",
40
41
  "python-dateutil",
41
42
  ]
@@ -69,8 +70,9 @@ platforms = ["any"]
69
70
  zip-safe = false
70
71
  include-package-data = true
71
72
 
72
- [tool.setuptools.packages]
73
- find = {}
73
+ [tool.setuptools.packages.find]
74
+ where = ["."]
75
+ include = ["pyrekordbox", "pyrekordbox.*"]
74
76
 
75
77
  [tool.setuptools_scm]
76
78
  write_to = "pyrekordbox/_version.py"
@@ -99,20 +101,45 @@ select = [
99
101
  "F", # flake8
100
102
  "E", # pycodestyle Errors
101
103
  "W", # pycodestyle Warnings
102
- # "I", # isort
104
+ "I", # isort
105
+ "NPY", # Numpy
106
+ "N", # pep8-naming
107
+ "D", # pydocstyle
103
108
  ]
104
109
  ignore = [
105
110
  "E203", # Whitespace before ':'
111
+ "D100", # Missing docstring in public module
112
+ "D101", # Missing docstring in public class
113
+ "D102", # Missing docstring in public method
114
+ "D103", # Missing docstring in public function
115
+ "D104", # Missing docstring in public package
116
+ "D105", # Missing docstring in magic method
117
+ "D106", # Missing docstring in public nested class
118
+ "D107", # Missing docstring in __init__
119
+ "D401", # First line should be in imperative mood
120
+ "D403", # First word of the first line should be capitalized
121
+ "D404", # First word of the docstring should not be "This"
122
+ #"N802", # Function name should be lowercase
123
+ #"N803", # Argument name should be lowercase
124
+ "N813", # Camelcase imported as lowercase
125
+ #"N815", # Variable in class scope should not be mixedCase
126
+ "N818", # Exception name should be named with an Error suffix
106
127
  ]
107
128
  fixable = ["ALL"] # Allow fix for all enabled rules (when `--fix`) is provided.
108
129
  unfixable = []
109
130
 
110
131
  [tool.ruff.lint.per-file-ignores]
111
132
  "*__init__.py" = ["F401"]
133
+ "rbxml.py" = ["N803"]
134
+ "tables.py" = ["N802", "N815"]
135
+
136
+
137
+ [tool.ruff.lint.pydocstyle]
138
+ convention = "numpy"
112
139
 
113
140
  [tool.ruff.lint.isort]
114
141
  combine-as-imports = true
115
- # length-sort = true
142
+ length-sort = false
116
143
 
117
144
  [tool.ruff.format]
118
145
  quote-style = "double"
@@ -2,19 +2,19 @@
2
2
  # Author: Dylan Jones
3
3
  # Date: 2022-04-10
4
4
 
5
+ from .anlz import AnlzFile, get_anlz_paths, read_anlz_files, walk_anlz_paths
6
+ from .config import get_config, show_config, update_config
7
+ from .db6 import Rekordbox6Database
5
8
  from .logger import logger
6
- from .config import show_config, get_config, update_config
7
- from .rbxml import RekordboxXml, XmlDuplicateError, XmlAttributeKeyError
8
- from .anlz import get_anlz_paths, walk_anlz_paths, read_anlz_files, AnlzFile
9
9
  from .mysettings import (
10
+ DevSettingFile,
11
+ DjmMySettingFile,
12
+ MySetting2File,
13
+ MySettingFile,
10
14
  get_mysetting_paths,
11
15
  read_mysetting_file,
12
- MySettingFile,
13
- MySetting2File,
14
- DjmMySettingFile,
15
- DevSettingFile,
16
16
  )
17
- from .db6 import Rekordbox6Database, open_rekordbox_database
17
+ from .rbxml import RekordboxXml, XmlAttributeKeyError, XmlDuplicateError
18
18
 
19
19
  try:
20
20
  from ._version import version as __version__
@@ -4,11 +4,12 @@
4
4
 
5
5
  import os
6
6
  import re
7
- import sys
8
7
  import shutil
8
+ import sys
9
9
  import urllib.request
10
10
  from pathlib import Path
11
- from pyrekordbox.config import write_db6_key_cache, _cache_file
11
+
12
+ from pyrekordbox.config import _cache_file, write_db6_key_cache
12
13
 
13
14
  KEY_SOURCES = [
14
15
  {
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.3.2'
16
- __version_tuple__ = version_tuple = (0, 3, 2)
15
+ __version__ = version = '0.4.0'
16
+ __version_tuple__ = version_tuple = (0, 4, 0)
@@ -5,6 +5,7 @@
5
5
  import re
6
6
  from pathlib import Path
7
7
  from typing import Union
8
+
8
9
  from . import structs
9
10
  from .file import AnlzFile
10
11
 
@@ -77,7 +78,7 @@ def walk_anlz_dirs(root_dir: Union[str, Path]):
77
78
  The path of the root directory.
78
79
 
79
80
  Yields
80
- -------
81
+ ------
81
82
  anlz_dir : str
82
83
  The path of a directory containing ANLZ files
83
84
  """
@@ -96,7 +97,7 @@ def walk_anlz_paths(root_dir: Union[str, Path]):
96
97
  The path of the root directory.
97
98
 
98
99
  Yields
99
- -------
100
+ ------
100
101
  anlz_dir : str
101
102
  The path of a directory containing ANLZ files.
102
103
  anlz_files : Sequence of str
@@ -6,10 +6,12 @@ import logging
6
6
  from collections import abc
7
7
  from pathlib import Path
8
8
  from typing import Union
9
- from .tags import TAGS
10
- from . import structs
9
+
11
10
  from construct import Int16ub
12
11
 
12
+ from . import structs
13
+ from .tags import TAGS
14
+
13
15
  logger = logging.getLogger(__name__)
14
16
 
15
17
  XOR_MASK = bytearray.fromhex("CB E1 EE FA E5 EE AD EE E9 D2 E9 EB E1 E9 F3 E8 E9 F4 E1")
@@ -4,7 +4,9 @@
4
4
 
5
5
  import logging
6
6
  from abc import ABC
7
+
7
8
  import numpy as np
9
+
8
10
  from . import structs
9
11
 
10
12
  logger = logging.getLogger(__name__)
@@ -439,7 +441,7 @@ class PWV5AnlzTag(AbstractAnlzTag):
439
441
  LEN_HEADER = 24
440
442
 
441
443
  def get(self):
442
- """Parse the Waveform Color Detail Tag (PWV5)
444
+ """Parse the Waveform Color Detail Tag (PWV5).
443
445
 
444
446
  The format of the entries is:
445
447