jdxi_editor.midi.data.programs.database

SQLite database module for storing JD-Xi user programs.

This module provides a more robust storage solution than JSON files, with proper transactions, better querying, and reduced race conditions.

Attributes

_db_instance

Classes

ProgramDatabase

SQLite database for storing user programs.

Functions

get_database(→ ProgramDatabase)

Get the global database instance.

Module Contents

class jdxi_editor.midi.data.programs.database.ProgramDatabase(db_path: pathlib.Path | None = None)[source]

SQLite database for storing user programs.

db_path = None[source]
_init_database() None[source]

Initialize the database schema if it doesn’t exist.

_get_connection()[source]

Get a database connection with proper error handling.

add_or_replace_program(program: jdxi_editor.jdxi.program.program.JDXiProgram) bool[source]

Add or replace a program in the database.

Parameters:

program – JDXiProgram to add or replace

Returns:

True if successful, False otherwise

get_program_by_id(program_id: str) jdxi_editor.jdxi.program.program.JDXiProgram | None[source]

Get a program by its ID.

Parameters:

program_id – Program ID (e.g., “E01”, “F32”)

Returns:

JDXiProgram if found, None otherwise

get_all_programs() List[jdxi_editor.jdxi.program.program.JDXiProgram][source]

Get all programs from the database.

Returns:

List of JDXiProgram objects

get_programs_by_bank(bank: str) List[jdxi_editor.jdxi.program.program.JDXiProgram][source]

Get all programs for a specific bank.

Parameters:

bank – Bank letter (e.g., “E”, “F”, “G”, “H”)

Returns:

List of JDXiProgram objects

delete_program(program_id: str) bool[source]

Delete a program from the database.

Parameters:

program_id – Program ID to delete

Returns:

True if deleted, False otherwise

_row_to_program(row: sqlite3.Row) jdxi_editor.jdxi.program.program.JDXiProgram[source]

Convert a database row to a JDXiProgram object.

create_playlist(name: str, description: str = None) int | None[source]

Create a new playlist.

Parameters:
  • name – Playlist name (must be unique)

  • description – Optional description

Returns:

Playlist ID if successful, None otherwise

get_all_playlists() List[Dict][source]

Get all playlists.

Returns:

List of playlist dictionaries

_get_playlist_program_count(playlist_id: int) int[source]

Get the number of programs in a playlist.

get_playlist_by_id(playlist_id: int) Dict | None[source]

Get a playlist by ID.

Parameters:

playlist_id – Playlist ID

Returns:

Playlist dictionary if found, None otherwise

update_playlist(playlist_id: int, name: str = None, description: str = None) bool[source]

Update a playlist.

Parameters:
  • playlist_id – Playlist ID

  • name – New name (optional)

  • description – New description (optional)

Returns:

True if successful, False otherwise

delete_playlist(playlist_id: int) bool[source]

Delete a playlist and all its items.

Parameters:

playlist_id – Playlist ID

Returns:

True if successful, False otherwise

add_program_to_playlist(playlist_id: int, program_id: str, position: int = None) bool[source]

Add a program to a playlist.

Parameters:
  • playlist_id – Playlist ID

  • program_id – Program ID (e.g., “E01”)

  • position – Position in playlist (optional, will append if not provided)

Returns:

True if successful, False otherwise

remove_program_from_playlist(playlist_id: int, program_id: str) bool[source]

Remove a program from a playlist.

Parameters:
  • playlist_id – Playlist ID

  • program_id – Program ID

Returns:

True if successful, False otherwise

get_playlist_programs(playlist_id: int) List[Dict][source]

Get all programs in a playlist with their MIDI file paths, ordered by position.

Parameters:

playlist_id – Playlist ID

Returns:

List of dictionaries with ‘program’ (JDXiProgram) and ‘midi_file_path’ (str)

update_playlist_item_midi_file(playlist_id: int, program_id: str, midi_file_path: str) bool[source]

Update the MIDI file path for a playlist item.

Parameters:
  • playlist_id – Playlist ID

  • program_id – Program ID

  • midi_file_path – Path to MIDI file (or None to clear)

Returns:

True if successful, False otherwise

update_playlist_item_cheat_preset(playlist_id: int, program_id: str, cheat_preset_id: str | None = None) bool[source]

Update the cheat preset ID for a playlist item.

Parameters:
  • playlist_id – Playlist ID

  • program_id – Program ID

  • cheat_preset_id – Cheat preset ID (e.g., “113”) or None to clear

Returns:

True if updated, False otherwise

migrate_from_json(json_file: pathlib.Path) int[source]

Migrate programs from JSON file to SQLite database.

Parameters:

json_file – Path to JSON file

Returns:

Number of programs migrated

jdxi_editor.midi.data.programs.database._db_instance: ProgramDatabase | None = None[source]
jdxi_editor.midi.data.programs.database.get_database() ProgramDatabase[source]

Get the global database instance.