A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 109 lines 3.0 kB view raw
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}