Skip to content

Releases: dylanljones/pyrekordbox

Pyrekordbox v0.4.3

14 May 18:29
Compare
Choose a tag to compare

What's Changed

This release adds type annotations across the codebase and fixes various bugs.

Improvements/Bug Fixes

  • db: add type checks for deleting playlists and playlist songs (#169)
    This prevents deleting a content instead of a playlist song by accident.
  • db: fix timezone issue when setting datetimes (#168)
    Datetime fields are now set with UTC which is the same format that Rekordbox uses. Timezone agnostic dates or dates with another timezone are converted accordingly.
  • xml: fix issue with pretty-formatting xml string (#164)
    For Python>3.8 the built-in indentation is used, for Python3.8 the XML string is returned unformatted if minidom fails
  • add type hints across the codebase and use mypy for static type checking

Full Changelog: v0.4.2...v0.4.3

Pyrekordbox v0.4.2

21 Apr 21:09
Compare
Choose a tag to compare

What's Changed

This release contains bug fixes for the command-line interface and XML handling.

Improvements/Bug Fixes

  • cli: fix import error when downloading db key via CLI (#162)
  • xml: fix get_track method to accept Location parameter

Documentation

  • anlz: add simple tutorial for ANLZ files
  • db: add ActiveLoop description

Full Changelog: v0.4.1...v0.4.2

Pyrekordbox v0.4.1

20 Apr 15:58
Compare
Choose a tag to compare

This release improves database functionality by allowing commits when playlists are missing in XML (with warnings for non-special playlists), adds timezone support for date fields, and fixes date format issues. Configuration enhancements include relocating the pyrekordbox cache file to the user's appdata directory and fixing an asar file decoding error.

Improvements/Bug Fixes

  • db: allow commiting if playlist is not found in XML (#149)
    This fixes an issue where the changes to the DB can not be commited if the playlist is missing in the playlist-xml. A warning is now shown instead. The warning is not shown for special playlists.
  • db: add timezone support and fix date format issue (#161)
    Date formats in the DB are now converted to the local timezone. It is now also possible to read date fields with other formats.
  • config: move pyrekordbox cache file to appdir
    The cache file is now stored in the appdata directory of the user. This avoids writing to the pyrekordbox package directory.
  • config: fix asar file decoding error (#154)

Full Changelog: v0.4.0...v0.4.1

Pyrekordbox v0.4.0

12 Feb 18:44
Compare
Choose a tag to compare

This release adds the ability to create new tracks in the Rekordbox v6 database.
It also adds support for Rekordbox 7 and fixes various bugs.

New Features

  • db: add method for creating tracks (#121)
    New tracks can now be created and added to the Rekordbox collection.
    Note that the user still has to reload tags/analyze the newly added tracks in Rekordbox.
  • config: add Rekordbox 7 support (#133)

Improvements/Bug Fixes

  • db: fix missing proxy association in table dict
    The association proxies were missing in the to_dict method.
    The keys are now also cached.
  • db: fix an error with .aif file extension (#138)
  • db: fix to smartlist not always working correctly due to unneccessary bit shift for specific MyTag values (#142)
    Fix smartlists not always working correctly due to unneccessary bit shift for specific MyTag values
  • db: fix different timezone assertion (#137)
    Allow different timezones other than "+00:00" in the datetime format of the DB.
  • xml: save xml as utf-8 (#135)
  • build: use pre-built sqlcipher wheels as dependency (#134)
    The sqlcipher dependency can now be installed using pre-built wheels with included sqlcipher binaries. This makes the whole library installable via pip!
  • xml: remove deprecated xml module
  • db: remove deprecated open_rekordbox_database method

Documentation

  • db: add documentation for adding tracks
  • db: add more info to djmdContent table

BREAKING CHANGE

Remove deprecated open_rekordbox_database method. Use the Rekordbox6Database database handler instead!
Remove deprecated xml module. Use the rbxml module instead!

New Contributors

Full Changelog: v0.3.2...v0.4.0

Pyrekordbox v0.3.2

05 Jan 14:55
Compare
Choose a tag to compare

What's Changed

This release fixes smart-playlist related bugs and improves the database table relationships.

New Features

  • db: Add method for creating smart playlists
    This will set the ID in the smart list to the newly created playlist ID before generating the XML string

Improvements/Bug Fixes

  • db: add missing UUID entries
    The UUID was not set when creating the following db entries:
    • album
    • artist
    • genre
    • label
  • db: add missing relationships in DjmdContent
    Linked tables and corresponding relationships:
    • DjmdCue: Cues
    • DjmdSongMyTag: MyTags
    • DjmdActiveCensor: ActiveCensors
    • DjmdMixerParam: MixerParams
  • db: add My-Tag names association to the DjmdContent table
    It is now possible to get a list of the corresponding My-tag names from the DjmdContent instance.
  • db: add album artist association to the DjmdAlbum and DjmdContent tables
    It is now possible to get the album artist instance or name directly from the DjmdContent instance.
  • db: fix smart list filter bugs (#110)

Documentation

  • db: fix Kind notes in DjmdCue table

Full Changelog: v0.3.1...v0.3.2

Pyrekordbox v0.3.1

28 Dec 13:19
Compare
Choose a tag to compare

What's Changed

This release improves the Rekordbox v6 database key extraction and adds a new handler for smart playlists.

New Features

  • add method to return the contents of a playlist in the RBv6 db directly
    The database can now be queried directly for the contents contained in a playlist.
    This works for regular playlists as well as for smart playlists.
    The full DjmdContent instances of specific columns can be returned.
  • add RBv6 smart playlist handler
    Add a handler for the smart playlists of Rekordbox. The conditions are stored as an
    XML string. The smart playlist handler supports parsing and writing the XML string.
  • add DB key extraction method for newer Rekordbox versions (#97).
    The key can now also be extracted with newer Rekordbox versions.
    frida is used to inject code to intercept the key when the DB is opened.

Improvements/Bug Fixes

  • populate configuration just-in-time
    Previously the config was populated when importing pyrekordbox.
    Now the config is updated the first time it is used.
  • use association proxies in DjmdContent table
    This makes it possible to filter queries using these associations,
    for example DjmdContent.ArtistName
  • add Playlist type enums and attributes

Full Changelog: 0.3.0...v0.3.1

Pyrekordbox v0.3.0

12 Dec 09:30
Compare
Choose a tag to compare

What's Changed

This release fixes bugs and imrpoves error handling.

Improvements/Bug Fixes

  • The bank field of PSSI ANLZ tag can also have a value of 0 (#108)
    This fixes an issue where the XOR mask was applied to un-garbled PSSI tags.
  • check if RBv6 db key seems valid (#105)
    Check the key if it is passed manually to the db handler and raise an exception
    if it doesn't look valid. Only the first few characters are checked.
  • also change OrgFolderPath and FileNameL in update_content_path (#104)
    There were columns missing in the update_content_path method.
    These changes make the file paths consistent.
    Thank you @ben-hearn-sb for the help!
  • rename the xml module to rbxml to prevent conflict with builtin.
    Note that the old module name xml is deprecated and will be removed in version 0.4.0.

Documentation

  • add Rekordbox6 database key extraction alternatives

Full Changelog: 0.2.3...0.3.0

Pyrekordbox v0.2.3

17 Nov 12:58
Compare
Choose a tag to compare

What's Changed

Improvements/Bug Fixes

  • drop Python 3.7 support
    Python 3.7 reached its end of lifetime in June 2023.
  • raise ImportError if RBv6 db is locked and sqlcipher is not available
    Pyrekordbox falls back to sqlite3 if sqlcipher3 is not available.
    This can lead to errors if the RBv6 database is locked and the user does not have
    sqlcipher3 installed.
  • don't pass deleted RBv6 instance to USN callback
    This sometimes raised an ObjectDeletedError

New Contributors

  • @JOJ0 made their first contribution in #100

Full Changelog: 0.2.2...0.2.3

Pyrekordbox v0.2.2

26 Oct 15:38
Compare
Choose a tag to compare

What's Changed

New Features

  • add new albums to the RBv6 db
    New entries can now be added to the DjmdAlbum table.
  • add new genres to the RBv6 db
    New entries can now be added to the DjmdGenre table.
  • add new artists to the RBv6 db
    New entries can now be added to the DjmdArtist table.
  • add new labels to the RBv6 db
    New entries can now be added to the DjmdLabel table.
  • support renamed Rekordbox application directory
    The user can now specify the directory name of the Rekordbox application directory.
    This supports multiple Rekordbox installations of the same major version.

Improvements/Bug Fixes

  • don't raise error if key is in cache
    This fixes an issue when using the database handler for Rekordbox>6.6.5 with the cached key.
  • de-obfuscate PSSI tag data on exported ANLZ files
    The PSSI tag data of ANLZ files that rekordbox 6 exports is garbled with an XOR mask.
    If the first few known fields of the PSSI tag are not valid values this indicates a garbled tag
    and the data is de-obfuscated.
    Thank you @troyhacks for the de-obfuscation.
  • add disabled context manager to the RBv6 RekordboxAgentRegistry
  • only re-enable RBV6 USN tracking if it was enabled

Documentation

  • add missing documentation of the PSSI tag of ANLZ files
  • Fix typo in djmdCue table documentation
  • update quickstart documentation

New Contributors

Full Changelog: 0.2.1...0.2.2

Pyrekordbox v0.2.1

20 Oct 16:04
Compare
Choose a tag to compare

What's New

This release migrates to SqlAlchemy 2.0 and fixes some bugs.

Improvements/Bug Fixes

  • migrate to SqlAlchemy 2.0
  • add getters/setters for the mixer gain/peak settings in the RBv6 db (#88).
    The gain and peak values are stored as high/low binary values.
    It is now possible to get or set the gain/peak as a simple decibel value.
    Thank you @gsuberland for the help!
  • automatically set updated_at of tables in the RBv6 db
    The updated_at column is automatically updated via onupdate if rows are modified.
    This only happens if the user did not set the column manually.
  • flush the RBv6 db changes before applying USN auto-increment.
    This allows the user to use before_flush events more easily without
    affecting the USN changes

BREAKING CHANGE

pyrekordbox now only supports sqlcipher3. pysqlcipher3 is no longer supported
since it is not compatible with SqlAlchemy 2.0.

New Contributors

Full Changelog: 0.2.0...0.2.1