A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita
audio
rust
zig
deno
mpris
rockbox
mpd
1const std = @import("std");
2const playlist = @import("rockbox/playlist.zig");
3const metadata = @import("rockbox/metadata.zig");
4const tree = @import("rockbox/tree.zig");
5const settings = @import("rockbox/settings.zig");
6
7extern fn main_c() c_int;
8extern fn parse_args(argc: usize, argv: [*]const [*]const u8) c_int;
9
10pub fn main() !void {
11 const args = try std.process.argsAlloc(std.heap.page_allocator);
12 defer std.process.argsFree(std.heap.page_allocator, args);
13
14 var argv: [10][*]const u8 = undefined;
15
16 var argc: usize = 0;
17
18 if (args.len > 10) {
19 std.debug.print("Too many arguments, max 10", .{});
20 std.process.exit(1);
21 }
22
23 for (args) |arg| {
24 argv[argc] = @ptrCast(arg.ptr);
25 argc += 1;
26 }
27
28 _ = parse_args(argc, &argv);
29 _ = main_c();
30}
31
32// metadata functions
33export fn rb_get_metadata(fd: c_int, trackname: [*]const u8) metadata.mp3entry {
34 return metadata._get_metadata(fd, trackname);
35}
36
37// browsing functions
38export fn rb_rockbox_browse() c_int {
39 return tree._rockbox_browse();
40}
41
42export fn rb_tree_get_context() tree.tree_context {
43 return tree._tree_get_context();
44}
45
46export fn rb_tree_get_entries() *tree.entry {
47 return tree._tree_get_entries();
48}
49
50export fn rb_tree_get_entry_at(index: c_int) tree.entry {
51 return tree._tree_get_entry_at(index);
52}
53
54// playlist functions
55export fn rb_get_track_info_from_current_playlist(index: c_int) playlist.PlaylistTrackInfo {
56 return playlist._get_track_info_from_current_playlist(index);
57}
58
59export fn rb_build_playlist(files: [*]const [*]const u8, start_index: c_int, size: c_int) c_int {
60 return playlist.build_playlist(files, start_index, size);
61}
62
63export fn rb_playlist_insert_tracks(files: [*]const [*]const u8, position: c_int, size: c_int) c_int {
64 return playlist.insert_tracks(files, position, size);
65}
66
67export fn rb_playlist_insert_track(filename: [*]const u8, position: c_int, queue: bool, sync: bool) c_int {
68 return playlist.insert_track(filename, position, queue, sync);
69}
70
71export fn rb_playlist_delete_track(index: c_int) c_int {
72 return playlist.delete_track(index);
73}
74
75export fn rb_playlist_insert_directory(dir: [*]const u8, position: c_int, queue: bool, recurse: bool) c_int {
76 return playlist.insert_directory(dir, position, queue, recurse);
77}
78
79export fn rb_playlist_remove_all_tracks() c_int {
80 return playlist.remove_all_tracks();
81}
82
83export fn rb_playlist_index() c_int {
84 return playlist.playlist_index();
85}
86
87export fn rb_playlist_first_index() c_int {
88 return playlist.playlist_first_index();
89}
90
91export fn rb_playlist_last_insert_pos() c_int {
92 return playlist.playlist_last_insert_pos();
93}
94
95export fn rb_playlist_seed() c_int {
96 return playlist.playlist_seed();
97}
98
99export fn rb_playlist_last_shuffled_start() c_int {
100 return playlist.playlist_last_shuffled_start();
101}
102
103export fn rb_max_playlist_size() c_int {
104 return playlist.max_playlist_size();
105}
106
107export fn rb_get_crossfade_mode() c_int {
108 return settings.get_crossfade_mode();
109}