1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
// Copyright (C) 2026 Dylan Jones
// SPDX-License-Identifier: GPL-3.0-only
//! [![github]](https://github.com/dylanljones/rbox) [![crates-io]](https://crates.io/crates/rbox) [![docs-rs]](https://docs.rs/rbox)
//!
//! [github]: https://img.shields.io/badge/github-8da0cb?style=for-the-badge&labelColor=555555&logo=github
//! [crates-io]: https://img.shields.io/badge/crates.io-fc8d62?style=for-the-badge&labelColor=555555&logo=rust
//! [docs-rs]: https://img.shields.io/badge/docs.rs-66c2a5?style=for-the-badge&labelColor=555555&logo=docs.rs
//!
//! <br>
//!
//! > rbox gives you full control over your Rekordbox data.
//!
//! <br>
//!
//! This crate provides a comprehensive set of tools to interact with Rekordbox data, including
//! - [`MasterDb`] for managing the local Rekordbox database.
//! - [`OneLibrary`] for managing One Library (Device Library Plus) SQLite databases.
//! - [`Anlz`] for reading and writing ANLZ files.
//! - [`RekordboxXml`] for parsing and manipulating Rekordbox XML files.
//! - [`Setting`] for managing Rekordbox settings.
//!
//! > **❗ Caution**:
//! > Please make sure to back up your Rekordbox collection before making changes to rekordbox data.
//! > The backup dialog can be found under "File" > "Library" > "Backup Library"
//!
//! ## Rekordbox 6/7 database
//!
//! rbox can unlock the new Rekordbox `master.db` SQLite database and provides
//! an easy interface for accessing and updating the data stored in it.
//!
//! ```no_run
//! use rbox::prelude::*;
//!
//! fn main() -> anyhow::Result<()> {
//! let mut db = MasterDb::open()?;
//! let contents = db.get_content()?;
//! for content in contents {
//! println!("{:?}", content);
//! }
//! Ok(())
//! }
//! ```
//!
//! ## Rekordbox XML
//!
//! rbox can read and write Rekordbox XML databases.
//!
//! ```no_run
//! use rbox::prelude::*;
//!
//! fn main() -> anyhow::Result<()> {
//! let mut xml = RekordboxXml::load("database.xml");
//! let tracks = xml.get_tracks();
//! for track in tracks {
//! println!("{:?}", track);
//! }
//! Ok(())
//! }
//! ```
//!
//! ## Rekordbox ANLZ files
//!
//! rbox can parse and write all three analysis files.
//!
//! ```no_run
//! use rbox::prelude::*;
//!
//! fn main() -> anyhow::Result<()> {
//! let mut anlz = Anlz::load("ANLZ0000.DAT")?;
//! let grid = anlz.get_beat_grid().unwrap();
//! for beat in grid {
//! println!("Beat: {} Tempo: {} Time: {}", beat.beat_number, beat.tempo, beat.time);
//! }
//! Ok(())
//! }
//! ```
//!
//! ## Rekordbox Settings
//!
//! rbox supports both parsing and writing of Setting files
//!
//! ```no_run
//! use rbox::prelude::*;
//! use rbox::settings::Quantize;
//!
//! fn main() -> anyhow::Result<()> {
//! let mut sett = Setting::load("MYSETTING.DAT")?;
//! println!("Quantize: {}", sett.get_quantize()?);
//! sett.set_quantize(Quantize::Off)?;
//! sett.dump()?;
//! Ok(())
//! }
//! ```
//!
// Compile-time feature validation
compile_error!;
pub use ;
pub use RekordboxOptions;
pub use NormalizePath;
pub use *;
pub use Anlz;
pub use MasterDb;
pub use OneLibrary;
pub use Setting;
pub use RekordboxXml;