4.9 KiB
4.9 KiB
PlaylistBuilder Class - Quick Reference
Overview
The PlaylistBuilder class is a Python utility designed to create customized playlists efficiently. It manages cover images, tracks usage history to prevent duplication, and structures playlist data in a standardized JSON format. Ideal for applications requiring organized and visually appealing playlists, PlaylistBuilder
simplifies the playlist creation process.
Key Data Structures
Difficulty
Represents the difficulty level of a song.
- Attributes:
name
(str): Difficulty name (e.g., "normal", "hard").characteristic
(str): Mode or characteristic (e.g., "Standard").
Song
Encapsulates song details within a playlist.
- Attributes:
hash
(str): Unique identifier for the song.difficulties
(List[Difficulty]): Available difficulty levels.key
(Optional[str]): Optional key identifier.levelId
(Optional[str]): Optional custom level ID.songName
(Optional[str]): Optional name of the song.
CustomData
Holds additional metadata for the playlist.
- Attributes:
syncURL
(Optional[str])owner
(Optional[str])id
(Optional[str])hash
(Optional[str])shared
(Optional[bool])
Playlist
Represents the complete playlist structure.
- Attributes:
playlistTitle
(str): Title of the playlist.songs
(List[Song]): List of songs included.playlistAuthor
(Optional[str]): Author of the playlist.image
(Optional[str]): Base64-encoded cover image.coverImage
(Optional[str]): File path to the cover image.description
(Optional[str]): Description of the playlist.allowDuplicates
(Optional[bool]): Flag to allow duplicate songs.customData
(Optional[CustomData]): Additional metadata.
PlaylistBuilder Class
Initialization
def __init__(self, covers_dir="./covers", history_file="./playlist_history.json", output_dir=None):
-
Parameters:
covers_dir
(str): Directory containing cover images.history_file
(str): Path to the JSON file tracking used covers.output_dir
(Optional[str]): Directory to save generated playlists. Defaults to current working directory.
-
Behavior:
- Ensures the covers directory exists.
- Loads or initializes the history of used covers.
Methods
create_playlist
Generates a playlist based on provided song data.
def create_playlist(self, playlist_data: List[Dict], playlist_title: str = "playlist", playlist_author: str = "SaberList Tool") -> str:
-
Parameters:
playlist_data
(List[Dict]): List of song dictionaries.playlist_title
(str): Title of the playlist.playlist_author
(str): Author of the playlist.
-
Returns:
str
: File path to the created playlist.
-
Behavior:
- Converts song dictionaries to
Song
instances. - Selects a random unused cover image.
- Encodes the cover image to Base64.
- Constructs a
Playlist
instance. - Saves the playlist as a
.bplist
JSON file. - Updates the history of used covers.
- Converts song dictionaries to
Usage Example
from src.saberlist.PlaylistBuilder import PlaylistBuilder
# Initialize PlaylistBuilder
builder = PlaylistBuilder(
covers_dir="./covers",
history_file="./playlist_history.json",
output_dir="./playlists"
)
# Define song data
sample_song = {
"hash": "7c9e0a7c523395c7ef9d79006b9d42dc6ab8b44a",
"key": "2a44e",
"levelId": "custom_level_7c9e0a7c523395c7ef9d79006b9d42dc6ab8b44a",
"songName": "Gleodream",
"difficulties": [
{
"name": "normal",
"characteristic": "Standard"
}
]
}
# Create the playlist
playlist_path = builder.create_playlist(
playlist_data=[sample_song],
playlist_title="Chill Vibes",
playlist_author="Alice Smith"
)
print(f"Playlist created at: {playlist_path}")
Handling Cover Images
- Adding Covers: Place
.jpg
images in thecovers_dir
. ThePlaylistBuilder
selects an unused cover for each playlist. - Preventing Duplicates: The
history_file
tracks used covers to avoid repetition until all covers are utilized. - Resetting History: Delete or modify
playlist_history.json
to reset cover usage history.
File Structures
Playlist File (.bplist
)
- Format: JSON
- Contents:
- Playlist metadata (title, author, description).
- List of songs with details.
- Base64-encoded cover image.
- Path to the cover image file.
History File (playlist_history.json
)
- Format: JSON
- Contents:
used_covers
: Array of filenames that have been used as covers.
Additional Information
- Logging: The class logs important actions, such as creating directories and handling missing covers.
- Extensibility: Easily extendable to support more image formats or additional metadata fields.
- Dependencies: Utilizes Python's standard libraries (
os
,json
,random
, etc.) anddataclasses
for structured data.